From 4ae9fb2590ddf404dba5ae267a29e6ee954825fc Mon Sep 17 00:00:00 2001 From: Sachin Sankar Date: Thu, 12 Feb 2026 18:31:42 +0530 Subject: [PATCH] Automated Docs Site (#101) --- .github/workflows/gh-pages.yml | 31 ++ docs/API Reference/Reference/tts_model.md | 1 + docs/{ => API Reference}/python-api.md | 0 docs/{ => CLI Commands}/export_voice.md | 2 +- docs/{ => CLI Commands}/generate.md | 8 +- docs/{ => CLI Commands}/serve.md | 13 +- docs/index.md | 174 ++++++++++ docs/mascot.png | Bin 0 -> 71116 bytes mkdocs.yml | 66 ++++ pocket_tts/models/tts_model.py | 78 +++++ pyproject.toml | 6 +- uv.lock | 367 ++++++++++++++++++++-- 12 files changed, 704 insertions(+), 42 deletions(-) create mode 100644 .github/workflows/gh-pages.yml create mode 100644 docs/API Reference/Reference/tts_model.md rename docs/{ => API Reference}/python-api.md (100%) rename docs/{ => CLI Commands}/export_voice.md (98%) rename docs/{ => CLI Commands}/generate.md (96%) rename docs/{ => CLI Commands}/serve.md (90%) create mode 100644 docs/index.md create mode 100644 docs/mascot.png create mode 100644 mkdocs.yml diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..4f91eb1 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,31 @@ +name: Deploy Documentation + +on: + release: + types: [published] + workflow_dispatch: + +permissions: + contents: write + +jobs: + deploy-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + cache: "pip" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install mkdocs mkdocs-autolinks-plugin mkdocs-material mkdocstrings-python + + - name: Build and Deploy + run: | + mkdocs gh-deploy --force diff --git a/docs/API Reference/Reference/tts_model.md b/docs/API Reference/Reference/tts_model.md new file mode 100644 index 0000000..8872b09 --- /dev/null +++ b/docs/API Reference/Reference/tts_model.md @@ -0,0 +1 @@ +::: pocket_tts.models.tts_model.TTSModel diff --git a/docs/python-api.md b/docs/API Reference/python-api.md similarity index 100% rename from docs/python-api.md rename to docs/API Reference/python-api.md diff --git a/docs/export_voice.md b/docs/CLI Commands/export_voice.md similarity index 98% rename from docs/export_voice.md rename to docs/CLI Commands/export_voice.md index a19071b..2b48a93 100644 --- a/docs/export_voice.md +++ b/docs/CLI Commands/export_voice.md @@ -1,4 +1,4 @@ -# Export Voice Command Documentation +# Export Voice Kyutai Pocket TTS allows you to generate speech from an audio sample. However, processing an audio file each time is relatively slow and inefficient. diff --git a/docs/generate.md b/docs/CLI Commands/generate.md similarity index 96% rename from docs/generate.md rename to docs/CLI Commands/generate.md index 22af053..6f21674 100644 --- a/docs/generate.md +++ b/docs/CLI Commands/generate.md @@ -1,4 +1,4 @@ -# Generate Command Documentation +# Generate The `generate` command allows you to generate speech from text directly from the command line using Kyutai Pocket TTS. @@ -62,7 +62,6 @@ pocket-tts generate --voice "./my_voice.wav" pocket-tts generate --voice "./my_voice.safetensors" ``` - ### Quality Tuning ```bash @@ -78,9 +77,9 @@ pocket-tts generate --eos-threshold -3.0 ### Custom Model Config -If you'd like to override the paths from which the models are loaded, you can provide a custom YAML configuration. +If you'd like to override the paths from which the models are loaded, you can provide a custom YAML configuration. -Copy pocket_tts/config/b6369a24.yaml and change weights_path:, weights_path_without_voice_cloning: and tokenizer_path: to the paths of the models you want to load. +Copy pocket_tts/config/b6369a24.yaml and change weights_path:, weights_path_without_voice_cloning: and tokenizer_path: to the paths of the models you want to load. Then, use the --config option to point to your newly created config. @@ -92,6 +91,7 @@ pocket-tts generate --config "C://pocket-tts/my_config.yaml" ## Output Format The generate command always outputs WAV files in the following format: + - **Sample Rate**: 24kHz - **Channels**: Mono - **Bit Depth**: 16-bit PCM diff --git a/docs/serve.md b/docs/CLI Commands/serve.md similarity index 90% rename from docs/serve.md rename to docs/CLI Commands/serve.md index 0f4a2ce..b18609f 100644 --- a/docs/serve.md +++ b/docs/CLI Commands/serve.md @@ -1,4 +1,4 @@ -# Serve Command Documentation +# Serve The `serve` command starts a FastAPI web server that provides both a web interface and HTTP API for text-to-speech generation. @@ -41,10 +41,12 @@ pocket-tts serve --voice "hf://kyutai/tts-voices/jessica-jian/casual.wav" # Use local voice file pocket-tts serve --voice "./my_voice.wav" ``` -### Custom Model Config -If you'd like to override the paths from which the models are loaded, you can provide a custom YAML configuration. -Copy pocket_tts/config/b6369a24.yaml and change weights_path:, weights_path_without_voice_cloning: and tokenizer_path: to the paths of the models you want to load. +### Custom Model Config + +If you'd like to override the paths from which the models are loaded, you can provide a custom YAML configuration. + +Copy pocket_tts/config/b6369a24.yaml and change weights_path:, weights_path_without_voice_cloning: and tokenizer_path: to the paths of the models you want to load. Then, use the --config option to point to your newly created config. @@ -57,4 +59,5 @@ pocket-tts serve --config "C://pocket-tts/my_config.yaml" Once the server is running, navigate to `http://localhost:8000` to access the web interface. -For more advanced usage, see the [Python API documentation](python-api.md) for direct integration with the TTS model. \ No newline at end of file +For more advanced usage, see the [Python API documentation](python-api.md) for direct integration with the TTS model. + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..3d0160b --- /dev/null +++ b/docs/index.md @@ -0,0 +1,174 @@ +# Pocket TTS + +pocket-tts-logo-v2-transparent + +A lightweight text-to-speech (TTS) application designed to run efficiently on CPUs. +Forget about the hassle of using GPUs and web APIs serving TTS models. With Kyutai's Pocket TTS, generating audio is just a pip install and a function call away. + +Supports Python 3.10, 3.11, 3.12, 3.13 and 3.14. Requires PyTorch 2.5+. Does not require the gpu version of PyTorch. + +[🔊 Demo](https://kyutai.org/pocket-tts) | +[🐱‍💻GitHub Repository](https://github.com/kyutai-labs/pocket-tts) | +[🤗 Hugging Face Model Card](https://huggingface.co/kyutai/pocket-tts) | +[⚙️ Tech report](https://kyutai.org/blog/2026-01-13-pocket-tts) | +[📄 Paper](https://arxiv.org/abs/2509.06926) | +[📚 Documentation](https://github.com/kyutai-labs/pocket-tts/tree/main/docs) + +## Main takeaways + +- Runs on CPU +- Small model size, 100M parameters +- Audio streaming +- Low latency, ~200ms to get the first audio chunk +- Faster than real-time, ~6x real-time on a CPU of MacBook Air M4 +- Uses only 2 CPU cores +- Python API and CLI +- Voice cloning +- English only at the moment +- Can handle infinitely long text inputs +- [Can run on client-side in the browser](#in-browser-implementations) + +## Trying it from the website, without installing anything + +Navigate to the [Kyutai website](https://kyutai.org/pocket-tts) to try it out directly in your browser. You can input text, select different voices, and generate speech without any installation. + +## Trying it with the CLI + +### The `generate` command + +You can use pocket-tts directly from the command line. We recommend using +`uv` as it installs any dependencies on the fly in an isolated environment (uv installation instructions [here](https://docs.astral.sh/uv/getting-started/installation/#standalone-installer)). +You can also use `pip install pocket-tts` to install it manually. + +This will generate a wav file `./tts_output.wav` saying the default text with the default voice, and display some speed statistics. + +```bash +uvx pocket-tts generate +# or if you installed it manually with pip: +pocket-tts generate +``` + +Modify the voice with `--voice` and the text with `--text`. We provide a small catalog of voices. + +You can take a look at [this page](https://huggingface.co/kyutai/tts-voices) which details the licenses +for each voice. + +- [alba](https://huggingface.co/kyutai/tts-voices/blob/main/alba-mackenna/casual.wav) +- [marius](https://huggingface.co/kyutai/tts-voices/blob/main/voice-donations/Selfie.wav) +- [javert](https://huggingface.co/kyutai/tts-voices/blob/main/voice-donations/Butter.wav) +- [jean](https://huggingface.co/kyutai/tts-voices/blob/main/ears/p010/freeform_speech_01.wav) +- [fantine](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p244_023.wav) +- [cosette](https://huggingface.co/kyutai/tts-voices/blob/main/expresso/ex04-ex02_confused_001_channel1_499s.wav) +- [eponine](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p262_023.wav) +- [azelma](https://huggingface.co/kyutai/tts-voices/blob/main/vctk/p303_023.wav) + +The `--voice` argument can also take a plain wav file as input for voice cloning. +You can use your own or check out our [voice repository](https://huggingface.co/kyutai/tts-voices). +We recommend [cleaning the sample](https://podcast.adobe.com/en/enhance) before using it with Pocket TTS, because the audio quality of the sample is also reproduced. + +Feel free to check out the [generate documentation](generate.md) for more details and examples. +For trying multiple voices and prompts quickly, prefer using the `serve` command. + +### The `serve` command + +You can also run a local server to generate audio via HTTP requests. + +```bash +uvx pocket-tts serve +# or if you installed it manually with pip: +pocket-tts serve +``` + +Navigate to `http://localhost:8000` to try the web interface, it's faster than the command line as the model is kept in memory between requests. + +You can check out the [serve documentation](serve.md) for more details and examples. + +### The `export-voice` command + +Processing an audio file (e.g., a .wav or .mp3) for voice cloning is relatively slow, but loading a safetensors file -- a voice embedding converted from an audio file -- is very fast. You can use the `export-voice` command to do this conversion. See the [export-voice documentation](export_voice.md) for more details and examples. + +## Using it as a Python library + +You can try out the Python library on Colab [here](https://colab.research.google.com/github/kyutai-labs/pocket-tts/blob/main/docs/pocket-tts-example.ipynb). + +Install the package with + +```bash +pip install pocket-tts +# or +uv add pocket-tts +``` + +You can use this package as a simple Python library to generate audio from text. + +```python +from pocket_tts import TTSModel +import scipy.io.wavfile + +tts_model = TTSModel.load_model() +voice_state = tts_model.get_state_for_audio_prompt( + "alba" # One of the pre-made voices, see above + # You can also use any voice file you have locally or from Hugging Face: + # "./some_audio.wav" + # or "hf://kyutai/tts-voices/expresso/ex01-ex02_default_001_channel2_198s.wav" +) +audio = tts_model.generate_audio(voice_state, "Hello world, this is a test.") +# Audio is a 1D torch tensor containing PCM data. +scipy.io.wavfile.write("output.wav", tts_model.sample_rate, audio.numpy()) +``` + +You can have multiple voice states around if +you have multiple voices you want to use. `load_model()` +and `get_state_for_audio_prompt()` are relatively slow operations, +so we recommend to keep the model and voice states in memory if you can. + +You can check out the [Python API documentation](https://github.com/kyutai-labs/pocket-tts/tree/main/docs/python-api.md) for more details and examples. + +## Unsupported features + +At the moment, we do not support (but would love pull requests adding): + +- [Running the TTS inside a web browser (WebAssembly)](https://github.com/kyutai-labs/pocket-tts/issues/1) +- [A compiled version with for example `torch.compile()` or `candle`.](https://github.com/kyutai-labs/pocket-tts/issues/2) +- [Adding silence in the text input to generate pauses.](https://github.com/kyutai-labs/pocket-tts/issues/6) +- [Quantization to run the computation in int8.](https://github.com/kyutai-labs/pocket-tts/issues/7) + +We tried running this TTS model on the GPU but did not observe a speedup compared to CPU execution, +notably because we use a batch size of 1 and a very small model. + +## Development and local setup + +We accept contributions! Feel free to open issues or pull requests on GitHub. + +You can find development instructions in the [CONTRIBUTING.md](https://github.com/kyutai-labs/pocket-tts/tree/main/CONTRIBUTING.md) file. You'll also find there how to have an editable install of the package for local development. + +## In-browser implementations + +Pocket TTS is small enough to run directly in your browser in WebAssembly/JavaScript. +We don't have official support for this yet, but you can try out one of these community implementations: + +- [babybirdprd/pocket-tts](https://github.com/babybirdprd/pocket-tts): Candle version (Rust) with WebAssembly and PyO3 bindings, meaning it can run on the web too. +- [ekzhang/jax-js](https://github.com/ekzhang/jax-js/tree/main/website/src/routes/tts): Using jax-js, a ML library for the web. Demo [here](https://jax-js.com/tts) +- [KevinAHM/pocket-tts-onnx-export](https://github.com/KevinAHM/pocket-tts-onnx-export): Model exported to .onnx and run using [ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/). Demo [here](https://huggingface.co/spaces/KevinAHM/pocket-tts-web) + +## Alterative implementations + +- [jishnuvenugopal/pocket-tts-mlx](https://github.com/jishnuvenugopal/pocket-tts-mlx) - MLX backend optimized for Apple Silicon +- [babybirdprd/pocket-tts](https://github.com/babybirdprd/pocket-tts) - Candle version (Rust) with WebAssembly and PyO3 bindings. + +## Projects using Pocket TTS + +- [lukasmwerner/pocket-reader](https://github.com/lukasmwerner/pocket-reader) - Browser screen reader +- [ikidd/pocket-tts-wyoming](https://github.com/ikidd/pocket-tts-wyoming) - Docker container for pocket-tts using Wyoming protocol, ready for Home Assistant Voice use. +- [slaughters85j/pocket-tts](https://github.com/slaughters85j/pocket-tts) - Mac Desktop App + macOS Quick Action +- [teddybear082/pocket-tts-openai_streaming_server](https://github.com/teddybear082/pocket-tts-openai_streaming_server) - OpenAI-compatible streaming server, dockerized and with an `.exe` release + +## Prohibited use + +Use of our model must comply with all applicable laws and regulations and must not result in, involve, or facilitate any illegal, harmful, deceptive, fraudulent, or unauthorized activity. Prohibited uses include, without limitation, voice impersonation or cloning without explicit and lawful consent; misinformation, disinformation, or deception (including fake news, fraudulent calls, or presenting generated content as genuine recordings of real people or events); and the generation of unlawful, harmful, libelous, abusive, harassing, discriminatory, hateful, or privacy-invasive content. We disclaim all liability for any non-compliant use. + +## Authors + +Manu Orsini*, Simon Rouard*, Gabriel De Marmiesse\*, Václav Volhejn, Neil Zeghidour, Alexandre Défossez + +\*equal contribution diff --git a/docs/mascot.png b/docs/mascot.png new file mode 100644 index 0000000000000000000000000000000000000000..e08ae26818a6e5ba7525875f8d5baf9ac57c1269 GIT binary patch literal 71116 zcmV)VK(D`vP)Y!6otQ^(F&!apol|Lv(z-@Lb7Tm^9ksI?eZV{BT!0pbqGMLqY=A^Q%>apYA`;kE@+FOiqIfYC#^ zX-8gXqt{(bJ~Z~4#!n~dq%5bj1tfqp>nySYzP-HEPo#1%^csepIT${H?ok+iUWQ@! z3Y2HKZ@Ids_p%BwVB7F^4I>(iKSFZnmwobIX?%(l$fGht2?rk+3xhf~bu3I~zX7Mr zQ>Zu3$Z7xp010qNS#tmY4#WTe4#WYKD-Ig~03ZNKL_t(|ob0^`xMf#WE;{C%Ypva$ zzS>k(l7ci)32h>s(S%N=zdn-a1(AR>B8Wb_i%*{SfFPjvih$w`5ITtuiy&7~uPB-b z7oiRFX=nJ?-vRH|KocXy)2G4cyv5NUE}DzLTmt=j^rDT6>K-#`woS{-I#9 zCTp^)_5ABEJ87ykHy$uW%NYY6G$dIGCueYr0sDyeo%`wnj&VI>??+BPsZiG)Ft%NS z1LZYDg@+9$zV@yIdmn$*Qx{7ZV_kgUuU_hp_CBy4xyTs>UTLUX@SCREpYNQcpY{oL zu|1aK=yBe3vL@?9U#1?NQbL(H1>iM+_Z}keeVG@lE4R$KagNn!*3QbEuX*|x9tT#nJ*1GAHkI5CD zq`|lWtX0s6qW)me|C@1+H8J|hnyitftvhD`4$#vp2Vk5cqtEB3{$ngdbxxVgK5F2- z@(Onk1AyVUG0xY_=U~iL^rsiBhmAJUssvA)5x5fKI6gQ9uy34WO^klBCTk>wRz>-+ z(kN9p4DA(o@4#qP7E$y?7-LoD$W#=E*j*0Rdu z-a)1tS@7CKw|;o%%hGWUH8J|hI`-w9qOTKlefpZM#uk3FQyP?n%!DKx&*RL*p zYXlCW&R)O!vT=Z;<7F+xjYN4jrL-mh4^7^HMw3nJ(faB*$7+?`*|aFzlqN`0 zpglSKmAMt@k9A_sDRtWw=jON($+wjE&{lC?82{O^jy3W0lXWcXw+?=^)t-tkUAg1X z+lnKdx9=?dPo9W(&Q4`*>s`|-u~V-&6t*zv+;AWt>tIpz@WQ*MP9ku0GzG>ha7rC` z-{W67R;lisuf0D~-fefd{}5=ez?B}NC|d93{XJuym%}(_vL@^QkmuGGYQMjB;OK?@ zD36u~E3$;9X<>wB&vt6R=1SNp#_ zP(|dmQl$cw_VOoB%^!O7iFWIni8-wV6=7Wtb8yV-G5>X7*T+TfRpHMrozu<{A_(4F zh?N4{tbJ?T^J+C3+Y7KwB;yb+pfE4@;39RfecG0>qK0<8+nN~tWPR85t2e#7W~_eO zk+d_F8Gzh7uu4P6W%WkVd@V)+C(`YUygAc?(jF^p-cu}%h6+ZnjB}ht^=9QudrAok ztA6B}@tCnPE|2`!MsJKcyKt_iwUUiUK?2~*#N7M|KOT1=YSp%%P#@Z4{cu-*b9`== zmXGUuuaJ9+pp?}Bsqrc<%yaKp-M-^Qy616PY^MsncYy954K?!MtyYJ}InH&kOF;=6 zID5v>-l6x0*h7&if7@6m<(!%}=A6=5ssm73?>)3k;%&`*W873Bj%rVs82x13=Rz-@ z>v}U(I^+EmeQ@iFEto+$}it@RH9XLT)hBPt5+Y4s;zD1!~IT zCW$wW7J6x&x~y0oH)^OA{)_^P{aCCcPp@$UvDT{bq6RFt_OmBXjDE82`?=k}eHI4x zX}Q9X9v?SFMvr(l8bqe7Hii57S1n&UbE4crtzag1jyycOPeR;1MEaI-j-E5p=T?Oas*!!(cfkJ~P_}&B5k~lA1cE`AcA(PuPCPqJ5_ql4O zd_rE@g_0Z|`a49n5H;3d5Z*EoWJS3{srn@+1YyVFHRxuk6cpGKLzOy@E*qosv5elO zd0e`(reY1qyDuC9d4%9+WiK163UKPaeUSz|iyJR}22w`UUpoX4ieA_&(@4jfd7DZMAG1nr2%H-D!Zge1H(qt{{R=0;ZB(G^1vBM=%615%DP4ee zca3wLMpQJtR!Ko#9(_EzeDEc>^zd43EZ|MI=i?H5lPJLyjVL7ffYrV?3osV_HY>{M zvdm{EMn75iS{M1<#<=Kl1(8%V)tC{@M)!v~uXm3A%mGxt%(h3fvoAdnZlm`;LBpc( z-g*Mxz}vj=#o9Q>amvg&@w&Txk?89S6+4G zFSj1gw{lUv8SN>iHdw8=mtF%nqw?7Lu{^3(e!+QdoOe)Crwv984)@I7RTmHzddw>` zdN#K<#-k93>K$cSwzR#KbH?lMR}q|+Iy)ifOxC?uQL`H@_$hq4i2X$tkJVx9I@1K~ zVaRHohf+D!?e|V`0IxZobNlPC%myk#FVDF%f*A_)`n=Yf8jAp(Gyn_X>|& z8t8)m{qa0~q&Mefk>Iw0sRCtM7;Gu%o&|fxI+oGVj$B#%L?>&q?!KZpI=!&AR^{+u z$N;>LSXcsqF0Y_;0EJhuW>al4|B4qK{_xJ@^p*mM}H&lj!uWXJ>{z!F!Z!aLAOlfW~mlm zbjt@$Io@vTp>ng2Yf(2+#v6rP1O>6upzF1zaRD>Xs`M6B>=c*Sw1UWJ=j(8A-1G9_ zYj~d}@Zj_cHzZ@$#@#@aQuUzKH(8T)w^bBQA#zn>jhVnGq~9`-L{%&bHSwXQ0+)pU z*!88=TCa0Pt=)X{@fPMk@wBfLy3zRZw2sOcw8!MW1*$Z&t$!W2sU?o<2kTK}>rv$E z#z0Le-;CnYB*_iqo|pIZQSg1HdoL8fBp#2LL)90b;O8_k`pLT2%8c(8u0+}>loY;m zou2CR7}$FcC91Ioq?_cR6qH6m8i6jmgNs{H@pH#h7v7>;bp5>hmQzpN@&D~?&)s=S zbM~&y+qeFYvebV%u1AF;|8~39=tb7~Sb?u;fO<1ts{8Vqu}@5yBc=prEqw^o51^H{ z-k3YbJ(Si;YlT`slQmf*3lU)zsr?!dI^v|Ab9e;tIJ~679Q_Cz(xi(_@_P*RGv#WL z^@}&`-+A`&baO9Xc;WuN`_ortP5XqR0gu0Fw*DKJFFbo}z|5{sUtgb_`qW9fIhf5O zyCrF_#`80O@#t+gkHzf6rDJpLY^^>>yyW7}`DVSo4zap^tOGfx;wZL8>xo9*WZm;A z)7~Hc(6^)1*#YXm(_|JTmPqYd^2<=m#<&-~2Zi_qGAZo4SG~dD zQ(ioFDEdIH|8@Gau_5Nb4|L z=(*X@nQ6i@Qdr6}ObO+tQL05_Eg!#wdacGgXjok&?baVB2fK^ojDwo2yRS>SS8kbW zOsdFwyHRA9Y{N>34!zaeY@0SI0d|DHl?|jxxAKW;(;}7uC!VaFS$-3u*VU_+| zWRg;QLqJ_<_&{L^bmm;H!^IR`{2vlh5XpB^;=}RGIPN*sO0TT0UC@l;KYqsE6Gv(1 zcwG~te~2#(ip_)cHgB#O?S#UYS`k0m{3>Jd4YSbW$5ibN3n zIl7kAl~J~|_M#b8f8+D6zO?y(Tk?cEMRk`Wg7EP)C9qZUXU}n(6UR+zGfu zrzr17l?QIZK@U$Yx%hKw*ugSip|n~q(t3ZT|67|{$t4rRe_+b?8C%Wa=#q+*SpWi+TPN7ZVuy#efy4uX7ZfliK=^|tjP_3h^`}7?NRw4+u@W^HZr;_-D7GhdGqtH zzicY}P87jDYwaE^yRm8xI(YW_)L?_K9_H*$!hG@cD5vEe=Kh+x@lb7tUQa0kNw}!B zL4USc>OcAX*H3=h@vOLWJg$k+Ka^Jqje-nTL%*=vrRBv?i(eClQ%1U3*a-ePF5Ez) zjovjNMDJ=_zDvH)l#YJJcV@}8sr9_5O<8zj zC+@F4>!y!=+@@tcR>|JpAiGXQ@wryxY&I;|v-g%t9eHs?@JVThT0psdlbO3T&5h23 zlyp(I#b_uk7W9K`Pu*VY9XA$H{v6k;|qQYRS*dM)7kZt?Rk>Uq00BzVFXA{?c9FD{r4au>Q`)BRF!~gBnCNM8)L+#lHe4_yW&E>TJ?$Z1 zt=A8O3Yaf38yw;cY%GHe?hfX@8_Qs$9OHgK|hlt!MCG5h- zr%+yc?PYjG*dQoUsOH7dI4NZHyCkW7UK#)Le|_}J$C@Y;jCTr7daD}@UN><4nlf5x zXMDRc^Q9G)UHEGC!UOje6?{^C_QDqEcXf)+X6JCejrO&qb+E6>UwE;4?v-!?u1QXR z9IW42`cOMo@SoR;PNPs(ISs0(3e)R#p40;K>-UupFRuLARNKN^*UGhxI9c9lrE=qR zzgRnYTQmBvTbA=yBT_4xV08=1A&=HFlg>M}o_AYjFnDcg?Q^a71E?jRDe~gh*lF)k zSwlcQF41u;kGVXbh+)ZWB=RUtZMlx5vo(}Df(*EV7*wHhou<7f)-(5OXyEsJ%@yj3xw_N8+a0WJb}HAU&Q+#T z-R-Y#X?XqXSNbbY$n z#u~ElSV03T@k6aVI$vzHB`F=Q>f;uHdA*40QmBu>A4UAQ$pqoYqQn=(jUs+cqZWM` zocsG@X~%uDdb4T|Hg9aT6GeFkB^C%Kq9CPFw(!#{(7=0?hu7S>d}lLHU{f47BUGto z5lc!qz@v1CF5`#?_?>WT;^~irl|l^>aUsSDc!p!8xIAV|GPu{~t*na>aKkZF*cOXl zJn@t?>rGkO$dq=!0^8v>SkidsiX6#Y^PFY;(V)zY2fMS~s6SdMNY;-mdxaX=B(T9V z)6vX0(Z_J!^JJXrWSFl%eB4NegMmJo#7a91PmERlGM{x>v3SlG-oN8m?~wvINqxLY@PG6-PZ$GCL3Tpg#|e2+C))Bpr`{E6X+bS@ zd`@Lx5~?)kJ#%l5q$0FM9B@DY9a=Ab*xV(DBbbdUBei6--yb>bo!i`3)hUU zU;7@!CnV54G5X_RMIL+B%91$k(%r`9LI3%B)W4U}8-brOH$V$W)c#$XsulW{fW^})&sK&kHb{G#r9P+e~&`7IJ5vCYz2N0)$WbWlt_=0 z@LT>f#z3smFd`pY71wRw*CTy{cDSpc@iBUjOgsEHwZ%$Mf!_;IJx2cMrSbSAku9Bf zEUdxN2p-E3Kqx;W48XE?$Ai)+X#AdVXJontZZu?eI6%YZ+f|fYa>130-xGV<1-n!d zMK;#jN0`n?mjDmoBucQ$A+H?V`EWk{U4zTOyRvj86m*`9G2jM>YQXWt(@)j|wY<-0 zni-|Q=;f;(cKU`(XnyoPRz#2#4o@Y2jb5CBUln(2Fi zEb}>~lvRk;A2!1$N|J9^2KVaGWr|gMislF1gBC3 zs-%>O`-gcTG)Da#C!CN#-UPjWAeYpRksZgQk^yl1@aQyB{MnJC&`{a}ej(>iW*`>{Yu-xG z2rNNPY&Rr}O?bED!BiPwQVy2;C~Ks4T4v$l_Xsbb9D>gU4Uz|B$-n7-5Dv)i zK^X!9iRJd`_VjZvxcbsV9RQl&_Ple>@VnrMN1E;L```EPhkr;S9b2u9H`oC{%AKgl z%h%()GxfTfz0_aYOCT{8T1{^tc90L~G!Vxi=mBX@7$D*HW{pj43wx8`1Y2sHTIgrh zH?}swML+Hze}|qZn;!E*I&6AirPc;$4$9h$QEmf(S^)6##@ZS1whcv&!%%#p5U+Dk zi;+&_eH@##PrcRPbeE+1Nda&3CHjbo{}7Fc;nen1EmL&NL`u2YnW?+9 zw^ucj`kl%^v7^;=O6hW@o@5#UJe4K=ZvXrZvok;K%RJV29SV5|IESa^({8a`fct1t ziz%7HaiKQSlJ3t#m$u`f_hDcu%`MbG70#?^N}qJUE~83K><_EI<)FBG-?qR(aGZI!O~7SUql{C zgq$lwq|DRea9LGEI(7=-JEeV$-&HuM!qzM~d})P2??=I}_TDKADkjLvkOl@Fn6NwY z+~mPS2v5V7<$>XFo=ao6m`l%QD&aosWb--7)K-cMgjhtg-z9p$A5)n@WVQ)Rq~pnm zXRm#%@fFTR-Z(JhT>Y>>HS<&>TTH11eV#^?Xq*D^S;GHvN0;{l70XS_jWn=N2cN(R=Up zH{iw(sXYCKvarx<&G!o^|3E|frxU}!_j=Y%ADeE}$_ru_y;3>*ztscd=r@JBc)mQO|W^vSqIfmbHuVrmjZI;oV1yaT>T2u_0Gtf4w49}vOF zkecA#qtr+gyKy8npDo``-r%UzsF~Nm#eOb<(6w5;$Fa9g<%P}fa8P{IYyZKYYMnRs z$f^gm(O>Paj#u;U=i(Bc(2Cny`N-Fj<^Ul2lOv$s`c${tac zM~IMeeEFFS!{Dfa4M@-c4g}NWf61|Q#J-Qrv54>ko6~O!GV`dxT$D>V==lM6CF5lK~ z%>U!F)#-O*Mjp3DzuWIl+Aw=fzt=fyA(>YR)TyDuM74o|=sg)MzvVo2UI!lHsl!STtV;Sj z)!La}CJ`tbARD~s(9y%s^>WGxh_r`=C#ILOhv$bEQ(kI|r2{(I3^*dd<58ts!hD%t zC#E5Ye8_!0dP;t67$a&R(k!;J8RSST@Q9!I3}b2kiW9tfc0-2T)y*+h1#szT-yZ3V=qGFm5Pd1)cRNl zy1(-b^~5E32rg8b8BFzFs(Se!u0uI*jnWAfl;X` z;jmkQGPkghY(Vr_fitl$-Ah_gYvVurFa72-{1a|IUQx~OJEXsT{pX@W|KX}G7m%)s zi5~%5p|9LyjT(t6Ic!>(N2MsRZUD*{ngXL$0-b&i`wt$0)lLp*dDa;4I;Mx(j(GNv z46~OCr8C?#U?emR(Exu86b6S{y_f`gbMn3NfU~fLZ$4y1}^;NBZBqazN15du; zjUlk$C?crPe%=r%c}mp)03ZNKL_t)Bsym!o1V~W2@he;(Fca=(V*p>s{$@eaC|}?L8)=M}>xIe9V-GfpT!5T!I`dY)Upj zP1jW6ZQRStXHO+FJO5o>{o7ajtN-gI}fbFok!QfLIS03aQG=R-*JtG*`btH0bS(z88PQa zp0NXJ%n@=tQfg44mTKo>_$UeEvF;ySD;hi+2=VXPNT}zIjF}CFJR)5lzlMK?WE*Y- z!fU0hU!t5La?d*Xf(P=F#vU|kCtP{HRUxS6T%SnCj90R8qo)r>PDYEjf}4$lhp(2T z8jOn!zpW${!n7xB1myAM4$?Ww;6BDKcmqM^v2_Ycm%<=BgpEkBb9x7Ch^KL8AH*2W zXwytp^6Ra9?ONyDryh(B@R+#wbI`+#)8@8>QdvligQIQ@juuN$sDc0}t8z2Q*LO9b z@!=c{3J|p6AuudrR>gnX$p_o4@`{=~h_^0s(LzfFS3*rW*fc*4uI$l6TA;8b)M4)} zhhXnrE098hLJ}k^&rb;pOmM^ypeh3zi$^kF4txZjvUL7E{5d_Kl%sMToyJB}2yTXH zgiNcUV-m^7(K#bO041!+!&A5`EH&wgC36&PVH708#o@YS?L@fe5m-{KXZxoXK9Md|EUqPJ$rW$DtH66_;h~9j) zx^6o>2-h(g{cX@fCN{M$@}90BR~8PHOK{XKLrQ+%g42c0Yl*dP92`A0XKM=r{4RCJ1u#j*`sk3z$mwT;m3e%UBLv{7=u=w zL=75CV}`rs@U?~;YEa0MNd81$6C(~xooeJ&uof;!QsWI84Q^z3Jle!W+=BSNXn3Nq zB?KSZyhJXWTsw(x@-YHMmq%xF^AKz9Z)7S`<#h)YCYM?X<)=UOBbZ&#YvZIjeoXeVE zRjl+QbY8xGx8H4!(=NL`t^`=doe;wtA%Tq=GFv^8*p7tO<_ zzy7+~^HbmU-#+0KNS?9h{X3FU{mOEYMaXXPWdSihPNfHp-D7DEMK6V7y$eleVYX2N z?MmXmdl$pfN(#3gSOssIWMrHIaH9(WOd)h9aE>2vhujm9nGSA@U@i_T**MUk30ar% z6J$Rckg9{ehL32E#Urmxt^e|J1oFUs)I~HG-#5{5N055eiHRaL_-@J z-AABf@w6`9{AeSSb8!%XMQJa*-wYv2)P+CC)?xfY)gPYMS11Q7(1RP+ZiS^{4XiK8 z0eY~;>*(hnmOboLI8M3u=;?36T9C(irnpPuHlWbsdpMl0Qi!yz9z$YK@Bu@e!t~4a z$2Fs=j{v|2zvRF9-Y57+-T7e5amHTGDRt?MRBT{hSCLy?g+9T5uRB^`{sL zSXfwq7{hJ4@)*)o!M@uLL6o#)5ClF{I5-0H;lQ+G1dRR}YS*?^*#fSivk!V)OA4&8S`#tHlcD&Y^$8_$aXN_-u9WQpWM zbQ*|5P=TQ$^`%BOPdX2-$A^lDBsRm|0lF5xM}dyKu5!4ocL1hl>-?J<+l66^x8)_f z{qDsFldSeJhu-h>ANkczr}xf&(KSg@Cn$(NILr$*#6E&qH3i!n+hAI?05Q!N!y~7B z9M`gjYJX(_>;KJwz4B~zb{CH0^^B`8or!Ah-&WQ;k1O+Bxgt=(*nk82jSodDF5xj} zZijlU1mjBz>u}c%(l`zt2=!DZSzK zh;iX{krC3~#h#UT{PHf`zs|TqD8+FP{1CzCN<#HlVeAbzqpG|}n+M-}WbAQ;V;C7Q z?blaWC@GV8p3XsX_KXMESoTVeaQhgIl7*4YOqH@Cw= zJj-B~(JFUoJ@bR}qNueig60)p_22x{Tj7SAA56R7ILpV`qw{WgM&8dAKHyk>;(jsy zGcd~Vi9o~DC@ar*3yR#sk>zy&z{WVKZ3{Vs>dF;u6~l1K52g8}L@F6fHxt-AKMU=4 z16noQS`j?-P}ecE;u;`Ny`s+sLCTS`8Mnm}dtGYZ3^*DjpU^CN!LWn$rR4k-GZ2X| zBO6JWamTj7G4&c2-t{q>2L3!#k=oSMw+*^jD#TxXKg&Hq1eCF z`w92+ux3-Zb8rNvY7MZEa}QBsPKH5xIskkbjyI#v*Ue2+jmE)V-hEi$U~&kHXbe7@ z(peRka9e%=`gQ;t<5_5`x;#uuXXVPmAgaA=3TB>iCYdis8l;vOsjLh`97`gPiw@4JUl~(2gr;cHk?3N-EV{p%4xG@dG)pss!-HLz|7H zO5vCRui$7xsw8x2p|61NX$6c3$iSsfVDK-uH{!x9AtYI?hz02S-2s^#1h( z&is#9nVl$)%sa1$A>c)0QO|40T~5I4AU_N%`8sT^FThMR4RL7gC~YnEgR|>#`wyDX zdd}7GoezH5f9GGG0FPKX9*qBjt02j1_6Y@deGn>+;>ncPhAA&J+>LYCS_6?}NB0DQ zv(>d80YMxQgjzRKMUk${xjL80lE{Fz1#DiJf$dx8A&KyP3UEFr6Vv^t zsyl_aY}5=?N%kt?H+9cS*$aW!DtE=dOW=(mY={U(jhMakkeb6qL}}Kc`af=NvNfQX zMab_1zo0@Vg~`WF>=G)6XoyX!O26svRvLAf2t>al^w|&@g+`v?2Fjo$S}fn?|MK#w+SJc>Y`0~l7K{t~sIe?U8e@bD72u)> zR$L!C{S-FUdN7~NKuy)Snyi%Wmuu~T>pZ=c%$zd?tuKECzVrUi`)^(KV}3-W1rX)B{6cdd6ql=s5d~87W20G84EO03GIokVu|QsYymsB zZGg=iraZAF}4~or$wQq|p*>2EBSYq|>sHg-}{Z;f9}R zqP~(*u{RHf9xws+vVrF}Ja;s5RK=lG1%FBao8;r-&I2Gf%FPdrEM$s|T=FwT=TA{$ z)gef?8_Sx4nN*-u=-vyUVh9^T-W^0d{cy{|4K7wSsH+4Tx(@hX3^CDbYaYe2VrbSA zm`Pgjt>x?CPApF&5d+OzRl=mhsLD7fN)O#~0JBM*t`!G|*wUR=F1O?3&ggL|P+y#D z%wOMM?>-)%prC+KF`tRb$(sP_prPkC3hpS5z*^pc9qnz<(hc$g+)LqAFJGNYRp+Os z;@QW~L;F9jQ8!-xC4cSbZ-?(3eK6+yk8g2N)Bm} zgSFVO#9egU8af2iFkDO`EdAxMbH^swvd{qUx?qqE1`(7_!}3}OjM0!JK+zPT$SeUN z`Mek>g9eiShFcjPc}z!w2NzOI=+YaZ^opd+&`XLM4ugdPGD=TC#fFm&gDMLWSr{xC zh7=;i@)d1XKrvF}8Qza!KmL&POL=vbv<&ZCa1)}qFBlDYQqP@==bkbP3)i&a-2eFnzvnYG=->5VqV#H| z8n!G*fi56qd<%qn$}xNO;9}51Bb&u2SznT9WI_{XAxa{N399ak40ddtg-!FgISi z42p>-rk4owj^0lq1PPZzv=M9+XVVhaAf-YQ%?yJstGOLPI*ZGGVGVox`2T$DVV_>u zyf9Lrn!1yU2SxBgXbSg)zX{asCwwtXi167gTnQ;;(6wDS*gFifdJeYLH^atg4id+n ze;!(J*4)Ej?PwPcyLIIL$mTap>p~9%q5hPTFb<+)6Dd`i<5B_}!|v6z`^jc&Y9Ge( zl~Srm7YD{B5*IL^!4J|BF6v+aIjlzmxV<<8H+J^Hp<)R-K7))l3;yIa=%`n$Z#z9>&_#Mmq;j#euqedIq)1U5Fdj%v`nfEz?d|>(BUdTGVD8SxB;8T zNQWH&D*5vHiB^yJ_o^>WHXC95Re^J8lo1}ia0*2&kjlpv3UEk;mBu0ZE*c zrXDsG`8U`9rE8Iziwx9pa=`H_jCn?VdjDOJy{~B+Z|T@hg6gSZ1(|gA6f{Dq(h+B- zlqciQTnX!)K5S0rVIi5LR>c}1k6fXWszRx!e%_r{`1Rk*5b>naCJ#sZvYVLqwJ^BZcbhQl^p*8$(FqYop@IXi$pARwBU!HJq4Q zs}PmG8b9D{+(A`Ny56Xyictg_+_2Xi zIRQinl2%>baMv+jUU>O|_B(8bVWKbP>s5+DGc^Q+ z3-n+QnnM3jev=vZAqJtKi8rpmF$f-?dw95ch|fVb6l&1n@F%GGgd!p?h64hD8F2_s zwYdGDAld8{UqZgV7xH!i8{;{sAs+7mw$|ri%U~AvW{1GzER3r3C`YSO6aGFT9}zP5 z;K8%T-hD97?nCk6Myqj+#p1kpoDkr!H2SbpN|Jm*Obr+$q(l+qk%l|-6}VyTHn^p; zAJ+WkA^#b@oIn5!@ub7ctE^A zr{kg#C!JuN!v{|l#Br#5wkx-Z-b_BYZo?CUNp~2I`$MoEw+7oo+Dur5KNC;egdTf~Jsa-MDqNj_N zhnc5PvgfaWLK#>|Lo84)A4xB)cVGIFbnz*Qky2YoMd%EX*DvTh4Y~}CKBA*vZAucb z1XkZrOk_wVs-n&yFDBiB>~R%hoq*tC>c}B0ls=IJ& z?{-)&*CEG90tHZf1X~*$AR>i5nKmTTK?T07o|Eu7IV4g53hN%n64-C>mmK}?>hiZX zlc|sPTxXuiI^k0Zz5v5Ue4qr~ttz{`17b}RX=Q^*!6CN}>uV{@swQk|qewvu5*nL? zKp5+?IGe^t?9pvTM_X!9{U_Vdx)s2E{%iimPpv`kTNl7%*YDSopL6Phe}A*-TWIl! z<}!#fNvR3fXw5koQ3$bvq_fasL+USiJvmrg!lunz093|dIz+J489?SDiYVGByb)A! z=zRn`5hWS=sxTIbxF~N9IR#UQMw#c8AqR|NBqazu_=;##mEZ8q`SX+tn8;!e!*sGR zIX{lnhtOy6-r@W7e^I+(0#KkHhCF{LyC%KeLTd^}lVJ zFcsr-hR71m&?}%@bYVU3QYjN%4z^L@*sZ$;cfs^j9qOL*`;E1En2x3(^XrsaAt1^V zgc$E2mcz((m$oojRix~HnAh5+TkOT)eATJ*bn+YUB*mtbu9MgpG|En5j)cowP}KR1p`6aEC3u zbJpu9&Ss*yLkUFJWKeuMgZ!!=Ch&L3tskndrs)=4QzsX>-=e@S^alB3^IrZ7xh)$g zuSir>2_U^yfWo0+bhGgVJZ9H+Xf)Y-ViU);*Y1Zb<8Cf$W2G{u24x&HlLF3u%&DMN z4KKwbNKL$|c2sr! zAdkg$^k8s!dyyzZ$qaHEoQ4hYJZV9o`VChg@R=&0P$jID>u@+-f)&@HJRd{R%pN zj_8^)K8a@wNTfh2WYlejnq&=#NT6UtV-AuCcVtmg3Cbz_@Oz`RZN{zjX_&j-gZsN4 zbUxL9^41^3_+PU3BPX|-@oTkp&nukWoZGTyor}`4Fs1i~2}+C|6G_AZ^t&0XuMcRH z6YJ4gc+9SopxNY&t#BH?^{qP~FOhSPYRyQpTKF4*b2(`0Zal%)-qU4 z5s1=IGXPs=>JTA`hF!XZ)uTd`{E-eL0mc{DNP-Uxo}E645pk(NEgb=-MB#>`ag7Zm z(hD%$6e?*gF~;yf1r9^#LFXuk2jyXz60r`72df-dUMCdVu;K9c82zt?Vh}H6be{_; zBu6!fB@w13=TL1p*1@crh8?wS&{j>TK{DKL5ad%O^dW_1y9)dJ2cZjnV%0@O1P`yD z0%tULLhK>}2e0q%hp(=E2L_mmkqjBjdf`+0uw)KSsn1mu-4d@{QNj~?Eu7L(sllw| zW%|i9&ffYmb@4&?5v?BxQT)C3D-SK_Yrnc-Ve_@ldFLFGM92#1=fN9|hMSmEF;OZ= z9Py)vGt8;k0q3=84}Dd@iWx-zHugx9I z?|kAath})fQ-5t?>bI}-UqAKx>1TfV^_NY}wd;RU^m?yf>vzxWrro)Ikv4l}mK3gx zN=Fc-Xx3p@oybK{Q+((NocA+rU_1Es>CPO=h{K0txuz(?A6nN>BRZO`3|PcJLC@_a%TO^~+9s@XxnJ|cewuqI?%5F456jH>fCpVw(OMtQbExXe zAvX@dUR;YP?+pF$1$k=Lc_*#9K$;1hI{Ka<`26l8dND)q%@KGA^F^5^Xx)bav(j2R zdIT<=3E@hHRZw1Bh34`e^m)o_g{TySH8{u^l75C2eUZABs>2YeA8F>1)Q~X=QLw2} z6>%Z~pp>nps-M#7iSwa-m|tfE{SU>$svsD|KJjw^1Ffi0b^3YZsTn8tINOEWd+Qo` zCZwPc#)IB1-Jxm#K}?v|VJQ)v8UBfmfYGfa+enjgBuN`Xb{uErR^78!L4)f@${yj2kdT8BM!do4q`a8{Z;|G`IwSqxW-!9!8 zu1k-!vj%te;?Grj{bT~K+7AWd1lQ!mv$oMJAN-FtkU-9Z#hlF88n=89Gg*uVU#6^V*U`J2d36fpzWS z_F@gbxqKUZdwD1A=1^O zZ*!L&)6cmB5Bu_|PEv6vB*l|i0VGMT6DW$Zr=9+hmGXaREFo;j@o?+krh4$}Gt)D- z7-yWdI6z275LX_Dx%pfx4(u>oZu{3xg0ycPa?7@S?mgctt!;c<4v^!mAQr0OLk8b`f}_ zh<7M*>BF3Op#-zh4I5!A3?PVAR9=-qx~ilYJf?sVp}Gl)xey4pPs$kJa^xVh*K6nu$roE1>fVX$4YJ1s}|-KzFvpAtr%JK z@DE|%@I3-#q#v5qNQL!PNg#zCS3<&(mKH4Hgf#=8|(G<{a7I5R~8? zIZ$OeZVh4Zu!C+S01n=%dzi=FZ{r+nQjUw6j0Y^0}F(!t6WAH&+*NPPFMsi- zh0Xu(YQOV>UfOA4@I$go0&JlT;|IW-y}Dbei8p~E&xUWjdOK{Z&%(~RjeuI*H71K-^LuP{`Shu%ed(vOt6%%P+PT-?*L8gK^jCcSqP>^? zQX|%<#BqI#&GIP)W@@n3drq&Lzo0B#Bmy=3u;Hl{0S4!?TG*@t$+fDB%OBk3CUs^3 zhyq1d=nDab3&QVJ2pjCJaz)|ZNI1;>@F7hI(ZjH=U2*e8QYuscDpHRa6h;%+yU+JO z7+Xa>64f6@Fo#`j!VaurdNI7wa}C`7s){h2J{bT#8ow3dAc?T}y-CSmbnnCahx;gP zKX~s&U?aeJA$`ce!jfHvJWXM?HVX~pK}eK+@{A|`Ko{#uKRjOg;0QZmMm*~Qg zumW<_(Wg}pyr{%VSt*pwLrW>w{dwF~)wW!f#rU-$Urz7i_!QJtPj)MOQ4wM|%90hg;zG?12&%zkd~;v5h{5Gd6CA&6lSzsJ%^n`m)S_=;Mp( zW%rqnEUJr_7ya&cIc>kTVPVU!FLjTe-_Lt3?;Q?Rmo^B=2}feVAOyj=;z(UuL?qTqrKLKEO?Ox0qZKTOi(VQD6gQOGH+Ct7RdTv2YOpK+fQ}aBS>VYM~QJBy)oC7&@ zf#)n z`?udye|dea-Mlz*(J!v8t)A%})MziSo<8oo=Yr0t_Xwe6Xu=Rf7%lnH^Dp2Uzp!ct z#aeeq0eoj|3D&X#&fJI?o`)LoqH>eO^=G8L!J9t4e&ugHZ~Cc6zt^>I+6b=GA!wHV z9Yi6*gC2qr9@T{Z;7PPqjyf!g54qt|-r{^Q-Gt%x70#*pzU1JQI&HXDf(NpP z47NQI+lA7bR4s_yMEC^@eXtr(*w{u&p4Bk~#N)nJx}C`RKpi|LP=%;*q??cG=^k>F z?+z@!u#rhh!l@E_a=yb=JX75#ti9u=fnYPK=}Olg?&iolb-AUXcP(gqPrk@Gm%b{l z_vX&X_H|y+?GB!sb<#77!nU0A28STy-AE#nnZz7zPBp*!#6SA&4=>fzf4%wj@5$~* zATL^n*neAVtp+}=uXL6lZ#%`MHJJN{H~GK0XwmPU#}wf1@1p%%)l2U@2rE?@IHxwkGC_uVVd{r_V@%ED2@&E*RP4$5bU_;;vHd1KFy@oCr zxOLEnuim~FmI`d9z!IQUdESZZ&DKQ&r(ccJdB4|{cc!)?CJ>PbCY>KwldBlLdT<4t zl7c!vj1mS=omSG75Vi+bP1h}KwIC5CVJf~Cm&Dk>v1ZJ*=wZn(fK}DK2?iv}w!^wO zskv}sQgI0+Bqwy5jU(vOqhZL2S3)VA2HaguXE^?9=&6})$lt)6oUaI_v^W9^n;Mq| ztG5YoCAT2c@7`l9l?2(`PCFDCWe;9Kr9s1$(;~bNPK>si2&Ajh8Qv2*g1jev#+B2N z%7Jw5RiC+hHi5rE&mcV;Ov<57|FSgwvaF?rj}MqaufU3avwHL0jQ^tD7n!I0@o#Oi zE3J!GSGs?;d|>U3>ucGQQmf{zj%yGlku$Mz+Qd2Nc0Y5ctS)z6*ge|+i`Ghf$*GHr z^<%bR7;~ZLep7b&#}Zw8W^VIFp$b(LMXk5oeR3^sKCafR?a}6OfBi2vDOi zmp22-7(&P+MSeDH4xfp{Ql$l9Lk$r`kS>>d7d+UAa0O>lRV*b1IP82Bndu5il&QSo z+$2X2Ko-A}H=g0$0g}%O{C&DsnMONY!`BB;kc>N2DTbWhiUQ1oCx-74Dg(TeFuB*lQK_Dv!EkNVRYIPgUq>!Mfi5x|tEe<8)jC_v z^sdu(IdqQKed0QG*R4C7H{a&YE{pQQ{#yU%%G__oSWclNU5I;y`Gt3hB)F7Tg|o_) z#g2N{zp2quhXCMj?^!eXp_S~?to*m65#MS{hf|Np6XZTuoqVlvbmi#dmzIyb#pUHc z&4BsH|D!(nOTXzqw(EENWm7oT8DIZL>X$mRu=jH%*f$nNzh+@>^9S0k_O009ZN2xX zC5PoMBCsHzU3P2A#1MqXFN$ngfP%aL5#yL4N8}N?QO;t3heL+2{RLp4J=~V{;7hmP z1j}GyfS``cF%{fUk88j8=S!d7`rWR3&{!rb5wj(48vsdsLn9uEy%l%$4Ehb~*nSzPO8#oI88Jybk~Lo1kI z!lx5>up`G6FG=l9;XTC*hT1IFNpL zfMvJ`GOf1i%@6U7AVZ^s!_e?mmDyN@xT1$k%EF*3<1>L)8`jczhU{+qiNe|z)&RTgJG5z!8Wv(X$*ur(^TMbca8ovJ{cY@+13t?AbOIG*|1PVk@m4gc}4IVf)H zL*8`|^&A|$>IgKy+GsTXZe!!5pY3+L&*}C1TfJ8rTUTLZ073=YQcf)>vOMU-_#0x$ zED}LhhIv+K+Th1ypbXqu6cFFJ4<3Eec4$V}Y|+)Vr1^wFZvOM4Uwr3x(F>vRp!*lEC~17`-XZL@*%p7LXG(zcBd#|a$Re;EGtU%m=U zofxc-!IeZaRzEw8oZ1lzZcuLH&{5tjq<9ie2IUMa@z85&1K>!2)Bcc?igAQ% zrDsTv9}sD}_F-sC&Z?@D4NIVvm`8OX!_akD0SmtwDk1^ct6=u(L9f(zDln4&u=fnB z6T_;mWp^& z<^Q2<5bFMwC=NO_#)(4uNS~`z2<*sbTs<1-7G#W9IF+ns?abPC^7JbmK~X6Sl%jU-nFRucAy-y&{ga&mnx{+)()X_Ov4z&&O z&XoY?=r9-Y(p8=wj>n}!E^Z7}e24jVVB3l=URZ&yt2yu;#{QucCOPqFI$0sz9GS6w z25f;}gHv#M_Pb#DVUEJcMis6#G}lyn(8%XLN<#=q$&kX&^-wYnd48NDDRU-53W+Cx zs>8-1Zr%x3g}i-nXQQ`em?l+uy);G%w!jT%UKP%(nr&J*vd68}rsK3Ix0Qq9S^bsH z1w{^ZrDMVSv6(uBr~brg@RX;Y1#xWvph})?s3ItB51Q>7{LJ&tgT3$iJFtG5@CHmH zq9Q;2RM?m7!v@v+gN92@Hofw_o8~s%P-NDXCBqopID?=WHYj+&E;a6ULkc-pA6VYFa-aWYTbnnWuW;V??Thk~lPqVRQd^3Is0wgiI#Rw~og+^^Q zsr!e#k|drbbR=%SFuItUieUr*W>*7MgX<3+gmsHZEB>^IqDa5;)}yt%5e&Z{ z=aRwO1a}x{r&Jpmk_6-r#t&#HDj?iZPf#CfyDhvV{frk)4K)!CekD;lj^5VQvP;@8SeBur``V!B~RgdaqfdRPy z_+kz}Wb0MfJe5s{0Rw9Yj9j^UGm+z6OstZR>EZA8rfQ z&zEbadB1Y+-!c1=J35g5-fYxfa~>yF$pfQDJE0iV!UsD%>@;uyvpgBU#19J-DzOS| zaViL=&e-)tooW&uQl8EsVu@XDp$1HOCj&AJtb{3}9G0;`1o>pVK`8yq>bnJKIGmTT zXa9aEbOePhRU=7uYHxpfwDg$F^&;(xHhA9(g)0t886{`1DKw5q8X_Su8E63YB&@AU zT;hOmaR@0{LlB1`zOsO3VqhG{3-d2@(S_DqA)r)Vr|NNM0!by7A?!54Km{g|GL~#2 zEL|N!N;$v*No zZM}(>?ZEV=%57^){TCj*^~kFR>*YxZ#WQkUfVUku=dl~$$v^!lh?-b-XAm0SryxL@ zof%K$^{{Q*W@b5}qB2)Z>Pcddb$&lK+-U7@PNILTZ<_vS;#Gl0UXdR{UA@XJF^@Hr z%iDv9;?Ldih-Ph-F8F971dB#Es1YD?dlk=k0`xLUd5w`henS-;51zN z)}?*3@CNQ!>%xKcE|d|X{Do=jVDJ+)|ACIQMN*O7X5NYSa z^Cy`bHfpNOv9VHmQFRx}gF|h&GO#f~0aBNz^OdQw>;*-0pwfyMoM2&y5mSYn4N^oA)gN#c*I*C zo^wd$hCG3xC+sM&^a-MiBzOil-%!KcAroe=Lb7WZ<$}1|Cg956P#a!(apTi zMO?QQ{xYGUBdR9cyd)2uE#`En#1lJ!t1U-~C27pGr`8fOkllLCbdR^7I=v-^>{nyjgtY*ngF1TC96vxP+ z*IXwNky}?_;o~QlL_X^IUq3(uI%uA z(cN9hETQU%;H3b3RC$SQ*D+lZ2VaW-NV!OG8e+m}yS6YCS*}YMin!+Ni6AJQe@&D? zI|Vs93O!D7dQi=IG2*7FkCs2RPhPkg$h*ht34T(NoW1|C<+t4RjfZ}D;ppfTNE$}9 zB}|gTmS@evmD`^SK3jw&dJSggbid?jp}9OfjxaV_t-4JN_=_?)ZSY zzQhc@Xt4Mm6cI@`m`+7O;YRvCE&$vmNl68pptivb>po~D7*0+^_5^P%TAv>J-2?S`#jz_{Lq+h_P6+gqk zmKKaf#X#7xYLZOPTB9EMLjo02&J52`dgSZIt`AaM3sga;-m9x6L`BiHn4;PP`rh3B zDCefvpu4-Nft!*+5obb5sUc01drkQ|ofv+hTZ*WB5D!sYm8@pcp z=y!Ji^l+(K?IAPXTPkq4WDFZmX~Bzr@^VPpBQPmyBr?Fub$)EumCArcLTEt|0BQ#u zIl3U+4V50Vh4*Rxlo&l8f6#s7J@ez^zqn%6s#{W*VOq`#@3hN_`j)pw2HWY zo_8jiLj)+fMFuKD6}qq(D-cezI0Sy5h*^iOs{pKMJ{{RwyhF%D8WFK9O#%-cI0Pe~ zBEcsy6}&L-%uOHIxi;xQJ8iYIhIOV*%T)v*>pTa5xCc7GffjsP6O&LSSW(jpdA{zrbu?d5^;%x8XtkE7G~ZV+ zQh`0G8L$92lY9uJCw{&%<0apwVH<)u5DKm+H-E3jfsgi z{ijyrWYXG>HMU7)h@|OY?j(R0{^u*8Y7Y1|5#D4WuL>9uZYB5_Vf#43j5QgLFArh= z;U&>L5dA=JhIU*HpE?l@YyJDWzpyhetGBLRyXwZKX%>mcJ|hI|)bs0o6r&6grQT%~ zq2OJTj2yqlMM!`Xf%&|9&~B+LEy>&KnrGCJC2Xr8`Y4}I#1)wzNqMnw{7nW6MG21` zUx3mZm~6Mt>h*e4&FPIc&74gVn|kkB{F%IqVpPioU2v)2-0yPRzB+|5 zKQC{LJ=UDC-&aHb2_LHWN9{M0IlT z07byXdGLElX-bg7V6ckRhn8h|y)JHi=ryoS=hH>zJ68e%gN-UHkro{tOD%O&aZGVk zA)?aW12VkW3LGMox@=bPM-qVrv*%~4;2*bUsmKbW>M@d0btc4hVkjRay|jX%BpRkR z(+mO`{l)TQS_z6N6lvZOmATG>IFazA*QSQWcnDE_DK@Vh%4_D}?GjwEZ412eO)rMD zTapvNB`_)rmU*)&cvNYZmTb4Xgjf8oi#| z6MI{p7O^%qYU*`{nDE3tA(xdxr_UF>28b zCW48&X~g`WoIa(a(v&0RI$4B5_@O=stL1K4I zL)j@YT}o12dV32{HsQWIA0`D)Eb!y#EmLAm&wu%*9Xr17xU45_eD1Y#uU%Zuj(@0M z7C*CU?b<(?otWNd!Qeb9Pr70?!UBUGa_j)TgyXkGT3|g2+Aj?%`833nX;8Nn;o#wbj~FK)TxznLh`5K zH|6JAuEZQXhR}445*5%mB+dP$k3OL5wcSL~{NMsqxI>IlEuu zwvuAttT!6)h`R1LtF=J`9k{F_Vx?g=jy{JPxute*Ii!zkf>8+tBtwBK)bYvTV9u|R z0rd;Sib1SF>UEq5PU0?$byZTNPukG5Eoc}VY9VCCP-XK%3zm>xh&%y!rD*ho6R!!5 zMnE}q1PH$Y*EEsRkdVd?A>ahg3}M~LP54i5dNE9&J`Lk+NHg;atj~vg82JaPLCE#~ zFtdnu_oYJv*t2H|s+`rAU6K35*aN+vM?Uf2I}`R}D^{(3eLfst zxxCb0SCx6g@hCW|c^A0Tg^4Ng;Sh_9LQH-Lb%huXH)ZA-fhaP*Seig$$upz%001BW zNklz(Lv_Z>YBXRKR?(+AH2n|6w_Y#3*72pzI|xCA9T zk3!C&%%*v#q$B9Cm?kSVYD#!&jT!Pgh;n0Crv}8~GS_1xFr}(FqSzz9s}%_blS0Lw zQwWQ|lHRwdIzwNJMt@Nh&@e6V0}qGp-wXZuKK;Bs)rOh1D`9%wGz|R+(q%;L zc0&3QJZC4uQ@=f!2Ef)AoCT*n=R9zY0+yji)e=_g;YJ;dM)>-ah9v1LyC{x!NM3Ua zZvXaO;9Vx&lO;|&_Rwj6xt)$5{ec_39v@sqN}o5r_3(AyswV7t6Dwz4-7R6;Qm=pd zXgHo4m3ii{&d9r+L4nH}FeP$uIx31cHl7?C)m;>D!6WQEf`+p!Uk%ZhLl+x&uSF0L zOMN|K;aG2oVwW3BjHeQl__1rb(q%ps@{Ek3=59W%my3jy)Ph(aq@HTj@?uejA>-eLPj_Rf^CP}clwgw-@=*yL(}9O>-UYXO z>2_E=I;IGO6}iv|3pnGv4RG;GwnDak0<hlb}bYKv{@PYT8}8=p|JNikBLds0$Jl zly0N&-9tXB*BLqpMW;_R>(OXhNeAX1S%7c+{TE^P!^gn8l(`|e#b*Vaxn&Jp`qHg1 zwY~$cLgQ!se(fdDy@Ss|DkS(>yq}11X?U&ai*)~-vs3L0X69xuu?DsbhJ#JTxL7wHji-y; zwTySEcNR^-c)XKwFoWTKb94`}3`fgD`bL%Rt4%06M~xLz1OyA{GuK<$QOM%MC?aXX zV@u1X>tJr|T%#OSjiRj3=rP_!6$shbIF(SQ87<3-MJm(@;el(4_1fZs!RW+D9X2xR zR2`5HBm#*~3Bnen@li+fwKNyT(QF{qgJAIM-`7qOuZ2PBlsnf+{h)sGsN6|-|c(hTQ}YhZ9B!gsSd`# zaz!HD5x5(TGx*|1zY0IL>gCW{*MvlNUd0G%Ntucm#;8T}aTTA^s7K|urOAdIdW}32 zKnnd{t$1Le0Y@KNfY1Ed*Pvx)=_Vt1N57FI(CW15^NZ0K+_(W>`pd7wYu^4cuv6rL zYoM?6!PB#|H3eWcTJ4w6cpC6 ztQnR==TaRLP@Ly|xKM{Yq#5%;jl3UpZJj7j~=4b zNX2V1%S>dRq=<+INho0+A8O%zpc7dtD_Ab8YUoTdDov|&u31rJ7L+JLxJ{R%YOI9V zM{)~?rCirnAc)*SD67{xxP8%|PL1mUt0FgY|V$1&#wso&^ON#Pfnb{OuH_aY#w?@=}*V>gV9gU;GLf zGZC~It?@oz(PAypX=j{08J2av2VU>YI=E`S^DnSvRFu~dp;Ywph~gK~Yf(5ycGN}gGGf-(b6gZj6ab>iG4Ru?N}1E(ZTq5zLx0EHO{AB-s#_WWZ6 zklHRhdhcU!?*m6^mp3Vu>U;v#AnmsPdSU_gJ{}u;dKtZQ=8{|gB%M5YwwaBpsRXL^ zBU@e!-d@p4)2-vtc*C$PTO?{?Vxy;yGs63Ach70+aw&u8!ZEx9`}h8qhj9Hzw{V%a31{=M~(0+x=i%7C<|?PtuG+ zyBSU(7Qqn4RT8Mi00-{h52s#!I(8&7QHF>s+EAs;1c(!7^h{~0Y@Jaduc?Lqdir68 zUue#fW?I^PGr0HWyCK7hgWhA|O;kw5 zz__2lji38AINwE(hf+41R4!|^zh;v3vpcW-qvC08^xF?#H&Ik@PHC#i#K5rhW~r)* z!a&+FhyQZD-7tM_;@o*);54Z0hGLY@j$P42wxMBpI#yy*8mkIYgp!sTfYf~@pVx^n zvU$>jmaIiNw2;Z z?E-i6yK;U3yh16h0yuWK2hKI+b*yhshBwN=4ad+hIAh*Hp6Af(_rYVT0tt-!L$Jv# zF*vn`Q177A=fJ@U2l9w%XcWa*X~j5=bd<(>%+CskV2(*kU#QR|v&0Tq8Iz=+fayJI z!x4qp-XvIja?_N#w{ekU>6e2n&(}Qw&m}pmjueEhLIs8j>HoV;-uXo z7+@>`MxAnu2zZc#5`LH)VvdzQ$ukV9$nH#qAPtq-M6njTo*5iOG+y^OEahP6Cv)v9 z?)eWGoKkRU0W(EayQyNfsHuQf`E*=T+?KRl$)UfL$P(==j6dfUD?1zg&q6UCfiJi< z5$nTbe0a;{mLbKn(x1_%>sTm*kTQ*c7+cu3)u4olI_3v(Osys_kmlW-Ge2qx6FoIsXL z!Nd3LhnsJG7!1rXIE)yI&x@?p{IpBlS9a~#@qN4Me&9x*kIIJtU}I5*tKFjflkYdhZSODa|Fzsk-`XsjTE))Rm5 zF>B4(SGHSuQ<9Ab1{#tvd2L5ToX)MMjFn zHlp!`yk9&oU$jUv5un9db4t-uJ zO;Gw~!BiQzaR)y8w>QD^B7Tk6gx5Ln8I<$hHa_ADw-c_v{$Cz``E)UQMCYr~{1@}g z{$FdRXLn}?!)3H#DZQy6p{#SNziXXYk@>)tj+IkQiNm%oXm{j;ONovKIz|9ShEfU9 zL<$Fl?o*C9u;33EagIhiT9^+h82-LsFd~wt0wZYfs@*`nBw^V?5Y((sd&P?^r#z z>b5p=P({s>`{L_b?@WYI!3@=oljJ+jZI^gUQ-BzDNp=1|C zC!|EDntW{3$|4hfHfe1nJYtF3N|{E=K7qXewX>?QhRSVO2b;ETp>8kdQF<8*$e8rX zqQrAlO|r5CUlmXkeYo)Qv%yXn)MOJi@R~4%*3qeJQTPcOvB^%(VjiMx7xejR&n=|) zvimAYrS{|8jbO#O>tJFPwxPyhC#0?`a|lSy232iJR6eetD28z6`5PhWB+}v>JLqKA zsH_?JBoRo_PiCPCm2=|=ktDh_`Vg5gPF`dKlg63g9R(=mn1SyO=8G5+fJvbZbMT!n z-wivzxfhbM4X!Xym8kAeR!NrKW>UDWob(UJ{PY=O^myEK<(1{7>v!F-?1n!*v2x}E z(^>17t)vGJ<*rE5m_-B71LD7_{g7H$PgILl5eS|Z%Jao2l%gHPdE>lKJ-DWWqUB-S zaxiRx9XFgWQ}292uhDuv^GVXuyVCgkUFk;^}G$&yr5U>Uhb046k;)zn%vpQV;e+FMk1t!k&~ zI7_pm#=!oftoD~>xxdKEBNo-Vz3G~wT5FBn+=TQLWBj^-D_hiu<(<#K4#wcWVV%p3 zG3{!3jGhO4j+{J;t&9eD5}aR0SV59Tg%_G`5yvIRjy3^+L{m}2NSy&6Xt#vqGk{rB zw~7FUydUL}HPTBceBtL1_eb_nCHs)vmY~lxC(T1%4B(W@&w}Bx9(?DZP~z8x zO<-wO!bzue;fgnGgCZ*+X`ozq0SQ$K6kLc7CkSuqb%yuDs6)nbg`NW;7uLf05HpC% z4uk6&QFus^G-OIR`I3|2MT6(U7yoW2_`C%M2fZo4PZbReuLsas;oxOI_YyGE=onD= zTw{j%xl08i=0_p2!Uu=IA&a)l|4-=WsLOsSHdvz&OZ}bSwFcDUW>u76U>Y9Xbr5d) z)HlHv*cikef!-Gg-0ksM@&W7N^Y{J!we$a8yL(!Yb8b5KwODZd#I`*jzA0;Gm#m&# z`eh~Ap)@VqGHE+Wr4!QMPuw3>}2+f4U@H{TgM_syb$?^LEd zP#CkESeH)~Z8vTnH%XFaFlx6;<0f(oYb}^7JErma!WE|%6(*L+-PW1g6H^VLbX^QH zTv^$aM$s_{k>XhtlGA56HV(xmaQ6sB=wOIEr#;G4aVmihg3Cfocb9xpOHZ2q>F`J) zd*~7P2a&fXi&Q`%mZgn=7AexkmQ9+xn;ICIF+A(XE`^zmYv9f=-VVne!<|zky8s~T z7`W_5&xg~Ve;VLO9*4plalB*2Np);+I_v=`_Okl)DJ? zklsDwL2?iuLI6E&?`FJ#F%D9>MbnXnAu30TIx{wAu#A~Tju>gFo})}T(g7UE#V-Nc z$s{~>-(&FAkADMNfHYgalg3x5*LpZCbr5!Tr?zGYl|HO%g6H;vijjE(%iV+-RD^haAogaJR<=)eE&@c)vZStjy zCVhgXLXL`X#iSHHSZJFT?BDqa-2VAHpn=Pax*ur>0;+f&wT;GKRKD?v=>`ArzZI>2 z`Wn3+*7}>-ARh+j9@&1+M?c+bj$6aD=-8}{Jj8Zl8%bWd(wJgAuH3M4Fq#>fQFUzN z_$yalSw7y+yJyFaa@(dO3yZDxExn|F%z{6?D&f&`sfV`Ot&Hiw;%L1a@JMTAN^%aaW1z9Q1*=ZkK-_O`AM-G> zgIb3fPgUWe3-k_L0;?)$+X+}axB#PtKFqA1gXUZlP#KOl%P96qrb4~wD)hl58vHsn zO@N_?gL@7@tJ8tin^r?n_6dFDhLpM%AKpUDlSkki0JEn~!rbXI5=kLMhNReKzLn(g z5{@sVl&Y~6i>KC0!EqiQ8Z}XG_48zBr|_N}EDNecs*%)9sM(0ir>xh{&kO0fSQ?)2 zZFuxsyWp;`+yl+BD^U=ktS$vJpER<+0%!iFHFfOXo&WFkkBe&i%rg3az6uDq<2cV=@_orU@%3bI(ghOGSZ(Z4 zE)Ts;q_rwtG!UNXtyKI<6HcU;vPZ%8Vj6rA@>X>d>a6hXdAv0mNfVl|=Nk{fjUW3O z)tb`|z-!;}6VM=pok7mnORvo~O2Q$u5HLy0dlh{8{Wrk!k&?=S7d`J(xa>7sA@_qI zut@E`~-^ z{I*=FK~)@{t;pYFscHk6wU8DSw8{+b`^s(b$j&{`@Ew*UBPo36lf=wJX8+n5_^Z@( z@4RQn2Ol@xgt9t6UmiSX>FClK6{H<+ z8rrHyJ1xmuAqlsvz;q3q_UtWi^0Uu?Y_dTul-Trv!5mH`!6A;+Q$@4+RQgNj(P8(R zEDSZuKx>ns3N`iEu+VFqbS3f7&P9Fm5|-kj2)l-}G7F6XGsc($2q*v|?|hnrE9p;p z^7Nem9xBj=Je~)>c`vjooB*7FA3Av8Tlc~FFFT)|kI5Oam##dWtiybC-hng7VBf9- zFg#)*tGZNH+;zvJaQ+J~g0w3JNZwE-s}rcTC zl7_euh6p*-U?h47G;a*~7d%-G(;GDO9Pt9tcT@rtejZ*0g1ec?q@gCIh^c|^X$`cz zh1S5rt)ICW7WXVe)8QBe7V&ggNlM%i+sHl!iM@V2%tNuZHg$TD2KB(%)E_-d4DTnZfOq|_P#hx*QK z3R%{Gycp2{4z#TY?%WG!Kkpn!XB;G%MX}MaDy%3wRMe;(7;iFrjaJlMhyW< zv82ylv;diHfP6v}y%4sffriguw0{A<_7C5NYTiLw zHW?1VetK8AB=JYnPV?hnlfP}1&D$Qi_Pzfq`K!l!{7@VHC0Ada&L_+5Mx!y|$Kz>d z%=*mQ%SOw+SM`_r=XjT90Bt~$zt%Q!G11mZ*|&Evs&Z)0G~kS_XTrv_uGB&a_b3hVUIzk>#y?Ar() zK?cZ_?f1tp7!)*HKy}|Wd_|+f6T}{ZR?|XfvIWf+hT|nuaB&Z&F1`~A*KvNE?52cj zrvN9Py%`>P;0~Isim3JSu>$V@`n_<`D=&sYu`H~hD2TznkHbIq73(qLPv5D~F5> z9$=!K!F0EQ4aATTVM(5gjOJpI(^#IPX}ik33DaV5g}eiGKm&m=qpfxkT66-CBFm{7W7)xfw-EfszGRw z87wW0V5yf=J<*vaROATa!X$@+Z-m1)0iZuFVN{Nw(FT~DY(O(*qX?S$ngc5UreQ68 z7sKZYPCoxMNIrKvkSHw4Yg+jB*B^wrwX0y=1?yl`Eir;mIlfdVDhsG~S1tqG{P#N{ z^E?TrAQU@?v$tLVmB|?}mBwA|t&du~+K|ORFTI81{TvoXIaJg(flEEM#|99O46gyX z_Y?&TmI@e-3s^DTgeJY5<&UYMM+nf`vP{=ajiBt5l{}z;j`Qo=lKRN*2m-0nX&GVj7J_hBBhKivVH~JmjAt@Q0x+{xq9u!*jM> z0AKz5J#<|dZJ4qJpZ%M!!jCLn0vpcX0NEt&wmfeguOV?63=WUsTYvX8SUAFc>Ucir zd}h});p7WWg~|`Z=qol`mI`O#675+KKEJiFFvwwkfM8@NcJzk|q6uUlC3wk&kP$Co z8}8Bo*35RmV!lrkMsWfYGbG8m3ypw>wbZ)u#Bq}^m6C0>(1%0!ABCo$23rZXf|9S+ zRY~IaXRYSPl4f>eTDV*9ea{DuJ`uI}f9d#PG{D!Y1b89020v@y$2ocNLU*#j!MdTHBkyK#7n~ob)MDoR!##Wt37Da z$)E_)Z%06iOTSn;QeH=-o>FI>?D(1|t3%OYa2&o0*XV>90vuwqcw}rFMKzrf4B&Y` z{v)vX-cQ1jgB7^3L@!kX%Hs}hx$yxGl7&Zrsfd9N6ch>-G|Um5$4g#uDa>u0hO)v^ z9eWiO%ty+<{KyAIj?>mOm3KgUOD6$>tQAxzZnmx)I2*Hjw+wxp~D(NR~$JE?)%o=McYrg z?VHhdHF6Qv3F$OtuR;i7Ni8P*gff~qibf-aQ7(!+VWBgpAiP@1AR;V*7e@W?*n--$ z1a4U>feE!ʆ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.12.0"] dev = [ "coverage>=7.6.12", "line-profiler>=5.0.0", + "mkdocs>=1.6.1", + "mkdocs-autolinks-plugin>=0.7.1", + "mkdocs-material>=9.7.1", + "mkdocstrings-python>=2.0.1", "pytest>=9.0.2", "pytest-xdist>=3.8.0", ] @@ -71,4 +75,4 @@ pocket-tts = "pocket_tts.main:cli_app" python-preference = "only-managed" [tool.ruff.lint.flake8-tidy-imports] -ban-relative-imports = "all" \ No newline at end of file +ban-relative-imports = "all" diff --git a/uv.lock b/uv.lock index 2727ddf..9655b73 100644 --- a/uv.lock +++ b/uv.lock @@ -42,6 +42,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, ] +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, +] + +[[package]] +name = "backrefs" +version = "6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/e3/bb3a439d5cb255c4774724810ad8073830fac9c9dee123555820c1bcc806/backrefs-6.1.tar.gz", hash = "sha256:3bba1749aafe1db9b915f00e0dd166cba613b6f788ffd63060ac3485dc9be231", size = 7011962, upload-time = "2025-11-15T14:52:08.323Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ee/c216d52f58ea75b5e1841022bbae24438b19834a29b163cb32aa3a2a7c6e/backrefs-6.1-py310-none-any.whl", hash = "sha256:2a2ccb96302337ce61ee4717ceacfbf26ba4efb1d55af86564b8bbaeda39cac1", size = 381059, upload-time = "2025-11-15T14:51:59.758Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9a/8da246d988ded941da96c7ed945d63e94a445637eaad985a0ed88787cb89/backrefs-6.1-py311-none-any.whl", hash = "sha256:e82bba3875ee4430f4de4b6db19429a27275d95a5f3773c57e9e18abc23fd2b7", size = 392854, upload-time = "2025-11-15T14:52:01.194Z" }, + { url = "https://files.pythonhosted.org/packages/37/c9/fd117a6f9300c62bbc33bc337fd2b3c6bfe28b6e9701de336b52d7a797ad/backrefs-6.1-py312-none-any.whl", hash = "sha256:c64698c8d2269343d88947c0735cb4b78745bd3ba590e10313fbf3f78c34da5a", size = 398770, upload-time = "2025-11-15T14:52:02.584Z" }, + { url = "https://files.pythonhosted.org/packages/eb/95/7118e935b0b0bd3f94dfec2d852fd4e4f4f9757bdb49850519acd245cd3a/backrefs-6.1-py313-none-any.whl", hash = "sha256:4c9d3dc1e2e558965202c012304f33d4e0e477e1c103663fd2c3cc9bb18b0d05", size = 400726, upload-time = "2025-11-15T14:52:04.093Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/6296bad135bfafd3254ae3648cd152980a424bd6fed64a101af00cc7ba31/backrefs-6.1-py314-none-any.whl", hash = "sha256:13eafbc9ccd5222e9c1f0bec563e6d2a6d21514962f11e7fc79872fd56cbc853", size = 412584, upload-time = "2025-11-15T14:52:05.233Z" }, + { url = "https://files.pythonhosted.org/packages/02/e3/a4fa1946722c4c7b063cc25043a12d9ce9b4323777f89643be74cef2993c/backrefs-6.1-py39-none-any.whl", hash = "sha256:a9e99b8a4867852cad177a6430e31b0f6e495d65f8c6c134b68c14c3c95bf4b0", size = 381058, upload-time = "2025-11-15T14:52:06.698Z" }, +] + [[package]] name = "beartype" version = "0.22.9" @@ -414,6 +437,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/c9/97cc5aae1648dcb851958a3ddf73ccd7dbe5650d95203ecb4d7720b4cdbf/fsspec-2026.1.0-py3-none-any.whl", hash = "sha256:cb76aa913c2285a3b49bdd5fc55b1d7c708d7208126b60f2eb8194fe1b4cbdcc", size = 201838, upload-time = "2026-01-09T15:21:34.041Z" }, ] +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + +[[package]] +name = "griffe" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/0c/3a471b6e31951dce2360477420d0a8d1e00dea6cf33b70f3e8c3ab6e28e1/griffe-1.15.0.tar.gz", hash = "sha256:7726e3afd6f298fbc3696e67958803e7ac843c1cfe59734b6251a40cdbfb5eea", size = 424112, upload-time = "2025-11-10T15:03:15.52Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/83/3b1d03d36f224edded98e9affd0467630fc09d766c0e56fb1498cbb04a9b/griffe-1.15.0-py3-none-any.whl", hash = "sha256:6f6762661949411031f5fcda9593f586e6ce8340f0ba88921a0f2ef7a81eb9a3", size = 150705, upload-time = "2025-11-10T15:03:13.549Z" }, +] + [[package]] name = "h11" version = "0.16.0" @@ -573,6 +620,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ce/9d/e34cc99c8abca3a27911d3542a87361e9c292fa1258d182e4a0a5c442850/line_profiler-5.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:213b19c4b65942db5d477e603c18c76126e3811a39d8bab251d930d8ce82ffba", size = 461377, upload-time = "2025-07-23T20:15:13.871Z" }, ] +[[package]] +name = "markdown" +version = "3.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/b1/af95bcae8549f1f3fd70faacb29075826a0d689a27f232e8cee315efa053/markdown-3.10.1.tar.gz", hash = "sha256:1c19c10bd5c14ac948c53d0d762a04e2fa35a6d58a6b7b1e6bfcbe6fefc0001a", size = 365402, upload-time = "2026-01-21T18:09:28.206Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/1b/6ef961f543593969d25b2afe57a3564200280528caa9bd1082eecdd7b3bc/markdown-3.10.1-py3-none-any.whl", hash = "sha256:867d788939fe33e4b736426f5b9f651ad0c0ae0ecf89df0ca5d1176c70812fe3", size = 107684, upload-time = "2026-01-21T18:09:27.203Z" }, +] + [[package]] name = "markdown-it-py" version = "4.0.0" @@ -679,6 +735,142 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mergedeep" }, + { name = "mkdocs-get-deps" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-autolinks-plugin" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/b7/efc75b7870a4fecbc9a05ba94ce622462a40b5a13670d00036c5b47bf82f/mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151", size = 4375, upload-time = "2023-08-04T14:42:25.67Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/9c/ee3d81a799b8b0b73a89625bcbf3c58cd369c8a26a1b415413edea9bf259/mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12", size = 4235, upload-time = "2023-08-04T14:42:23.955Z" }, +] + +[[package]] +name = "mkdocs-autorefs" +version = "1.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425, upload-time = "2025-08-26T14:23:17.223Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034, upload-time = "2025-08-26T14:23:15.906Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mergedeep" }, + { name = "platformdirs" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" }, +] + +[[package]] +name = "mkdocs-material" +version = "9.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "backrefs" }, + { name = "colorama" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "mkdocs" }, + { name = "mkdocs-material-extensions" }, + { name = "paginate" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/27/e2/2ffc356cd72f1473d07c7719d82a8f2cbd261666828614ecb95b12169f41/mkdocs_material-9.7.1.tar.gz", hash = "sha256:89601b8f2c3e6c6ee0a918cc3566cb201d40bf37c3cd3c2067e26fadb8cce2b8", size = 4094392, upload-time = "2025-12-18T09:49:00.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/32/ed071cb721aca8c227718cffcf7bd539620e9799bbf2619e90c757bfd030/mkdocs_material-9.7.1-py3-none-any.whl", hash = "sha256:3f6100937d7d731f87f1e3e3b021c97f7239666b9ba1151ab476cabb96c60d5c", size = 9297166, upload-time = "2025-12-18T09:48:56.664Z" }, +] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, +] + +[[package]] +name = "mkdocstrings" +version = "1.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, + { name = "mkdocs-autorefs" }, + { name = "pymdown-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/4d/1ca8a9432579184599714aaeb36591414cc3d3bfd9d494f6db540c995ae4/mkdocstrings-1.0.2.tar.gz", hash = "sha256:48edd0ccbcb9e30a3121684e165261a9d6af4d63385fc4f39a54a49ac3b32ea8", size = 101048, upload-time = "2026-01-24T15:57:25.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/32/407a9a5fdd7d8ecb4af8d830b9bcdf47ea68f916869b3f44bac31f081250/mkdocstrings-1.0.2-py3-none-any.whl", hash = "sha256:41897815a8026c3634fe5d51472c3a569f92ded0ad8c7a640550873eea3b6817", size = 35443, upload-time = "2026-01-24T15:57:23.933Z" }, +] + +[[package]] +name = "mkdocstrings-python" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffe" }, + { name = "mkdocs-autorefs" }, + { name = "mkdocstrings" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/75/d30af27a2906f00eb90143470272376d728521997800f5dce5b340ba35bc/mkdocstrings_python-2.0.1.tar.gz", hash = "sha256:843a562221e6a471fefdd4b45cc6c22d2607ccbad632879234fa9692e9cf7732", size = 199345, upload-time = "2025-12-03T14:26:11.755Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/06/c5f8deba7d2cbdfa7967a716ae801aa9ca5f734b8f54fd473ef77a088dbe/mkdocstrings_python-2.0.1-py3-none-any.whl", hash = "sha256:66ecff45c5f8b71bf174e11d49afc845c2dfc7fc0ab17a86b6b337e0f24d8d90", size = 105055, upload-time = "2025-12-03T14:26:10.184Z" }, +] + [[package]] name = "mpmath" version = "1.3.0" @@ -876,6 +1068,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] +[[package]] +name = "paginate" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, +] + +[[package]] +name = "pathspec" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -919,6 +1138,10 @@ audio = [ dev = [ { name = "coverage" }, { name = "line-profiler" }, + { name = "mkdocs" }, + { name = "mkdocs-autolinks-plugin" }, + { name = "mkdocs-material" }, + { name = "mkdocstrings-python" }, { name = "pytest" }, { name = "pytest-xdist" }, ] @@ -948,6 +1171,10 @@ provides-extras = ["audio"] dev = [ { name = "coverage", specifier = ">=7.6.12" }, { name = "line-profiler", specifier = ">=5.0.0" }, + { name = "mkdocs", specifier = ">=1.6.1" }, + { name = "mkdocs-autolinks-plugin", specifier = ">=0.7.1" }, + { name = "mkdocs-material", specifier = ">=9.7.1" }, + { name = "mkdocstrings-python", specifier = ">=2.0.1" }, { name = "pytest", specifier = ">=9.0.2" }, { name = "pytest-xdist", specifier = ">=3.8.0" }, ] @@ -1103,6 +1330,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] +[[package]] +name = "pymdown-extensions" +version = "10.20.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/6c/9e370934bfa30e889d12e61d0dae009991294f40055c238980066a7fbd83/pymdown_extensions-10.20.1.tar.gz", hash = "sha256:e7e39c865727338d434b55f1dd8da51febcffcaebd6e1a0b9c836243f660740a", size = 852860, upload-time = "2026-01-24T05:56:56.758Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/6d/b6ee155462a0156b94312bdd82d2b92ea56e909740045a87ccb98bf52405/pymdown_extensions-10.20.1-py3-none-any.whl", hash = "sha256:24af7feacbca56504b313b7b418c4f5e1317bb5fea60f03d57be7fcc40912aa0", size = 268768, upload-time = "2026-01-24T05:56:54.537Z" }, +] + [[package]] name = "pytest" version = "9.0.2" @@ -1134,6 +1374,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, ] +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + [[package]] name = "python-multipart" version = "0.0.21" @@ -1207,6 +1459,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, +] + [[package]] name = "requests" version = "2.32.5" @@ -1480,6 +1744,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, ] +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + [[package]] name = "soundfile" version = "0.13.1" @@ -1599,13 +1872,13 @@ dependencies = [ { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, ] wheels = [ - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp310-none-macosx_11_0_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp311-none-macosx_11_0_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp312-none-macosx_11_0_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp313-cp313t-macosx_11_0_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp313-none-macosx_11_0_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp314-cp314-macosx_11_0_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp314-cp314t-macosx_11_0_arm64.whl" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:bf1e68cfb935ae2046374ff02a7aa73dda70351b46342846f557055b3a540bf0" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:a52952a8c90a422c14627ea99b9826b7557203b46b4d0772d3ca5c7699692425" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:287242dd1f830846098b5eca847f817aa5c6015ea57ab4c1287809efea7b77eb" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8924d10d36eac8fe0652a060a03fc2ae52980841850b9a1a2ddb0f27a4f181cd" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:bcee64ae7aa65876ceeae6dcaebe75109485b213528c74939602208a20706e3f" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:defadbeb055cfcf5def58f70937145aecbd7a4bc295238ded1d0e85ae2cf0e1d" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:886f84b181f766f53265ba0a1d503011e60f53fff9d569563ef94f24160e1072" }, ] [[package]] @@ -1628,30 +1901,30 @@ dependencies = [ { name = "typing-extensions", marker = "sys_platform != 'darwin'" }, ] wheels = [ - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp310-cp310-manylinux_2_28_aarch64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp310-cp310-manylinux_2_28_x86_64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp310-cp310-win_amd64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-manylinux_2_28_aarch64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-manylinux_2_28_x86_64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-win_amd64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-win_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-win_amd64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-win_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-manylinux_2_28_aarch64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-manylinux_2_28_x86_64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-win_amd64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-win_arm64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313t-manylinux_2_28_aarch64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313t-manylinux_2_28_x86_64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313t-win_amd64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314-manylinux_2_28_aarch64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314-win_amd64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314t-manylinux_2_28_aarch64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314t-manylinux_2_28_x86_64.whl" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314t-win_amd64.whl" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:10866c8a48c4aa5ae3f48538dc8a055b99c57d9c6af2bf5dd715374d9d6ddca3" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7210713b66943fdbfcc237b2e782871b649123ac5d29f548ce8c85be4223ab38" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp310-cp310-win_amd64.whl", hash = "sha256:d6e8441453dc27524e3f1037fbf27b90a02644b84e42944b9354b4024cb51cc1" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0e611cfb16724e62252b67d31073bc5c490cb83e92ecdc1192762535e0e44487" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:3de2adb9b4443dc9210ef1f1b16da3647ace53553166d6360bbbd7edd6f16e4d" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-win_amd64.whl", hash = "sha256:69b3785d28be5a9c56ab525788ec5000349ec59132a74b7d5e954b905015b992" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp311-cp311-win_arm64.whl", hash = "sha256:15b4ae6fe371d96bffb8e1e9af62164797db20a0dc1337345781659cfd0b8bb1" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3bf9b442a51a2948e41216a76d7ab00f0694cfcaaa51b6f9bcab57b7f89843e6" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7417d8c565f219d3455654cb431c6d892a3eb40246055e14d645422de13b9ea1" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-win_amd64.whl", hash = "sha256:a4e06b4f441675d26b462123c8a83e77c55f1ec8ebc081203be2db1ea8054add" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp312-cp312-win_arm64.whl", hash = "sha256:1abe31f14b560c1f062699e966cb08ef5b67518a1cfac2d8547a3dbcd8387b06" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:3e532e553b37ee859205a9b2d1c7977fd6922f53bbb1b9bfdd5bdc00d1a60ed4" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:39b3dff6d8fba240ae0d1bede4ca11c2531ae3b47329206512d99e17907ff74b" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-win_amd64.whl", hash = "sha256:404a7ab2fffaf2ca069e662f331eb46313692b2f1630df2720094284f390ccef" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313-win_arm64.whl", hash = "sha256:161decbff26a33f13cb5ba6d2c8f458bbf56193bcc32ecc70be6dd4c7a3ee79d" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:01b1884f724977a20c7da2f640f1c7b37f4a2c117a7f4a6c1c0424d14cb86322" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:031a597147fa81b1e6d79ccf1ad3ccc7fafa27941d6cf26ff5caaa384fb20e92" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp313-cp313t-win_amd64.whl", hash = "sha256:e586ab1363e3f86aa4cc133b7fdcf98deb1d2c13d43a7a6e5a6a18e9c5364893" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:65010ab4aacce6c9a1ddfc935f986c003ca8638ded04348fd326c3e74346237c" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:88adf5157db5da1d54b1c9fe4a6c1d20ceef00e75d854e206a87dbf69e3037dc" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314-win_amd64.whl", hash = "sha256:f60e2565f261542efac07e25208fb3fc55c6fe82314a5a9cbee971edb5f27713" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:3ac2b8df2c55430e836dcda31940d47f1f5f94b8731057b6f20300ebea394dd9" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:5b688445f928f13563b7418b17c57e97bf955ab559cf73cd8f2b961f8572dbb3" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.9.1%2Bcpu-cp314-cp314t-win_amd64.whl", hash = "sha256:cf9c3e50b595721ca6b488bdcc326e0f1af73ed28b9b66eff504a96649bb5c96" }, ] [[package]] @@ -1737,3 +2010,35 @@ sdist = { url = "https://files.pythonhosted.org/packages/c3/d1/8f3c683c9561a4e66 wheels = [ { url = "https://files.pythonhosted.org/packages/3d/d8/2083a1daa7439a66f3a48589a57d576aa117726762618f6bb09fe3798796/uvicorn-0.40.0-py3-none-any.whl", hash = "sha256:c6c8f55bc8bf13eb6fa9ff87ad62308bbbc33d0b67f84293151efe87e0d5f2ee", size = 68502, upload-time = "2025-12-21T14:16:21.041Z" }, ] + +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" }, + { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" }, + { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" }, + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +]