From 151f806d336d97397b35b1adaae978049a68b15f Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Fri, 31 Jan 2025 15:48:19 -0500 Subject: [PATCH 01/20] Fixed the list type error in paths --- formulallm/formula/formula_program.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/formulallm/formula/formula_program.py b/formulallm/formula/formula_program.py index 2dd034f..67d465c 100644 --- a/formulallm/formula/formula_program.py +++ b/formulallm/formula/formula_program.py @@ -4,9 +4,9 @@ import clr from typing import Optional -process_path = glob.glob(os.path.expanduser('~') + r'/.dotnet/tools/.store/vuisis.formula*/**/VUISIS.Formula*.dll', recursive=True) +process_paths = glob.glob(os.path.expanduser('~') + r'/.dotnet/tools/.store/vuisis.formula*/**/VUISIS.Formula*.dll', recursive=True) -clr.AddReference(process_path) +clr.AddReference(process_paths[0]) from Microsoft.Formula.CommandLine import CommandInterface, CommandLineProgram from System.IO import StringWriter From e829de0973b1b994256f6193aed75ee15fcef942 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Fri, 31 Jan 2025 17:22:25 -0500 Subject: [PATCH 02/20] Update dependencies and python version --- poetry.lock | 591 ++++++++++++++++++++++++++++++++++++++----------- pyproject.toml | 9 +- 2 files changed, 466 insertions(+), 134 deletions(-) diff --git a/poetry.lock b/poetry.lock index e9111f1..824b0fd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -6,6 +6,7 @@ version = "3.9.3" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54"}, {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc"}, @@ -102,6 +103,7 @@ version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, @@ -116,6 +118,7 @@ version = "0.6.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, @@ -127,6 +130,7 @@ version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, @@ -149,6 +153,8 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -160,6 +166,7 @@ version = "23.1.0" description = "Argon2 for Python" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, @@ -180,6 +187,7 @@ version = "21.2.0" description = "Low-level CFFI bindings for Argon2" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, @@ -217,6 +225,7 @@ version = "1.3.0" description = "Better dates & times for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, @@ -236,6 +245,7 @@ version = "3.7.2" description = "ASGI specs, helper code, and adapters" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, @@ -253,6 +263,7 @@ version = "2.4.1" description = "Annotate AST trees with source code positions" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, @@ -271,6 +282,7 @@ version = "2.0.4" description = "Simple LRU cache for asyncio" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, @@ -285,6 +297,8 @@ version = "4.0.3" description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version < \"3.11\"" files = [ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, @@ -296,6 +310,7 @@ version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, @@ -315,6 +330,7 @@ version = "2.14.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, @@ -329,6 +345,7 @@ version = "2.2.1" description = "Function decoration for backoff and retry" optional = false python-versions = ">=3.7,<4.0" +groups = ["main"] files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, @@ -340,6 +357,7 @@ version = "4.1.2" description = "Modern password hashing for your software and your servers" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "bcrypt-4.1.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ac621c093edb28200728a9cca214d7e838529e557027ef0581685909acd28b5e"}, {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea505c97a5c465ab8c3ba75c0805a102ce526695cd6818c6de3b1a38f6f60da1"}, @@ -380,6 +398,7 @@ version = "4.12.3" description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" +groups = ["main"] files = [ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, @@ -401,6 +420,7 @@ version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, @@ -419,6 +439,7 @@ version = "1.1.1" description = "A simple, correct Python build frontend" optional = false python-versions = ">= 3.7" +groups = ["main"] files = [ {file = "build-1.1.1-py3-none-any.whl", hash = "sha256:8ed0851ee76e6e38adce47e4bee3b51c771d86c64cf578d0c2245567ee200e73"}, {file = "build-1.1.1.tar.gz", hash = "sha256:8eea65bb45b1aac2e734ba2cc8dad3a6d97d97901a395bd0ed3e7b46953d2a31"}, @@ -443,6 +464,7 @@ version = "5.3.3" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, @@ -454,6 +476,7 @@ version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, @@ -465,6 +488,7 @@ version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, @@ -529,6 +553,7 @@ version = "5.2.0" description = "Universal encoding detector for Python 3" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, @@ -540,6 +565,7 @@ version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" +groups = ["main"] files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, @@ -639,6 +665,7 @@ version = "0.7.3" description = "Chromas fork of hnswlib" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "chroma-hnswlib-0.7.3.tar.gz", hash = "sha256:b6137bedde49fffda6af93b0297fe00429fc61e5a072b1ed9377f909ed95a932"}, {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59d6a7c6f863c67aeb23e79a64001d537060b6995c3eca9a06e349ff7b0998ca"}, @@ -676,6 +703,7 @@ version = "0.4.24" description = "Chroma." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, @@ -717,6 +745,7 @@ version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -731,6 +760,7 @@ version = "0.2.6" description = "Generic pure Python loader for .NET runtimes" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "clr_loader-0.2.6-py3-none-any.whl", hash = "sha256:79bbfee4bf6ac2f4836d89af2c39e0c32dce5d0c062596185aef380f317507a6"}, {file = "clr_loader-0.2.6.tar.gz", hash = "sha256:019348ae6b6a83c7a406d14537c277cecf7a3a53b263ec342c81ded5845a67ee"}, @@ -745,6 +775,8 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main"] +markers = "platform_system == \"Windows\" or sys_platform == \"win32\" or os_name == \"nt\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -756,6 +788,7 @@ version = "15.0.1" description = "Colored terminal output for Python's logging module" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -773,6 +806,7 @@ version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, @@ -790,6 +824,7 @@ version = "0.6.4" description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = ">=3.7,<4.0" +groups = ["main"] files = [ {file = "dataclasses_json-0.6.4-py3-none-any.whl", hash = "sha256:f90578b8a3177f7552f4e1a6e535e84293cd5da421fcce0642d49c0d7bdf8df2"}, {file = "dataclasses_json-0.6.4.tar.gz", hash = "sha256:73696ebf24936560cca79a2430cbc4f3dd23ac7bf46ed17f38e5e5e7657a6377"}, @@ -805,6 +840,7 @@ version = "0.5.11" description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = ">=3.7,<4.0" +groups = ["main"] files = [ {file = "dataclasses_json_speakeasy-0.5.11-py3-none-any.whl", hash = "sha256:ac52a069a01e8521015d682f37849bfdf056c36fa3f81497055e201fec684104"}, {file = "dataclasses_json_speakeasy-0.5.11.tar.gz", hash = "sha256:418a987cea2ccf4e4be662f39faa5cc79b47b147c9d1a69d6928d6a27e0c17e8"}, @@ -820,6 +856,7 @@ version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, @@ -851,6 +888,7 @@ version = "5.1.1" description = "Decorators for Humans" optional = false python-versions = ">=3.5" +groups = ["main"] files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -862,6 +900,7 @@ version = "0.7.1" description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -873,6 +912,7 @@ version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] files = [ {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, @@ -884,12 +924,25 @@ wrapt = ">=1.10,<2" [package.extras] dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +[[package]] +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + [[package]] name = "emoji" version = "2.10.1" description = "Emoji for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] files = [ {file = "emoji-2.10.1-py2.py3-none-any.whl", hash = "sha256:11fb369ea79d20c14efa4362c732d67126df294a7959a2c98bfd7447c12a218e"}, {file = "emoji-2.10.1.tar.gz", hash = "sha256:16287283518fb7141bde00198f9ffff4e1c1cb570efb68b2f1ec50975c3a581d"}, @@ -904,6 +957,8 @@ version = "1.2.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, @@ -918,6 +973,7 @@ version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.5" +groups = ["main"] files = [ {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, @@ -932,6 +988,7 @@ version = "0.110.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "fastapi-0.110.0-py3-none-any.whl", hash = "sha256:87a1f6fb632a218222c5984be540055346a8f5d8a68e8f6fb647b1dc9934de4b"}, {file = "fastapi-0.110.0.tar.gz", hash = "sha256:266775f0dcc95af9d3ef39bad55cff525329a931d5fd51930aadd4f428bf7ff3"}, @@ -951,6 +1008,7 @@ version = "2.19.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, @@ -965,6 +1023,7 @@ version = "3.13.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, @@ -981,6 +1040,7 @@ version = "1.2.0" description = "Infer file type and MIME type of any file/buffer. No external dependencies." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, @@ -992,6 +1052,7 @@ version = "24.3.7" description = "The FlatBuffers serialization format for Python" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "flatbuffers-24.3.7-py2.py3-none-any.whl", hash = "sha256:80c4f5dcad0ee76b7e349671a0d657f2fbba927a0244f88dd3f5ed6a3694e1fc"}, {file = "flatbuffers-24.3.7.tar.gz", hash = "sha256:0895c22b9a6019ff2f4de2e5e2f7cd15914043e6e7033a94c0c6369422690f22"}, @@ -1003,6 +1064,7 @@ version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +groups = ["main"] files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, @@ -1014,6 +1076,7 @@ version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, @@ -1100,6 +1163,7 @@ version = "2024.3.1" description = "File-system specification" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, @@ -1135,6 +1199,7 @@ version = "2.28.2" description = "Google Authentication Library" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "google-auth-2.28.2.tar.gz", hash = "sha256:80b8b4969aa9ed5938c7828308f20f035bc79f9d8fb8120bf9dc8db20b41ba30"}, {file = "google_auth-2.28.2-py2.py3-none-any.whl", hash = "sha256:9fd67bbcd40f16d9d42f950228e9cf02a2ded4ae49198b27432d0cded5a74c38"}, @@ -1158,6 +1223,7 @@ version = "1.63.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "googleapis-common-protos-1.63.0.tar.gz", hash = "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e"}, {file = "googleapis_common_protos-1.63.0-py2.py3-none-any.whl", hash = "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632"}, @@ -1175,6 +1241,8 @@ version = "3.0.3" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\"" files = [ {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, @@ -1246,6 +1314,7 @@ version = "1.62.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "grpcio-1.62.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e"}, {file = "grpcio-1.62.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea"}, @@ -1312,17 +1381,41 @@ version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["chardet (>=2.2)", "genshi", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + [[package]] name = "httpcore" version = "1.0.4" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, @@ -1344,6 +1437,7 @@ version = "0.6.1" description = "A collection of framework independent HTTP protocol utils." optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, @@ -1392,6 +1486,7 @@ version = "0.27.0" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, @@ -1416,6 +1511,7 @@ version = "0.21.4" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "huggingface_hub-0.21.4-py3-none-any.whl", hash = "sha256:df37c2c37fc6c82163cdd8a67ede261687d80d1e262526d6c0ce73b6b3630a7b"}, {file = "huggingface_hub-0.21.4.tar.gz", hash = "sha256:e1f4968c93726565a80edf6dc309763c7b546d0cfe79aa221206034d50155531"}, @@ -1449,6 +1545,7 @@ version = "10.0" description = "Human friendly output for text interfaces using Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -1463,6 +1560,7 @@ version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" +groups = ["main"] files = [ {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, @@ -1474,6 +1572,7 @@ version = "6.11.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, @@ -1493,6 +1592,7 @@ version = "6.3.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "importlib_resources-6.3.2-py3-none-any.whl", hash = "sha256:f41f4098b16cd140a97d256137cfd943d958219007990b2afb00439fc623f580"}, {file = "importlib_resources-6.3.2.tar.gz", hash = "sha256:963eb79649252b0160c1afcfe5a1d3fe3ad66edd0a8b114beacffb70c0674223"}, @@ -1508,6 +1608,7 @@ version = "6.29.3" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"}, @@ -1541,6 +1642,7 @@ version = "8.21.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" +groups = ["main"] files = [ {file = "ipython-8.21.0-py3-none-any.whl", hash = "sha256:1050a3ab8473488d7eee163796b02e511d0735cf43a04ba2a8348bd0f2eaf8a5"}, {file = "ipython-8.21.0.tar.gz", hash = "sha256:48fbc236fbe0e138b88773fa0437751f14c3645fb483f1d4c5dee58b37e5ce73"}, @@ -1577,6 +1679,7 @@ version = "8.1.2" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "ipywidgets-8.1.2-py3-none-any.whl", hash = "sha256:bbe43850d79fb5e906b14801d6c01402857996864d1e5b6fa62dd2ee35559f60"}, {file = "ipywidgets-8.1.2.tar.gz", hash = "sha256:d0b9b41e49bae926a866e613a39b0f0097745d2b9f1f3dd406641b4a57ec42c9"}, @@ -1598,6 +1701,7 @@ version = "20.11.0" description = "Operations with ISO 8601 durations" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, @@ -1612,6 +1716,7 @@ version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, @@ -1631,6 +1736,7 @@ version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, @@ -1642,12 +1748,99 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jiter" +version = "0.8.2" +description = "Fast iterable JSON parser." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b"}, + {file = "jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c826a221851a8dc028eb6d7d6429ba03184fa3c7e83ae01cd6d3bd1d4bd17d"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d35c864c2dff13dfd79fb070fc4fc6235d7b9b359efe340e1261deb21b9fcb66"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f557c55bc2b7676e74d39d19bcb8775ca295c7a028246175d6a8b431e70835e5"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:580ccf358539153db147e40751a0b41688a5ceb275e6f3e93d91c9467f42b2e3"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af102d3372e917cffce49b521e4c32c497515119dc7bd8a75665e90a718bbf08"}, + {file = "jiter-0.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cadcc978f82397d515bb2683fc0d50103acff2a180552654bb92d6045dec2c49"}, + {file = "jiter-0.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba5bdf56969cad2019d4e8ffd3f879b5fdc792624129741d3d83fc832fef8c7d"}, + {file = "jiter-0.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3b94a33a241bee9e34b8481cdcaa3d5c2116f575e0226e421bed3f7a6ea71cff"}, + {file = "jiter-0.8.2-cp310-cp310-win32.whl", hash = "sha256:6e5337bf454abddd91bd048ce0dca5134056fc99ca0205258766db35d0a2ea43"}, + {file = "jiter-0.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:4a9220497ca0cb1fe94e3f334f65b9b5102a0b8147646118f020d8ce1de70105"}, + {file = "jiter-0.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2dd61c5afc88a4fda7d8b2cf03ae5947c6ac7516d32b7a15bf4b49569a5c076b"}, + {file = "jiter-0.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a6c710d657c8d1d2adbbb5c0b0c6bfcec28fd35bd6b5f016395f9ac43e878a15"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9584de0cd306072635fe4b89742bf26feae858a0683b399ad0c2509011b9dc0"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a90a923338531b7970abb063cfc087eebae6ef8ec8139762007188f6bc69a9f"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21974d246ed0181558087cd9f76e84e8321091ebfb3a93d4c341479a736f099"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32475a42b2ea7b344069dc1e81445cfc00b9d0e3ca837f0523072432332e9f74"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9931fd36ee513c26b5bf08c940b0ac875de175341cbdd4fa3be109f0492586"}, + {file = "jiter-0.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0820f4a3a59ddced7fce696d86a096d5cc48d32a4183483a17671a61edfddc"}, + {file = "jiter-0.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ffc86ae5e3e6a93765d49d1ab47b6075a9c978a2b3b80f0f32628f39caa0c88"}, + {file = "jiter-0.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5127dc1abd809431172bc3fbe8168d6b90556a30bb10acd5ded41c3cfd6f43b6"}, + {file = "jiter-0.8.2-cp311-cp311-win32.whl", hash = "sha256:66227a2c7b575720c1871c8800d3a0122bb8ee94edb43a5685aa9aceb2782d44"}, + {file = "jiter-0.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:cde031d8413842a1e7501e9129b8e676e62a657f8ec8166e18a70d94d4682855"}, + {file = "jiter-0.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e6ec2be506e7d6f9527dae9ff4b7f54e68ea44a0ef6b098256ddf895218a2f8f"}, + {file = "jiter-0.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76e324da7b5da060287c54f2fabd3db5f76468006c811831f051942bf68c9d44"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:180a8aea058f7535d1c84183c0362c710f4750bef66630c05f40c93c2b152a0f"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025337859077b41548bdcbabe38698bcd93cfe10b06ff66617a48ff92c9aec60"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecff0dc14f409599bbcafa7e470c00b80f17abc14d1405d38ab02e4b42e55b57"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffd9fee7d0775ebaba131f7ca2e2d83839a62ad65e8e02fe2bd8fc975cedeb9e"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14601dcac4889e0a1c75ccf6a0e4baf70dbc75041e51bcf8d0e9274519df6887"}, + {file = "jiter-0.8.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92249669925bc1c54fcd2ec73f70f2c1d6a817928480ee1c65af5f6b81cdf12d"}, + {file = "jiter-0.8.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e725edd0929fa79f8349ab4ec7f81c714df51dc4e991539a578e5018fa4a7152"}, + {file = "jiter-0.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bf55846c7b7a680eebaf9c3c48d630e1bf51bdf76c68a5f654b8524335b0ad29"}, + {file = "jiter-0.8.2-cp312-cp312-win32.whl", hash = "sha256:7efe4853ecd3d6110301665a5178b9856be7e2a9485f49d91aa4d737ad2ae49e"}, + {file = "jiter-0.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:83c0efd80b29695058d0fd2fa8a556490dbce9804eac3e281f373bbc99045f6c"}, + {file = "jiter-0.8.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ca1f08b8e43dc3bd0594c992fb1fd2f7ce87f7bf0d44358198d6da8034afdf84"}, + {file = "jiter-0.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5672a86d55416ccd214c778efccf3266b84f87b89063b582167d803246354be4"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58dc9bc9767a1101f4e5e22db1b652161a225874d66f0e5cb8e2c7d1c438b587"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37b2998606d6dadbb5ccda959a33d6a5e853252d921fec1792fc902351bb4e2c"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab9a87f3784eb0e098f84a32670cfe4a79cb6512fd8f42ae3d0709f06405d18"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79aec8172b9e3c6d05fd4b219d5de1ac616bd8da934107325a6c0d0e866a21b6"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:711e408732d4e9a0208008e5892c2966b485c783cd2d9a681f3eb147cf36c7ef"}, + {file = "jiter-0.8.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:653cf462db4e8c41995e33d865965e79641ef45369d8a11f54cd30888b7e6ff1"}, + {file = "jiter-0.8.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:9c63eaef32b7bebac8ebebf4dabebdbc6769a09c127294db6babee38e9f405b9"}, + {file = "jiter-0.8.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:eb21aaa9a200d0a80dacc7a81038d2e476ffe473ffdd9c91eb745d623561de05"}, + {file = "jiter-0.8.2-cp313-cp313-win32.whl", hash = "sha256:789361ed945d8d42850f919342a8665d2dc79e7e44ca1c97cc786966a21f627a"}, + {file = "jiter-0.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:ab7f43235d71e03b941c1630f4b6e3055d46b6cb8728a17663eaac9d8e83a865"}, + {file = "jiter-0.8.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b426f72cd77da3fec300ed3bc990895e2dd6b49e3bfe6c438592a3ba660e41ca"}, + {file = "jiter-0.8.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2dd880785088ff2ad21ffee205e58a8c1ddabc63612444ae41e5e4b321b39c0"}, + {file = "jiter-0.8.2-cp313-cp313t-win_amd64.whl", hash = "sha256:3ac9f578c46f22405ff7f8b1f5848fb753cc4b8377fbec8470a7dc3997ca7566"}, + {file = "jiter-0.8.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9e1fa156ee9454642adb7e7234a383884452532bc9d53d5af2d18d98ada1d79c"}, + {file = "jiter-0.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cf5dfa9956d96ff2efb0f8e9c7d055904012c952539a774305aaaf3abdf3d6c"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e52bf98c7e727dd44f7c4acb980cb988448faeafed8433c867888268899b298b"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a2ecaa3c23e7a7cf86d00eda3390c232f4d533cd9ddea4b04f5d0644faf642c5"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08d4c92bf480e19fc3f2717c9ce2aa31dceaa9163839a311424b6862252c943e"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d9a1eded738299ba8e106c6779ce5c3893cffa0e32e4485d680588adae6db8"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20be8b7f606df096e08b0b1b4a3c6f0515e8dac296881fe7461dfa0fb5ec817"}, + {file = "jiter-0.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d33f94615fcaf872f7fd8cd98ac3b429e435c77619777e8a449d9d27e01134d1"}, + {file = "jiter-0.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:317b25e98a35ffec5c67efe56a4e9970852632c810d35b34ecdd70cc0e47b3b6"}, + {file = "jiter-0.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc9043259ee430ecd71d178fccabd8c332a3bf1e81e50cae43cc2b28d19e4cb7"}, + {file = "jiter-0.8.2-cp38-cp38-win32.whl", hash = "sha256:fc5adda618205bd4678b146612ce44c3cbfdee9697951f2c0ffdef1f26d72b63"}, + {file = "jiter-0.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:cd646c827b4f85ef4a78e4e58f4f5854fae0caf3db91b59f0d73731448a970c6"}, + {file = "jiter-0.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e41e75344acef3fc59ba4765df29f107f309ca9e8eace5baacabd9217e52a5ee"}, + {file = "jiter-0.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f22b16b35d5c1df9dfd58843ab2cd25e6bf15191f5a236bed177afade507bfc"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7200b8f7619d36aa51c803fd52020a2dfbea36ffec1b5e22cab11fd34d95a6d"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70bf4c43652cc294040dbb62256c83c8718370c8b93dd93d934b9a7bf6c4f53c"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9d471356dc16f84ed48768b8ee79f29514295c7295cb41e1133ec0b2b8d637d"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:859e8eb3507894093d01929e12e267f83b1d5f6221099d3ec976f0c995cb6bd9"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa58399c01db555346647a907b4ef6d4f584b123943be6ed5588c3f2359c9f4"}, + {file = "jiter-0.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f2d5ed877f089862f4c7aacf3a542627c1496f972a34d0474ce85ee7d939c27"}, + {file = "jiter-0.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:03c9df035d4f8d647f8c210ddc2ae0728387275340668fb30d2421e17d9a0841"}, + {file = "jiter-0.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8bd2a824d08d8977bb2794ea2682f898ad3d8837932e3a74937e93d62ecbb637"}, + {file = "jiter-0.8.2-cp39-cp39-win32.whl", hash = "sha256:ca29b6371ebc40e496995c94b988a101b9fbbed48a51190a4461fcb0a68b4a36"}, + {file = "jiter-0.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1c0dfbd1be3cbefc7510102370d86e35d1d53e5a93d48519688b1bf0f761160a"}, + {file = "jiter-0.8.2.tar.gz", hash = "sha256:cd73d3e740666d0e639f678adb176fad25c1bcbdae88d8d7b857e1783bb4212d"}, +] + [[package]] name = "joblib" version = "1.3.2" description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, @@ -1659,6 +1852,7 @@ version = "0.9.24" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "json5-0.9.24-py3-none-any.whl", hash = "sha256:4ca101fd5c7cb47960c055ef8f4d0e31e15a7c6c48c3b6f1473fc83b6c462a13"}, {file = "json5-0.9.24.tar.gz", hash = "sha256:0c638399421da959a20952782800e5c1a78c14e08e1dc9738fa10d8ec14d58c8"}, @@ -1670,6 +1864,7 @@ version = "1.33" description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["main"] files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -1684,6 +1879,7 @@ version = "1.0.6" description = "A more powerful JSONPath implementation in modern python" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "jsonpath-python-1.0.6.tar.gz", hash = "sha256:dd5be4a72d8a2995c3f583cf82bf3cd1a9544cfdabf2d22595b67aff07349666"}, {file = "jsonpath_python-1.0.6-py3-none-any.whl", hash = "sha256:1e3b78df579f5efc23565293612decee04214609208a2335884b3ee3f786b575"}, @@ -1695,6 +1891,7 @@ version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["main"] files = [ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, @@ -1706,6 +1903,7 @@ version = "4.21.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, @@ -1735,6 +1933,7 @@ version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, @@ -1749,6 +1948,7 @@ version = "1.0.0" description = "Jupyter metapackage. Install all the Jupyter components in one go." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, @@ -1769,6 +1969,7 @@ version = "8.6.1" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, @@ -1791,6 +1992,7 @@ version = "6.6.3" description = "Jupyter terminal console" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, @@ -1815,6 +2017,7 @@ version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, @@ -1835,6 +2038,7 @@ version = "0.10.0" description = "Jupyter Event System library" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, @@ -1860,6 +2064,7 @@ version = "2.2.4" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyter-lsp-2.2.4.tar.gz", hash = "sha256:5e50033149344065348e688608f3c6d654ef06d9856b67655bd7b6bac9ee2d59"}, {file = "jupyter_lsp-2.2.4-py3-none-any.whl", hash = "sha256:da61cb63a16b6dff5eac55c2699cc36eac975645adee02c41bdfc03bf4802e77"}, @@ -1874,6 +2079,7 @@ version = "2.13.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyter_server-2.13.0-py3-none-any.whl", hash = "sha256:77b2b49c3831fbbfbdb5048cef4350d12946191f833a24e5f83e5f8f4803e97b"}, {file = "jupyter_server-2.13.0.tar.gz", hash = "sha256:c80bfb049ea20053c3d9641c2add4848b38073bf79f1729cea1faed32fc1c78e"}, @@ -1910,6 +2116,7 @@ version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, @@ -1929,6 +2136,7 @@ version = "4.1.5" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyterlab-4.1.5-py3-none-any.whl", hash = "sha256:3bc843382a25e1ab7bc31d9e39295a9f0463626692b7995597709c0ab236ab2c"}, {file = "jupyterlab-4.1.5.tar.gz", hash = "sha256:c9ad75290cb10bfaff3624bf3fbb852319b4cce4c456613f8ebbaa98d03524db"}, @@ -1961,6 +2169,7 @@ version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -1972,6 +2181,7 @@ version = "2.25.4" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jupyterlab_server-2.25.4-py3-none-any.whl", hash = "sha256:eb645ecc8f9b24bac5decc7803b6d5363250e16ec5af814e516bc2c54dd88081"}, {file = "jupyterlab_server-2.25.4.tar.gz", hash = "sha256:2098198e1e82e0db982440f9b5136175d73bea2cd42a6480aa6fd502cb23c4f9"}, @@ -1997,6 +2207,7 @@ version = "3.0.10" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "jupyterlab_widgets-3.0.10-py3-none-any.whl", hash = "sha256:dd61f3ae7a5a7f80299e14585ce6cf3d6925a96c9103c978eda293197730cb64"}, {file = "jupyterlab_widgets-3.0.10.tar.gz", hash = "sha256:04f2ac04976727e4f9d0fa91cdc2f1ab860f965e504c29dbd6a65c882c9d04c0"}, @@ -2008,6 +2219,7 @@ version = "29.0.0" description = "Kubernetes python client" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "kubernetes-29.0.0-py2.py3-none-any.whl", hash = "sha256:ab8cb0e0576ccdfb71886366efb102c6a20f268d817be065ce7f9909c631e43e"}, {file = "kubernetes-29.0.0.tar.gz", hash = "sha256:c4812e227ae74d07d53c88293e564e54b850452715a59a927e7e1bc6b9a60459"}, @@ -2034,6 +2246,7 @@ version = "0.1.8" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" +groups = ["main"] files = [ {file = "langchain-0.1.8-py3-none-any.whl", hash = "sha256:19e951b0e2be099ff048ee483acecb47e1a39c33a47dadfee70fcfa20f45cc19"}, {file = "langchain-0.1.8.tar.gz", hash = "sha256:c8b1c2954a07cd6422c9027459473bafae90c78f07015bf2fc6262fadf97ea44"}, @@ -2074,6 +2287,7 @@ version = "0.0.28" description = "Community contributed LangChain integrations." optional = false python-versions = ">=3.8.1,<4.0" +groups = ["main"] files = [ {file = "langchain_community-0.0.28-py3-none-any.whl", hash = "sha256:bdb015ac455ae68432ea104628717583dce041e1abdfcefe86e39f034f5e90b8"}, {file = "langchain_community-0.0.28.tar.gz", hash = "sha256:8664d243a90550fc5ddc137b712034e02c8d43afc8d4cc832ba5842b44c864ce"}, @@ -2100,6 +2314,7 @@ version = "0.1.32" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" +groups = ["main"] files = [ {file = "langchain_core-0.1.32-py3-none-any.whl", hash = "sha256:192aecdee6216af19b596ec18e7be3da0b9ecb9083eec263e02b68125737245d"}, {file = "langchain_core-0.1.32.tar.gz", hash = "sha256:d62683becbf20f51f12875791a042320f45eaa0c87a267d30bc03bc1a07f5ec2"}, @@ -2124,6 +2339,7 @@ version = "1.0.9" description = "Language detection library ported from Google's language-detection." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "langdetect-1.0.9-py2-none-any.whl", hash = "sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a"}, {file = "langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0"}, @@ -2138,6 +2354,7 @@ version = "0.1.5" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = ">=3.8.1,<4.0" +groups = ["main"] files = [ {file = "langsmith-0.1.5-py3-none-any.whl", hash = "sha256:a1811821a923d90e53bcbacdd0988c3c366aff8f4c120d8777e7af8ecda06268"}, {file = "langsmith-0.1.5.tar.gz", hash = "sha256:aa7a2861aa3d9ae563a077c622953533800466c4e2e539b0d567b84d5fd5b157"}, @@ -2153,6 +2370,7 @@ version = "5.1.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, @@ -2246,6 +2464,7 @@ version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -2315,6 +2534,7 @@ version = "3.20.2" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "marshmallow-3.20.2-py3-none-any.whl", hash = "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9"}, {file = "marshmallow-3.20.2.tar.gz", hash = "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd"}, @@ -2335,6 +2555,7 @@ version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.5" +groups = ["main"] files = [ {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, @@ -2349,6 +2570,7 @@ version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, @@ -2360,6 +2582,7 @@ version = "4.1.0" description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be5ac76a8b0cd8095784e51e4c1c9c318c19edcd1709a06eb14979c8d850c31a"}, {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98a49121afdfab67cd80e912b36404139d7deceb6773a83620137aaa0da5714c"}, @@ -2452,6 +2675,7 @@ version = "1.6" description = "An implementation of time.monotonic() for Python 2 & < 3.3" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, @@ -2463,6 +2687,7 @@ version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -2480,6 +2705,7 @@ version = "6.0.5" description = "multidict implementation" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, @@ -2579,6 +2805,7 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["main"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -2590,6 +2817,7 @@ version = "0.10.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, @@ -2612,6 +2840,7 @@ version = "7.16.2" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "nbconvert-7.16.2-py3-none-any.whl", hash = "sha256:0c01c23981a8de0220255706822c40b751438e32467d6a686e26be08ba784382"}, {file = "nbconvert-7.16.2.tar.gz", hash = "sha256:8310edd41e1c43947e4ecf16614c61469ebc024898eb808cce0999860fc9fb16"}, @@ -2649,6 +2878,7 @@ version = "5.10.3" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "nbformat-5.10.3-py3-none-any.whl", hash = "sha256:d9476ca28676799af85385f409b49d95e199951477a159a576ef2a675151e5e8"}, {file = "nbformat-5.10.3.tar.gz", hash = "sha256:60ed5e910ef7c6264b87d644f276b1b49e24011930deef54605188ddeb211685"}, @@ -2670,6 +2900,7 @@ version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" +groups = ["main"] files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -2681,6 +2912,7 @@ version = "3.8.1" description = "Natural Language Toolkit" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "nltk-3.8.1-py3-none-any.whl", hash = "sha256:fd5c9109f976fa86bcadba8f91e47f5e9293bd034474752e92a520f81c93dda5"}, {file = "nltk-3.8.1.zip", hash = "sha256:1834da3d0682cba4f2cede2f9aad6b0fafb6461ba451db0efb6f9c39798d64d3"}, @@ -2706,6 +2938,7 @@ version = "7.1.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "notebook-7.1.2-py3-none-any.whl", hash = "sha256:fc6c24b9aef18d0cd57157c9c47e95833b9b0bdc599652639acf0bdb61dc7d5f"}, {file = "notebook-7.1.2.tar.gz", hash = "sha256:efc2c80043909e0faa17fce9e9b37c059c03af0ec99a4d4db84cb21d9d2e936a"}, @@ -2729,6 +2962,7 @@ version = "0.2.4" description = "A shim layer for notebook traits and config" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, @@ -2746,6 +2980,7 @@ version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" +groups = ["main"] files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -2791,6 +3026,7 @@ version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -2801,12 +3037,28 @@ rsa = ["cryptography (>=3.0.0)"] signals = ["blinker (>=1.4.0)"] signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] +[[package]] +name = "olefile" +version = "0.47" +description = "Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +files = [ + {file = "olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f"}, + {file = "olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + [[package]] name = "onnxruntime" version = "1.17.1" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, @@ -2845,25 +3097,29 @@ sympy = "*" [[package]] name = "openai" -version = "0.28.1" -description = "Python client library for the OpenAI API" +version = "1.61.0" +description = "The official Python library for the openai API" optional = false -python-versions = ">=3.7.1" +python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "openai-0.28.1-py3-none-any.whl", hash = "sha256:d18690f9e3d31eedb66b57b88c2165d760b24ea0a01f150dd3f068155088ce68"}, - {file = "openai-0.28.1.tar.gz", hash = "sha256:4be1dad329a65b4ce1a660fe6d5431b438f429b5855c883435f0f7fcb6d2dcc8"}, + {file = "openai-1.61.0-py3-none-any.whl", hash = "sha256:e8c512c0743accbdbe77f3429a1490d862f8352045de8dc81969301eb4a4f666"}, + {file = "openai-1.61.0.tar.gz", hash = "sha256:216f325a24ed8578e929b0f1b3fb2052165f3b04b0461818adaa51aa29c71f8a"}, ] [package.dependencies] -aiohttp = "*" -requests = ">=2.20" -tqdm = "*" +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.11,<5" [package.extras] -datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -dev = ["black (>=21.6b0,<22.0)", "pytest (==6.*)", "pytest-asyncio", "pytest-mock"] -embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"] -wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +realtime = ["websockets (>=13,<15)"] [[package]] name = "opentelemetry-api" @@ -2871,6 +3127,7 @@ version = "1.23.0" description = "OpenTelemetry Python API" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_api-1.23.0-py3-none-any.whl", hash = "sha256:cc03ea4025353048aadb9c64919099663664672ea1c6be6ddd8fee8e4cd5e774"}, {file = "opentelemetry_api-1.23.0.tar.gz", hash = "sha256:14a766548c8dd2eb4dfc349739eb4c3893712a0daa996e5dbf945f9da665da9d"}, @@ -2886,6 +3143,7 @@ version = "1.23.0" description = "OpenTelemetry Protobuf encoding" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_exporter_otlp_proto_common-1.23.0-py3-none-any.whl", hash = "sha256:2a9e7e9d5a8b026b572684b6b24dcdefcaa58613d5ce3d644130b0c373c056c1"}, {file = "opentelemetry_exporter_otlp_proto_common-1.23.0.tar.gz", hash = "sha256:35e4ea909e7a0b24235bd0aaf17fba49676527feb1823b46565ff246d5a1ab18"}, @@ -2900,6 +3158,7 @@ version = "1.23.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0-py3-none-any.whl", hash = "sha256:40f9e3e7761eb34f2a1001f4543028783ac26e2db27e420d5374f2cca0182dad"}, {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0.tar.gz", hash = "sha256:aa1a012eea5342bfef51fcf3f7f22601dcb0f0984a07ffe6025b2fbb6d91a2a9"}, @@ -2923,6 +3182,7 @@ version = "0.44b0" description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_instrumentation-0.44b0-py3-none-any.whl", hash = "sha256:79560f386425176bcc60c59190064597096114c4a8e5154f1cb281bb4e47d2fc"}, {file = "opentelemetry_instrumentation-0.44b0.tar.gz", hash = "sha256:8213d02d8c0987b9b26386ae3e091e0477d6331673123df736479322e1a50b48"}, @@ -2939,6 +3199,7 @@ version = "0.44b0" description = "ASGI instrumentation for OpenTelemetry" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_instrumentation_asgi-0.44b0-py3-none-any.whl", hash = "sha256:0d95c84a8991008c8a8ac35e15d43cc7768a5bb46f95f129e802ad2990d7c366"}, {file = "opentelemetry_instrumentation_asgi-0.44b0.tar.gz", hash = "sha256:72d4d28ec7ccd551eac11edc5ae8cac3586c0a228467d6a95fad7b6d4edd597a"}, @@ -2961,6 +3222,7 @@ version = "0.44b0" description = "OpenTelemetry FastAPI Instrumentation" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_instrumentation_fastapi-0.44b0-py3-none-any.whl", hash = "sha256:4441482944bea6676816668d56deb94af990e8c6e9582c581047e5d84c91d3c9"}, {file = "opentelemetry_instrumentation_fastapi-0.44b0.tar.gz", hash = "sha256:67ed10b93ad9d35238ae0be73cf8acbbb65a4a61fb7444d0aee5b0c492e294db"}, @@ -2983,6 +3245,7 @@ version = "1.23.0" description = "OpenTelemetry Python Proto" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_proto-1.23.0-py3-none-any.whl", hash = "sha256:4c017deca052cb287a6003b7c989ed8b47af65baeb5d57ebf93dde0793f78509"}, {file = "opentelemetry_proto-1.23.0.tar.gz", hash = "sha256:e6aaf8b7ace8d021942d546161401b83eed90f9f2cc6f13275008cea730e4651"}, @@ -2997,6 +3260,7 @@ version = "1.23.0" description = "OpenTelemetry Python SDK" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_sdk-1.23.0-py3-none-any.whl", hash = "sha256:a93c96990ac0f07c6d679e2f1015864ff7a4f5587122dd5af968034436efb1fd"}, {file = "opentelemetry_sdk-1.23.0.tar.gz", hash = "sha256:9ddf60195837b59e72fd2033d6a47e2b59a0f74f0ec37d89387d89e3da8cab7f"}, @@ -3013,6 +3277,7 @@ version = "0.44b0" description = "OpenTelemetry Semantic Conventions" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_semantic_conventions-0.44b0-py3-none-any.whl", hash = "sha256:7c434546c9cbd797ab980cc88bf9ff3f4a5a28f941117cad21694e43d5d92019"}, {file = "opentelemetry_semantic_conventions-0.44b0.tar.gz", hash = "sha256:2e997cb28cd4ca81a25a9a43365f593d0c2b76be0685015349a89abdf1aa4ffa"}, @@ -3024,6 +3289,7 @@ version = "0.44b0" description = "Web util for OpenTelemetry" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "opentelemetry_util_http-0.44b0-py3-none-any.whl", hash = "sha256:ff018ab6a2fa349537ff21adcef99a294248b599be53843c44f367aef6bccea5"}, {file = "opentelemetry_util_http-0.44b0.tar.gz", hash = "sha256:75896dffcbbeb5df5429ad4526e22307fc041a27114e0c5bfd90bb219381e68f"}, @@ -3035,6 +3301,7 @@ version = "3.9.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "orjson-3.9.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a"}, {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04"}, @@ -3094,6 +3361,7 @@ version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -3105,6 +3373,7 @@ version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, @@ -3116,6 +3385,7 @@ version = "1.5.1" description = "Utilities for writing pandoc filters in python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -3127,6 +3397,7 @@ version = "0.8.3" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, @@ -3142,6 +3413,8 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" +groups = ["main"] +markers = "sys_platform != \"win32\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -3156,6 +3429,7 @@ version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, @@ -3241,6 +3515,7 @@ version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, @@ -3256,6 +3531,7 @@ version = "3.5.0" description = "Integrate PostHog into any python application." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, @@ -3279,6 +3555,7 @@ version = "0.20.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, @@ -3293,6 +3570,7 @@ version = "3.0.43" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" +groups = ["main"] files = [ {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, @@ -3307,6 +3585,7 @@ version = "4.25.3" description = "" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, @@ -3327,6 +3606,7 @@ version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +groups = ["main"] files = [ {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, @@ -3355,6 +3635,8 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" +groups = ["main"] +markers = "os_name != \"nt\" or sys_platform != \"win32\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -3366,6 +3648,7 @@ version = "3.4.0" description = "Apache Pulsar Python client library" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "pulsar_client-3.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ebf99db5244ff69479283b25621b070492acc4bb643d162d86b90387cb6fdb2a"}, {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6cb5d8e1482a8aea758633be23717e0c4bb7dc53784e37915c0048c0382f134"}, @@ -3413,6 +3696,7 @@ version = "0.2.2" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, @@ -3427,6 +3711,7 @@ version = "0.5.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] files = [ {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, @@ -3438,6 +3723,7 @@ version = "0.3.0" description = "A collection of ASN.1-based protocols modules" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] files = [ {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, @@ -3452,6 +3738,7 @@ version = "2.21" description = "C parser in Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, @@ -3463,6 +3750,7 @@ version = "2.6.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, @@ -3482,6 +3770,7 @@ version = "2.16.3" description = "" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, @@ -3573,6 +3862,7 @@ version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, @@ -3588,6 +3878,7 @@ version = "1.23.26" description = "A high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "PyMuPDF-1.23.26-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:645a05321aecc8c45739f71f0eb574ce33138d19189582ffa5241fea3a8e2549"}, {file = "PyMuPDF-1.23.26-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:2dfc9e010669ae92fade6fb72aaea49ebe3b8dcd7ee4dcbbe50115abcaa4d3fe"}, @@ -3631,6 +3922,7 @@ version = "1.23.22" description = "MuPDF shared libraries for PyMuPDF." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "PyMuPDFb-1.23.22-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9085a1e2fbf16f2820f9f7ad3d25e85f81d9b9eb0409110c1670d4cf5a27a678"}, {file = "PyMuPDFb-1.23.22-py3-none-macosx_11_0_arm64.whl", hash = "sha256:01016dd33220cef4ecaf929d09fd27a584dc3ec3e5c9f4112dfe63613ea35135"}, @@ -3640,12 +3932,32 @@ files = [ {file = "PyMuPDFb-1.23.22-py3-none-win_amd64.whl", hash = "sha256:7c9c157281fdee9f296e666a323307dbf74cb38f017921bb131fa7bfcd39c2bd"}, ] +[[package]] +name = "pypdf2" +version = "3.0.1" +description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "PyPDF2-3.0.1.tar.gz", hash = "sha256:a74408f69ba6271f71b9352ef4ed03dc53a31aa404d29b5d31f53bfecfee1440"}, + {file = "pypdf2-3.0.1-py3-none-any.whl", hash = "sha256:d16e4205cfee272fbdc0568b68d82be796540b1537508cef59388f839c191928"}, +] + +[package.extras] +crypto = ["PyCryptodome"] +dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "wheel"] +docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] +full = ["Pillow", "PyCryptodome"] +image = ["Pillow"] + [[package]] name = "pypika" version = "0.48.9" description = "A SQL query builder API for Python" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, ] @@ -3656,6 +3968,7 @@ version = "1.0.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "pyproject_hooks-1.0.0-py3-none-any.whl", hash = "sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8"}, {file = "pyproject_hooks-1.0.0.tar.gz", hash = "sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"}, @@ -3670,6 +3983,8 @@ version = "3.4.1" description = "A python implementation of GNU readline." optional = false python-versions = "*" +groups = ["main"] +markers = "sys_platform == \"win32\"" files = [ {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, @@ -3681,6 +3996,7 @@ version = "2.8.2" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] files = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, @@ -3695,6 +4011,7 @@ version = "1.1.0" description = "Create, read, and update Microsoft Word .docx files." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "python-docx-1.1.0.tar.gz", hash = "sha256:5829b722141cf1ab79aedf0c34d9fe9924b29764584c0f2164eb2b02dcdf17c9"}, {file = "python_docx-1.1.0-py3-none-any.whl", hash = "sha256:bac9773278098a1ddc43a52d84e22f5909c4a3080a624530b3ecb3771b07c6cd"}, @@ -3710,6 +4027,7 @@ version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -3724,6 +4042,7 @@ version = "2024.2.7" description = "Look-up utilities for ISO 639 language codes and names" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "python-iso639-2024.2.7.tar.gz", hash = "sha256:c323233348c34d57c601e3e6d824088e492896bcb97a61a87f7d93401a305377"}, {file = "python_iso639-2024.2.7-py3-none-any.whl", hash = "sha256:7b149623ff74230f4ee3061fb01d18e57a8d07c5fee2aa72907f39b7f6d16cbc"}, @@ -3738,6 +4057,7 @@ version = "2.0.7" description = "A python library adding a json log formatter" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, @@ -3749,17 +4069,36 @@ version = "0.4.27" description = "File type identification using libmagic" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] files = [ {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, ] +[[package]] +name = "python-oxmsg" +version = "0.0.1" +description = "Extract attachments from Outlook .msg files." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "python_oxmsg-0.0.1-py3-none-any.whl", hash = "sha256:8ea7d5dda1bc161a413213da9e18ed152927c1fda2feaf5d1f02192d8ad45eea"}, + {file = "python_oxmsg-0.0.1.tar.gz", hash = "sha256:b65c1f93d688b85a9410afa824192a1ddc39da359b04a0bd2cbd3874e84d4994"}, +] + +[package.dependencies] +click = "*" +olefile = "*" +typing-extensions = ">=4.9.0" + [[package]] name = "python-pptx" version = "0.6.23" description = "Generate and manipulate Open XML PowerPoint (.pptx) files" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "python-pptx-0.6.23.tar.gz", hash = "sha256:587497ff28e779ab18dbb074f6d4052893c85dedc95ed75df319364f331fedee"}, {file = "python_pptx-0.6.23-py3-none-any.whl", hash = "sha256:dd0527194627a2b7cc05f3ba23ecaa2d9a0d5ac9b6193a28ed1b7a716f4217d4"}, @@ -3776,6 +4115,7 @@ version = "3.0.3" description = ".NET and Mono integration for Python" optional = false python-versions = "<3.13,>=3.7" +groups = ["main"] files = [ {file = "pythonnet-3.0.3-py3-none-any.whl", hash = "sha256:62486f860c7955b7dcf470e085e4d2b599512224ca24193f716e857b496c530f"}, {file = "pythonnet-3.0.3.tar.gz", hash = "sha256:8d4b2e97158a023875f8647458a58f38817f4fe39af60abdd6b0d8adf1d77e75"}, @@ -3790,6 +4130,8 @@ version = "306" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["main"] +markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" files = [ {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, @@ -3813,6 +4155,8 @@ version = "2.0.13" description = "Pseudo terminal support for Windows from Python." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "os_name == \"nt\"" files = [ {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, @@ -3828,6 +4172,7 @@ version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, @@ -3847,6 +4192,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -3887,6 +4233,7 @@ version = "25.1.2" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, @@ -3992,6 +4339,7 @@ version = "5.5.1" description = "Jupyter Qt console" optional = false python-versions = ">= 3.8" +groups = ["main"] files = [ {file = "qtconsole-5.5.1-py3-none-any.whl", hash = "sha256:8c75fa3e9b4ed884880ff7cea90a1b67451219279ec33deaee1d59e3df1a5d2b"}, {file = "qtconsole-5.5.1.tar.gz", hash = "sha256:a0e806c6951db9490628e4df80caec9669b65149c7ba40f9bf033c025a5b56bc"}, @@ -4017,6 +4365,7 @@ version = "2.4.1" description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "QtPy-2.4.1-py3-none-any.whl", hash = "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b"}, {file = "QtPy-2.4.1.tar.gz", hash = "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987"}, @@ -4034,6 +4383,7 @@ version = "3.6.1" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ac434fc71edda30d45db4a92ba5e7a42c7405e1a54cb4ec01d03cc668c6dcd40"}, {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a791168e119cfddf4b5a40470620c872812042f0621e6a293983a2d52372db0"}, @@ -4136,6 +4486,7 @@ version = "0.34.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"}, {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"}, @@ -4151,6 +4502,7 @@ version = "2023.12.25" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, @@ -4253,6 +4605,7 @@ version = "2.31.0" description = "Python HTTP for Humans." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, @@ -4274,6 +4627,7 @@ version = "1.4.0" description = "OAuthlib authentication support for Requests." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] files = [ {file = "requests-oauthlib-1.4.0.tar.gz", hash = "sha256:acee623221e4a39abcbb919312c8ff04bd44e7e417087fb4bd5e2a2f53d5e79a"}, {file = "requests_oauthlib-1.4.0-py2.py3-none-any.whl", hash = "sha256:7a3130d94a17520169e38db6c8d75f2c974643788465ecc2e4b36d288bf13033"}, @@ -4292,6 +4646,7 @@ version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -4306,6 +4661,7 @@ version = "0.1.1" description = "Pure python rfc3986 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] files = [ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, @@ -4317,6 +4673,7 @@ version = "0.18.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, @@ -4425,6 +4782,7 @@ version = "4.9" description = "Pure-Python RSA implementation" optional = false python-versions = ">=3.6,<4" +groups = ["main"] files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -4439,6 +4797,7 @@ version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +groups = ["main"] files = [ {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, @@ -4455,6 +4814,7 @@ version = "69.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, @@ -4471,6 +4831,7 @@ version = "1.16.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -4482,6 +4843,7 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -4493,6 +4855,7 @@ version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, @@ -4504,6 +4867,7 @@ version = "2.0.28" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "SQLAlchemy-2.0.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0b148ab0438f72ad21cb004ce3bdaafd28465c4276af66df3b9ecd2037bf252"}, {file = "SQLAlchemy-2.0.28-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbda76961eb8f27e6ad3c84d1dc56d5bc61ba8f02bd20fcf3450bd421c2fcc9c"}, @@ -4591,6 +4955,7 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -4610,6 +4975,7 @@ version = "0.36.3" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, @@ -4627,6 +4993,7 @@ version = "1.12" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, @@ -4635,26 +5002,13 @@ files = [ [package.dependencies] mpmath = ">=0.19" -[[package]] -name = "tabulate" -version = "0.9.0" -description = "Pretty-print tabular data" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, - {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, -] - -[package.extras] -widechars = ["wcwidth"] - [[package]] name = "tenacity" version = "8.2.3" description = "Retry code until it succeeds" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, @@ -4669,6 +5023,7 @@ version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, @@ -4690,6 +5045,7 @@ version = "1.2.1" description = "A tiny CSS parser" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, @@ -4708,6 +5064,7 @@ version = "0.15.2" description = "" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, @@ -4835,6 +5192,8 @@ version = "2.0.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, @@ -4846,6 +5205,7 @@ version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">= 3.8" +groups = ["main"] files = [ {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, @@ -4866,6 +5226,7 @@ version = "4.66.2" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, @@ -4886,6 +5247,7 @@ version = "5.14.2" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, @@ -4901,6 +5263,7 @@ version = "0.9.0" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"}, {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"}, @@ -4922,6 +5285,7 @@ version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, @@ -4929,13 +5293,14 @@ files = [ [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] @@ -4944,6 +5309,7 @@ version = "0.9.0" description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -4955,111 +5321,59 @@ typing-extensions = ">=3.7.4" [[package]] name = "unstructured" -version = "0.12.6" +version = "0.16.17" description = "A library that prepares raw documents for downstream ML tasks." optional = false -python-versions = ">=3.9.0,<3.12" +python-versions = "<3.13,>=3.9.0" +groups = ["main"] files = [ - {file = "unstructured-0.12.6-py3-none-any.whl", hash = "sha256:b317957d9d34e23ad884acb2ee48d93afad9f9c10b77c1a764b0459c7a807efc"}, - {file = "unstructured-0.12.6.tar.gz", hash = "sha256:fd971c5ae15730d7303e3c0cf493d5393ec6ca742c7f02f8ba5da1778a92c6f4"}, + {file = "unstructured-0.16.17-py3-none-any.whl", hash = "sha256:9b55bf47ac6532f16e6ef27f5b823e037ab860f07d377784b9dc43a99a981268"}, + {file = "unstructured-0.16.17.tar.gz", hash = "sha256:590700ed344ed27a6dce8b3ffdeec2c427bd4f057d9bcb470f8ce828cc20b314"}, ] [package.dependencies] -backoff = "2.2.1" -beautifulsoup4 = "4.12.3" -certifi = "2024.2.2" -chardet = "5.2.0" -charset-normalizer = "3.3.2" -click = "8.1.7" -dataclasses-json = "0.6.4" -dataclasses-json-speakeasy = "0.5.11" -emoji = "2.10.1" -filetype = "1.2.0" -idna = "3.6" -joblib = "1.3.2" -jsonpath-python = "1.0.6" -langdetect = "1.0.9" -lxml = "5.1.0" -marshmallow = "3.20.2" -mypy-extensions = "1.0.0" -nltk = "3.8.1" -numpy = "1.26.4" -packaging = "23.2" -python-dateutil = "2.8.2" -python-iso639 = "2024.2.7" -python-magic = "0.4.27" -rapidfuzz = "3.6.1" -regex = "2023.12.25" -requests = "2.31.0" -six = "1.16.0" -soupsieve = "2.5" -tabulate = "0.9.0" -tqdm = "4.66.2" -typing-extensions = "4.9.0" -typing-inspect = "0.9.0" -unstructured-client = "0.18.0" -urllib3 = "1.26.18" -wrapt = "1.16.0" +backoff = "*" +beautifulsoup4 = "*" +chardet = "*" +dataclasses-json = "*" +emoji = "*" +filetype = "*" +html5lib = "*" +langdetect = "*" +lxml = "*" +nltk = "*" +numpy = "<2" +psutil = "*" +python-iso639 = "*" +python-magic = "*" +python-oxmsg = "*" +rapidfuzz = "*" +requests = "*" +tqdm = "*" +typing-extensions = "*" +unstructured-client = "*" +wrapt = "*" [package.extras] -airtable = ["certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "idna (==3.6)", "inflection (==0.5.1)", "pyairtable (==2.2.2)", "pydantic (==1.10.14)", "requests (==2.31.0)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)"] -all-docs = ["antlr4-python3-runtime (==4.9.3)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "coloredlogs (==15.0.1)", "contourpy (==1.2.0)", "cryptography (==42.0.2)", "cycler (==0.12.1)", "deprecated (==1.2.14)", "effdet (==0.4.1)", "et-xmlfile (==1.1.0)", "filelock (==3.13.1)", "flatbuffers (==23.5.26)", "fonttools (==4.49.0)", "fsspec (==2024.2.0)", "huggingface-hub (==0.20.3)", "humanfriendly (==10.0)", "idna (==3.6)", "importlib-metadata (==7.0.1)", "importlib-resources (==6.1.1)", "iopath (==0.1.10)", "jinja2 (==3.1.3)", "kiwisolver (==1.4.5)", "layoutparser[layoutmodels,tesseract] (==0.3.4)", "lxml (==5.1.0)", "markdown (==3.5.2)", "markupsafe (==2.1.5)", "matplotlib (==3.7.2)", "mpmath (==1.3.0)", "msg-parser (==1.2.0)", "networkx (==3.2.1)", "numpy (==1.26.4)", "olefile (==0.47)", "omegaconf (==2.3.0)", "onnx (==1.15.0)", "onnxruntime (==1.15.1)", "opencv-python (==4.8.0.76)", "openpyxl (==3.1.2)", "packaging (==23.2)", "pandas (==2.2.0)", "pdf2image (==1.17.0)", "pdfminer-six (==20221105)", "pdfplumber (==0.10.4)", "pikepdf (==8.11.0)", "pillow (==10.2.0)", "pillow-heif (==0.15.0)", "portalocker (==2.8.2)", "protobuf (==4.23.4)", "pycocotools (==2.0.7)", "pycparser (==2.21)", "pypandoc (==1.12)", "pyparsing (==3.0.9)", "pypdf (==4.0.1)", "pypdfium2 (==4.27.0)", "pytesseract (==0.3.10)", "python-dateutil (==2.8.2)", "python-docx (==1.1.0)", "python-multipart (==0.0.9)", "python-pptx (==0.6.23)", "pytz (==2024.1)", "pyyaml (==6.0.1)", "rapidfuzz (==3.6.1)", "regex (==2023.12.25)", "requests (==2.31.0)", "safetensors (==0.3.2)", "scipy (==1.10.1)", "six (==1.16.0)", "sympy (==1.12)", "timm (==0.9.12)", "tokenizers (==0.15.2)", "torch (==2.2.0)", "torchvision (==0.17.0)", "tqdm (==4.66.2)", "transformers (==4.37.1)", "typing-extensions (==4.9.0)", "tzdata (==2024.1)", "unstructured-inference (==0.7.23)", "unstructured-pytesseract (==0.3.12)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)", "xlrd (==2.0.1)", "xlsxwriter (==3.1.9)", "zipp (==3.17.0)"] -astra = ["anyio (==3.7.1)", "astrapy (==0.7.6)", "cassandra-driver (==3.29.0)", "cassio (==0.1.5)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "click (==8.1.7)", "deprecation (==2.1.0)", "exceptiongroup (==1.2.0)", "geomet (==0.2.1.post1)", "h11 (==0.14.0)", "h2 (==4.1.0)", "hpack (==4.0.0)", "httpcore (==1.0.4)", "httpx[http2] (==0.27.0)", "hyperframe (==6.0.1)", "idna (==3.6)", "numpy (==1.26.4)", "packaging (==23.2)", "requests (==2.31.0)", "six (==1.16.0)", "sniffio (==1.3.0)", "toml (==0.10.2)", "urllib3 (==1.26.18)"] -azure = ["adlfs (==2024.2.0)", "aiohttp (==3.9.3)", "aiosignal (==1.3.1)", "async-timeout (==4.0.3)", "attrs (==23.2.0)", "azure-core (==1.30.0)", "azure-datalake-store (==0.0.53)", "azure-identity (==1.15.0)", "azure-storage-blob (==12.19.0)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "frozenlist (==1.4.1)", "fsspec (==2024.2.0)", "idna (==3.6)", "isodate (==0.6.1)", "msal (==1.26.0)", "msal-extensions (==1.1.0)", "multidict (==6.0.5)", "packaging (==23.2)", "portalocker (==2.8.2)", "pycparser (==2.21)", "pyjwt[crypto] (==2.8.0)", "requests (==2.31.0)", "six (==1.16.0)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)", "yarl (==1.9.4)"] -azure-cognitive-search = ["azure-common (==1.1.28)", "azure-core (==1.30.0)", "azure-search-documents (==11.4.0)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "idna (==3.6)", "isodate (==0.6.1)", "requests (==2.31.0)", "six (==1.16.0)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)"] -bedrock = ["aiohttp (==3.9.3)", "aiosignal (==1.3.1)", "anyio (==3.7.1)", "async-timeout (==4.0.3)", "attrs (==23.2.0)", "boto3 (==1.28.17)", "botocore (==1.31.17)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "dataclasses-json (==0.6.4)", "exceptiongroup (==1.2.0)", "frozenlist (==1.4.1)", "idna (==3.6)", "jmespath (==1.0.1)", "jsonpatch (==1.33)", "jsonpointer (==2.4)", "langchain-community (==0.0.20)", "langchain-core (==0.1.23)", "langsmith (==0.0.87)", "marshmallow (==3.20.2)", "multidict (==6.0.5)", "mypy-extensions (==1.0.0)", "numpy (==1.26.4)", "packaging (==23.2)", "pydantic (==1.10.14)", "python-dateutil (==2.8.2)", "pyyaml (==6.0.1)", "requests (==2.31.0)", "s3transfer (==0.6.2)", "six (==1.16.0)", "sniffio (==1.3.0)", "sqlalchemy (==2.0.27)", "tenacity (==8.2.3)", "typing-extensions (==4.9.0)", "typing-inspect (==0.9.0)", "urllib3 (==1.26.18)", "yarl (==1.9.4)"] -biomed = ["beautifulsoup4 (==4.12.3)", "bs4 (==0.0.2)", "soupsieve (==2.5)"] -box = ["attrs (==23.2.0)", "boxfs (==0.2.1)", "boxsdk[jwt] (==3.9.2)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "fsspec (==2024.2.0)", "idna (==3.6)", "pycparser (==2.21)", "pyjwt (==2.8.0)", "python-dateutil (==2.8.2)", "requests (==2.31.0)", "requests-toolbelt (==1.0.0)", "six (==1.16.0)", "urllib3 (==1.26.18)"] -chroma = ["anyio (==3.7.1)", "asgiref (==3.7.2)", "backoff (==2.2.1)", "bcrypt (==4.1.2)", "build (==1.0.3)", "cachetools (==5.3.2)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "chroma-hnswlib (==0.7.3)", "chromadb (==0.4.22)", "click (==8.1.7)", "coloredlogs (==15.0.1)", "deprecated (==1.2.14)", "exceptiongroup (==1.2.0)", "fastapi (==0.109.2)", "filelock (==3.13.1)", "flatbuffers (==23.5.26)", "fsspec (==2024.2.0)", "google-auth (==2.28.0)", "googleapis-common-protos (==1.62.0)", "grpcio (==1.60.1)", "h11 (==0.14.0)", "httptools (==0.6.1)", "huggingface-hub (==0.20.3)", "humanfriendly (==10.0)", "idna (==3.6)", "importlib-metadata (==6.11.0)", "importlib-resources (==6.1.1)", "kubernetes (==29.0.0)", "mmh3 (==4.1.0)", "monotonic (==1.6)", "mpmath (==1.3.0)", "numpy (==1.26.4)", "oauthlib (==3.2.2)", "onnxruntime (==1.15.1)", "opentelemetry-api (==1.22.0)", "opentelemetry-exporter-otlp-proto-common (==1.22.0)", "opentelemetry-exporter-otlp-proto-grpc (==1.22.0)", "opentelemetry-instrumentation (==0.43b0)", "opentelemetry-instrumentation-asgi (==0.43b0)", "opentelemetry-instrumentation-fastapi (==0.43b0)", "opentelemetry-proto (==1.22.0)", "opentelemetry-sdk (==1.22.0)", "opentelemetry-semantic-conventions (==0.43b0)", "opentelemetry-util-http (==0.43b0)", "overrides (==7.7.0)", "packaging (==23.2)", "posthog (==3.4.1)", "protobuf (==4.23.4)", "pulsar-client (==3.4.0)", "pyasn1 (==0.5.1)", "pyasn1-modules (==0.3.0)", "pydantic (==1.10.14)", "pypika (==0.48.9)", "pyproject-hooks (==1.0.0)", "python-dateutil (==2.8.2)", "python-dotenv (==1.0.1)", "pyyaml (==6.0.1)", "requests (==2.31.0)", "requests-oauthlib (==1.3.1)", "rsa (==4.9)", "six (==1.16.0)", "sniffio (==1.3.0)", "starlette (==0.36.3)", "sympy (==1.12)", "tenacity (==8.2.3)", "tokenizers (==0.15.2)", "tomli (==2.0.1)", "tqdm (==4.66.2)", "typer (==0.9.0)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)", "uvicorn[standard] (==0.27.1)", "uvloop (==0.19.0)", "watchfiles (==0.21.0)", "websocket-client (==1.7.0)", "websockets (==12.0)", "wrapt (==1.16.0)", "zipp (==3.17.0)"] -confluence = ["atlassian-python-api (==3.41.10)", "beautifulsoup4 (==4.12.3)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "deprecated (==1.2.14)", "idna (==3.6)", "jmespath (==1.0.1)", "oauthlib (==3.2.2)", "requests (==2.31.0)", "requests-oauthlib (==1.3.1)", "six (==1.16.0)", "soupsieve (==2.5)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)"] -csv = ["numpy (==1.26.4)", "pandas (==2.2.0)", "python-dateutil (==2.8.2)", "pytz (==2024.1)", "six (==1.16.0)", "tzdata (==2024.1)"] -databricks-volumes = ["cachetools (==5.3.2)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "databricks-sdk (==0.19.1)", "google-auth (==2.28.0)", "idna (==3.6)", "pyasn1 (==0.5.1)", "pyasn1-modules (==0.3.0)", "requests (==2.31.0)", "rsa (==4.9)", "urllib3 (==1.26.18)"] -delta-table = ["deltalake (==0.15.3)", "fsspec (==2024.2.0)", "numpy (==1.26.4)", "pyarrow (==15.0.0)", "pyarrow-hotfix (==0.6)"] -discord = ["aiohttp (==3.9.3)", "aiosignal (==1.3.1)", "async-timeout (==4.0.3)", "attrs (==23.2.0)", "discord-py (==2.3.2)", "frozenlist (==1.4.1)", "idna (==3.6)", "multidict (==6.0.5)", "yarl (==1.9.4)"] -doc = ["lxml (==5.1.0)", "python-docx (==1.1.0)", "typing-extensions (==4.9.0)"] -docx = ["lxml (==5.1.0)", "python-docx (==1.1.0)", "typing-extensions (==4.9.0)"] -dropbox = ["certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "dropbox (==11.36.2)", "dropboxdrivefs (==1.3.1)", "fsspec (==2024.2.0)", "idna (==3.6)", "ply (==3.11)", "requests (==2.31.0)", "six (==1.16.0)", "stone (==3.3.1)", "urllib3 (==1.26.18)"] -elasticsearch = ["certifi (==2024.2.2)", "elastic-transport (==8.12.0)", "elasticsearch (==8.12.0)", "urllib3 (==1.26.18)"] -embed-huggingface = ["aiohttp (==3.9.3)", "aiosignal (==1.3.1)", "anyio (==3.7.1)", "async-timeout (==4.0.3)", "attrs (==23.2.0)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "click (==8.1.7)", "dataclasses-json (==0.6.4)", "exceptiongroup (==1.2.0)", "filelock (==3.13.1)", "frozenlist (==1.4.1)", "fsspec (==2024.2.0)", "huggingface (==0.0.1)", "huggingface-hub (==0.20.3)", "idna (==3.6)", "jinja2 (==3.1.3)", "joblib (==1.3.2)", "jsonpatch (==1.33)", "jsonpointer (==2.4)", "langchain-community (==0.0.20)", "langchain-core (==0.1.23)", "langsmith (==0.0.87)", "markupsafe (==2.1.5)", "marshmallow (==3.20.2)", "mpmath (==1.3.0)", "multidict (==6.0.5)", "mypy-extensions (==1.0.0)", "networkx (==3.2.1)", "nltk (==3.8.1)", "numpy (==1.26.4)", "packaging (==23.2)", "pillow (==10.2.0)", "pydantic (==1.10.14)", "pyyaml (==6.0.1)", "regex (==2023.12.25)", "requests (==2.31.0)", "safetensors (==0.3.2)", "scikit-learn (==1.4.0)", "scipy (==1.10.1)", "sentence-transformers (==2.3.1)", "sentencepiece (==0.1.99)", "sniffio (==1.3.0)", "sqlalchemy (==2.0.27)", "sympy (==1.12)", "tenacity (==8.2.3)", "threadpoolctl (==3.3.0)", "tokenizers (==0.15.2)", "torch (==2.2.0)", "tqdm (==4.66.2)", "transformers (==4.37.1)", "typing-extensions (==4.9.0)", "typing-inspect (==0.9.0)", "urllib3 (==1.26.18)", "yarl (==1.9.4)"] -epub = ["pypandoc (==1.12)"] -gcs = ["aiohttp (==3.9.3)", "aiosignal (==1.3.1)", "async-timeout (==4.0.3)", "attrs (==23.2.0)", "beautifulsoup4 (==4.12.3)", "bs4 (==0.0.2)", "cachetools (==5.3.2)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "decorator (==5.1.1)", "frozenlist (==1.4.1)", "fsspec (==2024.2.0)", "gcsfs (==2024.2.0)", "google-api-core (==2.17.1)", "google-auth (==2.28.0)", "google-auth-oauthlib (==1.2.0)", "google-cloud-core (==2.4.1)", "google-cloud-storage (==2.14.0)", "google-crc32c (==1.5.0)", "google-resumable-media (==2.7.0)", "googleapis-common-protos (==1.62.0)", "idna (==3.6)", "multidict (==6.0.5)", "oauthlib (==3.2.2)", "protobuf (==4.23.4)", "pyasn1 (==0.5.1)", "pyasn1-modules (==0.3.0)", "requests (==2.31.0)", "requests-oauthlib (==1.3.1)", "rsa (==4.9)", "soupsieve (==2.5)", "urllib3 (==1.26.18)", "yarl (==1.9.4)"] -github = ["certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "deprecated (==1.2.14)", "idna (==3.6)", "pycparser (==2.21)", "pygithub (==2.2.0)", "pyjwt[crypto] (==2.8.0)", "pynacl (==1.5.0)", "requests (==2.31.0)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)"] -gitlab = ["certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "idna (==3.6)", "python-gitlab (==4.4.0)", "requests (==2.31.0)", "requests-toolbelt (==1.0.0)", "urllib3 (==1.26.18)"] -google-drive = ["cachetools (==5.3.2)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "google-api-core (==2.17.1)", "google-api-python-client (==2.118.0)", "google-auth (==2.28.0)", "google-auth-httplib2 (==0.2.0)", "googleapis-common-protos (==1.62.0)", "httplib2 (==0.22.0)", "idna (==3.6)", "protobuf (==4.23.4)", "pyasn1 (==0.5.1)", "pyasn1-modules (==0.3.0)", "pyparsing (==3.0.9)", "requests (==2.31.0)", "rsa (==4.9)", "uritemplate (==4.1.1)", "urllib3 (==1.26.18)"] -hubspot = ["certifi (==2024.2.2)", "hubspot-api-client (==8.2.1)", "python-dateutil (==2.8.2)", "six (==1.16.0)", "urllib3 (==1.26.18)"] -huggingface = ["certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "click (==8.1.7)", "filelock (==3.13.1)", "fsspec (==2024.2.0)", "huggingface-hub (==0.20.3)", "idna (==3.6)", "jinja2 (==3.1.3)", "joblib (==1.3.2)", "langdetect (==1.0.9)", "markupsafe (==2.1.5)", "mpmath (==1.3.0)", "networkx (==3.2.1)", "numpy (==1.26.4)", "packaging (==23.2)", "pyyaml (==6.0.1)", "regex (==2023.12.25)", "requests (==2.31.0)", "sacremoses (==0.1.1)", "safetensors (==0.3.2)", "sentencepiece (==0.1.99)", "six (==1.16.0)", "sympy (==1.12)", "tokenizers (==0.15.2)", "torch (==2.2.0)", "tqdm (==4.66.2)", "transformers (==4.37.1)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)"] -image = ["antlr4-python3-runtime (==4.9.3)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "coloredlogs (==15.0.1)", "contourpy (==1.2.0)", "cryptography (==42.0.2)", "cycler (==0.12.1)", "deprecated (==1.2.14)", "effdet (==0.4.1)", "filelock (==3.13.1)", "flatbuffers (==23.5.26)", "fonttools (==4.49.0)", "fsspec (==2024.2.0)", "huggingface-hub (==0.20.3)", "humanfriendly (==10.0)", "idna (==3.6)", "importlib-resources (==6.1.1)", "iopath (==0.1.10)", "jinja2 (==3.1.3)", "kiwisolver (==1.4.5)", "layoutparser[layoutmodels,tesseract] (==0.3.4)", "lxml (==5.1.0)", "markupsafe (==2.1.5)", "matplotlib (==3.7.2)", "mpmath (==1.3.0)", "networkx (==3.2.1)", "numpy (==1.26.4)", "omegaconf (==2.3.0)", "onnx (==1.15.0)", "onnxruntime (==1.15.1)", "opencv-python (==4.8.0.76)", "packaging (==23.2)", "pandas (==2.2.0)", "pdf2image (==1.17.0)", "pdfminer-six (==20221105)", "pdfplumber (==0.10.4)", "pikepdf (==8.11.0)", "pillow (==10.2.0)", "pillow-heif (==0.15.0)", "portalocker (==2.8.2)", "protobuf (==4.23.4)", "pycocotools (==2.0.7)", "pycparser (==2.21)", "pyparsing (==3.0.9)", "pypdf (==4.0.1)", "pypdfium2 (==4.27.0)", "pytesseract (==0.3.10)", "python-dateutil (==2.8.2)", "python-multipart (==0.0.9)", "pytz (==2024.1)", "pyyaml (==6.0.1)", "rapidfuzz (==3.6.1)", "regex (==2023.12.25)", "requests (==2.31.0)", "safetensors (==0.3.2)", "scipy (==1.10.1)", "six (==1.16.0)", "sympy (==1.12)", "timm (==0.9.12)", "tokenizers (==0.15.2)", "torch (==2.2.0)", "torchvision (==0.17.0)", "tqdm (==4.66.2)", "transformers (==4.37.1)", "typing-extensions (==4.9.0)", "tzdata (==2024.1)", "unstructured-inference (==0.7.23)", "unstructured-pytesseract (==0.3.12)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)", "zipp (==3.17.0)"] -jira = ["atlassian-python-api (==3.41.10)", "beautifulsoup4 (==4.12.3)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "deprecated (==1.2.14)", "idna (==3.6)", "jmespath (==1.0.1)", "oauthlib (==3.2.2)", "requests (==2.31.0)", "requests-oauthlib (==1.3.1)", "six (==1.16.0)", "soupsieve (==2.5)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)"] -local-inference = ["antlr4-python3-runtime (==4.9.3)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "coloredlogs (==15.0.1)", "contourpy (==1.2.0)", "cryptography (==42.0.2)", "cycler (==0.12.1)", "deprecated (==1.2.14)", "effdet (==0.4.1)", "et-xmlfile (==1.1.0)", "filelock (==3.13.1)", "flatbuffers (==23.5.26)", "fonttools (==4.49.0)", "fsspec (==2024.2.0)", "huggingface-hub (==0.20.3)", "humanfriendly (==10.0)", "idna (==3.6)", "importlib-metadata (==7.0.1)", "importlib-resources (==6.1.1)", "iopath (==0.1.10)", "jinja2 (==3.1.3)", "kiwisolver (==1.4.5)", "layoutparser[layoutmodels,tesseract] (==0.3.4)", "lxml (==5.1.0)", "markdown (==3.5.2)", "markupsafe (==2.1.5)", "matplotlib (==3.7.2)", "mpmath (==1.3.0)", "msg-parser (==1.2.0)", "networkx (==3.2.1)", "numpy (==1.26.4)", "olefile (==0.47)", "omegaconf (==2.3.0)", "onnx (==1.15.0)", "onnxruntime (==1.15.1)", "opencv-python (==4.8.0.76)", "openpyxl (==3.1.2)", "packaging (==23.2)", "pandas (==2.2.0)", "pdf2image (==1.17.0)", "pdfminer-six (==20221105)", "pdfplumber (==0.10.4)", "pikepdf (==8.11.0)", "pillow (==10.2.0)", "pillow-heif (==0.15.0)", "portalocker (==2.8.2)", "protobuf (==4.23.4)", "pycocotools (==2.0.7)", "pycparser (==2.21)", "pypandoc (==1.12)", "pyparsing (==3.0.9)", "pypdf (==4.0.1)", "pypdfium2 (==4.27.0)", "pytesseract (==0.3.10)", "python-dateutil (==2.8.2)", "python-docx (==1.1.0)", "python-multipart (==0.0.9)", "python-pptx (==0.6.23)", "pytz (==2024.1)", "pyyaml (==6.0.1)", "rapidfuzz (==3.6.1)", "regex (==2023.12.25)", "requests (==2.31.0)", "safetensors (==0.3.2)", "scipy (==1.10.1)", "six (==1.16.0)", "sympy (==1.12)", "timm (==0.9.12)", "tokenizers (==0.15.2)", "torch (==2.2.0)", "torchvision (==0.17.0)", "tqdm (==4.66.2)", "transformers (==4.37.1)", "typing-extensions (==4.9.0)", "tzdata (==2024.1)", "unstructured-inference (==0.7.23)", "unstructured-pytesseract (==0.3.12)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)", "xlrd (==2.0.1)", "xlsxwriter (==3.1.9)", "zipp (==3.17.0)"] -md = ["importlib-metadata (==7.0.1)", "markdown (==3.5.2)", "zipp (==3.17.0)"] -mongodb = ["dnspython (==2.5.0)", "pymongo (==4.6.1)"] -msg = ["msg-parser (==1.2.0)", "olefile (==0.47)"] -notion = ["anyio (==3.7.1)", "certifi (==2024.2.2)", "exceptiongroup (==1.2.0)", "h11 (==0.14.0)", "htmlbuilder (==1.0.0)", "httpcore (==1.0.3)", "httpx (==0.26.0)", "idna (==3.6)", "notion-client (==2.2.1)", "sniffio (==1.3.0)"] -odt = ["lxml (==5.1.0)", "pypandoc (==1.12)", "python-docx (==1.1.0)", "typing-extensions (==4.9.0)"] -onedrive = ["beautifulsoup4 (==4.12.3)", "bs4 (==0.0.2)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "idna (==3.6)", "msal (==1.26.0)", "office365-rest-python-client (==2.4.2)", "pycparser (==2.21)", "pyjwt[crypto] (==2.8.0)", "pytz (==2024.1)", "requests (==2.31.0)", "soupsieve (==2.5)", "urllib3 (==1.26.18)"] -openai = ["aiohttp (==3.9.3)", "aiosignal (==1.3.1)", "anyio (==3.7.1)", "async-timeout (==4.0.3)", "attrs (==23.2.0)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "dataclasses-json (==0.6.4)", "distro (==1.9.0)", "exceptiongroup (==1.2.0)", "frozenlist (==1.4.1)", "h11 (==0.14.0)", "httpcore (==1.0.3)", "httpx (==0.26.0)", "idna (==3.6)", "jsonpatch (==1.33)", "jsonpointer (==2.4)", "langchain-community (==0.0.20)", "langchain-core (==0.1.23)", "langsmith (==0.0.87)", "marshmallow (==3.20.2)", "multidict (==6.0.5)", "mypy-extensions (==1.0.0)", "numpy (==1.26.4)", "openai (==1.12.0)", "packaging (==23.2)", "pydantic (==1.10.14)", "pyyaml (==6.0.1)", "regex (==2023.12.25)", "requests (==2.31.0)", "sniffio (==1.3.0)", "sqlalchemy (==2.0.27)", "tenacity (==8.2.3)", "tiktoken (==0.6.0)", "tqdm (==4.66.2)", "typing-extensions (==4.9.0)", "typing-inspect (==0.9.0)", "urllib3 (==1.26.18)", "yarl (==1.9.4)"] -opensearch = ["certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "idna (==3.6)", "opensearch-py (==2.4.2)", "python-dateutil (==2.8.2)", "requests (==2.31.0)", "six (==1.16.0)", "urllib3 (==1.26.18)"] -org = ["pypandoc (==1.12)"] -outlook = ["certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "idna (==3.6)", "msal (==1.26.0)", "office365-rest-python-client (==2.4.2)", "pycparser (==2.21)", "pyjwt[crypto] (==2.8.0)", "pytz (==2024.1)", "requests (==2.31.0)", "urllib3 (==1.26.18)"] -paddleocr = ["attrdict (==2.0.1)", "babel (==2.14.0)", "bce-python-sdk (==0.9.4)", "blinker (==1.7.0)", "cachetools (==5.3.2)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "click (==8.1.7)", "contourpy (==1.2.0)", "cssselect (==1.2.0)", "cssutils (==2.9.0)", "cycler (==0.12.1)", "cython (==3.0.8)", "et-xmlfile (==1.1.0)", "flask (==3.0.2)", "flask-babel (==4.0.0)", "fonttools (==4.49.0)", "future (==0.18.3)", "idna (==3.6)", "imageio (==2.34.0)", "imgaug (==0.4.0)", "importlib-metadata (==7.0.1)", "importlib-resources (==6.1.1)", "itsdangerous (==2.1.2)", "jinja2 (==3.1.3)", "kiwisolver (==1.4.5)", "lanms-neo (==1.0.2)", "lazy-loader (==0.3)", "lmdb (==1.4.1)", "lxml (==5.1.0)", "markupsafe (==2.1.5)", "matplotlib (==3.7.2)", "networkx (==3.2.1)", "numpy (==1.26.4)", "opencv-contrib-python (==4.8.0.76)", "opencv-python (==4.8.0.76)", "openpyxl (==3.1.2)", "packaging (==23.2)", "pandas (==2.2.0)", "pdf2image (==1.17.0)", "pillow (==10.2.0)", "polygon3 (==3.0.9.1)", "premailer (==3.10.0)", "protobuf (==4.23.4)", "psutil (==5.9.8)", "pyclipper (==1.3.0.post5)", "pycryptodome (==3.20.0)", "pyparsing (==3.0.9)", "python-dateutil (==2.8.2)", "pytz (==2024.1)", "rapidfuzz (==3.6.1)", "rarfile (==4.1)", "requests (==2.31.0)", "scikit-image (==0.22.0)", "scipy (==1.10.1)", "shapely (==2.0.2)", "six (==1.16.0)", "tifffile (==2024.2.12)", "tqdm (==4.66.2)", "tzdata (==2024.1)", "unstructured-paddleocr (==2.6.1.3)", "urllib3 (==1.26.18)", "visualdl (==2.5.3)", "werkzeug (==3.0.1)", "zipp (==3.17.0)"] -pdf = ["antlr4-python3-runtime (==4.9.3)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "coloredlogs (==15.0.1)", "contourpy (==1.2.0)", "cryptography (==42.0.2)", "cycler (==0.12.1)", "deprecated (==1.2.14)", "effdet (==0.4.1)", "filelock (==3.13.1)", "flatbuffers (==23.5.26)", "fonttools (==4.49.0)", "fsspec (==2024.2.0)", "huggingface-hub (==0.20.3)", "humanfriendly (==10.0)", "idna (==3.6)", "importlib-resources (==6.1.1)", "iopath (==0.1.10)", "jinja2 (==3.1.3)", "kiwisolver (==1.4.5)", "layoutparser[layoutmodels,tesseract] (==0.3.4)", "lxml (==5.1.0)", "markupsafe (==2.1.5)", "matplotlib (==3.7.2)", "mpmath (==1.3.0)", "networkx (==3.2.1)", "numpy (==1.26.4)", "omegaconf (==2.3.0)", "onnx (==1.15.0)", "onnxruntime (==1.15.1)", "opencv-python (==4.8.0.76)", "packaging (==23.2)", "pandas (==2.2.0)", "pdf2image (==1.17.0)", "pdfminer-six (==20221105)", "pdfplumber (==0.10.4)", "pikepdf (==8.11.0)", "pillow (==10.2.0)", "pillow-heif (==0.15.0)", "portalocker (==2.8.2)", "protobuf (==4.23.4)", "pycocotools (==2.0.7)", "pycparser (==2.21)", "pyparsing (==3.0.9)", "pypdf (==4.0.1)", "pypdfium2 (==4.27.0)", "pytesseract (==0.3.10)", "python-dateutil (==2.8.2)", "python-multipart (==0.0.9)", "pytz (==2024.1)", "pyyaml (==6.0.1)", "rapidfuzz (==3.6.1)", "regex (==2023.12.25)", "requests (==2.31.0)", "safetensors (==0.3.2)", "scipy (==1.10.1)", "six (==1.16.0)", "sympy (==1.12)", "timm (==0.9.12)", "tokenizers (==0.15.2)", "torch (==2.2.0)", "torchvision (==0.17.0)", "tqdm (==4.66.2)", "transformers (==4.37.1)", "typing-extensions (==4.9.0)", "tzdata (==2024.1)", "unstructured-inference (==0.7.23)", "unstructured-pytesseract (==0.3.12)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)", "zipp (==3.17.0)"] -pinecone = ["certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "dnspython (==2.5.0)", "idna (==3.6)", "loguru (==0.7.2)", "numpy (==1.26.4)", "pinecone-client (==2.2.4)", "python-dateutil (==2.8.2)", "pyyaml (==6.0.1)", "requests (==2.31.0)", "six (==1.16.0)", "tqdm (==4.66.2)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)"] -postgres = ["psycopg2-binary (==2.9.9)"] -ppt = ["lxml (==5.1.0)", "pillow (==10.2.0)", "python-pptx (==0.6.23)", "xlsxwriter (==3.1.9)"] -pptx = ["lxml (==5.1.0)", "pillow (==10.2.0)", "python-pptx (==0.6.23)", "xlsxwriter (==3.1.9)"] -qdrant = ["anyio (==3.7.1)", "certifi (==2024.2.2)", "exceptiongroup (==1.2.0)", "grpcio (==1.60.1)", "grpcio-tools (==1.60.1)", "h11 (==0.14.0)", "h2 (==4.1.0)", "hpack (==4.0.0)", "httpcore (==1.0.3)", "httpx[http2] (==0.26.0)", "hyperframe (==6.0.1)", "idna (==3.6)", "numpy (==1.26.4)", "portalocker (==2.8.2)", "protobuf (==4.23.4)", "pydantic (==1.10.14)", "qdrant-client (==1.7.3)", "sniffio (==1.3.0)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)"] -reddit = ["certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "idna (==3.6)", "praw (==7.7.1)", "prawcore (==2.4.0)", "requests (==2.31.0)", "update-checker (==0.18.0)", "urllib3 (==1.26.18)", "websocket-client (==1.7.0)"] -rst = ["pypandoc (==1.12)"] -rtf = ["pypandoc (==1.12)"] -s3 = ["aiobotocore (==2.7.0)", "aiohttp (==3.9.3)", "aioitertools (==0.11.0)", "aiosignal (==1.3.1)", "async-timeout (==4.0.3)", "attrs (==23.2.0)", "botocore (==1.31.17)", "frozenlist (==1.4.1)", "fsspec (==2024.2.0)", "idna (==3.6)", "jmespath (==1.0.1)", "multidict (==6.0.5)", "python-dateutil (==2.8.2)", "s3fs (==2024.2.0)", "six (==1.16.0)", "typing-extensions (==4.9.0)", "urllib3 (==1.26.18)", "wrapt (==1.16.0)", "yarl (==1.9.4)"] -salesforce = ["attrs (==23.2.0)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "idna (==3.6)", "isodate (==0.6.1)", "lxml (==5.1.0)", "more-itertools (==10.2.0)", "pendulum (==3.0.0)", "platformdirs (==3.10.0)", "pycparser (==2.21)", "pyjwt (==2.8.0)", "python-dateutil (==2.8.2)", "pytz (==2024.1)", "requests (==2.31.0)", "requests-file (==2.0.0)", "requests-toolbelt (==1.0.0)", "simple-salesforce (==1.12.5)", "six (==1.16.0)", "time-machine (==2.13.0)", "tzdata (==2024.1)", "urllib3 (==1.26.18)", "zeep (==4.2.1)"] -sftp = ["bcrypt (==4.1.2)", "cffi (==1.16.0)", "cryptography (==42.0.2)", "fsspec (==2024.2.0)", "paramiko (==3.4.0)", "pycparser (==2.21)", "pynacl (==1.5.0)"] -sharepoint = ["certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "idna (==3.6)", "msal (==1.26.0)", "office365-rest-python-client (==2.4.2)", "pycparser (==2.21)", "pyjwt[crypto] (==2.8.0)", "pytz (==2024.1)", "requests (==2.31.0)", "urllib3 (==1.26.18)"] -slack = ["slack-sdk (==3.27.0)"] -tsv = ["numpy (==1.26.4)", "pandas (==2.2.0)", "python-dateutil (==2.8.2)", "pytz (==2024.1)", "six (==1.16.0)", "tzdata (==2024.1)"] -weaviate = ["authlib (==1.3.0)", "certifi (==2024.2.2)", "cffi (==1.16.0)", "charset-normalizer (==3.3.2)", "cryptography (==42.0.2)", "idna (==3.6)", "pycparser (==2.21)", "requests (==2.31.0)", "urllib3 (==1.26.18)", "validators (==0.22.0)", "weaviate-client (==3.26.2)"] -wikipedia = ["beautifulsoup4 (==4.12.3)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "idna (==3.6)", "requests (==2.31.0)", "soupsieve (==2.5)", "urllib3 (==1.26.18)", "wikipedia (==1.4.0)"] -xlsx = ["et-xmlfile (==1.1.0)", "networkx (==3.2.1)", "numpy (==1.26.4)", "openpyxl (==3.1.2)", "pandas (==2.2.0)", "python-dateutil (==2.8.2)", "pytz (==2024.1)", "six (==1.16.0)", "tzdata (==2024.1)", "xlrd (==2.0.1)"] +all-docs = ["effdet", "google-cloud-vision", "markdown", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pi-heif", "pikepdf", "pypandoc", "pypdf", "python-docx (>=1.1.2)", "python-pptx (>=1.0.1)", "unstructured-inference (>=0.8.6)", "unstructured.pytesseract (>=0.3.12)", "xlrd"] +csv = ["pandas"] +doc = ["python-docx (>=1.1.2)"] +docx = ["python-docx (>=1.1.2)"] +epub = ["pypandoc"] +huggingface = ["langdetect", "sacremoses", "sentencepiece", "torch", "transformers"] +image = ["effdet", "google-cloud-vision", "onnx", "pdf2image", "pdfminer.six", "pi-heif", "pikepdf", "pypdf", "unstructured-inference (>=0.8.6)", "unstructured.pytesseract (>=0.3.12)"] +local-inference = ["effdet", "google-cloud-vision", "markdown", "networkx", "onnx", "openpyxl", "pandas", "pdf2image", "pdfminer.six", "pi-heif", "pikepdf", "pypandoc", "pypdf", "python-docx (>=1.1.2)", "python-pptx (>=1.0.1)", "unstructured-inference (>=0.8.6)", "unstructured.pytesseract (>=0.3.12)", "xlrd"] +md = ["markdown"] +odt = ["pypandoc", "python-docx (>=1.1.2)"] +org = ["pypandoc"] +paddleocr = ["paddlepaddle (==3.0.0b1)", "unstructured.paddleocr (==2.8.1.0)"] +pdf = ["effdet", "google-cloud-vision", "onnx", "pdf2image", "pdfminer.six", "pi-heif", "pikepdf", "pypdf", "unstructured-inference (>=0.8.6)", "unstructured.pytesseract (>=0.3.12)"] +ppt = ["python-pptx (>=1.0.1)"] +pptx = ["python-pptx (>=1.0.1)"] +rst = ["pypandoc"] +rtf = ["pypandoc"] +tsv = ["pandas"] +xlsx = ["networkx", "openpyxl", "pandas", "xlrd"] [[package]] name = "unstructured-client" @@ -5067,6 +5381,7 @@ version = "0.18.0" description = "Python Client SDK for Unstructured API" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "unstructured-client-0.18.0.tar.gz", hash = "sha256:b5f1866b6a48d2e28645e37e86c9d58b1ee7df2d88e79adf873572338c027aa8"}, {file = "unstructured_client-0.18.0-py3-none-any.whl", hash = "sha256:36d8c5cb01b97a87e271e11d4d5a063d1c5b85fc5fd7f07819c35a9bef74821f"}, @@ -5097,6 +5412,7 @@ version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, @@ -5111,6 +5427,7 @@ version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +groups = ["main"] files = [ {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, @@ -5127,6 +5444,7 @@ version = "0.28.1" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "uvicorn-0.28.1-py3-none-any.whl", hash = "sha256:5162f6d652f545be91b1feeaee8180774af143965ca9dc8a47ff1dc6bafa4ad5"}, {file = "uvicorn-0.28.1.tar.gz", hash = "sha256:08103e79d546b6cf20f67c7e5e434d2cf500a6e29b28773e407250c54fc4fa3c"}, @@ -5153,6 +5471,8 @@ version = "0.19.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = false python-versions = ">=3.8.0" +groups = ["main"] +markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\"" files = [ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, @@ -5197,6 +5517,7 @@ version = "0.21.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, @@ -5284,6 +5605,7 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -5295,6 +5617,7 @@ version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, @@ -5310,6 +5633,7 @@ version = "0.5.1" description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -5321,6 +5645,7 @@ version = "1.7.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, @@ -5337,6 +5662,7 @@ version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, @@ -5418,6 +5744,7 @@ version = "4.0.10" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "widgetsnbextension-4.0.10-py3-none-any.whl", hash = "sha256:d37c3724ec32d8c48400a435ecfa7d3e259995201fbefa37163124a9fcb393cc"}, {file = "widgetsnbextension-4.0.10.tar.gz", hash = "sha256:64196c5ff3b9a9183a8e699a4227fb0b7002f252c814098e66c4d1cd0644688f"}, @@ -5429,6 +5756,7 @@ version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, @@ -5508,6 +5836,7 @@ version = "3.2.0" description = "A Python module for creating Excel XLSX files." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"}, {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"}, @@ -5519,6 +5848,7 @@ version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, @@ -5622,6 +5952,7 @@ version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, @@ -5632,6 +5963,6 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] -lock-version = "2.0" -python-versions = ">3.10,<3.11" -content-hash = "c0516c8ddfbb919e01c9ccddc1a2b260f41dbea71d307a645c9ad05b6ddd0af6" +lock-version = "2.1" +python-versions = ">3.10,<3.13" +content-hash = "436a7b88018348f66ca44cc039cf535952552b5a80b538277ddf6a8d009a4a83" diff --git a/pyproject.toml b/pyproject.toml index 11e73c6..e52cf8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,13 +2,12 @@ name = "formulallm" version = "0.1.2" description = "" -authors = ["Aadi Bajpai ","Stephen Johnson "] +authors = ["Aadi Bajpai ","Stephen Johnson ","Qishen Zhang "] readme = "README.md" packages = [{include = "formulallm"}] [tool.poetry.dependencies] -python = ">3.10,<3.11" -openai = "0.28.1" +python = ">3.10,<3.13" langchain = "0.1.8" langsmith = "0.1.5" langchain_community = "0.0.28" @@ -19,9 +18,11 @@ pillow = "10.2.0" ipython = "8.21.0" pymupdf = "^1.23.26" chromadb = "^0.4.24" -unstructured = "^0.12.6" +unstructured = "^0.16.17" python-pptx = "^0.6.23" python-docx = "^1.1.0" +openai = "^1.61.0" +pypdf2 = "^3.0.1" [build-system] requires = ["poetry-core"] From 9371a730d9d2301e5373b89b5242174cfbac67e8 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Fri, 31 Jan 2025 17:29:05 -0500 Subject: [PATCH 03/20] Add data files for parser DSL --- examples/data/parser/GeneratedTar.4ml | 2157 +++++++++++++++++++++++ examples/data/parser/ParserDSL.4ml | 46 + examples/data/parser/TinyDemoParser.4ml | 59 + examples/data/parser/formula.pdf | Bin 0 -> 549675 bytes examples/data/parser/untar1.c | 201 +++ examples/data/parser/untar2.c | 342 ++++ 6 files changed, 2805 insertions(+) create mode 100644 examples/data/parser/GeneratedTar.4ml create mode 100644 examples/data/parser/ParserDSL.4ml create mode 100644 examples/data/parser/TinyDemoParser.4ml create mode 100644 examples/data/parser/formula.pdf create mode 100644 examples/data/parser/untar1.c create mode 100644 examples/data/parser/untar2.c diff --git a/examples/data/parser/GeneratedTar.4ml b/examples/data/parser/GeneratedTar.4ml new file mode 100644 index 0000000..cdf7010 --- /dev/null +++ b/examples/data/parser/GeneratedTar.4ml @@ -0,0 +1,2157 @@ +domain TarParser extends GenericDataParser at "ParserDSL.4ml" { + IntermediateResult("in_block", state, 0) :- + state is State(inputData, INIT, 0, 0). + + IntermediateResult("in_block", state, 1) :- + state is State(inputData, _, _, _), + IntermediateResult("in_block", state, 0), + IntermediateResult("size", state, sizeVal), + sizeVal = 0. + + IntermediateResult("in_block", state, 0) :- + state is State(inputData, _, _, _), + IntermediateResult("in_block", state, 1), + IntermediateResult("size", state, sizeVal), + sizeVal = 0. + + IntermediateResult("directory", state, 0), + IntermediateResult("files", state, newFilesVal) :- + state is State(inputData, READ, pos, offset), + IntermediateResult("files", state, filesVal), + newFilesVal = filesVal + 1, + IntermediateResult("in_block", state, inBlockVal), + inBlockVal = 0, + Byte(inputData, typeByte, pos + 156), + typeByte = 77. + + IntermediateResult("directory", state, 1) :- + state is State(inputData, READ, pos, offset), + IntermediateResult("in_block", state, inBlockVal), + inBlockVal = 0, + Byte(inputData, typeByte, pos + 156), + typeByte = 86. + + IntermediateResult("directory", state, 0), + IntermediateResult("skipEntry", state, 1) :- + state is State(inputData, READ, pos, offset), + IntermediateResult("in_block", state, inBlockVal), + inBlockVal = 0, + Byte(inputData, typeByte, pos + 156), + typeByte = 88. + + IntermediateResult("fileType", state, "UNKNOWN") :- + state is State(inputData, READ, pos, offset), + IntermediateResult("in_block", state, inBlockVal), + inBlockVal = 0, + Byte(inputData, typeByte, pos + 156), + typeByte != 77, + typeByte != 86, + typeByte != 88. + + IntermediateResult("size", state, sizeVal) :- + state is State(inputData, _, pos, offset), + Byte(inputData, b1, pos + 156), + Byte(inputData, b2, pos + 157), + Byte(inputData, b3, pos + 158), + sizeVal = b1*b2*b3. + + IntermediateResult("nskip", state, nskipVal) :- + state is State(inputData, _, pos, offset), + IntermediateResult("size", state, sizeVal), + nskipVal = sizeVal. + + IntermediateResult("skipEntry", state, newSkipEntryVal) :- + state is State(inputData, READ, pos, offset), + IntermediateResult("in_block", state, inBlockVal), + inBlockVal = 0, + IntermediateResult("size", state, sizeVal), + sizeVal < 0, + IntermediateResult("skipEntry", state, skipEntryVal), + newSkipEntryVal = skipEntryVal + 1, + Byte(inputData, typeByte, pos + 156), + typeByte = 88. + + IntermediateResult("nread", state, nreadVal) :- + inputData is InputData(_, _, length), + state is State(inputData, _, pos, offset), + pos + offset < length, + nreadVal = 512. + + IntermediateResult("nread", state, nreadVal) :- + inputData is InputData(_, _, length), + state is State(inputData, _, pos, offset), + pos + offset >= length, + nreadVal = (pos + offset) % 512. + + hasOverRead :- OverRead(state). + + ContinueCondition(state) :- CanReadMore(state). + + NextPos(state, newPos) :- + state is State(inputData, _, pos, offset), + IntermediateResult("nskip", state, nskipVal), + newPos = pos + offset + nskipVal. + + NextOffset(state, newOffset) :- + state is State(inputData, _, pos, offset), + newOffset = 512. +} + + +model wrongModel of TarParser { +inputData is InputData("tarfile", "data", 1024). +initState is State(inputData, INIT, 0, 0). +Byte(inputData,1,0). +Byte(inputData,1,1). +Byte(inputData,1,2). +Byte(inputData,1,3). +Byte(inputData,1,4). +Byte(inputData,1,5). +Byte(inputData,1,6). +Byte(inputData,1,7). +Byte(inputData,1,8). +Byte(inputData,1,9). +Byte(inputData,1,10). +Byte(inputData,1,11). +Byte(inputData,1,12). +Byte(inputData,1,13). +Byte(inputData,1,14). +Byte(inputData,1,15). +Byte(inputData,1,16). +Byte(inputData,1,17). +Byte(inputData,1,18). +Byte(inputData,1,19). +Byte(inputData,1,20). +Byte(inputData,1,21). +Byte(inputData,1,22). +Byte(inputData,1,23). +Byte(inputData,1,24). +Byte(inputData,1,25). +Byte(inputData,1,26). +Byte(inputData,1,27). +Byte(inputData,1,28). +Byte(inputData,1,29). +Byte(inputData,1,30). +Byte(inputData,1,31). +Byte(inputData,1,32). +Byte(inputData,1,33). +Byte(inputData,1,34). +Byte(inputData,1,35). +Byte(inputData,1,36). +Byte(inputData,1,37). +Byte(inputData,1,38). +Byte(inputData,1,39). +Byte(inputData,1,40). +Byte(inputData,1,41). +Byte(inputData,1,42). +Byte(inputData,1,43). +Byte(inputData,1,44). +Byte(inputData,1,45). +Byte(inputData,1,46). +Byte(inputData,1,47). +Byte(inputData,1,48). +Byte(inputData,1,49). +Byte(inputData,1,50). +Byte(inputData,1,51). +Byte(inputData,1,52). +Byte(inputData,1,53). +Byte(inputData,1,54). +Byte(inputData,1,55). +Byte(inputData,1,56). +Byte(inputData,1,57). +Byte(inputData,1,58). +Byte(inputData,1,59). +Byte(inputData,1,60). +Byte(inputData,1,61). +Byte(inputData,1,62). +Byte(inputData,1,63). +Byte(inputData,1,64). +Byte(inputData,1,65). +Byte(inputData,1,66). +Byte(inputData,1,67). +Byte(inputData,1,68). +Byte(inputData,1,69). +Byte(inputData,1,70). +Byte(inputData,1,71). +Byte(inputData,1,72). +Byte(inputData,1,73). +Byte(inputData,1,74). +Byte(inputData,1,75). +Byte(inputData,1,76). +Byte(inputData,1,77). +Byte(inputData,1,78). +Byte(inputData,1,79). +Byte(inputData,1,80). +Byte(inputData,1,81). +Byte(inputData,1,82). +Byte(inputData,1,83). +Byte(inputData,1,84). +Byte(inputData,1,85). +Byte(inputData,1,86). +Byte(inputData,1,87). +Byte(inputData,1,88). +Byte(inputData,1,89). +Byte(inputData,1,90). +Byte(inputData,1,91). +Byte(inputData,1,92). +Byte(inputData,1,93). +Byte(inputData,1,94). +Byte(inputData,1,95). +Byte(inputData,1,96). +Byte(inputData,1,97). +Byte(inputData,1,98). +Byte(inputData,1,99). +Byte(inputData,1,100). +Byte(inputData,1,101). +Byte(inputData,1,102). +Byte(inputData,1,103). +Byte(inputData,1,104). +Byte(inputData,1,105). +Byte(inputData,1,106). +Byte(inputData,1,107). +Byte(inputData,1,108). +Byte(inputData,1,109). +Byte(inputData,1,110). +Byte(inputData,1,111). +Byte(inputData,1,112). +Byte(inputData,1,113). +Byte(inputData,1,114). +Byte(inputData,1,115). +Byte(inputData,1,116). +Byte(inputData,1,117). +Byte(inputData,1,118). +Byte(inputData,1,119). +Byte(inputData,1,120). +Byte(inputData,1,121). +Byte(inputData,1,122). +Byte(inputData,1,123). +Byte(inputData,1,124). +Byte(inputData,1,125). +Byte(inputData,1,126). +Byte(inputData,1,127). +Byte(inputData,1,128). +Byte(inputData,1,129). +Byte(inputData,1,130). +Byte(inputData,1,131). +Byte(inputData,1,132). +Byte(inputData,1,133). +Byte(inputData,1,134). +Byte(inputData,1,135). +Byte(inputData,1,136). +Byte(inputData,1,137). +Byte(inputData,1,138). +Byte(inputData,1,139). +Byte(inputData,1,140). +Byte(inputData,1,141). +Byte(inputData,1,142). +Byte(inputData,1,143). +Byte(inputData,1,144). +Byte(inputData,1,145). +Byte(inputData,1,146). +Byte(inputData,1,147). +Byte(inputData,1,148). +Byte(inputData,1,149). +Byte(inputData,1,150). +Byte(inputData,1,151). +Byte(inputData,1,152). +Byte(inputData,1,153). +Byte(inputData,1,154). +Byte(inputData,1,155). +Byte(inputData,-100,156). +Byte(inputData,1,157). +Byte(inputData,1,158). +Byte(inputData,1,159). +Byte(inputData,1,160). +Byte(inputData,1,161). +Byte(inputData,1,162). +Byte(inputData,1,163). +Byte(inputData,1,164). +Byte(inputData,1,165). +Byte(inputData,1,166). +Byte(inputData,1,167). +Byte(inputData,1,168). +Byte(inputData,1,169). +Byte(inputData,1,170). +Byte(inputData,1,171). +Byte(inputData,1,172). +Byte(inputData,1,173). +Byte(inputData,1,174). +Byte(inputData,1,175). +Byte(inputData,1,176). +Byte(inputData,1,177). +Byte(inputData,1,178). +Byte(inputData,1,179). +Byte(inputData,1,180). +Byte(inputData,1,181). +Byte(inputData,1,182). +Byte(inputData,1,183). +Byte(inputData,1,184). +Byte(inputData,1,185). +Byte(inputData,1,186). +Byte(inputData,1,187). +Byte(inputData,1,188). +Byte(inputData,1,189). +Byte(inputData,1,190). +Byte(inputData,1,191). +Byte(inputData,1,192). +Byte(inputData,1,193). +Byte(inputData,1,194). +Byte(inputData,1,195). +Byte(inputData,1,196). +Byte(inputData,1,197). +Byte(inputData,1,198). +Byte(inputData,1,199). +Byte(inputData,1,200). +Byte(inputData,1,201). +Byte(inputData,1,202). +Byte(inputData,1,203). +Byte(inputData,1,204). +Byte(inputData,1,205). +Byte(inputData,1,206). +Byte(inputData,1,207). +Byte(inputData,1,208). +Byte(inputData,1,209). +Byte(inputData,1,210). +Byte(inputData,1,211). +Byte(inputData,1,212). +Byte(inputData,1,213). +Byte(inputData,1,214). +Byte(inputData,1,215). +Byte(inputData,1,216). +Byte(inputData,1,217). +Byte(inputData,1,218). +Byte(inputData,1,219). +Byte(inputData,1,220). +Byte(inputData,1,221). +Byte(inputData,1,222). +Byte(inputData,1,223). +Byte(inputData,1,224). +Byte(inputData,1,225). +Byte(inputData,1,226). +Byte(inputData,1,227). +Byte(inputData,1,228). +Byte(inputData,1,229). +Byte(inputData,1,230). +Byte(inputData,1,231). +Byte(inputData,1,232). +Byte(inputData,1,233). +Byte(inputData,1,234). +Byte(inputData,1,235). +Byte(inputData,1,236). +Byte(inputData,1,237). +Byte(inputData,1,238). +Byte(inputData,1,239). +Byte(inputData,1,240). +Byte(inputData,1,241). +Byte(inputData,1,242). +Byte(inputData,1,243). +Byte(inputData,1,244). +Byte(inputData,1,245). +Byte(inputData,1,246). +Byte(inputData,1,247). +Byte(inputData,1,248). +Byte(inputData,1,249). +Byte(inputData,1,250). +Byte(inputData,1,251). +Byte(inputData,1,252). +Byte(inputData,1,253). +Byte(inputData,1,254). +Byte(inputData,1,255). +Byte(inputData,1,256). +Byte(inputData,1,257). +Byte(inputData,1,258). +Byte(inputData,1,259). +Byte(inputData,1,260). +Byte(inputData,1,261). +Byte(inputData,1,262). +Byte(inputData,1,263). +Byte(inputData,1,264). +Byte(inputData,1,265). +Byte(inputData,1,266). +Byte(inputData,1,267). +Byte(inputData,1,268). +Byte(inputData,1,269). +Byte(inputData,1,270). +Byte(inputData,1,271). +Byte(inputData,1,272). +Byte(inputData,1,273). +Byte(inputData,1,274). +Byte(inputData,1,275). +Byte(inputData,1,276). +Byte(inputData,1,277). +Byte(inputData,1,278). +Byte(inputData,1,279). +Byte(inputData,1,280). +Byte(inputData,1,281). +Byte(inputData,1,282). +Byte(inputData,1,283). +Byte(inputData,1,284). +Byte(inputData,1,285). +Byte(inputData,1,286). +Byte(inputData,1,287). +Byte(inputData,1,288). +Byte(inputData,1,289). +Byte(inputData,1,290). +Byte(inputData,1,291). +Byte(inputData,1,292). +Byte(inputData,1,293). +Byte(inputData,1,294). +Byte(inputData,1,295). +Byte(inputData,1,296). +Byte(inputData,1,297). +Byte(inputData,1,298). +Byte(inputData,1,299). +Byte(inputData,1,300). +Byte(inputData,1,301). +Byte(inputData,1,302). +Byte(inputData,1,303). +Byte(inputData,1,304). +Byte(inputData,1,305). +Byte(inputData,1,306). +Byte(inputData,1,307). +Byte(inputData,1,308). +Byte(inputData,1,309). +Byte(inputData,1,310). +Byte(inputData,1,311). +Byte(inputData,1,312). +Byte(inputData,1,313). +Byte(inputData,1,314). +Byte(inputData,1,315). +Byte(inputData,1,316). +Byte(inputData,1,317). +Byte(inputData,1,318). +Byte(inputData,1,319). +Byte(inputData,1,320). +Byte(inputData,1,321). +Byte(inputData,1,322). +Byte(inputData,1,323). +Byte(inputData,1,324). +Byte(inputData,1,325). +Byte(inputData,1,326). +Byte(inputData,1,327). +Byte(inputData,1,328). +Byte(inputData,1,329). +Byte(inputData,1,330). +Byte(inputData,1,331). +Byte(inputData,1,332). +Byte(inputData,1,333). +Byte(inputData,1,334). +Byte(inputData,1,335). +Byte(inputData,1,336). +Byte(inputData,1,337). +Byte(inputData,1,338). +Byte(inputData,1,339). +Byte(inputData,1,340). +Byte(inputData,1,341). +Byte(inputData,1,342). +Byte(inputData,1,343). +Byte(inputData,1,344). +Byte(inputData,1,345). +Byte(inputData,1,346). +Byte(inputData,1,347). +Byte(inputData,1,348). +Byte(inputData,1,349). +Byte(inputData,1,350). +Byte(inputData,1,351). +Byte(inputData,1,352). +Byte(inputData,1,353). +Byte(inputData,1,354). +Byte(inputData,1,355). +Byte(inputData,1,356). +Byte(inputData,1,357). +Byte(inputData,1,358). +Byte(inputData,1,359). +Byte(inputData,1,360). +Byte(inputData,1,361). +Byte(inputData,1,362). +Byte(inputData,1,363). +Byte(inputData,1,364). +Byte(inputData,1,365). +Byte(inputData,1,366). +Byte(inputData,1,367). +Byte(inputData,1,368). +Byte(inputData,1,369). +Byte(inputData,1,370). +Byte(inputData,1,371). +Byte(inputData,1,372). +Byte(inputData,1,373). +Byte(inputData,1,374). +Byte(inputData,1,375). +Byte(inputData,1,376). +Byte(inputData,1,377). +Byte(inputData,1,378). +Byte(inputData,1,379). +Byte(inputData,1,380). +Byte(inputData,1,381). +Byte(inputData,1,382). +Byte(inputData,1,383). +Byte(inputData,1,384). +Byte(inputData,1,385). +Byte(inputData,1,386). +Byte(inputData,1,387). +Byte(inputData,1,388). +Byte(inputData,1,389). +Byte(inputData,1,390). +Byte(inputData,1,391). +Byte(inputData,1,392). +Byte(inputData,1,393). +Byte(inputData,1,394). +Byte(inputData,1,395). +Byte(inputData,1,396). +Byte(inputData,1,397). +Byte(inputData,1,398). +Byte(inputData,1,399). +Byte(inputData,1,400). +Byte(inputData,1,401). +Byte(inputData,1,402). +Byte(inputData,1,403). +Byte(inputData,1,404). +Byte(inputData,1,405). +Byte(inputData,1,406). +Byte(inputData,1,407). +Byte(inputData,1,408). +Byte(inputData,1,409). +Byte(inputData,1,410). +Byte(inputData,1,411). +Byte(inputData,1,412). +Byte(inputData,1,413). +Byte(inputData,1,414). +Byte(inputData,1,415). +Byte(inputData,1,416). +Byte(inputData,1,417). +Byte(inputData,1,418). +Byte(inputData,1,419). +Byte(inputData,1,420). +Byte(inputData,1,421). +Byte(inputData,1,422). +Byte(inputData,1,423). +Byte(inputData,1,424). +Byte(inputData,1,425). +Byte(inputData,1,426). +Byte(inputData,1,427). +Byte(inputData,1,428). +Byte(inputData,1,429). +Byte(inputData,1,430). +Byte(inputData,1,431). +Byte(inputData,1,432). +Byte(inputData,1,433). +Byte(inputData,1,434). +Byte(inputData,1,435). +Byte(inputData,1,436). +Byte(inputData,1,437). +Byte(inputData,1,438). +Byte(inputData,1,439). +Byte(inputData,1,440). +Byte(inputData,1,441). +Byte(inputData,1,442). +Byte(inputData,1,443). +Byte(inputData,1,444). +Byte(inputData,1,445). +Byte(inputData,1,446). +Byte(inputData,1,447). +Byte(inputData,1,448). +Byte(inputData,1,449). +Byte(inputData,1,450). +Byte(inputData,1,451). +Byte(inputData,1,452). +Byte(inputData,1,453). +Byte(inputData,1,454). +Byte(inputData,1,455). +Byte(inputData,1,456). +Byte(inputData,1,457). +Byte(inputData,1,458). +Byte(inputData,1,459). +Byte(inputData,1,460). +Byte(inputData,1,461). +Byte(inputData,1,462). +Byte(inputData,1,463). +Byte(inputData,1,464). +Byte(inputData,1,465). +Byte(inputData,1,466). +Byte(inputData,1,467). +Byte(inputData,1,468). +Byte(inputData,1,469). +Byte(inputData,1,470). +Byte(inputData,1,471). +Byte(inputData,1,472). +Byte(inputData,1,473). +Byte(inputData,1,474). +Byte(inputData,1,475). +Byte(inputData,1,476). +Byte(inputData,1,477). +Byte(inputData,1,478). +Byte(inputData,1,479). +Byte(inputData,1,480). +Byte(inputData,1,481). +Byte(inputData,1,482). +Byte(inputData,1,483). +Byte(inputData,1,484). +Byte(inputData,1,485). +Byte(inputData,1,486). +Byte(inputData,1,487). +Byte(inputData,1,488). +Byte(inputData,1,489). +Byte(inputData,1,490). +Byte(inputData,1,491). +Byte(inputData,1,492). +Byte(inputData,1,493). +Byte(inputData,1,494). +Byte(inputData,1,495). +Byte(inputData,1,496). +Byte(inputData,1,497). +Byte(inputData,1,498). +Byte(inputData,1,499). +Byte(inputData,1,500). +Byte(inputData,1,501). +Byte(inputData,1,502). +Byte(inputData,1,503). +Byte(inputData,1,504). +Byte(inputData,1,505). +Byte(inputData,1,506). +Byte(inputData,1,507). +Byte(inputData,1,508). +Byte(inputData,1,509). +Byte(inputData,1,510). +Byte(inputData,1,511). +Byte(inputData,1,512). +Byte(inputData,1,513). +Byte(inputData,1,514). +Byte(inputData,1,515). +Byte(inputData,1,516). +Byte(inputData,1,517). +Byte(inputData,1,518). +Byte(inputData,1,519). +Byte(inputData,1,520). +Byte(inputData,1,521). +Byte(inputData,1,522). +Byte(inputData,1,523). +Byte(inputData,1,524). +Byte(inputData,1,525). +Byte(inputData,1,526). +Byte(inputData,1,527). +Byte(inputData,1,528). +Byte(inputData,1,529). +Byte(inputData,1,530). +Byte(inputData,1,531). +Byte(inputData,1,532). +Byte(inputData,1,533). +Byte(inputData,1,534). +Byte(inputData,1,535). +Byte(inputData,1,536). +Byte(inputData,1,537). +Byte(inputData,1,538). +Byte(inputData,1,539). +Byte(inputData,1,540). +Byte(inputData,1,541). +Byte(inputData,1,542). +Byte(inputData,1,543). +Byte(inputData,1,544). +Byte(inputData,1,545). +Byte(inputData,1,546). +Byte(inputData,1,547). +Byte(inputData,1,548). +Byte(inputData,1,549). +Byte(inputData,1,550). +Byte(inputData,1,551). +Byte(inputData,1,552). +Byte(inputData,1,553). +Byte(inputData,1,554). +Byte(inputData,1,555). +Byte(inputData,1,556). +Byte(inputData,1,557). +Byte(inputData,1,558). +Byte(inputData,1,559). +Byte(inputData,1,560). +Byte(inputData,1,561). +Byte(inputData,1,562). +Byte(inputData,1,563). +Byte(inputData,1,564). +Byte(inputData,1,565). +Byte(inputData,1,566). +Byte(inputData,1,567). +Byte(inputData,1,568). +Byte(inputData,1,569). +Byte(inputData,1,570). +Byte(inputData,1,571). +Byte(inputData,1,572). +Byte(inputData,1,573). +Byte(inputData,1,574). +Byte(inputData,1,575). +Byte(inputData,1,576). +Byte(inputData,1,577). +Byte(inputData,1,578). +Byte(inputData,1,579). +Byte(inputData,1,580). +Byte(inputData,1,581). +Byte(inputData,1,582). +Byte(inputData,1,583). +Byte(inputData,1,584). +Byte(inputData,1,585). +Byte(inputData,1,586). +Byte(inputData,1,587). +Byte(inputData,1,588). +Byte(inputData,1,589). +Byte(inputData,1,590). +Byte(inputData,1,591). +Byte(inputData,1,592). +Byte(inputData,1,593). +Byte(inputData,1,594). +Byte(inputData,1,595). +Byte(inputData,1,596). +Byte(inputData,1,597). +Byte(inputData,1,598). +Byte(inputData,1,599). +Byte(inputData,1,600). +Byte(inputData,1,601). +Byte(inputData,1,602). +Byte(inputData,1,603). +Byte(inputData,1,604). +Byte(inputData,1,605). +Byte(inputData,1,606). +Byte(inputData,1,607). +Byte(inputData,1,608). +Byte(inputData,1,609). +Byte(inputData,1,610). +Byte(inputData,1,611). +Byte(inputData,1,612). +Byte(inputData,1,613). +Byte(inputData,1,614). +Byte(inputData,1,615). +Byte(inputData,1,616). +Byte(inputData,1,617). +Byte(inputData,1,618). +Byte(inputData,1,619). +Byte(inputData,1,620). +Byte(inputData,1,621). +Byte(inputData,1,622). +Byte(inputData,1,623). +Byte(inputData,1,624). +Byte(inputData,1,625). +Byte(inputData,1,626). +Byte(inputData,1,627). +Byte(inputData,1,628). +Byte(inputData,1,629). +Byte(inputData,1,630). +Byte(inputData,1,631). +Byte(inputData,1,632). +Byte(inputData,1,633). +Byte(inputData,1,634). +Byte(inputData,1,635). +Byte(inputData,1,636). +Byte(inputData,1,637). +Byte(inputData,1,638). +Byte(inputData,1,639). +Byte(inputData,1,640). +Byte(inputData,1,641). +Byte(inputData,1,642). +Byte(inputData,1,643). +Byte(inputData,1,644). +Byte(inputData,1,645). +Byte(inputData,1,646). +Byte(inputData,1,647). +Byte(inputData,1,648). +Byte(inputData,1,649). +Byte(inputData,1,650). +Byte(inputData,1,651). +Byte(inputData,1,652). +Byte(inputData,1,653). +Byte(inputData,1,654). +Byte(inputData,1,655). +Byte(inputData,1,656). +Byte(inputData,1,657). +Byte(inputData,1,658). +Byte(inputData,1,659). +Byte(inputData,1,660). +Byte(inputData,1,661). +Byte(inputData,1,662). +Byte(inputData,1,663). +Byte(inputData,1,664). +Byte(inputData,1,665). +Byte(inputData,1,666). +Byte(inputData,1,667). +Byte(inputData,1,668). +Byte(inputData,1,669). +Byte(inputData,1,670). +Byte(inputData,1,671). +Byte(inputData,1,672). +Byte(inputData,1,673). +Byte(inputData,1,674). +Byte(inputData,1,675). +Byte(inputData,1,676). +Byte(inputData,1,677). +Byte(inputData,1,678). +Byte(inputData,1,679). +Byte(inputData,1,680). +Byte(inputData,1,681). +Byte(inputData,1,682). +Byte(inputData,1,683). +Byte(inputData,1,684). +Byte(inputData,1,685). +Byte(inputData,1,686). +Byte(inputData,1,687). +Byte(inputData,1,688). +Byte(inputData,1,689). +Byte(inputData,1,690). +Byte(inputData,1,691). +Byte(inputData,1,692). +Byte(inputData,1,693). +Byte(inputData,1,694). +Byte(inputData,1,695). +Byte(inputData,1,696). +Byte(inputData,1,697). +Byte(inputData,1,698). +Byte(inputData,1,699). +Byte(inputData,1,700). +Byte(inputData,1,701). +Byte(inputData,1,702). +Byte(inputData,1,703). +Byte(inputData,1,704). +Byte(inputData,1,705). +Byte(inputData,1,706). +Byte(inputData,1,707). +Byte(inputData,1,708). +Byte(inputData,1,709). +Byte(inputData,1,710). +Byte(inputData,1,711). +Byte(inputData,1,712). +Byte(inputData,1,713). +Byte(inputData,1,714). +Byte(inputData,1,715). +Byte(inputData,1,716). +Byte(inputData,1,717). +Byte(inputData,1,718). +Byte(inputData,1,719). +Byte(inputData,1,720). +Byte(inputData,1,721). +Byte(inputData,1,722). +Byte(inputData,1,723). +Byte(inputData,1,724). +Byte(inputData,1,725). +Byte(inputData,1,726). +Byte(inputData,1,727). +Byte(inputData,1,728). +Byte(inputData,1,729). +Byte(inputData,1,730). +Byte(inputData,1,731). +Byte(inputData,1,732). +Byte(inputData,1,733). +Byte(inputData,1,734). +Byte(inputData,1,735). +Byte(inputData,1,736). +Byte(inputData,1,737). +Byte(inputData,1,738). +Byte(inputData,1,739). +Byte(inputData,1,740). +Byte(inputData,1,741). +Byte(inputData,1,742). +Byte(inputData,1,743). +Byte(inputData,1,744). +Byte(inputData,1,745). +Byte(inputData,1,746). +Byte(inputData,1,747). +Byte(inputData,1,748). +Byte(inputData,1,749). +Byte(inputData,1,750). +Byte(inputData,1,751). +Byte(inputData,1,752). +Byte(inputData,1,753). +Byte(inputData,1,754). +Byte(inputData,1,755). +Byte(inputData,1,756). +Byte(inputData,1,757). +Byte(inputData,1,758). +Byte(inputData,1,759). +Byte(inputData,1,760). +Byte(inputData,1,761). +Byte(inputData,1,762). +Byte(inputData,1,763). +Byte(inputData,1,764). +Byte(inputData,1,765). +Byte(inputData,1,766). +Byte(inputData,1,767). +Byte(inputData,1,768). +Byte(inputData,1,769). +Byte(inputData,1,770). +Byte(inputData,1,771). +Byte(inputData,1,772). +Byte(inputData,1,773). +Byte(inputData,1,774). +Byte(inputData,1,775). +Byte(inputData,1,776). +Byte(inputData,1,777). +Byte(inputData,1,778). +Byte(inputData,1,779). +Byte(inputData,1,780). +Byte(inputData,1,781). +Byte(inputData,1,782). +Byte(inputData,1,783). +Byte(inputData,1,784). +Byte(inputData,1,785). +Byte(inputData,1,786). +Byte(inputData,1,787). +Byte(inputData,1,788). +Byte(inputData,1,789). +Byte(inputData,1,790). +Byte(inputData,1,791). +Byte(inputData,1,792). +Byte(inputData,1,793). +Byte(inputData,1,794). +Byte(inputData,1,795). +Byte(inputData,1,796). +Byte(inputData,1,797). +Byte(inputData,1,798). +Byte(inputData,1,799). +Byte(inputData,1,800). +Byte(inputData,1,801). +Byte(inputData,1,802). +Byte(inputData,1,803). +Byte(inputData,1,804). +Byte(inputData,1,805). +Byte(inputData,1,806). +Byte(inputData,1,807). +Byte(inputData,1,808). +Byte(inputData,1,809). +Byte(inputData,1,810). +Byte(inputData,1,811). +Byte(inputData,1,812). +Byte(inputData,1,813). +Byte(inputData,1,814). +Byte(inputData,1,815). +Byte(inputData,1,816). +Byte(inputData,1,817). +Byte(inputData,1,818). +Byte(inputData,1,819). +Byte(inputData,1,820). +Byte(inputData,1,821). +Byte(inputData,1,822). +Byte(inputData,1,823). +Byte(inputData,1,824). +Byte(inputData,1,825). +Byte(inputData,1,826). +Byte(inputData,1,827). +Byte(inputData,1,828). +Byte(inputData,1,829). +Byte(inputData,1,830). +Byte(inputData,1,831). +Byte(inputData,1,832). +Byte(inputData,1,833). +Byte(inputData,1,834). +Byte(inputData,1,835). +Byte(inputData,1,836). +Byte(inputData,1,837). +Byte(inputData,1,838). +Byte(inputData,1,839). +Byte(inputData,1,840). +Byte(inputData,1,841). +Byte(inputData,1,842). +Byte(inputData,1,843). +Byte(inputData,1,844). +Byte(inputData,1,845). +Byte(inputData,1,846). +Byte(inputData,1,847). +Byte(inputData,1,848). +Byte(inputData,1,849). +Byte(inputData,1,850). +Byte(inputData,1,851). +Byte(inputData,1,852). +Byte(inputData,1,853). +Byte(inputData,1,854). +Byte(inputData,1,855). +Byte(inputData,1,856). +Byte(inputData,1,857). +Byte(inputData,1,858). +Byte(inputData,1,859). +Byte(inputData,1,860). +Byte(inputData,1,861). +Byte(inputData,1,862). +Byte(inputData,1,863). +Byte(inputData,1,864). +Byte(inputData,1,865). +Byte(inputData,1,866). +Byte(inputData,1,867). +Byte(inputData,1,868). +Byte(inputData,1,869). +Byte(inputData,1,870). +Byte(inputData,1,871). +Byte(inputData,1,872). +Byte(inputData,1,873). +Byte(inputData,1,874). +Byte(inputData,1,875). +Byte(inputData,1,876). +Byte(inputData,1,877). +Byte(inputData,1,878). +Byte(inputData,1,879). +Byte(inputData,1,880). +Byte(inputData,1,881). +Byte(inputData,1,882). +Byte(inputData,1,883). +Byte(inputData,1,884). +Byte(inputData,1,885). +Byte(inputData,1,886). +Byte(inputData,1,887). +Byte(inputData,1,888). +Byte(inputData,1,889). +Byte(inputData,1,890). +Byte(inputData,1,891). +Byte(inputData,1,892). +Byte(inputData,1,893). +Byte(inputData,1,894). +Byte(inputData,1,895). +Byte(inputData,1,896). +Byte(inputData,1,897). +Byte(inputData,1,898). +Byte(inputData,1,899). +Byte(inputData,1,900). +Byte(inputData,1,901). +Byte(inputData,1,902). +Byte(inputData,1,903). +Byte(inputData,1,904). +Byte(inputData,1,905). +Byte(inputData,1,906). +Byte(inputData,1,907). +Byte(inputData,1,908). +Byte(inputData,1,909). +Byte(inputData,1,910). +Byte(inputData,1,911). +Byte(inputData,1,912). +Byte(inputData,1,913). +Byte(inputData,1,914). +Byte(inputData,1,915). +Byte(inputData,1,916). +Byte(inputData,1,917). +Byte(inputData,1,918). +Byte(inputData,1,919). +Byte(inputData,1,920). +Byte(inputData,1,921). +Byte(inputData,1,922). +Byte(inputData,1,923). +Byte(inputData,1,924). +Byte(inputData,1,925). +Byte(inputData,1,926). +Byte(inputData,1,927). +Byte(inputData,1,928). +Byte(inputData,1,929). +Byte(inputData,1,930). +Byte(inputData,1,931). +Byte(inputData,1,932). +Byte(inputData,1,933). +Byte(inputData,1,934). +Byte(inputData,1,935). +Byte(inputData,1,936). +Byte(inputData,1,937). +Byte(inputData,1,938). +Byte(inputData,1,939). +Byte(inputData,1,940). +Byte(inputData,1,941). +Byte(inputData,1,942). +Byte(inputData,1,943). +Byte(inputData,1,944). +Byte(inputData,1,945). +Byte(inputData,1,946). +Byte(inputData,1,947). +Byte(inputData,1,948). +Byte(inputData,1,949). +Byte(inputData,1,950). +Byte(inputData,1,951). +Byte(inputData,1,952). +Byte(inputData,1,953). +Byte(inputData,1,954). +Byte(inputData,1,955). +Byte(inputData,1,956). +Byte(inputData,1,957). +Byte(inputData,1,958). +Byte(inputData,1,959). +Byte(inputData,1,960). +Byte(inputData,1,961). +Byte(inputData,1,962). +Byte(inputData,1,963). +Byte(inputData,1,964). +Byte(inputData,1,965). +Byte(inputData,1,966). +Byte(inputData,1,967). +Byte(inputData,1,968). +Byte(inputData,1,969). +Byte(inputData,1,970). +Byte(inputData,1,971). +Byte(inputData,1,972). +Byte(inputData,1,973). +Byte(inputData,1,974). +Byte(inputData,1,975). +Byte(inputData,1,976). +Byte(inputData,1,977). +Byte(inputData,1,978). +Byte(inputData,1,979). +Byte(inputData,1,980). +Byte(inputData,1,981). +Byte(inputData,1,982). +Byte(inputData,1,983). +Byte(inputData,1,984). +Byte(inputData,1,985). +Byte(inputData,1,986). +Byte(inputData,1,987). +Byte(inputData,1,988). +Byte(inputData,1,989). +Byte(inputData,1,990). +Byte(inputData,1,991). +Byte(inputData,1,992). +Byte(inputData,1,993). +Byte(inputData,1,994). +Byte(inputData,1,995). +Byte(inputData,1,996). +Byte(inputData,1,997). +Byte(inputData,1,998). +Byte(inputData,1,999). +Byte(inputData,1,1000). +Byte(inputData,1,1001). +Byte(inputData,1,1002). +Byte(inputData,1,1003). +Byte(inputData,1,1004). +Byte(inputData,1,1005). +Byte(inputData,1,1006). +Byte(inputData,1,1007). +Byte(inputData,1,1008). +Byte(inputData,1,1009). +Byte(inputData,1,1010). +Byte(inputData,1,1011). +Byte(inputData,1,1012). +Byte(inputData,1,1013). +Byte(inputData,1,1014). +Byte(inputData,1,1015). +Byte(inputData,1,1016). +Byte(inputData,1,1017). +Byte(inputData,1,1018). +Byte(inputData,1,1019). +Byte(inputData,1,1020). +Byte(inputData,1,1021). +Byte(inputData,1,1022). +Byte(inputData,1,1023). +} + +model rightModel of TarParser { +inputData is InputData("tarfile", "data", 1024). +initState is State(inputData, INIT, 0, 0). +Byte(inputData,1,0). +Byte(inputData,1,1). +Byte(inputData,1,2). +Byte(inputData,1,3). +Byte(inputData,1,4). +Byte(inputData,1,5). +Byte(inputData,1,6). +Byte(inputData,1,7). +Byte(inputData,1,8). +Byte(inputData,1,9). +Byte(inputData,1,10). +Byte(inputData,1,11). +Byte(inputData,1,12). +Byte(inputData,1,13). +Byte(inputData,1,14). +Byte(inputData,1,15). +Byte(inputData,1,16). +Byte(inputData,1,17). +Byte(inputData,1,18). +Byte(inputData,1,19). +Byte(inputData,1,20). +Byte(inputData,1,21). +Byte(inputData,1,22). +Byte(inputData,1,23). +Byte(inputData,1,24). +Byte(inputData,1,25). +Byte(inputData,1,26). +Byte(inputData,1,27). +Byte(inputData,1,28). +Byte(inputData,1,29). +Byte(inputData,1,30). +Byte(inputData,1,31). +Byte(inputData,1,32). +Byte(inputData,1,33). +Byte(inputData,1,34). +Byte(inputData,1,35). +Byte(inputData,1,36). +Byte(inputData,1,37). +Byte(inputData,1,38). +Byte(inputData,1,39). +Byte(inputData,1,40). +Byte(inputData,1,41). +Byte(inputData,1,42). +Byte(inputData,1,43). +Byte(inputData,1,44). +Byte(inputData,1,45). +Byte(inputData,1,46). +Byte(inputData,1,47). +Byte(inputData,1,48). +Byte(inputData,1,49). +Byte(inputData,1,50). +Byte(inputData,1,51). +Byte(inputData,1,52). +Byte(inputData,1,53). +Byte(inputData,1,54). +Byte(inputData,1,55). +Byte(inputData,1,56). +Byte(inputData,1,57). +Byte(inputData,1,58). +Byte(inputData,1,59). +Byte(inputData,1,60). +Byte(inputData,1,61). +Byte(inputData,1,62). +Byte(inputData,1,63). +Byte(inputData,1,64). +Byte(inputData,1,65). +Byte(inputData,1,66). +Byte(inputData,1,67). +Byte(inputData,1,68). +Byte(inputData,1,69). +Byte(inputData,1,70). +Byte(inputData,1,71). +Byte(inputData,1,72). +Byte(inputData,1,73). +Byte(inputData,1,74). +Byte(inputData,1,75). +Byte(inputData,1,76). +Byte(inputData,1,77). +Byte(inputData,1,78). +Byte(inputData,1,79). +Byte(inputData,1,80). +Byte(inputData,1,81). +Byte(inputData,1,82). +Byte(inputData,1,83). +Byte(inputData,1,84). +Byte(inputData,1,85). +Byte(inputData,1,86). +Byte(inputData,1,87). +Byte(inputData,1,88). +Byte(inputData,1,89). +Byte(inputData,1,90). +Byte(inputData,1,91). +Byte(inputData,1,92). +Byte(inputData,1,93). +Byte(inputData,1,94). +Byte(inputData,1,95). +Byte(inputData,1,96). +Byte(inputData,1,97). +Byte(inputData,1,98). +Byte(inputData,1,99). +Byte(inputData,1,100). +Byte(inputData,1,101). +Byte(inputData,1,102). +Byte(inputData,1,103). +Byte(inputData,1,104). +Byte(inputData,1,105). +Byte(inputData,1,106). +Byte(inputData,1,107). +Byte(inputData,1,108). +Byte(inputData,1,109). +Byte(inputData,1,110). +Byte(inputData,1,111). +Byte(inputData,1,112). +Byte(inputData,1,113). +Byte(inputData,1,114). +Byte(inputData,1,115). +Byte(inputData,1,116). +Byte(inputData,1,117). +Byte(inputData,1,118). +Byte(inputData,1,119). +Byte(inputData,1,120). +Byte(inputData,1,121). +Byte(inputData,1,122). +Byte(inputData,1,123). +Byte(inputData,1,124). +Byte(inputData,1,125). +Byte(inputData,1,126). +Byte(inputData,1,127). +Byte(inputData,1,128). +Byte(inputData,1,129). +Byte(inputData,1,130). +Byte(inputData,1,131). +Byte(inputData,1,132). +Byte(inputData,1,133). +Byte(inputData,1,134). +Byte(inputData,1,135). +Byte(inputData,1,136). +Byte(inputData,1,137). +Byte(inputData,1,138). +Byte(inputData,1,139). +Byte(inputData,1,140). +Byte(inputData,1,141). +Byte(inputData,1,142). +Byte(inputData,1,143). +Byte(inputData,1,144). +Byte(inputData,1,145). +Byte(inputData,1,146). +Byte(inputData,1,147). +Byte(inputData,1,148). +Byte(inputData,1,149). +Byte(inputData,1,150). +Byte(inputData,1,151). +Byte(inputData,1,152). +Byte(inputData,1,153). +Byte(inputData,1,154). +Byte(inputData,1,155). +Byte(inputData,1,156). +Byte(inputData,1,157). +Byte(inputData,1,158). +Byte(inputData,1,159). +Byte(inputData,1,160). +Byte(inputData,1,161). +Byte(inputData,1,162). +Byte(inputData,1,163). +Byte(inputData,1,164). +Byte(inputData,1,165). +Byte(inputData,1,166). +Byte(inputData,1,167). +Byte(inputData,1,168). +Byte(inputData,1,169). +Byte(inputData,1,170). +Byte(inputData,1,171). +Byte(inputData,1,172). +Byte(inputData,1,173). +Byte(inputData,1,174). +Byte(inputData,1,175). +Byte(inputData,1,176). +Byte(inputData,1,177). +Byte(inputData,1,178). +Byte(inputData,1,179). +Byte(inputData,1,180). +Byte(inputData,1,181). +Byte(inputData,1,182). +Byte(inputData,1,183). +Byte(inputData,1,184). +Byte(inputData,1,185). +Byte(inputData,1,186). +Byte(inputData,1,187). +Byte(inputData,1,188). +Byte(inputData,1,189). +Byte(inputData,1,190). +Byte(inputData,1,191). +Byte(inputData,1,192). +Byte(inputData,1,193). +Byte(inputData,1,194). +Byte(inputData,1,195). +Byte(inputData,1,196). +Byte(inputData,1,197). +Byte(inputData,1,198). +Byte(inputData,1,199). +Byte(inputData,1,200). +Byte(inputData,1,201). +Byte(inputData,1,202). +Byte(inputData,1,203). +Byte(inputData,1,204). +Byte(inputData,1,205). +Byte(inputData,1,206). +Byte(inputData,1,207). +Byte(inputData,1,208). +Byte(inputData,1,209). +Byte(inputData,1,210). +Byte(inputData,1,211). +Byte(inputData,1,212). +Byte(inputData,1,213). +Byte(inputData,1,214). +Byte(inputData,1,215). +Byte(inputData,1,216). +Byte(inputData,1,217). +Byte(inputData,1,218). +Byte(inputData,1,219). +Byte(inputData,1,220). +Byte(inputData,1,221). +Byte(inputData,1,222). +Byte(inputData,1,223). +Byte(inputData,1,224). +Byte(inputData,1,225). +Byte(inputData,1,226). +Byte(inputData,1,227). +Byte(inputData,1,228). +Byte(inputData,1,229). +Byte(inputData,1,230). +Byte(inputData,1,231). +Byte(inputData,1,232). +Byte(inputData,1,233). +Byte(inputData,1,234). +Byte(inputData,1,235). +Byte(inputData,1,236). +Byte(inputData,1,237). +Byte(inputData,1,238). +Byte(inputData,1,239). +Byte(inputData,1,240). +Byte(inputData,1,241). +Byte(inputData,1,242). +Byte(inputData,1,243). +Byte(inputData,1,244). +Byte(inputData,1,245). +Byte(inputData,1,246). +Byte(inputData,1,247). +Byte(inputData,1,248). +Byte(inputData,1,249). +Byte(inputData,1,250). +Byte(inputData,1,251). +Byte(inputData,1,252). +Byte(inputData,1,253). +Byte(inputData,1,254). +Byte(inputData,1,255). +Byte(inputData,1,256). +Byte(inputData,1,257). +Byte(inputData,1,258). +Byte(inputData,1,259). +Byte(inputData,1,260). +Byte(inputData,1,261). +Byte(inputData,1,262). +Byte(inputData,1,263). +Byte(inputData,1,264). +Byte(inputData,1,265). +Byte(inputData,1,266). +Byte(inputData,1,267). +Byte(inputData,1,268). +Byte(inputData,1,269). +Byte(inputData,1,270). +Byte(inputData,1,271). +Byte(inputData,1,272). +Byte(inputData,1,273). +Byte(inputData,1,274). +Byte(inputData,1,275). +Byte(inputData,1,276). +Byte(inputData,1,277). +Byte(inputData,1,278). +Byte(inputData,1,279). +Byte(inputData,1,280). +Byte(inputData,1,281). +Byte(inputData,1,282). +Byte(inputData,1,283). +Byte(inputData,1,284). +Byte(inputData,1,285). +Byte(inputData,1,286). +Byte(inputData,1,287). +Byte(inputData,1,288). +Byte(inputData,1,289). +Byte(inputData,1,290). +Byte(inputData,1,291). +Byte(inputData,1,292). +Byte(inputData,1,293). +Byte(inputData,1,294). +Byte(inputData,1,295). +Byte(inputData,1,296). +Byte(inputData,1,297). +Byte(inputData,1,298). +Byte(inputData,1,299). +Byte(inputData,1,300). +Byte(inputData,1,301). +Byte(inputData,1,302). +Byte(inputData,1,303). +Byte(inputData,1,304). +Byte(inputData,1,305). +Byte(inputData,1,306). +Byte(inputData,1,307). +Byte(inputData,1,308). +Byte(inputData,1,309). +Byte(inputData,1,310). +Byte(inputData,1,311). +Byte(inputData,1,312). +Byte(inputData,1,313). +Byte(inputData,1,314). +Byte(inputData,1,315). +Byte(inputData,1,316). +Byte(inputData,1,317). +Byte(inputData,1,318). +Byte(inputData,1,319). +Byte(inputData,1,320). +Byte(inputData,1,321). +Byte(inputData,1,322). +Byte(inputData,1,323). +Byte(inputData,1,324). +Byte(inputData,1,325). +Byte(inputData,1,326). +Byte(inputData,1,327). +Byte(inputData,1,328). +Byte(inputData,1,329). +Byte(inputData,1,330). +Byte(inputData,1,331). +Byte(inputData,1,332). +Byte(inputData,1,333). +Byte(inputData,1,334). +Byte(inputData,1,335). +Byte(inputData,1,336). +Byte(inputData,1,337). +Byte(inputData,1,338). +Byte(inputData,1,339). +Byte(inputData,1,340). +Byte(inputData,1,341). +Byte(inputData,1,342). +Byte(inputData,1,343). +Byte(inputData,1,344). +Byte(inputData,1,345). +Byte(inputData,1,346). +Byte(inputData,1,347). +Byte(inputData,1,348). +Byte(inputData,1,349). +Byte(inputData,1,350). +Byte(inputData,1,351). +Byte(inputData,1,352). +Byte(inputData,1,353). +Byte(inputData,1,354). +Byte(inputData,1,355). +Byte(inputData,1,356). +Byte(inputData,1,357). +Byte(inputData,1,358). +Byte(inputData,1,359). +Byte(inputData,1,360). +Byte(inputData,1,361). +Byte(inputData,1,362). +Byte(inputData,1,363). +Byte(inputData,1,364). +Byte(inputData,1,365). +Byte(inputData,1,366). +Byte(inputData,1,367). +Byte(inputData,1,368). +Byte(inputData,1,369). +Byte(inputData,1,370). +Byte(inputData,1,371). +Byte(inputData,1,372). +Byte(inputData,1,373). +Byte(inputData,1,374). +Byte(inputData,1,375). +Byte(inputData,1,376). +Byte(inputData,1,377). +Byte(inputData,1,378). +Byte(inputData,1,379). +Byte(inputData,1,380). +Byte(inputData,1,381). +Byte(inputData,1,382). +Byte(inputData,1,383). +Byte(inputData,1,384). +Byte(inputData,1,385). +Byte(inputData,1,386). +Byte(inputData,1,387). +Byte(inputData,1,388). +Byte(inputData,1,389). +Byte(inputData,1,390). +Byte(inputData,1,391). +Byte(inputData,1,392). +Byte(inputData,1,393). +Byte(inputData,1,394). +Byte(inputData,1,395). +Byte(inputData,1,396). +Byte(inputData,1,397). +Byte(inputData,1,398). +Byte(inputData,1,399). +Byte(inputData,1,400). +Byte(inputData,1,401). +Byte(inputData,1,402). +Byte(inputData,1,403). +Byte(inputData,1,404). +Byte(inputData,1,405). +Byte(inputData,1,406). +Byte(inputData,1,407). +Byte(inputData,1,408). +Byte(inputData,1,409). +Byte(inputData,1,410). +Byte(inputData,1,411). +Byte(inputData,1,412). +Byte(inputData,1,413). +Byte(inputData,1,414). +Byte(inputData,1,415). +Byte(inputData,1,416). +Byte(inputData,1,417). +Byte(inputData,1,418). +Byte(inputData,1,419). +Byte(inputData,1,420). +Byte(inputData,1,421). +Byte(inputData,1,422). +Byte(inputData,1,423). +Byte(inputData,1,424). +Byte(inputData,1,425). +Byte(inputData,1,426). +Byte(inputData,1,427). +Byte(inputData,1,428). +Byte(inputData,1,429). +Byte(inputData,1,430). +Byte(inputData,1,431). +Byte(inputData,1,432). +Byte(inputData,1,433). +Byte(inputData,1,434). +Byte(inputData,1,435). +Byte(inputData,1,436). +Byte(inputData,1,437). +Byte(inputData,1,438). +Byte(inputData,1,439). +Byte(inputData,1,440). +Byte(inputData,1,441). +Byte(inputData,1,442). +Byte(inputData,1,443). +Byte(inputData,1,444). +Byte(inputData,1,445). +Byte(inputData,1,446). +Byte(inputData,1,447). +Byte(inputData,1,448). +Byte(inputData,1,449). +Byte(inputData,1,450). +Byte(inputData,1,451). +Byte(inputData,1,452). +Byte(inputData,1,453). +Byte(inputData,1,454). +Byte(inputData,1,455). +Byte(inputData,1,456). +Byte(inputData,1,457). +Byte(inputData,1,458). +Byte(inputData,1,459). +Byte(inputData,1,460). +Byte(inputData,1,461). +Byte(inputData,1,462). +Byte(inputData,1,463). +Byte(inputData,1,464). +Byte(inputData,1,465). +Byte(inputData,1,466). +Byte(inputData,1,467). +Byte(inputData,1,468). +Byte(inputData,1,469). +Byte(inputData,1,470). +Byte(inputData,1,471). +Byte(inputData,1,472). +Byte(inputData,1,473). +Byte(inputData,1,474). +Byte(inputData,1,475). +Byte(inputData,1,476). +Byte(inputData,1,477). +Byte(inputData,1,478). +Byte(inputData,1,479). +Byte(inputData,1,480). +Byte(inputData,1,481). +Byte(inputData,1,482). +Byte(inputData,1,483). +Byte(inputData,1,484). +Byte(inputData,1,485). +Byte(inputData,1,486). +Byte(inputData,1,487). +Byte(inputData,1,488). +Byte(inputData,1,489). +Byte(inputData,1,490). +Byte(inputData,1,491). +Byte(inputData,1,492). +Byte(inputData,1,493). +Byte(inputData,1,494). +Byte(inputData,1,495). +Byte(inputData,1,496). +Byte(inputData,1,497). +Byte(inputData,1,498). +Byte(inputData,1,499). +Byte(inputData,1,500). +Byte(inputData,1,501). +Byte(inputData,1,502). +Byte(inputData,1,503). +Byte(inputData,1,504). +Byte(inputData,1,505). +Byte(inputData,1,506). +Byte(inputData,1,507). +Byte(inputData,1,508). +Byte(inputData,1,509). +Byte(inputData,1,510). +Byte(inputData,1,511). +Byte(inputData,1,512). +Byte(inputData,1,513). +Byte(inputData,1,514). +Byte(inputData,1,515). +Byte(inputData,1,516). +Byte(inputData,1,517). +Byte(inputData,1,518). +Byte(inputData,1,519). +Byte(inputData,1,520). +Byte(inputData,1,521). +Byte(inputData,1,522). +Byte(inputData,1,523). +Byte(inputData,1,524). +Byte(inputData,1,525). +Byte(inputData,1,526). +Byte(inputData,1,527). +Byte(inputData,1,528). +Byte(inputData,1,529). +Byte(inputData,1,530). +Byte(inputData,1,531). +Byte(inputData,1,532). +Byte(inputData,1,533). +Byte(inputData,1,534). +Byte(inputData,1,535). +Byte(inputData,1,536). +Byte(inputData,1,537). +Byte(inputData,1,538). +Byte(inputData,1,539). +Byte(inputData,1,540). +Byte(inputData,1,541). +Byte(inputData,1,542). +Byte(inputData,1,543). +Byte(inputData,1,544). +Byte(inputData,1,545). +Byte(inputData,1,546). +Byte(inputData,1,547). +Byte(inputData,1,548). +Byte(inputData,1,549). +Byte(inputData,1,550). +Byte(inputData,1,551). +Byte(inputData,1,552). +Byte(inputData,1,553). +Byte(inputData,1,554). +Byte(inputData,1,555). +Byte(inputData,1,556). +Byte(inputData,1,557). +Byte(inputData,1,558). +Byte(inputData,1,559). +Byte(inputData,1,560). +Byte(inputData,1,561). +Byte(inputData,1,562). +Byte(inputData,1,563). +Byte(inputData,1,564). +Byte(inputData,1,565). +Byte(inputData,1,566). +Byte(inputData,1,567). +Byte(inputData,1,568). +Byte(inputData,1,569). +Byte(inputData,1,570). +Byte(inputData,1,571). +Byte(inputData,1,572). +Byte(inputData,1,573). +Byte(inputData,1,574). +Byte(inputData,1,575). +Byte(inputData,1,576). +Byte(inputData,1,577). +Byte(inputData,1,578). +Byte(inputData,1,579). +Byte(inputData,1,580). +Byte(inputData,1,581). +Byte(inputData,1,582). +Byte(inputData,1,583). +Byte(inputData,1,584). +Byte(inputData,1,585). +Byte(inputData,1,586). +Byte(inputData,1,587). +Byte(inputData,1,588). +Byte(inputData,1,589). +Byte(inputData,1,590). +Byte(inputData,1,591). +Byte(inputData,1,592). +Byte(inputData,1,593). +Byte(inputData,1,594). +Byte(inputData,1,595). +Byte(inputData,1,596). +Byte(inputData,1,597). +Byte(inputData,1,598). +Byte(inputData,1,599). +Byte(inputData,1,600). +Byte(inputData,1,601). +Byte(inputData,1,602). +Byte(inputData,1,603). +Byte(inputData,1,604). +Byte(inputData,1,605). +Byte(inputData,1,606). +Byte(inputData,1,607). +Byte(inputData,1,608). +Byte(inputData,1,609). +Byte(inputData,1,610). +Byte(inputData,1,611). +Byte(inputData,1,612). +Byte(inputData,1,613). +Byte(inputData,1,614). +Byte(inputData,1,615). +Byte(inputData,1,616). +Byte(inputData,1,617). +Byte(inputData,1,618). +Byte(inputData,1,619). +Byte(inputData,1,620). +Byte(inputData,1,621). +Byte(inputData,1,622). +Byte(inputData,1,623). +Byte(inputData,1,624). +Byte(inputData,1,625). +Byte(inputData,1,626). +Byte(inputData,1,627). +Byte(inputData,1,628). +Byte(inputData,1,629). +Byte(inputData,1,630). +Byte(inputData,1,631). +Byte(inputData,1,632). +Byte(inputData,1,633). +Byte(inputData,1,634). +Byte(inputData,1,635). +Byte(inputData,1,636). +Byte(inputData,1,637). +Byte(inputData,1,638). +Byte(inputData,1,639). +Byte(inputData,1,640). +Byte(inputData,1,641). +Byte(inputData,1,642). +Byte(inputData,1,643). +Byte(inputData,1,644). +Byte(inputData,1,645). +Byte(inputData,1,646). +Byte(inputData,1,647). +Byte(inputData,1,648). +Byte(inputData,1,649). +Byte(inputData,1,650). +Byte(inputData,1,651). +Byte(inputData,1,652). +Byte(inputData,1,653). +Byte(inputData,1,654). +Byte(inputData,1,655). +Byte(inputData,1,656). +Byte(inputData,1,657). +Byte(inputData,1,658). +Byte(inputData,1,659). +Byte(inputData,1,660). +Byte(inputData,1,661). +Byte(inputData,1,662). +Byte(inputData,1,663). +Byte(inputData,1,664). +Byte(inputData,1,665). +Byte(inputData,1,666). +Byte(inputData,1,667). +Byte(inputData,1,668). +Byte(inputData,1,669). +Byte(inputData,1,670). +Byte(inputData,1,671). +Byte(inputData,1,672). +Byte(inputData,1,673). +Byte(inputData,1,674). +Byte(inputData,1,675). +Byte(inputData,1,676). +Byte(inputData,1,677). +Byte(inputData,1,678). +Byte(inputData,1,679). +Byte(inputData,1,680). +Byte(inputData,1,681). +Byte(inputData,1,682). +Byte(inputData,1,683). +Byte(inputData,1,684). +Byte(inputData,1,685). +Byte(inputData,1,686). +Byte(inputData,1,687). +Byte(inputData,1,688). +Byte(inputData,1,689). +Byte(inputData,1,690). +Byte(inputData,1,691). +Byte(inputData,1,692). +Byte(inputData,1,693). +Byte(inputData,1,694). +Byte(inputData,1,695). +Byte(inputData,1,696). +Byte(inputData,1,697). +Byte(inputData,1,698). +Byte(inputData,1,699). +Byte(inputData,1,700). +Byte(inputData,1,701). +Byte(inputData,1,702). +Byte(inputData,1,703). +Byte(inputData,1,704). +Byte(inputData,1,705). +Byte(inputData,1,706). +Byte(inputData,1,707). +Byte(inputData,1,708). +Byte(inputData,1,709). +Byte(inputData,1,710). +Byte(inputData,1,711). +Byte(inputData,1,712). +Byte(inputData,1,713). +Byte(inputData,1,714). +Byte(inputData,1,715). +Byte(inputData,1,716). +Byte(inputData,1,717). +Byte(inputData,1,718). +Byte(inputData,1,719). +Byte(inputData,1,720). +Byte(inputData,1,721). +Byte(inputData,1,722). +Byte(inputData,1,723). +Byte(inputData,1,724). +Byte(inputData,1,725). +Byte(inputData,1,726). +Byte(inputData,1,727). +Byte(inputData,1,728). +Byte(inputData,1,729). +Byte(inputData,1,730). +Byte(inputData,1,731). +Byte(inputData,1,732). +Byte(inputData,1,733). +Byte(inputData,1,734). +Byte(inputData,1,735). +Byte(inputData,1,736). +Byte(inputData,1,737). +Byte(inputData,1,738). +Byte(inputData,1,739). +Byte(inputData,1,740). +Byte(inputData,1,741). +Byte(inputData,1,742). +Byte(inputData,1,743). +Byte(inputData,1,744). +Byte(inputData,1,745). +Byte(inputData,1,746). +Byte(inputData,1,747). +Byte(inputData,1,748). +Byte(inputData,1,749). +Byte(inputData,1,750). +Byte(inputData,1,751). +Byte(inputData,1,752). +Byte(inputData,1,753). +Byte(inputData,1,754). +Byte(inputData,1,755). +Byte(inputData,1,756). +Byte(inputData,1,757). +Byte(inputData,1,758). +Byte(inputData,1,759). +Byte(inputData,1,760). +Byte(inputData,1,761). +Byte(inputData,1,762). +Byte(inputData,1,763). +Byte(inputData,1,764). +Byte(inputData,1,765). +Byte(inputData,1,766). +Byte(inputData,1,767). +Byte(inputData,1,768). +Byte(inputData,1,769). +Byte(inputData,1,770). +Byte(inputData,1,771). +Byte(inputData,1,772). +Byte(inputData,1,773). +Byte(inputData,1,774). +Byte(inputData,1,775). +Byte(inputData,1,776). +Byte(inputData,1,777). +Byte(inputData,1,778). +Byte(inputData,1,779). +Byte(inputData,1,780). +Byte(inputData,1,781). +Byte(inputData,1,782). +Byte(inputData,1,783). +Byte(inputData,1,784). +Byte(inputData,1,785). +Byte(inputData,1,786). +Byte(inputData,1,787). +Byte(inputData,1,788). +Byte(inputData,1,789). +Byte(inputData,1,790). +Byte(inputData,1,791). +Byte(inputData,1,792). +Byte(inputData,1,793). +Byte(inputData,1,794). +Byte(inputData,1,795). +Byte(inputData,1,796). +Byte(inputData,1,797). +Byte(inputData,1,798). +Byte(inputData,1,799). +Byte(inputData,1,800). +Byte(inputData,1,801). +Byte(inputData,1,802). +Byte(inputData,1,803). +Byte(inputData,1,804). +Byte(inputData,1,805). +Byte(inputData,1,806). +Byte(inputData,1,807). +Byte(inputData,1,808). +Byte(inputData,1,809). +Byte(inputData,1,810). +Byte(inputData,1,811). +Byte(inputData,1,812). +Byte(inputData,1,813). +Byte(inputData,1,814). +Byte(inputData,1,815). +Byte(inputData,1,816). +Byte(inputData,1,817). +Byte(inputData,1,818). +Byte(inputData,1,819). +Byte(inputData,1,820). +Byte(inputData,1,821). +Byte(inputData,1,822). +Byte(inputData,1,823). +Byte(inputData,1,824). +Byte(inputData,1,825). +Byte(inputData,1,826). +Byte(inputData,1,827). +Byte(inputData,1,828). +Byte(inputData,1,829). +Byte(inputData,1,830). +Byte(inputData,1,831). +Byte(inputData,1,832). +Byte(inputData,1,833). +Byte(inputData,1,834). +Byte(inputData,1,835). +Byte(inputData,1,836). +Byte(inputData,1,837). +Byte(inputData,1,838). +Byte(inputData,1,839). +Byte(inputData,1,840). +Byte(inputData,1,841). +Byte(inputData,1,842). +Byte(inputData,1,843). +Byte(inputData,1,844). +Byte(inputData,1,845). +Byte(inputData,1,846). +Byte(inputData,1,847). +Byte(inputData,1,848). +Byte(inputData,1,849). +Byte(inputData,1,850). +Byte(inputData,1,851). +Byte(inputData,1,852). +Byte(inputData,1,853). +Byte(inputData,1,854). +Byte(inputData,1,855). +Byte(inputData,1,856). +Byte(inputData,1,857). +Byte(inputData,1,858). +Byte(inputData,1,859). +Byte(inputData,1,860). +Byte(inputData,1,861). +Byte(inputData,1,862). +Byte(inputData,1,863). +Byte(inputData,1,864). +Byte(inputData,1,865). +Byte(inputData,1,866). +Byte(inputData,1,867). +Byte(inputData,1,868). +Byte(inputData,1,869). +Byte(inputData,1,870). +Byte(inputData,1,871). +Byte(inputData,1,872). +Byte(inputData,1,873). +Byte(inputData,1,874). +Byte(inputData,1,875). +Byte(inputData,1,876). +Byte(inputData,1,877). +Byte(inputData,1,878). +Byte(inputData,1,879). +Byte(inputData,1,880). +Byte(inputData,1,881). +Byte(inputData,1,882). +Byte(inputData,1,883). +Byte(inputData,1,884). +Byte(inputData,1,885). +Byte(inputData,1,886). +Byte(inputData,1,887). +Byte(inputData,1,888). +Byte(inputData,1,889). +Byte(inputData,1,890). +Byte(inputData,1,891). +Byte(inputData,1,892). +Byte(inputData,1,893). +Byte(inputData,1,894). +Byte(inputData,1,895). +Byte(inputData,1,896). +Byte(inputData,1,897). +Byte(inputData,1,898). +Byte(inputData,1,899). +Byte(inputData,1,900). +Byte(inputData,1,901). +Byte(inputData,1,902). +Byte(inputData,1,903). +Byte(inputData,1,904). +Byte(inputData,1,905). +Byte(inputData,1,906). +Byte(inputData,1,907). +Byte(inputData,1,908). +Byte(inputData,1,909). +Byte(inputData,1,910). +Byte(inputData,1,911). +Byte(inputData,1,912). +Byte(inputData,1,913). +Byte(inputData,1,914). +Byte(inputData,1,915). +Byte(inputData,1,916). +Byte(inputData,1,917). +Byte(inputData,1,918). +Byte(inputData,1,919). +Byte(inputData,1,920). +Byte(inputData,1,921). +Byte(inputData,1,922). +Byte(inputData,1,923). +Byte(inputData,1,924). +Byte(inputData,1,925). +Byte(inputData,1,926). +Byte(inputData,1,927). +Byte(inputData,1,928). +Byte(inputData,1,929). +Byte(inputData,1,930). +Byte(inputData,1,931). +Byte(inputData,1,932). +Byte(inputData,1,933). +Byte(inputData,1,934). +Byte(inputData,1,935). +Byte(inputData,1,936). +Byte(inputData,1,937). +Byte(inputData,1,938). +Byte(inputData,1,939). +Byte(inputData,1,940). +Byte(inputData,1,941). +Byte(inputData,1,942). +Byte(inputData,1,943). +Byte(inputData,1,944). +Byte(inputData,1,945). +Byte(inputData,1,946). +Byte(inputData,1,947). +Byte(inputData,1,948). +Byte(inputData,1,949). +Byte(inputData,1,950). +Byte(inputData,1,951). +Byte(inputData,1,952). +Byte(inputData,1,953). +Byte(inputData,1,954). +Byte(inputData,1,955). +Byte(inputData,1,956). +Byte(inputData,1,957). +Byte(inputData,1,958). +Byte(inputData,1,959). +Byte(inputData,1,960). +Byte(inputData,1,961). +Byte(inputData,1,962). +Byte(inputData,1,963). +Byte(inputData,1,964). +Byte(inputData,1,965). +Byte(inputData,1,966). +Byte(inputData,1,967). +Byte(inputData,1,968). +Byte(inputData,1,969). +Byte(inputData,1,970). +Byte(inputData,1,971). +Byte(inputData,1,972). +Byte(inputData,1,973). +Byte(inputData,1,974). +Byte(inputData,1,975). +Byte(inputData,1,976). +Byte(inputData,1,977). +Byte(inputData,1,978). +Byte(inputData,1,979). +Byte(inputData,1,980). +Byte(inputData,1,981). +Byte(inputData,1,982). +Byte(inputData,1,983). +Byte(inputData,1,984). +Byte(inputData,1,985). +Byte(inputData,1,986). +Byte(inputData,1,987). +Byte(inputData,1,988). +Byte(inputData,1,989). +Byte(inputData,1,990). +Byte(inputData,1,991). +Byte(inputData,1,992). +Byte(inputData,1,993). +Byte(inputData,1,994). +Byte(inputData,1,995). +Byte(inputData,1,996). +Byte(inputData,1,997). +Byte(inputData,1,998). +Byte(inputData,1,999). +Byte(inputData,1,1000). +Byte(inputData,1,1001). +Byte(inputData,1,1002). +Byte(inputData,1,1003). +Byte(inputData,1,1004). +Byte(inputData,1,1005). +Byte(inputData,1,1006). +Byte(inputData,1,1007). +Byte(inputData,1,1008). +Byte(inputData,1,1009). +Byte(inputData,1,1010). +Byte(inputData,1,1011). +Byte(inputData,1,1012). +Byte(inputData,1,1013). +Byte(inputData,1,1014). +Byte(inputData,1,1015). +Byte(inputData,1,1016). +Byte(inputData,1,1017). +Byte(inputData,1,1018). +Byte(inputData,1,1019). +Byte(inputData,1,1020). +Byte(inputData,1,1021). +Byte(inputData,1,1022). +Byte(inputData,1,1023). +} \ No newline at end of file diff --git a/examples/data/parser/ParserDSL.4ml b/examples/data/parser/ParserDSL.4ml new file mode 100644 index 0000000..a9e412f --- /dev/null +++ b/examples/data/parser/ParserDSL.4ml @@ -0,0 +1,46 @@ +domain GenericDataParser { + Status ::= {INIT, READ, UPDATE, TERMINATE, DONE}. + + Byte ::= new (input: InputData, val: Integer, pos: Integer). + + InputData ::= new (name: String, data: String, length: Integer). + + conforms Byte(inputData, val, pos), inputData is InputData(_, data, length), pos >= 0, pos < length. + + State ::= new (inputData: InputData, status: Status, curPos: Integer, offset: Integer). + Transition ::= new (from: State, to: State). + + IntermediateResult ::= new (name: String, context: State, derivedResult: String + Integer + { NULL }). + + NextOffset ::= new (context: State, offset: Integer). + NextPos ::= new (context: State, pos: Integer). + + OverRead ::= new (context: State). + OverRead(State(inputData, UPDATE, pos, offset)) :- OverRead(State(inputData, READ, pos, offset)). + OverRead(state) :- state is State(InputData(_, _, length), _, pos, offset), + pos + offset >= length. + + CanReadMore ::= new (context: State). + CanReadMore(State(inputData, UPDATE, pos, offset)) :- CanReadMore(State(inputData, READ, pos, offset)). + CanReadMore(state) :- state is State(InputData(_, _, length), _, pos, offset), + pos + offset < length. + + ContinueCondition ::= new (context: State). + ContinueCondition(State(inputData, UPDATE, pos, offset)) :- ContinueCondition(State(inputData, READ, pos, offset)). + + State(inputData, DONE, pos, offset) :- + inputData is InputData(name, data, length), + State(inputData, _, pos, offset), + offset + pos >= length. + + isDone :- State(_, DONE, _, _). + + State(initData, INIT, 0, 0) :- initData is InputData(_,_,_). + + State(inputData, READ, newPos, newOffset), + Transition(oldState, State(inputData, READ, newPos, newOffset)) :- + oldState is State(inputData, _, pos, offset), + NextPos(oldState, newPos), + NextOffset(oldState, newOffset), + ContinueCondition(oldState). +} \ No newline at end of file diff --git a/examples/data/parser/TinyDemoParser.4ml b/examples/data/parser/TinyDemoParser.4ml new file mode 100644 index 0000000..daaf5d5 --- /dev/null +++ b/examples/data/parser/TinyDemoParser.4ml @@ -0,0 +1,59 @@ +domain TinyDemoParser extends GenericDataParser at "ParserDSL.4ml" { + State(inputData, READ, pos, offset) :- State(inputData, INIT, 0, 0), + pos = 0, offset = 1. + + NextOffset(state, newOffset) :- state is State(_, _, 0, _), newOffset = 1. + + IntermediateResult("count", state, initialCount) :- + Byte(inputData, asciiAsInt, 0), + state is State(inputData, _, 0, _), + initialCount = asciiAsInt - 48. + + ContinueCondition(state) :- state is State(inputData, _, pos, offset), + offset = 1, + IntermediateResult("count", state, val), + val = 0. + + IntermediateResult("sum", state, initialSum) :- state is State(inputData, _, 0, _), + initialSum = 0. + + NextOffset(state, newOffset) :- state is State(inputData, READ, pos, offset), + pos > 0, newOffset = 1. + + IntermediateResult("sum", newState, newSum) :- + oldState is State(inputData, READ, pos, offset), + newState is State(inputData, UPDATE, pos, offset), + pos > 0, + NextOffset(state, offset), + IntermediateResult("sum", oldState, oldSum), + Byte(inputData, asciiAsInt, pos), + asciiAsInt > 35, + newSum = oldSum + asciiAsInt - 48. + + NextPos(state, newPos) :- state is State(inputData, READ, pos, offset), newPos = pos + offset. + +} + +model m of TinyDemoParser at "TinyDemoParser.4ml" { + // Format: |header|#|digits| |header|#|digits| ... + // The byte in the header decides how many digits to read and it will return the sum. + // The header and the digits are separated by '#' and each expression is separated by space. + // Example: "3#1234 3#45" + // "51(3) 35(#) 49(1) 50(2) 51(3) 52(4) 32(SPACE) 51(3) 35(#) 52(4) 53(5)" in ASCII format + inputData is InputData("sample", "3#1234 3#45", 11). + + Byte(inputData,51,0), + Byte(inputData,35,1), + Byte(inputData,49,2), + Byte(inputData,50,3), + Byte(inputData,51,4), + Byte(inputData,52,5), + Byte(inputData,32,6), + Byte(inputData,51,7), + Byte(inputData,35,8), + Byte(inputData,52,9), + Byte(inputData,53,10). + + initState is State(inputData, INIT, 0, 0). + initSum is IntermediateResult("sum", initState, 0). +} \ No newline at end of file diff --git a/examples/data/parser/formula.pdf b/examples/data/parser/formula.pdf new file mode 100644 index 0000000000000000000000000000000000000000..89dd0181caf34bbf3fc568f1854ffd3ad4987975 GIT binary patch literal 549675 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%0D}#8Bp(e>%`v9S@cXWdVE|z|L@a-^Cf{(s$ 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ɪb@p8JFwbjh!y$`K^4|E>%4~dqE=o61O(z> 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

4FFBn)v-luS1zDu|W|C2H9eOquV;IO&&i zxA7X}NRlJW^rr|l0GiG=+%Sqer6zp2FCye3$|c+F**}P!`e+Zf?Cj%47H`)6DHOfr zZ2~)GC4`TdvhhMumgg!W@qCc!JBr49^r3O9%{71caig-Y@PeV35|G==6R2I*XOpH^ z_bo?6LN|!@l@6&~p-Gcsb+hw=_WU|(^s^ZFh)ldz?HGw(e4CR^5|T@>akx}Kn*3z&EkdCOl%a-C)J$w%~Y zZt3)XqC(ZeaRm(w^tvxrl36>4}AEw0u>5l3b z`|o`f5#U+a!3Tpm0mbP^9Y~5*kz_O5YJuH zWcRpVp+bXod))AWzy_p*h>Z)MP=`)%m~a#AaeCY;@qkXf+8#vA72j!S(eDzi zP%iLh_243D!%&MF%TmZj6hESkIF_ZVnrR-3$tf=)E^ub_vw4n%g^hUwc7HaF!sai z;u#M`7S~y%O0ju@ku+ZO-uYw`<>L(&iTT)Z1X;SHn|2mPxhozkZaE^rN{LO4IvkBJ z@IcG{nGjM~N!UlVC#i`mDPY+ZzuA|RUW8chBJDzz~OX z*OX&OQIHRqJ3D@DRl0Wm=wvO=wtJ{_c(?n@8x}ERh9-=|d%*CKYIyXI&tMq&<02zS zXZehDdha%?DmL_$145Al1BxBHok@ht$Jl=Cm?2(U8FtDA9c|@tdur)=o zR;OpUB--h8cgnY4MBa~O3;z(4-;X0{A>*w<);oU3-u$R@0o?sfDs3XV7;WS-a@bwP zLdqn7i_YPc8xs4~s(Vwl6bP;cI>)bhuI0Nc3bBvAM0Pfzz!YOjZ{`cEmi43J-;?To zB?kIKa1gV$urPNv2e2nDy4;+M#zX+-$rNC!VrDc4Sgn{C?HL^y9RWw|j4q6>M9eJA zj9&V`V_f3)rU0>Jh6a;u*f6*&ZL?g%=DaZ zv-@W$I=NsR8Qay`?%Jv^881c3C=uU3^mW&N^&F(h+GBT2X<_rVKJ;w zr*1g3aq{l#2g+OFL+w36;yDj7zRO{7|EI@j)RX`OX|hqx$uc zOsqzO)^NR3vv~eV)&=(UPJPvQR^?>~Csc<)U;?9|(&T~ENzOk{2aj>ueE7Za$Gc(- z@HteNxUm*o82NP_T3~m$vAqIkOnj;lYaoaU6A%((2FP>NcfD3yy8?&m%57bqSg0qobNpn1C+^QID%=)}{(J zU=>}`MxCMJh06=EcXzbJ*0FrnBbcJh7GO8*q6*F?2{WD3IEXY5UUz4J5Khn67{$f4 zDz0#vT4a1;;wg+O4Q|A+cg2}1BRJZ?^ZJ=|F~N2}wo`8LQ56Ct6`o;2S!bUUHU zUA0x5O^3gio{C()w4^ibnrYzCnx;oVP6Yl<^8KkQM8|$+;`7`}PKB|_Jo~W(*E!qk zDnieC;EKlchUGN~bmSbN@0>lENKeFSJsu463A|qc~-Sm!I2$v#5! z)dSQ)l&1nticL`X`E?MeV*{iw7P~@22r9Xu@*KRkFihB1axJ*|=wcV@K$F5=Eo#J% z$-!sB+jf8F59c<=O!u#)Pg)-@R!__2Iaixvu9Xf+UX~#IJ7HUEuiM2GL>|f;=_RRC zl)}2$Ap@xEmswV5CEQdJw~&GYN#4$v)OZ+C-gl1ZyF-I_LFe{wr7D^~r7J&RX0hsm zThrejAt%n)Jy}^)bs42#MCD%6-o?*?ejWBom$=Hj;7Iq=6**P)=MAM@n1m`MX_ffG*~WlZpWifj z67kUIv3GMHhxQP60qNH=|V( z-+}By7a0HUg7zmTrLc=BfXV`7K@&B0lrp!rwEA^yW$dhK?n=ez%IF1H$Q&4r866qT z8BH1OsTqHR5`Vu#;)AiJ3lRs`uZ;l_5eH9QdVnBJ&jN5s1C~NIB2Eq_{a@DrDy=yn zKijY64p7M&u#KQ#Y-i3WCM+i-B2FtRuc|7|%_!|^3}C;6?JYl;69J%2MpajHJ1HU# z_Fo4YL|kmYFQdQR{U2PUgY%yk(?7W}|7%&8g@f&{i>K9=n)0~)5D{GW9lC%5JERm# zG)l#T=e*N|!$M?kzP6?laTKg1w?~^8FgmNc$ zl-=NN4yBZWrthEA6}X{b*%H>xZ@JjYaD!Y#wnZFo?SrQEb=F6t>{j9DFw5txzYHGf zbp?Ekc5iurg=8bZT4bj>hvMgl{z(S`_9OibmzNQvP|m*|gM}uiD&gegDe_a{ryxQH zTcP5&(J=;AhTIplxC6P7VCc4qwkXg18-X1vG)E?~lj^BkNy^Dv&=E>)3w|*THQq~> zW}OOdZVhxv4?DG)nNaMK=Q0dam$jXH*mEmWMyF&4U*Y0tl zO?djSseDj%N2Ggcb7ouI?`V;_`V2CF?TKFAgTou_8jZkDVvn=I8f_|e{fRFk+@`}d z$!k9^M)|P*4&0;6gkTDJ{Kjp36|;xsp*0Mg@O3R$HQW*zPnI0F!Vi~kG(8WzyyrnC z4buejT;zH3{8?lPG?u1}6a1W%c;!PmA00m+1uE_GsJ)tBY2{{gW5pKSC03fRtM!EMHB z%EC?0&CbbA&&I{XNpB25Islxzu`v@jfNf{B_}>NFnaoT$xHz~u>Dk!LnE_2(n9-YX zva{2hGqG@6aIvr$oBbPX|2NqFSG4e7JNo||MEuvf`w#y5->>8!1m|xr{X1NL8EJ*FO)o|1voKAu<0IZ2$EYP32GG3FqGd z+d2OL+kdY|`e!#P=kK`n|9v+q06zaiM3Phm*hIO0w`EGI0=%JIzg(q%cBulKroUdn ze{ER(?^$+sKqJ5Gh>Q{du$%LbLjcqLdo|Yo5tjXTd+fjLHT^YQe~k1$W$*ltvZ`GF ziHrt-(5%16ac(9CRwh7e3p*3{|H?({uE&vaI{RJKo?wDz2GXQ< zkxTPqC9o$MiFVrBuBXN3`h6Oo$fNnNS;oL>^B(qM?0@slr2v+xpSsGf{>5M&tAH|E z8e+UH4~j)_!|!#U@c#AZYi>vFX?{n(r=fWH#w%F{&9cUJ>*vne_xknb%?HOEhAWTg z&L3~Do7?+efl|jNVd?KKM`52c4NoQysXk#mfrK}o5QC<<#GrA ztQux9%&YcEWq-MCj}z-p$NLtN@e1l4HMZi(Uo`CMSF6ip=L*Oje-fJSVE9=Bv*{tX zyWeCtwH}InxjHS(Vf*e6^Wa~qGqD1XS)@YnmRG5lZsq)6K@(P ztFpp}`t@}7RpTQ;gq2&SOjVV0Gr_|1x+)82O+<-#>iu-WvU}?)UmB_;NyCt%{$jac z%a_3yyBkIa*!z~3D1)y`;4g~~ldXr7&h11gG-KXY?P)_IlPq)?lDEveax{dOZHj3m z)o)Ec7d7sj(%-%<1V*1ZB|>rS@27v3UQXy>>4=nWAwgj2mEh##;-|5rHMJ5oQw-B6 z7RN#)kCoS8FSk_O*qVQDl3*b$*7siNUTiD36tx>=a~vNsaVmHx&Acagz>K1PRhw07 zEv=Ae`3m1V;d=WXEq1&aczL?99fPK;USe|jwo7Ru+BOE!fO=d_3aph?87KU7olgp` zS+&zV*EyvjD=@CjTk^;he$~K!BZ5rn?wAaZrz`(<#8mD9L2zz*isS5{>a9-~k5v@X zRzVbN%a&+|#7L1qbhG2S-K20Pc3augBw<&0%Td{ngV?zrk;S3;U5Zm4y@P9xNZ`hWzMIR|N$Uz^nmm~_PtMN<3FSxAn?#DBUO2;( zP66;iIJn_p?+#=%J-*JkTk?y&Lk(<8^4Mz{OI69gdC;P*NPTM%m`{s5qoRw9g*9Wvs?f+mTx2l!p zQVA{fqoH0@88kv!(nIwl!m@x$g+KmO2b|t@4_er$HHC@9NerH=_w+HPAH&XPqZG4J zix0tEWL|k0iLtt$OEhtghE;Enlr|?KXfKLh<0arDADjq`sgTJN_^hYX3dP8TC$C1J z_9+(}aJI-jeZgfGE+^!9{fzOA=_-&33Y_>hsYfQsxwZnyMk58)Lrqy`X=ar=1Ufcsf!Q|26$T4@Sh&5ScldkW zDOJ>p7R)94zU{2M_;wFPpKJ>93)sb7*Qw5?IGcm8MX$OZFm<`=OZ{u1IG*7Q!y|m` z6pE|yqtfwewqZ!RIM>2;eq~kp4xJAzK;Mnt?7fXrYEuiDqfscPtppS5UCC39S8DhP zI#$8`;tT?bzSI3@Hsaw`t^<+i}#uu~< zUmAO2xPGu?kfD|3&f?-fYY`7Li+!p#M)=eCqbX-Rqt9cBSh_x+nT&*h$rn2UgRZFP zMAfQUT1C-^T|3h-)=0>@?$oN_-MR0nO?Qz3(3`oIq; zAT~a2Vp735VV~VK^ti(`lYQ29XB~ectq&f&3Er;{v6H_^IGorT!}KEZsfEDE9GT|4 zwV3TEfC}BjhHRo*i(H9UDTy%a!x7%?W}B7GWuH9)iwbv{7se!vi+)j!AY9RRXSZ&C zA>e?rJK}q^Qx<6@ARFQUg7exx>pJVof3-N^*;s13oido1=|*6#*9>mkC-TSH#()bT z7!D%=6_`NnjIj}jSOI@P&GQ)0*`ne#2&Vs#R)zcpv#F&uKK+`idS0o9SBow@|7$1w zbR2<|ZL?M*MiP#PG(6~MW=YBTC2O5c8V{bl7KZU=A~SVL^DqL%HL!)D8nl}MZu)jF z@0sUj(pEIJ>Lh*b1&C7Qlr1Big_Si8q9@vaivD9^m@E;fWvl zG<4Hc0-K1^UW2_}SQH(oz`sfnOpWnufA~n5$r;VQ0F}X|X|6)6acXn&DuWk1NHgo* z(oV~s)an-Fi|otueE>pt*CS8q{AAMvK5-l=k@`HI`L1){B+`S-r6Jw!vRMYL0ZAVo zZo#5s{g9-V{B-QxwS>-}WgzB_15c>_Z2=ynpD|6cLiHQ3G!fkt~rs&eyt%DUtxr(&ckldeH2h(zhb34OM8XENand zQZBarRQKwbd=xRBT=64Amwdm-<60pOV!0HT8IK?8Tc_V$5308JByb2K5#eE41|q)n z?0{fk;%FeKmJpM!7Ff7N2av9M#_G5wn>7kDDX{PH@>6rB#G$lz?*J_zEkk{D*3f)d zi%D6Fh0_KGwf2V9g4Q<&GilqwR~dt9vXjV_^;(JFWSRaB>k_0;Nw`l5PDcR_4VrOykILNTPZ=Lah5(w?|QI zWy2)EZF5vvfvVZ8b`T3awUSye;ZbEeFyFrs^N}3|+^?D~p}c%t4OKKNKNx+3vEQ+R z{+(bRy6PHlW|h$6XZ4G{EY>J2o+BlmXAP6VV@;s#EYFh?1g(K0E+5`XV_c!TS!d`{ z0~#E!cC~R*k&pzM6zq?ID>kCfNbt{5icBZai7irdf>FyPln0JZ2^-^>y@!!M(^gHk z2_6e<(I{b}+~lFlAev3yQ$BU`8csD-t*R5nk2y}FS%;;l4{dO>_of?q4f3t;ZLfZ+ zgV*;(wEFIJ09?Z49!-Md?ADn_)@ z6cm;{w_Rq2lZYIrN%_ZYRw8VRbIr*_q1xEn`vhp)3=HnRIM~picBgoQLToLiti>$m zStlf|!aYs~p}S(owiK@3^sy}mkC7^0;HcCQOQ|NhK9(eu=_j}G9CBb}UamZ#SMor= zQ-_Yff2G#Yo_-h&W7g13?cP>b6;cls;$eI8tzN>!4WY=Fr*pLzsvNM{b?~Pa1!31X zdwYTTk*kKoW51i2q@YL#N@^o2;Xt(0*uPmD{aUEoIyL*Fy(Q9k>PyaEl~>v+Oi;1- z>qisWn@C#K*}LfuX737zm?HT4bXQ=D7{wul3+9DGQLGeTzPVGTcp_6;p-$)E01Sh>wph znNuN+qlcoWiI$f#w2;^wKq|B4KdqLn@@yS-6IO22dz0f=M}2jznw*7#=?{& zg4#I9fL}e>Rb=grcGp$f$f`kNb%8G4@Iz2j)b&Ax83%W!b!p3v*zZMzUh4usGdx$% zjS1Tc&EHw4>}4>{4NBaRRlH1PLVBTn4IK~dJWY$XPqGw>0D?rRuc}tX$5-|@$vrwp zuxxiB0JCij3vmt%XJHo=DQrRxP2~=iqJ1U*JZGJQlp}M+4$>)YXDZMB&=QPym=yQK zz1J7NS?jwbj`^&k+jjP>&TQ^za2oeKB`?#z?tmq1( zikeKmp6*VFUwkyeC*R&%f7zb4>-LL2XwJA#clIid8nuR;!xmAiWOMKLZu>CuOqOTM z$2cark1JDnmOKmzUlmUi62E9Q;CqK|n17;ZvvU!brz>Q@1y$xF?^;h$Xb7OC_(1~J z1zff$wi2{o??n!FKr#j7q6abU7~C`O&2*O2I>;al#Iy~mdn_-4`{4(-xb%Rmg$;SJ zhVQlPj*fY6(O1~e@9Bu*{pFAq;Vij%LX+$pu?d^Eyx7b5Z5i9SX)%TdgAzvv3oi6p z3Ta)KgxE>(O~V#B4Za9Pt64~eh$%YxceXkA2I@*6Lttzn_)2R>FGam6qtMZPJI`8+ zt-&Nz7+Od_V!Xr6Ac2D7%~CD#lH(u}5y$)C7>I?==C<6OV~vSBGL}Hh8M1NAGrk)- zPku>1{+QJlP@Gi|Ci|x6wCiGprETzi4dGNhX$dAjfExJ{J0kcwNL3`=Ml~&Ypqol< z<_;pWV>eiiwj*5@QO;B=U~JV&KnOJX7$1SpQ7w;+ciysqF5XTcl|WHIEgDzWuL>ip z7W3N>s+1BljMMO?U${-Vi3B?~LxAR9i4Q40urA8twTk-^9DxY&tZxJ|kSxJu!e)pf zWBQ8+;}e%PFK55AC?F_<8FGQ=Lt<)v&2sUo7%XO8Ny=x7^5wRWeARTSuKZ{Xxuox@ ztDTLfhuvr%ZXI!`t~@xfT;s9~VzL*Y2pfxKc_};)dfUM*!Xptyn1vZ>_9%CDPR#KgRLFCb zjoRan6l)#ozLe`a93;9sKbljPxOq+$TU^mFvC@6yS@tEe4j;}q_$H#zGP+ca3llY@ zxIbW(#+eRxC8Mm&i#d?+Rg=l?Iu&tnyahAo9Jj^Gtj&3nGGhNa@eFby2yuVM>3}2f zi6_-95HZ|IvRDu~-T%{+>^o>qeR%D&`Id5kSnQZ&3m9jM`N<)5@CL@p^pAiIGXbt0 z0YpBijk@PYg-dj;9uutSXIeGzW*^*K#l==lvy@zk zjEUkKM-V<#aMhL--ee=QVH0s{WN&O`Pq43&zS-k`klDN}GvKx;@@c)YoMZ=9^W>1* zCB^hb2-iUTSV6*TcK%yhT@9MPxET zHn2&EaTG5}lj{p9gur9!8(IP!V;;}J7nEcLSrH!k`pl`MpEBt(Vkc4C$%NZLj8aAW z>cNO@%%iYBjW@yuJE zd&fFc3*rfQ$a%Ay+kx0OYq96V+;e*I=PDN96K6&g@;DAg2g;K zjfL`U2|tu>=WiHN6+#Zs9$q$%WNA&o5NQsTu~iXDKlhi*8meI>s~p~=@Q8zFrOnY^ zago~#5*19em+hVVIF?w}rjh}{*c_g7ueOr+2*R8%mB2Bhevoi%PPAp=n!0;NQlu8p z9AKYwFtGTxbOj`>n)SvjB;MY3Tf6(sRseKJUfe1vIN58HGmr}^?g`>LWz1Fph>TI* zs72ZGqs8X#cbDG$&O^`uA?L;)NoIo;KU5YgGG~uM5q}yKcCWO6yBs6FD0ql>@ap>q zK^y$QL7Lc`Iu_t8k+PZXh^KSkczr$_f(2!$h1`aFiPsyrP_OZI6BWNzs$h6^;5xd9 zRvy(`{Xs@ZcAe^>#XsE70Id2Yy;!E_(pJ%ao~~20BW^OiQsJzwLb2l<_ZB@{*27=~ zat(6=w9GxH{Bxrn^kpM9(Zg`#8v=x;vgW3ag&#*7d}desl@`iV$Y$O@8~W*s*0{0x5T1qQ7@{JX9<&ObRL z|60@+kVf;jlmY+m>)pTW$^TJa;I~S){|5>QHUk?gHv=HMB@qWe&}C+2{=*)xWNc~v=M9N}%FW5f#KrwrJ0~EQr9Pmj zZW}V7sP3l;#6*Ij;oPAfFGht6KU2jVHM?iwWvdHm3o@S)r)Bku*T@&g4rv)1B`|TI zl$7ci$(#}8;(5P7`{13?dCUMm@{ubJQUQx=Lc-ZwzQ(Mxo2rCNbD0=S#9~H&eF26v z!WPB5pEvuP5wY8`Jsm*-_5_l2rgAqo(}cPn-e_{` zV3nLX4uO*~-tjUCbC3%DEaT_~n_rsw0_s#UeSV<6`S7ZCA}60$#)|O1k-puM>kOo$ zupQ&jL+Izj`eXfsbWO6*4@(QYW3z5(G*OLaQhs$6yERkA^hAuIKQQcb)lS1Fx+g_} zHw*ZPKuX26>{!m|?odmsy|sZ2H42SP@Dr4xw^Y&Ej4%iKxy2at=E&ZSM~G_~Ds5Bi zD=TUy(3P&p`)_xH>-Vp&W$M5X8#CKm;aM`4&81ppFl;GPvZAMQTH0LhKe%Yj-QAl9 zkdL3Gove+GstvcwV_SAG3*ZHlC_$?qi>v6l^3&S8`g29c!h$09P6IgBtOi_cBE ze=r%+QR96MOhJ@#OkUN4T@w4@(5501#9nPt6nTI5LM%sZ%L?Dk3Q9$e9oKv$j(YaI zzxm)2q0tw_jY3LNqMBPhFJcTJRJRHcYN&J8e|fLHj0t-3E5)0Ut;~%SCJbgZ4opuKT20;Gpp^ zZR-iB9Q$sfzT82gbMhH=Sf@YQfX*W)jrB8XN*#a|+j^j4vopxJ?v+LXBER<>U)vKK zlZjCMV>kvDiFuW5y>z0XDM`L+$)tG|0hQh8M*$lwKL^$HE!#B>SPyoR1#qSw@wCaX z|6z`#1bmQGwiVQz2h(_$u7HF@jAF6>u85B0kW3c)*nvnOgl>}XH}s^jKu;x-FAP^p zVVJ^^F+l0f>3Q09ancy0;(9S`N+tthuuKgaEs^*8(b;WOrwbLD1#CbArsSJ6;a;Ud z>^of`_LwOnPy`txo;aT9CKOb$zy$5SI3es3xtgZNq^4m)WYe^0C&$kZr%wKa*vta4 zKSE)x@sVk*m${~B(X8sczVRP7y_%xdO{Lqx)& zqEgmfvgyFC5B>0ZX0S$IF4gG`bOI(Zp;+Z2`=D1g>8wtB6@D1F0bVIo#L; zEQf-~R`@2NYMAtDY2<)dJ9=W3y#YfhtSYQMA_f_g!p_~P-e2Eg!6F@D=?D04W70{6 z8~!min*HlJ$P8vuXMwNM<(}=1y3|?1hB$Dx90>{C z!e=x!WJKSyaH#O8eZ!<<5EAPm!wvly6U}b4*mqyh1>Vg`a z=oX5XZN5p#G#%KKIQ!(TcHKBQj zVmR88UaJkYGaQHHYF9O;q$v-idre@gdTSUwLbK2SSVT7*QmTj<0azpm0v73-dGi@4 z7?+3$p+e#v=(lDD(JUysqerInh*|shHUwBByYv;Ala3H!T<>nL5&<8qzkP>AT;L($ zTaa_ovQRDnUeTHYGpCpWv!KX>5b&!r7P26rPxEIWAfX7awfw2BaRC1lLe6j&E#dqI zFAY^baD_iN8B8Jvf{X(v4GJ+H0X~=#3Dfpdb<#p53;ZcI$w|`lDYYdbF@aYthu8ex z%^MK#a+@zgFnL?IqS#heIhM3EFL+ihMxttjVz$4rh)(!6mvj>tG!h7#mMa<`88~1L zpbh;t2Tl^u#Ip8qsG(*~??p80QjTY+7A6m0r}v%PtqGS}h|#r`k#LJSd20vkOoQ_0ysvBhn?k~fT>t|4n>@d|q}`{tNfWG}K`2IgkARlAZG91iNwS1P zK9Gqf@flf&En7-2vRx|#8D_{#2qAh;n7az_ybultJ8O~GBn~=@CX*w(F%0La=+yyJ zi?@83>C{92D&yt#vz ztyO~QpSh4FrU~VwS_tgw*Ws|wP3E-XMDYw67`ld-;?|L&#V=U${<&w}{B^5Z^nR@| zT(j2TTv#`}QL;!L;aoTf!VD3rFQEY{0y0&6?XY`|3Hkq_?j56K>%Mf)h2^=NusLR{Yey>062PJJRxx1f_rk zG1?e`QNq7My9I(QKBT>wKNZB9`GSo|W*6Cy5icht=_1aU2>E+-nek~&!;yhNIDwKf zNeVc)J6>nLhqedblo=o7JO3L*uLmJZ$a3bZ?0!d>{wnO?ZCxqI;(!nr42#?PaLOy;eP{8TAKxE^X}XBl&gb)E9|pX`haMuVX@Ty& zf5&utL8K}3=b8&7-Oty zJbRG2TR5uP+S=ISrUr(K-$W7*_WEG`PB__#22cn_wlzNp(WnH>h)8i1C~lapPk*gV zD&ED1>n#;0+6W;@rq<^*05apX3@3Sx8WW*4k&x~05)>?mYn1aiv-qpBR&9I5Q7^b% zkeC7lT#<;eNDojvJ0<=2YpO1><;ejf{ltm>ir4^H@<2Qd3wrbq2-gP;4&rTcxsvo7u5!Kaxeyv2m- zvcIHDse;q;LmWNK&$!XcN|o3WCSR204-aJ#1C?XpPkkVkhQzgV7H#RC(!kN@{gulH zjt6!4KNp+iv(N9C?!d_r-NbDY?-R72y|+k6Eu#^3{SBOzM2rV;uzRN4bHVE9hji3u(W*Bi0Z^D}w7$j4R$QBXbTY^1gMH^;_)WRq|(N?Zodp zWbD{8#VSbq;KErYWH^Cy(xuuP_M8HVoSeG`GagVtWJo8QiabVeBc|`qxHdEtRSEbv zpGxLpey)G7WC}SIo7XaX2zR$9TMu9lS2k4nNzT&A>5aeuZH<8vv(Wn5eU)}}P(yB^ z)&3yb$X2|RVVdVu#qFJUA`Jms3cL835+*sv00<6x5pMMktx2p$6 zxq|JHe~0(`D_j)L>{cN7Qoj2k_auoBOyc+f)z!0u#9Q_K&OeR3a1P%{;6qH){gIaW zlTA!}J!*G@#wvL-e2we-R0BtH1@Fqlfg0ls&um@(owfpjS*qV*_qCgHjPu>2i;5{M zemyZl#%v`BJ%8s?ukol%1WJp2J7Pnf)X}h3#{4)dWx0HEn4e}UH*}Mewsw1p8M`;a z?TusZ4Li-?(CA89f|GF&eWPQ2+o!rxt%kg@T2r`Jht^lgDypT$FMXAyvYu+zCIr_Y zxB)31xl5nFHQ)TT-ZV7d>_4BQuClNFv-uAKyP)@E-{;?AG=hO{P=g*h6x!OA)9J0^ zK7fzv`4#iXOXV796LMciUzMq^HLp|Puwb`6KWP>H4DD*OMu8artV@s8agvOgzR0qv z{E=C`thTxMzyP*S8x){8LHpR(@j>eKy9{Wpj{AX?$-#QIRm2du4xNVa+~SpTcs=!Q z1sTg`x`wj5q>um?XGWc2{XE!Vzq=rl5M5<{a@wTgzm=2*&b1<~Ys#IftbD12si1ku zy|vXR^5gz@c!zec@wE%v$~+?6SZP%*R^Zyfmy$EB;pKJD4M_;NIZ0>VdUNYrTjkGA zsg-?fO_~zFObnuXMBPXx*y*(*DktG=EmrZSCdDnjf!EQ~VchHR>MBUDx0*3en9C?~ z%x&cf>#^7>FF!ONCi`mQ&ql38v>Ne1vox^}S9XClE}t)zYx_{tFWC=6U(_Mx&qP%1 z1aJRCH@~kcLF;IZh@8$$ufiKD;2%oOFdNZ+ewksqy4OV5L7~L+bEl{h_K=I%iqlp_ zwN7Ly*u>E$j<9mveGu02?6K5_^cMAZHAmAzzg-I{-?TmqJZLc21?gb{!vg30MS)6 zM3`fjC)DtH9+!aHZjcf#O!@*=G_H2}_v+eM{!zd950dk*=8yj!BuBv7!rJclw@<6# zH`Wob|0Xi5e>((yQ7fr27xx58Zc9#((KIzx!?eqxI%LoO}L~ z)cs4%NF)580HS}0Apf_pqJK@!e_i?bj}pfJxbl~go{{OFtY|_*-Fj^p#cQc*S^^Le zlOf}6dH_{4-ijr#Z6h2CWcl2mlA#em6H82b5&Tj49`1>QK_C=Oj(})@3P^>(_3(PU zMO*lV)#c?$`}x|6Nv99_Yx%l2h48l|3{AOct-|e&3$x3Mekaxu+}Y5KLvsf7?9Rq^ z)zWjb7A*BFp;REcRx}t*7ZR_{hptY%r1=SaP*p~10C0&extL*+Vc*%x_R?`%${x{7 z*Dh3i%JI>&UqNWtC;Hr$_YfL-mgWE&{kOUHGrwr)8Wx;XLVj{{j_S+Ef{C<*i^CBw z&d0zpHHj$TFkCoMCwbB}qZGPURK=)CO-5v405DX;((>P*X@} z+F)jc%~4H|Lyn-_;Oe@sL%#lG0U*1h+a>Ja)PAz6Yko>@3O_)^Q_5?*OArkr0;j$6 zKKNlfM|0*wZ7HY}uqdRwKU`nj3WD`#Rk#CqgYR1~rdY^@ZuM8kqQ5sL4E%JG~?N7hPV94AUxJ%+31%y2^MF@dDN=z*1S-O6muoUK_mhoC~L~C zg>bR~e_Dw`Xm>hEm<(~npng|wX1I{I>@t1M;kN3fhffrek zcg}>pV!)KOyv}R8@EOXNq@N^0yj;^ZC<~EX6o@SK@^17x)uIp27Kns^B)qx|mPh_@ z)A5>ZHcw3D{fz1NVn{L=RJZZujplq;Vo*b^pUratn;^w(iyJZWO(I$a+7geHbbh{>lT3Ek#Z#PJ?_%&U)F9^P{Yi#}$RB=v>+-FpCAA+3 zxmi78Nti0XvNsUHaw0u(C)(Y!6bIQUs<^5{cPiO_HnVQ`(;%Uv=YVaI)*o%LdtaD2 zW9{22TIOdMyp+Ci5NVxxRHG&>HCu7HfL=o;Lj)ys)_@pYBaQCU96ddx3ucdcA25&} z!90glk7he=)<(2eNISsq;odpWZwu#0tZ3m?mWBG=Kc26)B!9AqGP5^4S zUN)2tWgUN4Z6}bEy|IfvN4sU)%#@i_&L{|!#V#ZkI_bIEyE90|;8QvCez>sJ19gUY z+6rqF?0_$jW-YmD(2sRFB;54TphgRh>afZ_T2;2dZ&;6%wV<6o--MTmyR9Njmy%)y z=Mpe3l*>pZZ)$+H&H7@c-P-O8)i|Ta9HxuDsT*I`NO?SYrm{_zD3UQ+lydLQr1~3Q zK?X{Gj|r_GLS`M`8FY7>sz4kR?sdBzg`jWPn_V3RoR%KaIZ1)b?pEIqscmQ=42+%? zO=bNdj9jdnO+a==O42$Y+a~ZC#S_-0I{qb7+t$?pqN!plKexUJ)mxf;YjoU#CS8;U zAq0hlLPB->fGU7J6>Vh^(_?4(%7fFho#+gx@=#+v5{aC3D$p3O)Sx^{Dh9l=%+07*u!sr8h~uU0YXTn^n~J-m4OBF2oJhk zQlk2Rgj`PQj41TUf&X(-Jq)})l;heb#~FX-oUHGMLnXqYB{2n2CWqY2b1q9 z*I{Z!p6>m7(DxumKexkb`t~|;x7IF00ts~%P08_IQr$iVvbk$q0rcAM{Ar?cx=+1C zZWu68(1mnv&f!uL3sNr)5-Hk50s#xY03Ts?T8pyq6HYwW36>)b)^Gr5Cjoug15}3J z72^@3!?B_d&d?EK1~f2sVJ@PUIB3|mhm4$>G+U*}V^J6>Oo9wVjHA5B)^rG2+R%-Z zs)g9tI_idct#(ag{MAD4YM3;vzAQ0(Jfz=iKCn*P43$F76*HDUjZQ|m^38Ev6KvX#C*qG)nygJP*zU7m`)xkHMZ z#aJ%G0;+>gX}HK{qzGV43Ld}tA&_cC+(=#kp!kQu@^g9xRB{1<){W#e$Z+pL?&nOQ zBVcPt{&)~98Eck?aSF@!g=>UCNF?R0jkt8E$V-!#gf)Y*FbY-7)b5;|4{keOW35sq z+7mBq$R>5V?G$16TadeUl=f9h?OYj%zTmTY(?pN3Q73!(5R_c^FpCNYsdVNO!6Oo_ zk4GvjzEFuR$E3S8_+m1h(#&6G&1C3DFsh(!Xjt zm-h1)S^fry@4+6z_~4Zm3I=T^vzgSKfPy&uOV2vlhg}#}d~N`Uq|eK2lY!4%fzIUQ z_D_N@4>1`FfH&m$yZbE>uTYVrFYcGmAH!Yhhb`g93Vz;jf(c+isb%miI2%-U4f*+> z-GT7bg`eDMY|LD&W}K&^y}TD-+ALNU!o17$<&Xw6R^+UL`*dKdV^}|vwP~Fm9Pz$A z#uVG_4{|8l?=;R-OOlR+EarF$3;R}rBFjt3HI1MV-zkj*NhW@dhL|zYoN0E@+wF>* zY4N=km|=#koKKS?iG@!RR>eIb#1(`%qyMJzx}nzaN^d>WBBBa@W<^p>oKA9UG{(*B zUDymIT@RT?x$dxZhU+xVZ|ZK6|8)*4R1qmWuT*8a-(S4wJsFznAYecP;uXi748KsH z`ZNM`LB1y_zjpXahP8HxgTp% zs5p`-M>uv8%F1r|A@P!p0mmtY<`dNjS`nw)AF-|lg}1jf#dp5m>jQYpJ9`c0Bk)i=wb^D_C>BoC zZY+8l214R|z8Fi3LY<>?v59e#%f|B6>USq)Ow?EO?f5I-36qpwO|G3<#l6{E?zSVK z7lvQ13!5*Me4e9iArZnW0R%yZPjTOwqP=QA&?&!kk4T0Ka;vUlB#Y&h=>&feLV~Ykgmty4@OG(Y zy3h+~NX$HMC`E|E*{55U3mqc?YO6A1uJ56^d3zpGg+!_bRccm16C-!xT5wbnrDe#o z^Y)HMA+5x`QBn+9E2eUPwz38+k5EqNj&{6J4xKVP<(av69R@LHRbh56o`K zK8+}DH%LNRN}j7@J%YI5$ln^cW?Zoj_G1(+#_8_%LI0U~$~roeQwcWO?(`$W^;u=u zNEO+>!142?-;F-1=`|SEW?Jf{Ju}YJ;0w`cMQ3~)SV&z z$Y~BV>3SNa?s#Br5-X*eleZS64TBHlDegmJt;DrnoSW!)f6_bmb%Z}r#lX@SJ`8Q0 zd&N{Q#FnN3U65M)HBQpNYSuitd{C^*UBX?y^SyXod?2rJV4LDm=IUR2VecACrU~>j-Wt%PeRFt+=Pf7+8unXo!> zQY9MT7>J&?$t>zp5O9lwD%m+buUW1=$wtdmOgb@u;FsAD|`H8cxZDWZ)Fr1+csT9c572=pft$~UcpWj@n*99<-A$5 zFpx-<{Ix{)F&H=t#QiWT&ZuBwu`Q_4#UGD{Wi6GdLGE7~_=M5ZMqRLH-ips! zFtW&A$tYK(Q3k>*Nm6PfUKx~_O+rF_g;-`4b;I6Jhm??6;&*lASx4^o!y9Pbsl9M& z)Pjei_a1VAzKoqc*b(NTJ#MSuXD$p-sy7vV?gnWv42JSp;Zd+bwjNzj?YDSmbU!_> zqLH7e&_tS!;oa{QA|@!{HdMGW=)jAhguQ~eqg@-(%c}I!>X)M6DBoAYryL%GTk?J? zq_vLr`zMO6W>LboKGE`6)Y!4>y8CQf?RVj7!!X2m10(MQlWk@oaB1_6vt`C}3ovO2 z&#OWHL4*&HTk-vVjPqOT0EP$a353k#y$3C=?;8@} z32Z|6&T1dB{PU|GtYWP?Q=f%gWiD1eSJta_rAM28rA+%!Z{?{AFQwb@+=8u}QJZ50 zoTI8S(#{N#ut^rDCOM7KKH`qVU8`p$v+Vj@_xFOkpGOg0nfWHi7g`{vKY@js1qb@c zLtcf)aBth-X`%8iQQ+AkYZJFoFxYV+>n^_*iZAdk+-NEG42nuh%DIVOTjHN{#Rpgn znLnCUJSWQe>DiHb%{kZz%3|)zsCqW&;;C}8R09QR8G{T-?i9r#<1>^?$c#})S};$i zu(-SHL5m*w;hgI*J0mg9KA-+XZ3d;4Pi4Z;N_COn5lo8&MIeUV5}sak>*U0p=+YggkEg_?ze_DJR#UI-2S-G0@?)k zW^us8S7Wvh{PW`rGztJ1=ilX6e-WO4D_;Bu$NJm1JY5&nc?JqN4_2|9f3a=~eop!Ndm9o}k=HWhKhLv-pST2&a zVThO!|DlRY=0(e=S9&zU7nBh=?spX;b+oZsE@8MIDUAkUda;zZ`Y2;v>mCmmGIsaX zod|gupP@6$E#y=iwlv52q zH>9mQU;T5Btgoy+lvK)6wckneClly@kw_+;<&p|F$*_3K2%a*;Bfoda49T0MkL*jG z9)Cq#hV9F!vMUK2lD}}Hux(_~-Y_Z>+>K1#OB%&9ap}YpdDr2&X~KKrX{^sQ)Q)`l zMw8bPypVCfrHIF$7^Fvmex%;5F_+*88@@)*Ts*N@TUmcT9iknJ2=K6(1_o`+_S3M4 zpN*^HoTtEAav@Ngdyj^ttjGnh|1Y2*3$L&3avv6Q|*uT z3rfIrE2E*86=?Z9+h7G^sGjaXon>^;74#qAnVJt6$tAdzbT8&-Qwkh0$ng+B>RP9j zQcy3n@aJUl-!H{$L;1M(oK4AP)k#Uhb|n7TOlTR;m!0e?C&TX8JZOO~B*j=XP$Ivj z?_g#MQt2*~(&8Ck#7u)-JYp2+{CsUXStd<`VnZMdzZLknwY=TX`^}wDrtF~Xp2iYC zP{a=C^3nWyXD8PwRd?15RkFrxOgu@bfB&%ZTSrif@oC zfkJChlhUJ+)FYz&#rQ=cer0no5ve|dn05a1b?HbD$COlqqC(-V;fvE7WVUo1EseXu z<>RFd_j|KtQBKXt;MF;EjE=9J(0H!!*RbOuxQB&K6r&#bG1#FfL-8ZmG(`*pn4ZBG z7XAnM)9%U)_^g_=b1xPGn$a+Ey0`XFE~64p#>44;nq4XDN;VhV{iyzdA|(iLDnYT* zj|KV92Ksgeuk!62B7u{3QjO_zOL1u--U<1BRjZe&KK(v}5Qx|o+KzS0ELYuISZ`SM z?_CV&kyB89e|t+SLK0u;*<2D{_9WQjxXJ>i<~!5a(hU5X{x_Bns$$b@hBKQvL=V#cXX2f9Onlkeum zo04PW`-yY2$-Fv{_byRQa6=))eZ(+_`!*#><^()Ml3&qw^ zO_qrlBHsZ>|6WMRuVf$>fK(F0mDTnK_ToVtnPUtbA~YrZ(%mfjfoLs((Lq2BdY+r( zA~}Ib|A3jj_xLi-s%*jC=Lqx<*(TZ3=3p@a#VA690E>CFwoFlHJ-l?~>G-8+N zi0F}p=1K{g74l%^$<%~j=7E}rtG%D|Ul|j6%AGugMVK00cpy$9|#9osPxKTh) z#t~KVAUjPuypd68vg+0|Rm=|~#VZ!}au0|Uqqh;JA#aAt|3gd`H?<>GEV z6X2e;5%23_5eVS;GBO!MfHm0lv9LZVMF2nTL_A~^8%qPS+m~z5?8wJyAlcyYCHd?| zdWE@yR;);kV}1Iyh-9W>Qa0^O< z2!>5iYHbxwBN7A-s_ZV^u?6_h`*R`#7%)QAniGxwhKxHc;9GCDLZDtuWx#n@#Q;wQ2y`Q2~x)8mAoc6fxzRNG~Y_-omrw2|em=LiaEd7G35 zZv|Dv282U^KXf2+ip{fsA>ot!G>c%~hVEz(@54nvO+f z+5&7KFh>_+b0%r;ekEIuD-J52&@MV% zs0bSSUJ_}MQ3bwEU(hh_VD_e5Oxj7<_k49-8aF9;%_+!HCk_tZkWf00eGf<$4;(!k zaDnTd?nQ#_51t~qpW)awAb78m%PvK$&d;!Uu@?tA%W2o`08>Zc9)6YV74AWW6u<{lWxft)Mlc0^w3G4EC3qd6N0v4MUBybk#cCNL`|@^o zP(gs|M=NLNT21{yluD&WFCfw3J!BC6qi4DedY5Ur@6xaUK%Q^_S|af+nKrZ^0YOAR zc-<9HER~tsTI@-)QYA4YXgipQsU@n9f*yc=hh#`kzI@vs}jq3(Oj2)|0-0ILGOX|I4UkuI%30VOxhh_!4;z!ebd@Fir_MujJO zPPI0oYL|vBqKZaQpkb$ZO|9>B>?f&oVU-$6OH?G)ugQZPc(_Qhe_>a^1>)$Zhr7$l z;~ltwoiiyaeV)%fV>zrpH$pK)nYVQc_WL8?G1rrZXswhnnY8oxF>r>B+!bK&dK6hy z?hH-sC<}xr-Jp84v?`-UJayL`aUlYJtkS!vl4*YROS{>awmqJZ5VARzI3an+DX{GT z30}xD@67Qd_q~}6&G~HbX;<-seyn!z;cNhK;?as%#}khRxy4bl7|Lm+I;$AwQTH@L zw7D+dws=F}iU`gUmg$k1^O5=Vo*#RSUDpofL-d|&nnpG% zDMSLRYKG8$mpH`f7z^U`-Lte5lz|f6Wbkge;ZH$GLbLFo?04lUZ`kN|?3HwN&lM-U z)CF}B*gy}Ar1&M!_6CZeTeu)=YSD2JI>n~4OC~u;mi07!UYxb7>7U<-&3r#5(dYq) z4_p*&$Ew_vkshbrgZlMW-ufYb4ZSJjPvzVL@KDQAVtC^y#Tys8l|#&`UT{0YKyf59 ziVw_W>`16+sa@|PDVc}+QDq}mde}iQ%3JX#HVdc)jls4Wuh70RQEjFUQ%EwKYw*>z z955HrCDePe^fwdpyX>=mnDcT=2q*c-Z|TWJ`9Z@Rq2dJy&nFnC*}b~2SL_0+w#q6q zJu{=7FQ&V2NdUG1p&DZo)S#j?{<&ma3z{OKhKVnc#gMZ^l|tdQyQbG#iqJ{Blr;W= z7|SF+2M5Kr59>JU7&2_;_(StsOZ>U|QcPbUQ#Szb-s(vm-DfwPT~N^7S~09pjr5`o zUKf0q;&!#0%B#|;w;{g-BlbBx8mT<4x1Tov2g8S_UCN8+Px(?0ll}&!DnolH>i7fv z<&1&5#uGC@W*r>t#;J9xAd5&G{%;S`yAtVG-qZdbD=totjm?>f~?;g zA}?OX1wMhc!8W#!x* zX$LC>A8+sxVF=EvmhE&23p|ME#~TQK$?SU^pUTpLr_M$Hu^h%HWCw?38U7R@mD;r1sE3 z_ha{h*jvfq?Z7UYLwFU{3iO-1D6NK+o?n~9Ye6eKI?C;bgnO?G>A>?{Y~t6SmaEOM zRUTa&*H1fUT0s|c4DAuaQ@6E!_Z_nUW0?nr{5ZU2G{;7p%(N)%RfkZ^T3mf-A@7vhtdd(Kk)%O#MlkaGFUgJ|B2ikdJ%MGOjyTHX zhqw4K%OEH(@S+yJVc%CkeJD&vj9Rek#bw8R@)K@gCB%&^t^7R!!Q)U^EjRAFj=dpb zy=cev{as=%BiI#Q7cBfXFFK?&W*ke<7$HEvRZ4ss^`njHmQ2zU^p{Qp?p+^_SflM{ z&-~l~yF!O&gXHwH12w%_Cr^{p-$Bc%!ok)OhIH9|?#(CDEthS^aM62E#~yu_U@IHO z(-8su;`=bV8L}p@MG;9C41BNakFm6I=*j25OQKVXY{mm6y1(!FC_-g7@l_AJ`M1X~mHXn$?7L9t?l@Kl#W>iDsP-^?cgtNoY3R|Jf!@Z|N ziOUBYkUovra$0{|6Y^|`n*qV?rBaEwm@5<oVP-t(&%{h*^dJ%18z#d|4gd-O3c}Po=$@olB<--dbwcrcAnyr5q&Or^^(n{g;GX zKu<*KX_lcO-x(Wpb+FJo`v?4tQmtfG)i5P5uivZ}7SF{cmc!#T=@l$>0|{?bw!CNf z?PPWlSDs!PT|h0xtw?pZ-94VF=Wuo~&c7jl<+x^~A3-zqwUR_No#7Qj`UUAz5Hscq zbZ52~YjZX2k~qV`C%5et%q*;6kMMk;s&vX2YRTO#Kc_%BJR(dfbXc6(`EQDh@UT4T z8~6p6hl|i0vp3Sc8mMOy>!piwt977ZG&Rv$JriI-(o_0T?5^Sdx_T3x(hOp4zwxaI zQh#8-{sM%z18e{Huo>$=8ruC|*o^gG4dMPf`OX2I&YM2fdEGP>~ z-5@OHSkUFq=hVwV*Po6K&bPi58oat6srCfaa#aG;+LP6w#;FEKI}8<54HFpzajM_6 zt(bszS7!HpB8(Q1n`yN1-GjlLK^%k|0`q49gG@2H&^u|uu$@31D*NyHL;_lIjrlfw z58oq%Wc1yZX@a`m5bDaZ1wD3>Ty#wXA-k7mH-;`%nJa4+5yWwWSS{B=s2B-0;^dKh zWub7jt_(U!Ax#?f?cPW~3L5&0;GJM4{q`K&Qh2WCA8k?-=6jk(k#?VJx2vJ$cm)yf zu~b?|fZ;etc9>&Z(!El9;gY0^#k!v2Hz!SSGX9v)5m^njw+fd#WeFQigt zxronREwC(U3kdfg@q<_uA01cG31ZkZMxN#2Z6wmSG(W?5;$fDI?2Z_yax-^%iC=nk zwiVaEf7q#SCY;HbI$_k14klZf7GeCY4BDd{;Dev9drpl()$k6ZXKgB@U*}`z2 zqKyb*F0BC@>eXc}(BH_lL;6=TuMPIakA(dGMW34%1+e{w?Q6#72l(8xPz@W&3Z%!^ zXC>=!hwb5;>xh8^(3uuKcilTmiRM1xf}@`WF4Nh6#k2?g)gS2#*msV%`&tQf$+RbI zD6~ZE;b=8Xz<|tF(hc)Q5NWyhO4`+h!Xl_!lRRe0Abs6(wYH+m!A+}U!$$pjRB>2~>FQETf&P|aH z{BvIB(dv(33Sd_<&wBcCOdiNk2UfvU7-jd=+)3N?IKA9MJZ$n`b;yC?3vqv}8p$A0 z&%i#Jp|+IHCSW%q85rBf?IFWS$xbG}YC?l(LwtISaO7ZV`=jZbDD_1xN_%pR{Y*+f z3}W_sD~@A#e&3Q6Y@lU5a!HZw*ToqYcWYob$WR@N}ZLeNaS90coX&id`y>UTuCr&q{k{f2M~km1hp95BA&)3&ygtc|9~ z#hcrKX`aox)Hy&1oXCej&km7R#;M}$JyJ!egWpR_%lmHd_d;+HTQ8TFX*OZgd@738 z?`@L&)~`6CgQKp_p<FFhE1LWv0d#+s0usIR|`?TtbA>{WyXk>6g8y5N&iJTr~m1_NP{1X&5;**mb=0JWa z;P(vtWEHB@BX239N9|i5M;~asy12#)kR%?>TSBH+0M7w9Yaq2B#7Bw~PGdB3LCStW z^s~>IP?6z~GJAuCB>@{R8A|yykgwMae5g6wRfL6b?$Ez}rA-i1en816R@8DSc1&XE z^437Qx0f6vJr&AsMZ2qAB>ismaZ3orSdowh#A2w)i1*m(_TR-{iD3yW-hqOGQ8y`2 z@aXbOG!g?9>Z>c%@go-^N*Izz_Y+}YGbN@1go+I2{gSec2t9|chq%ujz_{8`#dwDW zs3#Xd;2#!denQDKmO2Evlu8Fe1H~|gvytFrr?+JOwNdYJen%*{U|?XrckjEGl7*$I zj##tq$DFiYUZ~4DOCV^=Dbw8m8WRS!Rg;W|QiiIc?#n$#0TsGZ-`Ln99cnmo6lJ4p zt~%8rdyjGM&5fAHUut5fmlQ7V_?)&xQ-*l((+)`ZmKujuLJv!#x}I&Q90} zvw!M#8W_eU_DHVma{1wnOC@5`S6BN8$tOM0vQ6)=oO)?B3RhP8v(1)+49yAbD2%9( zv{HBpNGGZI01u@Dwg$)!J_E}G8;X`@1U{L`*bn4{i=ob4J9m1ZXo$qVzjqVM)+cD_ zlzGUHIMiZ+brajNf`C1CYa7RV@-1n_=P?z)Cy1l*7dMY;`3NO31^Y?<-Z3d59C1zD z!0RLdCPQFPI-vils}2JS4oF!9xRV>8?a*$|s+BnpOd$C5wg56XPSiw66#J9&#IL-w zB$#T9RbNJ8*pc7kG8z*tQ*8t@iRt|m*U zU?{+SQdW7^Q{my>*qVJ~cdhW| z`)r}bf?~pXdeaptTy-GKYO4uJD7PBFYsvLPYN(Uvgj{WJ-WC@6G+W#yfZs+SH%Kv5 z(*y^w5mp`*3x-9Sc5I`#fGP4?e=Z7! z_ol*vb8E+qi(`8-)x+Vafx!8kn{sXB5`p1$jutN-IE)pJ9>dE^JPXPLP1@nm#a2ox z(`ZBibqP#{TJfviT22Jk(Zci3vzP=1K|}9?z;py#wpMIe74AIbdfg_o9hnJt+sPGA ze3F$nh42m09}s2?733eMzdc(jJ?<6)+c(%(#Of`ju3BJ>(mFdIC@Q}-)PbRsBC?2o zG6rH`@0+hu+QR|XZMU1|>Jp7`noe1qzg5z``0mlA?bkD)&uTH|iNg(k=w^n7+#aaSH$h)v%N z*#QCiWW-?ef`W(I=c(-@RA7q3t(K{Q@!+U~f7j;Z zh@ykgudT5i?nqX`G#LEaiPzzV2`*eeEsmEc7N(Uzh6IT}Q0*T9@_;=i?f;To930$M zQ<8PA$S`Ox6bC8Xag|#ceetW|rlf1}kNCB!95u$H%Rrq#>(cth>Wp$I$6S~h6aI0qTdh;VbLC{#MM_5$sje<(XWz?xA*v)k_$6uAlG4mXTReos7oj^yzs+ZdhlwAON{&5du<6B-)~wG6@|F6G++tKt8#3Ds%{wp zVp)V<2xN^0g|l4n^V`bWm&_*3VMTZ#4S$&hF5lDtR*HHGkJ6MTQAj}*?cErBSYI41 zcQr+0z@jV`mt0*j#foh>5}s1{`YD{fDxTd47*=(nuh4)PEs;@7`Uc?D2I*5c$ezE3 z!U~T26dp!4%fj=rY`pY9J_Q|P)?Sgil;x(nM^VcZGZ)nWi8{lWj2c1XR}7yplIS&j z1~Mi^rbuFtHzKH|UYrPKwk$~-^p*hGl)bY30U)r)b||7FISB!sP>c(xT%m;xYBD>V ztuiedy9)l~Mj|Caq+?3uWyWTL2FtvR)eHMPf@L4JvjBsAF+1-O@59fw;Ox*@j`Aio zWzFjT^s|@>6gutI{-N;a&`t87lxSQhzGO1jC}61WG(JG zOhE^kxB~O|aE(?dD^&Gqr5_eI_KxRO<>mfsOd??w#Ueoy(jp>oejZ1xv0KTviiOHxnftmAuyiL37ht-_LGnw~B(pZ@k=uJ-h zrj`Z(IFS{Uz}MXSAu~6JSTgwYFQG1NyW(hEiyM*q8@O&b>Y-uHiF{x#o?%V*-Uk>% z5MLixIRWd=lk;2xb~5Ky)q>J;mt75ia($u2aCZ67-2E-Wj%BSJb*@(V78;X z7w^fbIFvJ=*I2ZW3^}uG?Y?SR0(|X1mP2bOsi2;@SM2X`SEzvHtBfk}r_fwuci)W% zS50$o`N@mBK79~u8!TCXx}fJ!v=U} zWZee%h+*AE|Nh3RneN%ps<|Ny+sZ{0Uq;^(UlEM3Nb0&{psG^%JP21K63X_rCrc$J z)WxW-TOxs2 z+h)goDLtm57^az*7-Ln`rY1+>%={tW``qcQ()LdX`ODU{s}_Vd95^mqHMV~ppTLf; zKZxnA2ONJLVplducZoSX15$HWPJcAH@w%>f>cU!8WY_jQ6yM%@4N!Jaw&}qywA`8 ziEUA=CsN8)NDu?FwWCcwn6+LtjTMGg4!EdCTSpRyPPR)*x%DUF_+|fzTp8=a8~UTQ6yD?#@6->(3y^p zqOmI!C;0+_)s?I&YWzHss9Row=>)crYl!*eQ!B}XSDS1ij8~Us&bUV>ugjmE^2LdD zjNQsi?;?z1+1P@%{vA7Kkgf}^bQ=MW@26T({BS~8wUC~u1W`f)gj)cUdmF7-YgvJX z1w>u@;TOyr7Ee2RZ3p2O2EClx{lM3Z<-PMR?))w)U1gM_2pP7uZH94znoRo?NrLNm zyn^T&eH5MacUXJ@;6L{yod?mt2{44XTtOBFT(j{yrCN^O#o)CE&^|uI9EUv<{G4_x zPA}-7oGCnR)k6SOvsdnQ>)HU_s&>iZa1U;AmTW>GF5ATlwl`5i7mJ+V`yjYHLtu7? z+_1{%^r1n|j6%Nm)Yl&Llxu{YHS>-*9;wV87v32=i7=zMnTwje>2sSUW>VGo?-hEI zseo++v4eLJxiHWa9{?f`m2-|{Sk#s0JOgpYe-V*k3fDicJ}(WxoUi31^Gn2U;l4DCk(XAe;bQ1)6rA2eEXa* z&@udNEW-S4IKuG1WGwP`Q2eKWnvsc);eQ6ymiB9d2%nYOInmt_pnIFPFGu?Yx|CZfPF++B>%{jmE};4|Cf+>~Gr4U$-9mgj5p> zP?MML!jrd1)4V6YufUWvB7w4|2Gsnhf#I`)>(vP_2pQaJi*Z~xpISX#1;UQUJP_ywS(wyFA_>SRQr zEsE60qQf4FXrL}ejWRI^P9uzMiHY@Pn6q-`1iX1QAHw6) z2L_=%dN<-6)1QhpRSz-i2pAVLb>WvapaJqX0I|wi_g;l~N?6)iFt@IE;RO96c|_WS zhzG8ItphdR2tMm|c=B?Eus^RJOkTU|62DOrYq*~46k%i4?r%^NA+M#g&pBluE5UAq zgJKj2TL`QD7=d}j4hwR*kZ;a(z|^G9c_G-}dgCrHFLnSU!-mCAuzW2Sp^?m>N zWH^TVtiAT!dp&ENGxnU%v*xtDpAd}A7HDqUY2qO)ERFtXemO3{MHqWlt0pHG;~6LG{p6x`C6Nsd3U82Iqf7df1?TmzLEfkDQ6l#1J*m2b5|^{ z0a%H)R$cm3ED^PPu_ojbajI~*Qy7UlLgS{-V5*s~n#5~K-UHoUnGKPLrSoqVP*W_F z4Cg$EVOjLw8riu3SLkrq!&s3P4lK*Kh%#)NFfHBGgs)z^m~)Ixh&)<5<@ZI_Ol zp{0m7-7A{WSg_J+Z&PGQxQQs~RNVCiw4M!}nIw%0RtXbyl|iKc$QmPm+`UT6U*?yc7Afb5canpi@PrJG}og_n0EV{ZkCltE9}xk${EkPCtn zxIp-m!#2iVt7>>wQ+Y$nNS}XLUN&ktsfx4=&*_Bi+h|r60#u#KM`f$yPf|P@ZS|vS zz?FRO{?NUDVX&$2$M zdGM2xR6bxzEQeftCx#$+XN+gB1weY5>0)>By6B$rD2B!4JY8KSBP~gcGIcKmngD#$ zCqO_)DtOi_mEGR7Q|^_-lu()~J4+^b&ivAIn~MhC;@32IAbwA5Li#*IZd`{YoKt%KtlIr#@0Q2+n`HYCCowt<5QD6X+gvwFZW9t4z;03 zgw>Mb*tH&6C4SOXuF>ujg1Lknnm#98m@TBS9%8MW&Xkg)%8K-v#DyHQnb9_#=ICH& z4ZKJxT#;Z3ub2x>i;^Yd6@H7xO+UIv{IUE>rXj4F9#RHLb5ajUKlOs=y75fj$Pr3# zE!Yzv)UL{Z#sXNDaH+7Tnu={DzN))83htR>_B1O;it(*P{w zjzv34p^QfB5XK?GH&MiGySH;1tta$OSxvQBK8kag#?2p!^Y9a5If3|ry4aa77=&jl z345K^GUyLi2=-o%ZM+2ZcU!&J39vW$jmqTp-yYCG<|zi-l6M7b&9EU}&+6E;m7%<{Eo z&v5sx;P9Cx_qyPzHF}YCQDZA7lfjjh`!qVb_fpWD>Z&vpvYLAVXp_(M;MPJnQ>e0H z*Zs9}m@AtcviMK9HDhnZ=e~>%gFt}9GgUA04utTTD=0X8-Tf%XSK7pIk#DA`>`uyV zb6Y4MQMq(|tn|IQWM~6-0y+?+$m94GuYy3|j;t3S=;9nL2pDAa%5mo`YW=V?2k!a3 zPZN2Rp2O=gTblgx)s>_aD+Zp~3wWqo8z_>h;&d&S&ntt`F`!HG6g2 zc$+kUog7bnhx~TwILC)w8HR?nCmHrHJoqd{A1HVBaT|v3$gizJ<|-6itxq{7vp+(; z?@u2ngIwej-KbfDcCxxh7{Vk8H_2c@;Vbw=yc zxFbK93h=vztikxpBhzPcJnfG5Vs0*NeClhOa!cd^h_SBt^J&1zBM4EBkM<-2|y~8)9pG>XvGdmkd2IozN!ylRiUMXR902i25J#|bGe(J|R2j;IEZ z<;v0$B!>56z;4i}k)v9wupVvb^p#Bsx(-9P#L`rc?wC9#`9}97J5{`SS%6;a;nFkGg69?qT+k@J_A6 zU}HKy+SH|}2fEgR6Ph0r$vAOd-HE&-vzRFfYY+dTuq$P6Pr;Oy?BT+bk;}y}thEU< z*JcxirBM?rP2#$ajnVs*`?O~BIBjtD++rq=0sFhQ`c(|4BoAQ781756CvcPeh3lO98A61_=Nv)vnv zwQkw>l=QV`o7Ht6t5uIDiHN+2a9Z0`IN$Fx`_awNGSQ7Js+e6w85Q5M6 zEKDjFS}^2naVT%DOx+)$#DT^%Mxv9=2W?$@PVBDNhY3z_Lu_)0yheEV>J_&=+pQ=D z`O6n#)TvBR2e^APoVL%oJ}kCJT0rmJEeV$td zt|agA9jW=645<%;A0o`F3+(A{3``VpIL$`7;&Mg0U+`TYYEqynM^2XJ z)-=FpfR;98-$E`d2skE>O(kn)NfBcI0(i&QMbhdRIR!S;?+nk3|#+K_DA z^YjF5=qD1jivC8(Y)Y&pp4Jjhu z>&%Py?;yJp9*^c7VsI!!WY0sl*U}^|EsW(TEJc5ZpkKs4cTCHgqjTS5hTV-CR^;L3 z>xte~(m_w>4i}6rOkIYm0jN6X-7&6-h|FnvK7!UfpWAS7N2$n}CGZI|`Bm+V-4FHQ ztfzg+#+Snsu0)Pqa18F24Z=OJISoBr@L*CD7vELnKw4sS+x*b;w9h-*E#*Gv@x{kw zPW1>McItwNBZrqv_UAskF5DmRG2ssfq@!x!R6}SzB6tM#Jx1YPukbtc4f>Y~V~YDn z9h_~?`;0u|i@I&+hkd-LtYXgZ>v5LfL(?u}{{09w69n zTV5ZaEZ{&x9vp4!%D)wlmTy78>C2_FOu-VApi4mH_rfl1R7}6BUwYPYm#ImpB%2MW z&{?o=F*hi@Ua?}wApsQ=Gr&mTJv?pBh~{L;&Hg3}j?PSp-jPkw)si)Zwr`p|DQY3>axm3nDCH06`JS2wM$W#0*3^rg{120OTUa$}6C)k}cv?i?i#9F;s1Nm>To~IpuNS$36+`DHT=Fc?8as-M#>b^;yXZ&cY{ZWoZviFenO62KZaKV-N|D z{Y%LT(Z5Lm$O3NvQZiZeTXiUq4V;_s%UDE#U@oL@cz zJ}HOgG*JvK4L*hTzO?_tARmyG?Qep7A5EdF>-_g2AQLDwoW)5VN5?OH3@twcoVlI38pFQVyp@$iW7s1XJ>4Po@MQeMtbPA& zD_AkFLgmHtqjOg_dZpo}L1pT!+FE>f7jBSi5#poNbTnS1v31`?ull%V0Ik%#zph5m zTpGR1DwLK6a$uNUz$?JE%q(hOcYeGAL!4JxU_{-%2s?J_(|wl!ZLiWmi1LQQz~m?U zkJuH|7As0vqW1c&twb)`IJ04Tqn2U9Ya_<9Lz7|Yka@MstWBU}Q|)}>)AZ{#%2u-R zo;05K9>jw7*u&fQlbA>>d9Re+`O5+^PqH1@t7_AjhO?BNnM#Zih3skT3L1E>@M)d| z$DlLdk`pBDS4Sn&8X|6xHd;3a@6My}8|OB43nlO4K|Jdg$)zZ1tcP_vT0bi48^;0y z8k6!B2bPcYQnjS$rBs;8V(9pbAZ1Id!l~A5vxC`HG1BdI2Bie+Z=s^37dR&kiWScDswFrZUezz=L+Vs5%2_IUY*M@lj z-(5#v7yq>QsGM5#NlNiID1)iPkJt~Fj+9Ry6gM6Sk~%)Cr&^7NU}ig@d{CTAGA`vN zQk=$5)F=Y1`&hNFa#soTe&19{HJAds%D2Gq;4pPTT<-}8{@Eajj#ByJGN`@0Sv&^E zChLyPweLc&yfZDzMR%eh3|sn}5`35p5{!&@+M}@&d@ir=YWHunoqs&5ux?9?jD!>0 z665E0ebg_yv4(cEXIrBoo!Mr}oi{QjP8B-93Nb-tU|oYt*Y-3Ko}ec#wylT=p4Wz{ zN~{-dH5yGggc+aEHzYH?45p3ADOo+VZkJb_v{88%4c>4db-M8_FQ z3Yn0XibRd%`7PSHyDN}V);@U7p&IWX0&el#Tdg@aX;nIj%IAoIP+nz)S(FIg^GSX+8{mKM@2{QLyw_2P|*WENMa zIGX$QG3>Ww5Kir`qgsl4|c|HXv%)a6kkHh}Dm9#1t&1>p#p z7_V*D8Og93+AA{vy~ogQn7^fPS4}|)o8X4K@2 zg;{{Z=>t~9ouu<&IN(v_TX*@J524!R3LtY@H23mMF@c~=RcsC%!;!R@TR|bIZWloz z6rO{zoXLxLe-P+TYSPG4z#9F)f+i1k$(* zI;uN{vU+4b634`_d>RguKlQrCOOdh`QBCiY8YZIE(_8T(-Hj7R?rKSP8g8oK_1;?k zThELl-cHFh3em_t%lazutCu_@a}J%|Z1MDY<<}!mBlr6yXA^EBwZ^V2~heUgj zA1B92n@LZqIKq}B>ov>GKcPExb;ko}Dbu`R8oaVU2C~r*;XrXy(&kRCpStU{rgB%Za%^I)K17B2N2kiz1Rm?l}+{rN2h{W+wc2}R8hR3!j{r;CHe*Va$K(aO! z<_2N-w9_kNW_`7ih{;#_x8ftmtQKkF4+OGogaucVkelo*27x}1O!B26$1AQ8T2gXw znw-%!A>pX_cGKN?9;P9ar;bYUJa+NKSxvd^wd%@`Og`A0646|GA+@z@GtxL-2H4I@ z^b1DWE6oWup{Q$yQ8V`t7$gWPdm-JjA@ztv%U~Qk5_z*OPd4dNJS%8$fmcDlsj1#y z6Elw4PT(z~$a!}HU7xG4pGUW$oZy)}@%!*(rTf}dPMy4OKQzeA6iRc@6sX8vh2=b^ zyr$a86^TYN7IF@Kc^s`-&LFs>gBC^j%yh8U5<4aRgaU5nNrslM+Zu30Pu@;F7Rq~&Rw}*T=K$Q_3DHzt$mI^=sIk8aZ(=ZuN@koBcGZ7{AFI5fV;Ph>8Gg*S(>XBH$&-0nkU`;qsV z#!>PuZX1kN<151JyhLrmWF^mu$KbU4wM^rQM|3t`BW`hH8@w6}2Y8c;OuUcb#OqhG z>m2W!58Ax!;vm%SYd?tew!ul`RSPK9ykX9nO0|7J4JoqbA)!o2qB(Q0!%^;ZCU3PS zKi$N(LNc6mg*+hn4DQXe8T%-)w`o`pUz10dhdK%mRf)}(K^@!_S^vzS!iC>TXAACT z!im_O-c=OU2)C5*94z^(nUr3tHrg)P)EBpU&tE0p(eyddwf1M5AEdIOI4bvUbs;$> z>|e~azyMkDKu28g`y4!vY}`A{rrw>Nqkznaw5*4opP!(ijD$aa>-aU5N>%g#Gpo_sBxcWe(X9}Tv?rJ^18*4OU?S-SM6`|9sNn(9012x zO7-!~Wfl7C}FSk@L5cX+MV6;jfe22j~eq+a8xI9-OJu?rn$fO z@>sfH?1z3$Z|w5$qMc)ib%0ayWfe0CR$dI-C7KCxQ)a6bQY|i1W8^63b2b@Yf;i#S zDBS5h8kx$6CdU{Q6jVtDpr>LslEYlmmQA!eTu8IiPuQJk~9s*kD%bwHKfo9++z09)PwIymVT>w27pRccI?m8|k^#SJ+Ys zACVgqKGJ}azWAWuS6I0f=JI?Aj@o+u$*5$}bb$EN70 za`Ne$#}VacUY<|%Igsxq@$sV0@;Kd4P<28-CBZWAm5M^x*A_H7t8I`ZbR1)1$bSoi zdkdGbf8o2+{ORTYm$&NswuZX)R<<;P;1_N~56%-T4rfOdtC!vdtLDB z`7e2xOzh1KY3z0NxR|UBjA*~97{~R^jz1|wOJn=TB&@7lEX?u_diE~XhRiC`Qp^gU z4t}-ybpi1TID_-Fn;F`Z=ouQDSn`qWyn0JUVq(BYrpzwQB5i%&@Ue-wtF58DtBiua ztC>ER0hs_lBCj*IvxT(<_z6jzEzB+LxSjdPbUzJ&8+`n!nVF2_a~FFvJ~CD&03#<0 zfQ%oJgoK3G*1(8cPFVDp>%gD*$R69FI{CtP2#_zOor;ra_8 zeeLoSuCG}9g`=Nv{RNP|cKIKN3-PO?1ZGG0$ecd8L5SaT?>^Hxzqoh5`deU<=QFkP ztObJzzC8603-v!w(QAV}#UWhECBS%4&0K-g zn6M;L;jO}Y&pYh$9*P^AJ?QR}B^At6-t#trxY?e<(uvV&QKWrrg!>$?imlSPPsZNl z7ZoXIyLp)K|7}6@NQQMz*r7TOTZMFA7T5&d3g>V5@m1! zF=yDqF$EjH6*PIxHT4W>z1BR8rgjiDQdJ`AmVQec_S=B6o9!)lF%6HHnK$OOWG@;_ z+L5&n2BzwDSw=Vn()rur9qwk5Yp^~Fhv-I7PUF8D4nQ@!1of>Cw-?<)5_i6Gp9y2+ zwi-;qc@F=sOKkxu6&$0wz1fJIn1%<=j2{lmrZU*L6i(x3bLMsjcSqztiE z#;itl=+PT$w4~w&*Haz)a;MN?=M58{j1pskmuO|H<2`uy7>!r?4RXeWd8D7l#Tx~R zOQhN0w37wDDAG%&F)cRa(W`C2-FR7#ui2`i&k?h#jzs9os0k!}q7c6lM$-$bobJF6 ztq_fkY|!WS;Zih0ZFOg(D`n*{AJq>%5Vt4Ip{TX#R-eQ$ z!~_fn#Kd;Gon+FWbqt=~E_RXle3$uT`vArf6ibbkj8W)O(HzaWYj8Lefq2*ZV-!7R ze&VCkl~;{0H)9W{Mtj}2o^oT;3fTz(q>3*RAg%G=T>@;Ri>-D~aJ>Y=gYVsYLj+Lc z!%MpoFQyeT<8Te=*Qr~7rID-Qw7vHTnWh6&x{@6`hz39f@nOPsFFde&O>-dIzg|4C zpnA1p$*QC=Y9()O>5J$hP0AjSBX@)UbdCYw(`XcyA7q6oy(Y3yyPyfoBE=i63>|{B zVXJ;3Oi2LbtDZF4$Uv^A8tF#f*m`D6Y1bhXf^C?g&B@=&h6%7FbJEP4wK(PQ?p!x? zJ?3@~bsal>y(*t#m0f?B_DFmo_2c5Kk3VG;1qullf=S5ZzJSWko6cm|!fsAKo`%$Z zKe2O#XXph|idQ|}!fh{tbb{bW{G%2;M3d}F(2iy))6+3Bib8d*$--+0wDYD<=+{%` z`tC3r7mgIL&3(j-#p~rWQ;t1*ty#Kgg`MWIA@6qW5>D6jNRBKQfg163WzDT~fY>Vp z8L=%TYbN*Xib&H39-gFkZ(#kjg7#GX_B1)g?-e8tJFZy;05nhO0|w4qfNxEdGteMm z&)U^qkuR{av{pOn%~q`i!qr6D7+AGn2sC0GTx~GY6pP1D4A4?VQ@~PGD>ILyguHF{ zzt?BuphTy6XeSt^gglCmgXdBSwP)+X_aVen0>p=XwZk{&c{s&47%A0r!~&Jf%NV}I zn=@%YF^V0q0HOOkqs`h+6d)y##hFB&;dh67jx$)dm;s6&DdK;oxmOT2|!$?s-*px{YxcFx@ zk|EE>+C-2-B;4zYamFkHbi|Q$&oLKJ+nsfAG`Z*0bpVn0PHoa?$ zXtYO1m$i?(FXg{(#m33?+Ja@s5{EnZUU6KxEg1|=xXHq(YXws^oFo)ZFi)r8qZ=+y zJ`3st9~!~&_7#M*tC3#A-bz!@{p*ROg;!F#=wxC?5D&B@ga@o{=Gq{HimLo5lk?m= zxhN@f(eG;9etMzEN4lDZm@S5d|L|06fVGwGtqvW$*!1+Q#^she17E*^~&+apGRr6cDLB7@UA3WLP)#& zy~5b;ep912zzdb!GVK+P2>~UpXW{)`1hu+Y73TM<71b>APOmAYmEY_NDY$4O>-7}s zeYkgGnp}oRnJ9#6Ev)%4btRFrUYblUVEgVu8HUTZbMD$rCKPc-53M~N*+^V{<$;m~^0#pg{h+C*s<yw;qeb(*2-m|!^k z_|D#m%d}y*RfqcUd!6}{5(iNBN3Ctm4pCjNjPrO9ireM&*-7}l@!4}fROO5?53Dl3 z>n^HSC&&}zk4hp-m;1GhXlQqKI4r_BwAbiIhc1(l!wPK?fhArx8e5Z_peKZEQ zI3rYwDMt5|;LvBK0TC0fV+raXJ8fD?k!;?o_A(lJo`__-Kfeat7n(A&E7lJrQVXB! zz=xK%uI#w3M^E&}if5TVR*G6}V@A zyznBDJaAURFRDuxl`BBKR?!N@ri0&00LxHR6~sx)`UpP37R}3wjzJvO8S2AMO~3ql z*TJYYVYUeA5Q|d}CPiuweUA^KLPGv>fzT=w(_lKgUp#sq-o|(g{F130zTZQU8b|ET zy!Xhhc&4-=LbKggP~?194SdO$1~jkE?;?+F>gUM{muy-MJB_ZE@LL&+@4;gz_uppj z9$|97;^Q{(2y+t-se;vnvj)B7{>@SB<& zKgq-YEO`hJR4R$wDma(KeyiNOSM4Jp&;}r&B0(l5%HK(QqRYa_smH?3$Yx}~$*2eB z_87qgDGRF+fQ1ui#P%!4_YL*7VrB*XZWI>F6uC|0aXqGxPH%-$Ui^w*7?b??Usv z6F=el9x8vg?I&D+7n<*#_zBndQ2D!UKjHej(0uR2pTYG5^x-!m;BV-|&pWifr4PRm zk^YnJ{(~3)F0HWEU)2gj|6VJc0(t^!hn~&@NPN)>C+YaJ#=Rqt8M2p&Rkub|>1*b6 z(vyBW>%~9cT8ECI#8fid8*W;mAn~79^W>xUlYwF+Ipi)loT(DiVe%V}B@^!G!EFki^=zIAjY5Uf z<#EDnl9P^`=kqe~6~jL%RUw{wbQDkHTArM32Ib`$qR%0950{@!W|qh8J7VFtl7tCk zOy-}(!sJu~NZ$$Td|@qrL@fNv4#uzUKHzumK3L59Re$``-TyDR`#`RL-QE9N8~?1k z|2r%H$K3t<{{eUZFWUUCxcjX7hPs^koIpl>HUL=Cs|Pe>)HBl8V>AM?7_fnKSwI}R z|EyZrki|eBz-q|B$im9O#mEL=F=FHbadI-U>a*+V0@+y&S=kMLy8FLwiukD({@(l1 z-*5Y~H>baU)eoNed6ORk>?d45;rby2eyH=$)%6puA41@VI{%NauD|T=e-WboUM>8^ zMU(sL?gLrA$^87AS{TUkC8N#%k}N#`d(^_rqCb|B2gnLm1b>dOe3A!)Qv$Jk&d>9Y z<-uRn+CM4}{xWZWDh~#-d}i(cAP@f1{txBB05*2e-^hcNdn^e!u{9|ye9l53>YqZ8 zB_~?Jek8Lcx`&=ET~e0HfNf$xGe92S5gz`m$5YTNn|PvyR4h4~*d~^(xH*bsY!Hu`O%oP(%Kp3i{ z?5*9OQB8?V!0Ufl39+c5$JX@tkd%iuJwXVleW`)UP}x>&doOiup`dlVe7SLPG}QJP zE>2{(j{@RwR;y4uv7ULs#X_4ij$`lwTL~z#e{q>-oWfB-B`-9 zGltaMrO`FW(w%s0!P%TTDdpWw$U&?v2@BEqa-$ANJO6$^%fog60(lX-MuL@Se^X2- zLlYLcREwM|MP^bQHz(>8I~uaj-PgCcr~`~3;bO7hvBL&YHnlnI!sIUsu(oC4C*H2S zN3zw&NIaKXPGzW51>0B&-8PNO()4u5I|~M@&us%T8J+$GMqhzF_jA0|J8kOdun(a) zhhR)4p4*FJ!a(j+wIO78G|?NXv8J=avGTvS-X%?v#a{5P!-E~75({+R@yjbv*RQsG(%N*Bx`{9-j9|903Fbng2bMzT8!crV72j19y2tin}c% zjuXI?ws)Bnh`@Kz7}7M8#+d06#c^U9Qc>`bi!`lJPw&(&(Nf%(CAUY1u}3dxY$}EJ ze`3Fxg|_-M2x5tnoY}Sog&giekW#28 z^^+@SWITOZqI~e4claK|OSvtk*_Lilw>h(WXln4%z^Q#)*muAq@~3B7Xl*&Qs*UK5 z2*_0=R?rQ|S5XUri>|qi$lBb-N!_;0*bd!x^!OI91r1XcZ9D_l0{t>M#fxYOG^`?Oa2lc~Z z)hbdexd-S;dqgHiwxx`*T9SyWucYR@Bw-7VWU>sGd~JFQ1zngK=C~w1SYKxZjvV%Z zPBb$_45|e!NLT#Ec;;tehmaUwUWFFJcDj#^2V41J+j#2c;L0_2Jod<7uu#S;^*AZe zjg()h7S~aKQNzO}De8LE5`H?#Yf9TbD%vA^lLTx(j-4~2ea5e9m?nn!IG~TBwo=+f zs6WE(rRu_E#8g478}Y@l4fS)OO{J&&UZsTtsvowqny`FMVg(k8Du{d-?~E4=kv|Mr zA{xiVRudiww9Tm6!Y3c~jCjx|uFGmE0elkMvCXR8puHK-Ygl*bNcnJ!F5M#g`Xrqs z%#7VjoxP-7>HY=R=s?V#5ABO-(aT~7ln6-9b`ReaXk-DRl0hd&W4Lz+9$3I>O-fLB zr-pFN%;pJw@mt;9`YTg{H}s@r_2AUx`MRZ?<45!`caFS1luss9&6XRSKHX=&h+;?MwQgopwJLQ7 z^r!N>l{_Z?~qsIFy0zcrFtbWX2BmTfY zMEt+ulzvA1{|ga+cGiDA;{Ufc{@IBC@2vbEi}(xw2O|D|(dK_8;;+YQWMl-==VAnL z7=jqtfLv^hy6j+;A2_cENLL@k#tG#3EiC_o0zV)~&xjQS)Mo^60>PJ>~a63_s^012{?Z|^%Jf?V)7>~ zKjHclaQ=AeCtQET9?7vfjp7dX-V zr+jB5;2d|KGPM71$qxb!o3s6r*8}iv&CS2Z1b|cK|B{;@oSozQ`S`!d!T%T1hI}to z$PWkq!A}nOLZpC${~X{CpHqnZue;l2E+d`a4@q;PRVF4xT#Pip|9W11a56Y;Bn`vHUt3jY7NIT8e<% z8c*exf&$vip5*i1sH=wMCgi@G#ZH~yqmW9!9h1m(!#Ng5rLFJNm8hH3?!F8VkSXck z(@eh9u8KU&?T;Lud>Am0+g%<4=$Il)9mBp$px71^%Q-M0f>O~5kHscMtd0_XkUJ1o zMR1?Jop;SK+3ckM%dnD$%@T0RBZtvidD(b0A4ReXFp@*qbiBmgd=VQ zvMdq?znU<+w6xdAc_VwZZ*L>M(0@4ZFj?v&0#cwrp~ts=&%&RY8jz2~Ff;|=CA8~= zq(}65*>6CYv_SI2`~I*4eJP_91O_f)#!VUM%#dE+Pxm~*6bTbieU&)&!G(p1soMqq8yM%+D^~zagzvFq}y*a*ds2q&0n%b zR6Tg0J1mqssSX9|0u8-cM5AB`;#-B$8hd1~VIw#e${j+n=PHB$n5L$ny-h`MmsVAE zHG^vJEW}>U<($KUju$<_8c#}4e?I9k0*rcYp)^aQ%JZSe#lU+{-J*9%bAq$9n2;=W z&mEfh{8R1-3Hj^Tk9$6lU-uC-TuX}9^g|8PPX&}ttT%{|hFXq;3#eOD&}XN@RSMB* zh3Hfnl2YR7D59gP(ktr`K5`v=wJLzxZ`6Hm?`xeEFdw-g1cJQ~bfbQ@TZAsUa4{vM z0)?dP{PI*Q$OVy~4jU;j;y~a?6Vtv;XC;DU=K!KCXLy~IJgV4Rx%oURtn!`aC7rcZ z>U+53K}@7KkMV-3`5q$XLn${m347Miv@b0}OHyZ2BpS+*KgANZXuG{6SvBQ+TW8H0 z##lI-%slI8CFZe#=!hv6n)>s*1pzvu!)95^cm*<;^!>qYID;C3m>f1r)6~7;B~HP( zcFs0RX&K6^%!$Lrp+%PI4Q>$D0$yi&hgBDytzu%MdPDC7l$jGkmrXq%`B>y*SI3d= z3_LxqeTasHxRVc5QDXPwTP*VwOix+j&b<@>X1I(g3el8Hwj*Zbr@@OxJ|bG zTQ}(Kcaw;l>Zgy}M0_8f*5cgp9_wpra-rrIYwwG++Ay-cFK!+XBj=55{q7zU>cTGe zF{keqmHEibY~y-w?ePw~$=LOR}rgmL(tRMC&?aa0`FSd3ph(0EtqDvGl?z zdl-#@2d;f3TYC?`roY}B{hdp`0S6^5UX>X{|BJSd&WG~CPjt|-TfL(hSEnr$@~l1G z9coa6Ju_zSlH5i}n{8m8Ym})Qnm|UUdaQP)OxR{$6b+6C3{d{oPE4>`-+XNBArH@ENFGG}1u|bFD7#c$gA+QTovRIRm;bMzgZtRpa>W%$Jq3v6;nyQHSbR zcN2J8PJ(kMZI%{FcP=yEI)<5dtnqvD$Pi+h3nGwc%D2*JK7z2|KdPhoeQnGk8*x@ zg2V5KFLK6{@WY}-4MOp{cuNqGglA(G+$V0Q&L~_zfE$P`Zq74C*k-xo5+07K)HYu` zdPOw<{H=3|n9gvin0P}!IY_Z{ohb6&U;$B>PNzx96uCkuM-GG$d2EE+WdMri!wde@ zpt;xxAn_}x2IYhE*HCW`uPIx-N>8x%tiocfwL_U=rMdYzVh`8iB= zHooMw^a@x~&Cw!{?>d;HH$fxqc6t$@-j9Dcn!Rz+XHY>xb2dQyK!Z-T$H%()tV*pz zjP9){hTImk^23Dspzc&m9#p|rsW<_cgS;*FilvAP;8e>_BB?YY)5*covl+x-f*H=} z>a|)gb&9@8{#Gz1{E2eVV5jEaj{7$hGmo0};UbBY6{j=G8cY=x%cTfgc&Si)O2&TL=uTt&UKC4J z0)DOaZ4Mi^J;Xlfb$Y*vJD6He@F+&rb2iS+MjvxXNjp?RlYeF5m-SXaMe=abaALN{ z8!Eg<^1fH>rJQYcUa762f>$O&AcD}Fx6y&d{u+QIA<&gww-ajcq=tvC`Bk`p!8Zz-7BDV`b^})n(2~Bjikru?=6` z9i7$^6Ev{ZaJdu0M|su$aK=|X`QdKd9O+8L`gQ~C{kQ&pZP=Mou12r{ciG|ONyRc> z4Btfpn%4)pnbB|G5_i*f7|ne_cvUFozhM4yaNp5|us%G8|3z8(PC2idNA6`_#Hjg{ zbig%I&RLaNsFmbXKvM#74kuqm(pQLo7?o&1yDTZ&nG;|j&a(v8_1|b2$Qyh zhteHJ^;Vf2JvyChtavxx=yxNlOG4liZ0^1n4S{SOH(+!8i>9)w}g~_4zx(OcL z_xL@)H&U*jJnsLBDi1ax{{oN8MmK=+-Fg1xAO7mV|Aj;?z|RXq?i(JL_4hn3*vbCQ zVovy^uPu=bit;4`S>?e==lgIsI*!#~~{wyT^XV?AExt}-r3D*xH@I#${uCAYO{SX2_)cNP? z`u_{Azs}=+rU`%X@4oW5pIx+XcW!~pegEdOecieBORa$$UKmWoKy1vQmq^HuxqByl|URNedCJ zSY71FF$^BcF|keC9ySWO*vFj_Aq^oRG8+ngDuYb1ZJM!U*bmCYyJcP2>*aZ0TS*Ek z-5?8KFF`N0C+q14@ioC&!r3zT7yDz`In$pAIaT|8I1%<;la3KrD{PLUs|$*A33JGL zS-R11qrg3pB&1eYTPjjV68T;>tn;~q9RIX9VDep&f`J<%9`I_frUMouH970{t!JI5 z^9z#Ve=sL~Mbn?`e zuqhh}MNaVX#+pv@mH3c7CP>$P%4&&GEC9-i9eSw+GkbM80q;nle!3R1v46}_fR z>b|D@fWhJJjY6OcRgvbqYG(qGmz+bTOKF9JCKU}K&#T)F^u#koe;zh^zJGIRN+Qt8 zFZ2{Bmd_$+r9siE3rS}x8ADnSh4n64A+=f#V+JN@V30KGeogK!ZmlQQ9XIh(sizjIHE@ zCxCjQ=6=Q4?Yv?fVMlDgIKHPl(l43(CS#^2u6H>KqbSc$$wcCI-gdcme5eVuQ9C1- zYQ$KywCut#*pG79y`wqJs4r=eIA(JjA*ZIHxMGXMKS#h7{vqaQ%6UWJ{Nwh(s-W7z zw#by_q6UPGXr`%+m$?!66mjp(9Vw~P+<9N)c0y8RRp%{*kf2jrz;8-HlB49_lVnxE z2DO^kt));;_6s}^oKl4BZAi6C4ubh6lOthf&hjZ zx1eJ-AL*=H#ZKLNy`^I5`N%Rwd=Q~-7N@_ci0=M9eI!1s`*W_$>9ugAGFuS3pu&qK z_t(|z!(A640*6O(Tp3Tgm(ya2CEfb;h~aK8MikCi_B2^mE8$5@s*1b$nS{xApyN>W z;ux!Yry)_lLVf#jsc_>}lo$Mk=l^5xE#u-!w*7D1-Q8W%xJ!b&yIbSXxVsY)+!6>7 zoCNof03lciE(z`sNN{&}I%Hh6_ugGqd$X#j?p5nszr|EXX{5kj z8U;!5g6ym6sZQlU`B0uB;wMx27ujgR=JM|Vk1pIeWh4bfPa%kWSb?(GB{*na^hsEJ^3Rf(rg$XLBl zB#pt-d{bl_?4le-1TPG;9rC8?xvj)#9fWiuQvx5Jz-ngz;rexrQ1P|Ik#4-(1H^Yk zqn+z2PG<~XwqiZJXf_>`UexY-#G8*tHlXiRY+U&d-e*`BIFv7nPM|>j+)UVyY(eG{ z*Z=(06iY_o92#9Jb&Y6@><3E`e6{_>#jIL}_r%wk_tc=CU*aTAJeM;|PdX}riHo4+ zo+w^M;BKT5d#urk{lOru@=1>5;%VmvD(0sJ-VsdP6(#_ce)ELmu=ze$@M~6iWmk*p z=kK9C8a;^lg`G8;(q7!V%#LJb{4mx)Tf|uW2^ohPEw^aVrjfj6wSnP%YjdFS{LC2d z{HE5>aJ~2S6*JpuMXNWr?_BfBQUNb_Y2|fEK;87_@y12dWQDfI5_2dAeEmpf2*OcV zSUsO#Kj9|sz5W?Lb$#vxAQ2+CfDj_$>%etwZMyJQdUlp;L&3;M?W$SRn|S z)(+6y_GPasun8&ed1xY$;yRVOR?U7`#)QN&Wy!XKOX1icRhtX3H4j4QK{EFQZaotC zuu+rop2p$wQ%VZs!}ytYhPi+_o?hjZ7G1O#xCvbM-eVR#!!mDd4C)|@4oAvt`$~G~ z|GK5be3cW zUn3P18PbV{2ry;K;}L|%9q~mn<1<6W0rh>XV8z@DeeGHC=eixB^RT)lnzjYGzjoGF z>hR!t-~{)>9pl` zsv?rp0q0bn6}?wFpS{K7#Ko*r{EU>}ygp3}e##|A!@4_oC5)NxmXg=#N3Pv{9yQn$CX`O` z9V|X_IUHJbXqIC|v2L1J$0gqU$Sp-n;`cZ?onblR@%e>H+bAanE9n?8X`v>LzK`%4 zA&}-EH-kPJk2k#bpM|#5(;9shy$(9y3Lp;33(6x)>c25Ry&;J3)H4mlj@V#Csd%&8 zUicQ_DTQKd@JDH9mKMxp3ee-JDbel2?z{Cj3wtOgg0>_vCwzyj-()1tL8cO*k4e z^COYnVpBN2=i3i`U;uOJB^nn5B)E9*5lV@d)<63A9=LtTDB}p~{h<32PL=_Rjx-`H ziTNC>=0jnA&AzzM14L5d2SwX@!WRH9I-Uj1AH-9b`9~2O?wbRV>+t#6*7-3HI}>EPcygckCcx@TyUR^ zb?2Q+)sfX5CZ~+nk)2)j_J3YK&%Wlf!20x+o(*xJa*Usj(x<5Dn1EPn_kH#{vT~85 zRAmSBQ?HTqB{3C)j^LL=m(OCOCG|in^zB0gbx+=&vv532)=4JZGUQwI;;DYNAs)2* zq{z0{Kb_4V_bHULiv?kBvH`KQ@@T2(Yl@fzo%ed>GxxI~Njb$7M%ZnhHO3p?W8a0P zN}K}{SY%qXIMDDgYU>cZsCz;@(We&orL_OPK=tEmuO_UR_ew>W9r5>bAMHU~_^OM) zU|ozpf^@&|QB~QdtwYiMI{8jQ(QSbftOAa2L+sSE9XB@piTie!fQ=)~EhvSd2 z9YOO&&l92$_YM|f<08?%jDA*!S4MbJH1zZ+Q4+tbM9j16u}1PmSP2G~v<{x?7aT-- z6I}=s1wOza>QgkPZu1;=N^dI6vw6LS=9u?6CXF8oeH3v^CQ^%#c*NJ5@Db5AAYnd9 z#h;Ynv0m6VgqPh{f~V1iQW-eKd)EHKdE9<_^Bfy-A^1&x9~yBDHaIs-YxU9E+lvuF z4P@)sfll}VhN-;1x5Oo)q*$nDPV+<6SclikUP-UwU8&&L8ZXVCn2VI1U%d9%i3(ed zA~%D4IBgp9W}1?`R@VXp8kZfGuDJ9o{AW-1gX$;6*c8lFZpi7#_(mOZ2D|8JLiR;V z#K*XJ!A^USiw{Sy^e=-*DmJzvKX1>JAR$zLY-f6(B_}zX#JqT)pe$uEU8pd5*G0`) zeg0U1N93C0bS!i6fvM`cwapWkJ-#S9nHHKjR`uO+Zy_yYmuq{O3K&Wnp_oXYszzcD zQHwSA@!rcOXuXUfHq;%u(O%uQ@~c8dzBK1Jho>I+sB$m~Pd#C8#upt+fvhXn?E_U$TgX(6>WX5lj)mJ0P-sUagFy3A=fq~`k>@uC z#SM?i_`K3|;*{z7sC~ATN;uh96p3--1k$Z<8b6bJu?@3-)?O7u#BG|S#HJgN)piy2 zByVPLe~*bUa#&2>tdq5|n@A!~O&1%8p$_`6ytmSnFM5pi1pqWdoZ1{!cW+#H7+HO> z#^pTJ#Mx8tDtcL^qb}9(8aZ^N`m6`|^r+=gxc)3kYH#lvWKrq|?A0|-+GakYovj0X z{pE&q7}s6ZfNRu3P-`IW^_9;tz6SzZ+n?bJU_$@5b*q2A&cMmR4^VeEa|7qL2YgF# z&o2IhJhz@RvoJ9=GqJE(aXLOiL1gEGsL~9O;k?GMO7LCp+|Q2u5{VKwQ9EBJiW+!c z8E~?6v(4Q2`Qia39Gz5Gh|Ah#$cNm%!$(-Kk1Z5o#pUH)Nnxp>q2*z_XU1~-Ryu@W z=Q|P~jm>mmQP4|M@`>_u*5#``Xs64|&wndt-1_E?0f4$r{ifCB$y1`jE2pf}SsSA1orlqzF32-Q z1DSi-kq0p2u-n*4-d+JLIFJZz5Rps1)PLGNcSL+2xSE4^hfuHq#7&)KfHqdvZWKK1 z;4^De7j>W;13-fjAOZZfjFi2pl`9254?qgMsYFZ+-A16axQ?ugn<9eg;=hS9a-jr82ePPX2Y zS7*XVEOkU)&IZ3pTUV``uA0UI*7v~Hcb)nOmuW3-(!!Ss$7h%15jRoGJg*sA()>y4 zUfE$zVul|6?)Zi>g01RX@&@MWYWXvRz&XJ)|C`l>odzN7-ImN%;Vt56nZf(>46`FG zK?><|BfFyc>@bm7t*i@XjS$K&D@<%MVHy~s`6$^NWDp`I^aHNAGpzvuivP2%*v;v_BoGcX+qIq-XKV!tM_} z3$8zMP+*C!-{z*D9Mt~+2gSwypXZ={-^RboLH(hX|6?4K)PDm9^%vXxAK{?bdDzW4 zOf4)~EzLQ=39Hz+!TF^)_$^s2!0DtoIk>nic+5~ z{#N0iqwA-+{=ou&orAhXW&VMKx^>a+a!_Dph2MO(9~>0NckJlDo`d?%6{!JTLGCW* zKv!_GWJxbKX>~VKHz4>}TAdwC*4%1ofEk}}s~g~pQs9M<9~{(O-swM~X93oe_$2}J zUtyg7OY|)GDL6R4E#7@&nZO4eoZmqy@CiHkd{NOHhZt%85&)dFwv{^%HhqYW-cDHu(Yty zRv7G|zfpf;7K*P>g`}LSQz7)JJG__KFSYPgaEsc1HKyipTanSN;NfeRcY9WtO4F$% z#NhqGUmCvYUF;=d(pjh9tBL43le3nZdcY|ZWVsez&UL(^rV;yKehDYTR)#mBuzJET zWcgD;1VUQ;G~NMjkG(f-WhVZhyz+&co87T2S6;ekR#-v`vK~^js-;?gp*603> z3K#Yu+jE&Ui8{;Gj{7&r2ybILw<%@244j)E4&ujX_VhrW&>!B<-?Eg28_30Qir`7? zgQBDebyJOk z<|maVe&tc;POHJ*FUo?wyK+PW8Qe_X7Dg{HXoqw(^5ur)+wReb@9pAUyR_};v=NoS zSK6kF{}-r%dqW(^sM~~ z8}-2VJ;lTBxK;#^B8EaA|ASb36s@<+Yn?C6J}grAzh6?{d$Ac24aPEFZ~4!VGZA=Q zy#Oe#a;MqU;Zc&#D3c=%c3p zk(;}>r#_$|&M5QUkg>2Zsj%&ABFmhQF2Hj73~=)s%G4hx{v+fSSxcJHvyqIfLM{nF1#y5)0}JtM3Yo``96wSo0>oU<_L zb<3WtBDMqyO;r*qFK4LrHJIYm&B}HbYeVlhs1_B;PUfhQdWAjh*j7xi_>0llFIYY7 zhLv2hm*4XN)k(s8>u07Y8 z@4US+?hb-j_&qWutaKU)7&$6Ps&t$i1z<$CRlK65^{SS{o0nKi+)*Ez*Bm4+wWq>R zc^HFcXQ72&af<#>c2&WoxV~_d@g#f+j);n)AK{N{d=ZO!8J>t`{$()yqAMC?`$;iI$xx5@_&&v43$?#!N3BEg z2t~x|bAo}_E7lSaGIi#J(W$fZV;fDrGhxMP#~dmI!A!IEX91%-aw{X8XnpZPNh9SwzZ#EpaxPqI7hpn9~$~hZ}9aW1$@Cbt0GHq-$0Sf6O z4U-3E+3t|MQ%>b}7TeZp0~X_zD;bYf0~^*_K9bH=!3=5B_A|J4Q}D=J!T%QwPfrzt1fSB=yHdt`b9Olg}_nt#KwQmbVthy< zeqit0kj1JZcRm@MSXMyJw=kcRuI9DEo`}O$=S3)1+{Lq?NO4HD#Ale(sxuJS^75bv zs6(Wj?(@-#86~Hd(AWq%bJ;o;G?6ohR|}V-&sJbYRUXrIbef$L#^S zOyZsQCbU#1c1_@rI)AsP7FKI`ihcb^`&Q>y6B_^06rWBaM8`>X?_f*Yaba`DvIidS zwOv$>SCKnr9x$CD+&oIqc)ZVe!rhiAl+V4_n7$gqJ3SG+`BW0N#ZuqJP8@*{+Ohkp z*yTwP%ELQ?!0-$%7)C7%`%AwBQQ zWGZssHl+(H_mq3UZ3+JCh2-Xiqz|nk zr9L!N3LH#(xKMI7H769zrim2A94|G*Dz_O6BAu#lJAo2kTO$f-zDw0&ger-h)>a0# z&hpbw00UQwG$ckHZVH~|MMCz( zJ=U0*!qRli|B4)-!W4~jWHe&37-S-C1rd5bo(Kjmec{n2sL=`uBWJxO)KD-^?&Ft( z3>D#_ujKo+_cLHj%raXn-uqvl`|P)?K`IwvqByDy#c~7m1fN&>j>p zUS{#NDFwlp5+O}+3r^mmb#xn-UvT|X#Oh-@A=&yQvNQ-S{g0-eYh&+{p2jU_OQ;?U zjq{eJevIT%L_cvj_r6SG6`U85=o*=w)t2L&EH^Zn#?oIzN4=i9gm{3@C@&3{>!sw; z?{dA{G#^ZqkaAzRK#tVU)x|iMDwi${VCuL8Pjt0JrS{f|em|jU4MP%*y)0?jBn#!K z^nR2VouEYm-2P_%ASU|p#965+z9+|4Lx++~mfn(+tmH@iw|rdqsg~3f0B5Li1#FiU zy=6}CGiA>KFn=P9r3=!1IeWVggyzN4(xu`$9;pyb7KWZ`7@M_<46r=W@}LIOaph zJr{`?`i|Vod=-u4rFWdeXq_JDbcb)lmCaU8Lsp^QOwEmLT$~k>9bRel)@g=ziE5;R zcmTE-^+%E8Dc2J1oxvY(Si1s+)U@H+7BmB1r?*^A*NE)u?TF+UqI?qkbPq~Vk8Vg1 zn_y?@q{xjjW;*e(r5SY9-~WY#0FUoL+1!ftfHr*vo4;{g**6f z1n@EDuVZ8cCaN_d&%R_~)Wz1tst%cb zqlfOF-y*hp$*$<394>~Q6zk|a(Mm*LO~S|)UA&2Im*iJ=N~^1((YriGZ3 zRI?d((ywY3GkD#)siuhwG|^&`V*%q?M+uJe&m`^%pjWS!*SGKxp;&1>X$DYa28%Au zXq!vNI}TS#cPNJXS~@>MAWMPYQ&H4b;sDJgvA+;-tmW zLZ0z!&#$K}A?76()ODcHwbQAZg|Ts?o_)E^C_|>eXUzu1J~^tLhxI}JG%FEXDUk(M znnKcA_DWmD=TbPWTK#)v!426<$*9;E5$JKFCm-fSqY*hC(7lIw@-1$AsU5E?vR$DT zSx|>O{RIRG2O)WH2>s9c`PO^<#rgVc5!>(H_K%1y_a7s+VAu0E@Be4S_P;%1%OSw_ zpUyz=$2R`Gi0wbL@_#F0%LW$9XXEAN5BaU9C zPKt^G5+HMT2Qb7VD{&|CCiMNiJCRp+cN+_VzuM-VdOwzUe`!+!=wjmmw2*QEIZ(J* zSPD3qy0`+r0bIgVzpj~4-FXu5@}SUnssB4s*V~6NHRa>u0$P}}^75I1(*&5CaSn#od1Ge0}7979HOWdjZB8?u;9sioZxs4@lfPxOpXT~$uD@l0zg76> z==y1{zh!~HRrr5>bp7>+?QKBtA0oE5F52CQEf@*^&1d`PI{^LzK>Ib~e}%h0`?PdR zu4OD6O-Y1IM0Bq`)(UDat>#UUzd7+2!gb;T{VDu-M0HuB>qxGM1)U{NSOYZt1@9}^ z(nm=PXtbF0G;jwvoi@jm{d1vV9WY5K^f3%dHcdG_B>$J(eZ|Tlj6Zev@6gnL$=$yl z7sFbXf!y7M{|DTCE{^{!pv@uh`!@bvcmEHq{NHl-xh1)IAMk>m zRNntOcmJ=p`9I?Bb8v&95i?FUaKb@8a7c!S1ITK|2~If3Z)whL&J8rTI4mr=e!BZV-TlAyrR+!H|MjnDKOW^j zdGzxy`CA73X|A8<`db$GTZMm)uAk=mTNe0Rh5yy)`Wx>49rF5zP$lOt3WumbM~iQ3 z0UVsa3RUU@WF0MlUO)@*u5k|=bD)~E7&uuUI7=SqEv#$!qsFf)hTq_68+$jP3jn;k z+zluJGzVD#0l&q0d44duGSRha`YB=$P+r2am^{a;3<}q2#H++W)_E(&VgiXgX(42P z<5Q@3kp5(Bz$Ak6sq^bu-98tsnr&*2AV_$k#+n(*2ol@%a$9Kv=lq0Ft~vHD61z<( zd;uNZfm+|9aKmjd+mwN(-_xATHwo8NC*t)m*#)!&)>l`evt;al>_*5 zaexN^34kO(3ZMW`1SkR20O|k@fF?i-U>_ZwCicfCT^u06M#y+5>=I z=Juuz084-+n63v{18e~H0DGXTE5HHZ2yk?FFax@{+E_UPKmd><5a0v=M;C#P_CQOw z??*1*Bnkjd;1DFp0^kgAb_cluEzIn{AKVtZz4X1Cl93&0iN3Usjf{#0%N zH)|Il5a8ws0=NUb0Nwx}pbO|9wGKErZVCTetpirB?^*}k;L-j^tpl#_X#5?mgMW}Z zVEbz-2LPR4WEi+O+3qMFaNUvAkg&0|1cI#s-kYG$acevWcXMliBhbp!%?9M?YH#Xl z4R8Tk+5^2@-OXHqZUCS?@LPl!;N$`Vo9>s3_8==8b5na$M+<h4!WPO|4rNBA9dUpya>N9Y*=0<2_fKGF*3a;fTyuzpCUrni2;t9{gY zVd6DoR-1yd#X5(#B_(}5oOT7)5Mg?l{@~9hird_+zpMj`nYseMjeM}ehq^9U;N#cM z0;~Rh-%BE8LV1xz7I&Y-V`(bKy?t>CVh_`+5B9%mkh{93MEk z+WdC@uVyID?}XxSGZZ@)&mU)~ZxU9wGvKfD5qM)G_y6J#cs9Iq_it0;KVJD(;``O# zzxQj+@3sC|^Lwpdum1Y_uj_no>DMxMU%$We``>rpzkB@SDgSuayQThke7EfH@ADs> z{nFC!hSr^E*FXQt!NtY{Rx z*U~z_7Mh0r{@JwU0-(uhv(dnNlj&?5Mp8$nc*H?zD8{kkp59?suj7HRF#ap=p8SWE zIYA7(^ANyd4ZIu+`~*khl?SG3z>w)o+UIhs+nooWOEj3`Aaox^8emp$cBaj0n0`=c zI2s`+p;BtZyQJy%Ya)k^v~eUc>=QC1OwHhKGU{Yo_=%($j{Yo8RVb8Ez$Q#_f`x z5uX(hkWW7{#PC8y3eS3{7m14|9@|Uul5{w~AgLvNlbzptKa}xhQEjwk)RKgBW<5Wu zQfHB+V)M?MfwPEStTdjg$kV9Ph$yn_w)aBX-Qh!~WSLgyd+NckHa5Y!8SjvW-v|Y& zk<09SK*o{U$oPU}78ua;T!?AM^~(EdP3)>CWVDEediA)h>d3|0zSO{oe0oaHcwX+| z0@0zd&{hTpFq$H`UYQXPSVpoe55CtR||Uka=9K}tq%e!z|*vk3>EVUZc3)S z%@EEtva){@iac6@xcKXJm#@SukgpCJrpQP-#@OZW^IXr)`mz`0UcPn0-VOl|tC1zyax-Q{AA<}7{qPuheY;y_8VWfC5>0EO zCa@DWB{8wDX`P`K`&F(Q*O!TxhWhVQitd4|X`Ui)$Q3(_U-S!|Vh=2^*<1jg)4y+1 zWIi`T2vr{fk@r81Xg<7;c<6KW#bm4RHq%*pwsdcxg^-B~%<7jlxX__tmB08Rgj7Y3a5RIY}&pV?zMWI)ccBl!6wb#Io_| zdKVaq(1MlZaEPbz3^*wZ^8RlzKL@=&yDn%8#viul>W1gP2b?rBlPHWV9eh$cxR(CX z3wM?#W}KGZDsdz{Lw(6L?CVS;$twxfBwbzK#`U*FEAP#eg9RdDlevdeaBxgg6y1EK zQOXL1*kkJKu}@Zj)|>||XIRSe<3L;51VuMoMBb|A&VpweH94u}=*R`jt2A=$1AZPS z`w8OjD$Zk{T_`~%%>t+~T@0$NO`YuI>Z+bM)d|&5m8A=5O^!N0Z43Zj*u88BSl^Pa zx)z_)-Q|7dCvez?vB?Afr1OM;Z07C7aYMk~tCf)tpm+#HqpQ8AyL1lEI%6L+&e-sVw-I)gbk=E06Xf)d+ScSeKEUNiFafLBA!D-Ou+4!$wxX}J5t-GUI4UV2#1 z@)E<+EZyQ&qWD_US&eq4mR6B7U)FzAJH?*PP{oq^P?g?ipotYeM})bQ6BOxpsA6IY z<29|*HX$mD?ACQH`=V0F0$bGQQ>Tl^Ea6^g5jp<69lCov_lr09&QlDiM(hj@hbSRI~ z7Ie!e%BdY&#P4D!?vJ9Jy(*BSe|&FP9N8ejNP z8cWqy@2S*tMrx@RE!nm8Vw`99xMivA3Sag_>L^kZyWoH+Tw>s6WJxte z_(W;)j&9*T@l8Z7@iSy8qa0$Q!y7kWOL!7zAdOhg?Oc)ZysJ;J7ouFNl0IXy<5Qfq zd6hIXLWjxJ-~wDld&u}AE!Q)#kOZ>K;W=E0R&+&av6Wp)7crq2WDL6yQo1x>%XCW- z+c`_T8`r_GUi&VB4|)RP<^|YARO2}U!Co+CrcWv2wLG`-Htc%z%_}|z)97CbQdnW* zDR*ygDSzz}8?^6>VL}YF zGiCO#_MuIl62u~uNMt-d;5_D}PW?INb(W~3p(myhc*p)+WzUDi^b_3TtV11`E%zHQ z+-noUb03<|jw7Zn2hb4tezhsf8I|#@W!91AF$vb4TIaIuo7MNn=nl~zH0U^?v)lK?-qES5)D!1^ zY>iw0(YW4(k>C|s=!tao*>haYSN#&c-q(;18EvtIruH&fMHH#`4IZU*u$oW0y)uOZ zxdy!&V9^StCti)2=vN;1fAjH1T-g>EE&%g%e73HzJuy4gSUQ$QPk0zBrkhSPi4G#f zNx^T4No!iESFq%qPk`tCl6bEzwT!O&OCRz*&E;`;0rT}_4O-UTf)Upc?A606b>m@L z8&nIIjFDniY`u)s-kt*$cOxGoKV+Zhu%M6r6?zntZ(L`w&OU{tQgGzZZY0eRnYueV zD#DnW3WOWL+UgA(8C$Hg&;lbBzPiF70Ir4H?yV%PATjL@Z7&sYi|vJWa$g3y*l5SC z)XXj8zpdI&c~8Z`)2g5?ty3%){POL{xETjF@Qa1^LYGS*)SecL?&&uB&W<_5URlVD zubg9Wx6Arc4|KT#BT70I-j!1;+HRrV{&bIyhSGGQ64o5sse2r?E6KJJi2-< zWlZ&tr9RmUYJKcbvrN7?4Xc)DVCUWG&)_}FyaZu6HXt))WH)VyL}WVl5tFqzV`s{! zHYH42Eq!7mdbxGgRmE9TD*ea}zYgV@>=aI`konr70ZR?@OM$WrTFWN8acsep8nB4K zXZaJ2VFw9$)>%WjXoAIE`*rOq^>@C7bwTTun8BOsN6 zv&~qVI7UNM%RX54;9hT2DEdyBjU$buKvFiM5jSdvfl`JiT5yFfN%w^NQo>QUD>_Em z(Wfay8P-1KA__Gp(`EGa@MksaDI9rCRn>L1`pT*6NABMFb1H2fyMfOh`DI|8)Y0B0&AC`xt6)P&W>4}AZ_PCACtL5 z=3~X?Md7ZpvAqz=geA~o)n(<+I3*{r%X7}s8yi@KDsAb58(od1%(#xy(yq;f*Dvx5 z%2GlQE*fBoFXs)8kKyqnw$U=l`Nm(jfyP1!triKfPihH?bVu$5qc$e2LYwSdMPx}P zeIBqRPG1ieti&BTkWcDt4LjUCMfsXH@z}=2tn(qZXbIz$uHTT;=R*kRYU4ezFV+nk zyuqB)aC5x#uiHYY;MyNpyu_jT+EyMQ-jJkQ@VeDp3`iBIG7Fb9+D76Ei=>i%p! z`@WVDr$kOqbiI6IA1YB$*#qOwVJV%>x3BCa@w(AucVq9*2)Z?{IfYUtG|OAV?k%%7 zUQQI=xXRN_w?bwBkQJtA=}&A{xEI4t^}-a0iN%G*_@8p@;np)`w+Vjvkkf55b3;Bt zBXWKtgJaExj4iX5qROFSu6Z6#_*5r1>^=?J0NF``aP>)gXlBCcK<_5&hwTBwc^m$yPWCTV9wm~tzR%gjqa52w`0>v=mUteJpnc-sWHP@4b z9y*KFUxTvDmW|(7ERk`DLnBYeIk%UI>*XffPm@l($+~}BBlYs~Sl;Aht7;pLI-IIr z$yyOK$ybf54;@r7-(;PTHux663*R?yDALrI;g^i*)rn%~7!_BIpHO$Y#p!8^M3`5h z#f^F7uF2}&ll|sw*cWlvQEGE9c`7LqCrGMJDI6}zWE}gw5N|Lrd|mP@E8rNK=XXtg(Lq&Lx~ykK(JL* zDVqE;*vVXCv3SYf?)=%7OX=XjWQe*>$CrM@qr=bco5Kh#*1?K#0aB9_Gazv|fT19V zhB&c!yX!KR?EK78iJTdsf3=Omn~UxUc!{k)XzPIOqScyrmvNT6WR2>KSupR!pC>Zq$JH>enG_mb~s zbT{p+XRKFM^M?gfKMgI+9Y1?eU$np`av-H98a#^Oveawd-7N_}%^RZgv@3&!x+j5H z$dZ=0>ljhhtINiXxni6{AXlP?2^;oRKR~9y)rFS- zp`$djuGDjiYJP3ExFWMl!ftB6$vakbQRtL*LcpwUSm&=g)jxxqAn zSlHAS{?oPcJ4EZB=xyIo+m`-AT;)z&=C^>#j}XfDfXcVf%J(SD_dv>T!5*O3k8sVM zsLr=w+xJl1x1-z0(Va-pZ3O1G=*u5sO1}#q{Vu@thfvW!2GV%=?gY}nS^8M{dBDr{ z?BGO*yu94MlMUzkt{8PEly)0b_@}DjT;Bt0S`^@eZ@Uox5Mj8xGI%GL{m++gIM~=Z z{>Ac5zNWVm_Bi2u-J8TliNpsa%+<`+Sj2Mo2^tpA76~|DkSwfa61tZMW0$U`dmpM_|+pMSztg;0i~Rxt=JkD?}KL)_&Q|^5Sq~6;~*{ zsyI0A-=5xS-nqDH*;v%EL5x^#v}ms<1+i*B4oq!#AsJvSxISDSi5!(*$o*3D7~QD# z#{Jp>>e7)eNcq9!=+0nv^#P$hUF=|bvy=1cxgu!nOTR;T#ZH~|2I>@#>jqiPC$pia z{Zm(Ew&JcaCA!lbXEi07dFlGrJWaL)=(>pbJ0Hx3ciD(dBR7CWfuAJXMb=J0Ij zJ@$F&WWdVsDT6gcqk@NE3@^qguP*&5Y)Owb8}~Z5ZRk{^XK2Z*=3-gha@~9bBh5OO z=xVWo7i#68k$ME*M;{z)W0a<8it*7HJkz;+$_fm1TlB1|xNfW`IWqd|HD)c0Y;A3H zYOJG23LDmwD{T6w@LqaUxa9R%tG2vw9ATo*tUF8?WFsMd%Z40rQE0YGK-OJlNT3yI zT1Rk<6>(%fQJVNJ-0%)Zgc03eC?E-cwRgeL8$=GaQ;i1^DQ2F#Oz`I%q(kWYl>A=NaMB$~ z`=vVZQEzeB@cZD+Oj+_&{p@RI<_4zh{p|s$7j&M=Iv?6js!tUWB+gQHnY{&`Mp-_L zdTr1W6vt#BAsjZlb4-G%LVRE_Vatu$FxVX z(GPZDCvZ)+cNmZb63 z`dMx1E-J^$_8<;ZQiO|08WuA3sTvVW<9S~mk9&~Cw^WZ44KZ&5BG0zm4DT12 z%Z!7LXRdG*NTHZPDm#ykjS#K!C*xd=CEn{$Y`RRo7AQ?#1&7l|sXlr-O0TXnb}o$v zphpcVUv7M*KQy`7rM=I9hJHHR{iXJ%@pZ!3&dkz*nn?Ei8nv)0506vz%~b$X!e?pa z1S?cVtFRAa8D4pu}1WA=JX=!gImoG;*e8G3(bDqFo=m6 zwA-+6)WEx>#&?;826)`~j$zRq2HKD&$*o`+aoZ^bN@)T;Gd$qkQw2m?p}DHCl@m+r zCs^UGmDdDg$cR>_GB8T*?EE(akq~j}!zwgb*gh1!$t80J6dIN0MQZV67qZ@qFMaNxA5lFs8D#`a6XrHZy?`gB zRtrpARZ7Y+a+#Z*=9AHN?Mh~(ylNjFU8_jM4szo!9#n+j$YFHpzh*@^QNf0L!j*A3 zJ-aw4hGU(SX$pUqH0BE}K9dmd2IVx2Q^&97`jjyBd{k2XW1{P(Nk4|WSPgrDb|XP5 z#*eK8Bn z=uEU*_7{1F8X{9#Z^p8uwO*+xKAVm6pG|o_Y`k4T?bCeSDBjj+@JPi|_4!;(nZ@N4 z?Km9pO{uNLirl(X;k5uUZ^?h>B`!Vo|V5J&F( z=~uU3!M6VZQ{(@EsevIAwOh!f`GDDPa|~Mc)H(q}O`5wT(%*X4qo~bIhFT(+?0m!S(>qtteI{#PVSwPxM{#pXy1hMt zem)WfUNK#%J!aUVNkh}RgTeC$(RGcXr;~N-KCTfTGyHBSmb|Ktk>R;G5sI0tt74YU ztE!aygD`GVZo1~m@gAHt8z2$tXWHitbANuM!le5^HwtN}_QqV545vsbkmnwgrc@x( z19=U)$K5@#PIN+r;k%3rzFiJ)ec#!uFj2-ZQDxKS;fTVu0mgC@O{irHdBU&>qfjqw z>Dbc8CGx?KmnEZ{h^G*?kAU5l$R(qeYVpts4^2EhiWOUuqF!PplM9{SMd_()Y`@r8 zFQM4*3{TdU1J?Nx32KiqgedfO0BF}kdei#VUF`r)_U^8~plsIOPS!xjUlFwL zu+=ws>>IBJ&UyVEd!yiC`%ble|E6u_0tB;-E)+c6fCm6EfH>egHz!TO%L$ML$Wid} zd}rt=_}Bm{6nq@NvUC)Dd;lGQE(JgPEi`2Zbo=(5pMw88Q3XEzPEqmm0=^@6-!MB% zfYmKlXA34=_`q&z^_II zz|s<62apGYinsj+hFHG=b28sxz#onaD?2auHzXCD@QCY<>%zkch5)(0kw##JT3#Nu z-?=W_-${YrTo;K4@^VTt%wQ}^o&R@fkA7nT!K@QF^^q0@ALpO>Et#xJg{ka!RGy!1Mi=YH15Ah_1(!(euwHi!xi!P3i+O)RxPa7 z{l!?jNNxS=QIlV(zMAFo>3FfMiM@5p9h7&UOYCSF)v8C;|_Ny}WP-h4jBkIPx+e@#S4MB?wjKDHfZa_A3hnW7z3 zewM9Xph2R4p$kvTJDSV`+^6Dj=wM#Nt-&?oYack>p!8_{BSOWw!MEX!h%Ad`x+}~86e}Vh{xueX*$My#h z=64C)O0_-RaMqeR6`?Q_5<9 zACAjE@@y4{G9e6ywdqWlEWZ8C}ka3P_JU*_oMd zKJnZ++4IJx-#zuaPEP5~)~^XT@@M{3ZrE&bh>o6bwKppIB+9?ia> zfRD%vY7WkbdPi|?{L=RfpWZ%uH#P^9s~8ns7(Lh6PqY1O<*87h%lH;yLv~+!5UOs9_}eE0@#OeAOsbW=R! z{04#q!(bGGeMZEdxKH#Wvru#C9a*xf?bN`q=$zy7&~~&deTbEsF;zzJ{A#%HnUVk} zV27&;bX;Ws2FJb4QQr08?Sd`gM#ML-OZ_ z$%0Y9YJDsx!j-*6A}NS*2^#of+ForlOHN5W%o%fM__;IG%)=M^>vLF|nv#-lzN-9x z?7an0Tv^xeoj`!#?(Xi;jRXkp?hxFa;1US#?gV$2KnU&*!QCMc+}*iN=9!tyJoCQy zxnI>=U)`!(U8ncaKBxEDd-v(J*6+UreQ8&FS*QE@zDODq_jH1P<-dE7?T)m`$b|JoXIhOZZ7Qp zffxspeO+a3meA`?lE4o6?@_^NcT4V;Vp<+UBEAXZ+s%GZp?Ui!E+G+_PzPwqV1~KD zVVOCi{^xPlJUeF9-a27YNEFcH%D&Sn@5`Vo9f29qZA-^)i0)}QEpl_rb|0ZWZlkt~ zb@nL)lX7rjO5a`>rwsWS?5RN0tCYkGiN{jrNgh2ao&i*So z{Z8p1UNKIAIG)Y#+qdjf%pFIok$t=vZKCDkAz^;+v5Th_amq46z+41hA-1JeVo9v+ zi>?|vA?xyCnmH`CdMI^Z=LNksC41vX@Ht8)g}^-{%HeK5f|Lp^q@}(kI^HtwGa{cW z;_R2blZ*XVaYIN`sAyIYknit_*^YVlbhyL3;SM^2a?BoM(s1DGPU|! zsaFM*h;JYy=;A55Haa}`=TU16pzCC?0CML06vPVHJ)2GJV&fv3;X&afbU0yYuGP}l z_}Io!1aNo-W_+2=T1qU_68Q>cLNFH*yVjY-!88L5Pzq3Ma3oFx2bQb(T)F#R^AQe! zg7X4Cp&h6-Apkfpgz$`vQ_Tzi+IpfOw}bLJ*e=flvlBuma+81v#mhvqgaiz*- zrMFQWvt$Z=W_e8m=E$X@yr=;238Pz9e_?F(xzWgz|QU$hP(B zNVmCWbS$*RuQ5LP>!?KBkw4^|tHx+&bUs1P@2+!8VM8D}U|V{fCKpQp=VSJ|% z;*#VXc1>w4Jl_g}!#^edZA%o(G%;dJ1;K6QT}e>ye#b?wuu1pVDKresYzQHD+;!LF z%NOolQ!8Gnw7Uyfy)3P3EQa#5gyjuzWr+}^_99E@nfnpU&gx=S+JRFu5Q2?ggLG&X zXDiW-$So<{aZ^4sDviH;IX{4PhJN8b>?;S31~!@8R2r` z8PB^h!n?b3^fEOY;^w?vFXfSg%!%)aVGG+hQ_;rm*E?I|D-w(1jjdzEU){MmqgSm0 zk11=E(%yp;NeiS7?qx2`==OeEvm-vpUP3VZ;H-n$FRl>oTeB~br7Vd|rvExd(kI5muvHgRV~^vQpN3<9yySz|o=;tr!=89o z4|Le%l%AW1a=mt|_0r>g?>Bw?B1(&1$q|pfLlF-LRP^AUK2s4VHW9Y$@_^4^WM07x z)j-l{-NJRE%e~r>CbV$&T9*e_;>d1)hEA-;nkjdyBw^8MEFKlcAmH4(X==y>bUB0~ z_M8cHRxCGNZjJ*kop&9wVT)@h9pIsOV}LslUldQD@!3}7-L}(tiJzY-j zD>0xL(#v7g9Te9DFC zbBIw_)!yTv;n6x*9zkmvL=A;97Qm*F zT-4=LrU#A^`iaD1>U*>BT`|m9>ZdI4SgYf&lhC#;XKJ#1ZbfS*b^c7TDp5DrSS)HT zejo2i*mTg}PW17hP>SZFo+NAa+y+Yd!LZs67xHrqkn~b7nr_l$#Vnj=-ww?m+%6{9 z!7^Ao7pR<)aijAITjzldt(yt#LNTvV|_Ie}n-m{4hnEcKYI}@0rv&bcE5G)=a z(`@4&yIS!Pff$;_%omCQV4a@pAP1gknLxS9{7V&fiP9P}`I6hM5W1R01w+hU5o&Nk zgX`WEpJ0NQsqpMEs@gdMj6Sj{I67Q@sSEQh-ksH}+D>ymi3C1PAH{kkF7gzeifQj* zj+s#EuBp)KNVc;&YZ?!Yk8&`)q_9(Zg?MFD9oqIIN#UNpQ6BG7`kZe#eBB73IwWNM zit~mBCKa(2my7i9EU)AJK@O06lHn?u8R5rfe-X=9_3f{6I;* zAl+mr4kcUk*!1q>iWYLQnS2vT5f3fJvXV;O=7I4I-ng_58KbRA^((}R#{*ry2~Q+b zokA_6@t})@?A}8W<-9MVkowC#hG62;ekJI6pFB7jcRXRqRV%c^bYbcQ^`~ql3cGP@ zx001iBR0Eqbzo#HKVswA@N(J0HP2pui6)ZDg)n?Ptr+&s&^~V^_Ih}lelvZtx4M|3 z>Zfv8rYC4FIB#k&OL(d4lvuG4Z+d$zBkJ2aGlulW%_MdYFBQ&p8{6DssNo$zkr9Hc zXev|WD;@*xeG}p^d>B_qiE|mcyHbLxoZokx;@A_Qdn^&}$JQ43n&o^iI^Jrfq{Wy31!gVbxGKX5PusQ@)i6Bp%xpRml_tQEYvpR zxZq=`aXgdA*kb8twIMw614n|x2iE-=tr=-0KsU?u7Y7KOp9h1NvvLagq~iMFltm!a z`peP3o7`WhFDiBwMb zF~9h#%f9ryg)=KiJs5< z&CA43E2rdc(s-$2Uurns?5{h2Ka~f15Ps%3J3CpM==cb{MF%=P zC1afR@JfU+Z?E-%7wqGFmFo^fEgdG?EVLlM_-B~C@_2&9$18E((Zv1Tmk|5l^9Q*H zu6Fqmk_KzU$0%``-tKqFo&K0+6$|Ky zNxv_jr`0Cf6*+kZ)pK>1%YBk)ay!58V%P(DP0vx~%Q&*nrc_9kPxJQCx*73$<7TNp zeynRAFPlM|w9$0W+V;2>LQLfv)l3_Q;8&I`YMjlnr%D58d}zxFW)*9jnETWfQ`YS8 z`hcsH(dtF=KG-m#vqKyD`$uvHCW$(nTPZa72>J4tp~8V{3Tvjwai0d@UnPt%pe#RW z4St|=OEB`wX9+131;8bwJ{l)UX387jifO_}ltmr(_46w?jJD^J_U$Af2$P8W5>OOR`aV;q>f>^YqM zh;a6%-7pIyri5*@I~+9G+HQgE1EM}qMrOV*P*FCR!umlJn5IYdO;BwN)3M;zjig|q z68-=)jA#3Y_e6!W&-5BE#}@jAs=rK5X|aO*7OU$wwa{;>8vb$p7ztKgmo$=>mi&qG zts!6QP!_ux?bSxuKD=`NFxhszP`|thmnXYIO5Jsl=V%aMZYA!Bzc3cp*y3VQgTP(1 z+_^7Q4X9!*79qaHW2nXdFn8i6$~Zq=I!r%5$XmJuots}(!0NTrC+`wK}%$7Ab=_rZ`6zGGh#-)#f+-B_ite~fcdgo6A)ILlh zWroYBw4*hX{H(u5}N7c)grR zmQ-B;*-)WvDiP4}-Fd|t+m4j&#|#d1O21Fhmw0zcxp=^6>5Cyd$4nRx8t1HU#z2UB zgj!!nO8w3_Oe=}Ce6rC?paOj17nif)t=j!rT6#sAZvQ*yiV4!X!QG3wG;2(!mWp2N zx5>6z$|!xGV)8j|FI+itx&ygw!M!!1E1T@{T40n*-aWFcs`T?r6}G<(gOtK>wxB!o zvgf|0tbksnt<)ID%EIYfjCkQxw4JlLRt+4LkoI23C)6)kQG4jl z)42?6!eF!}7car4Lfo&Ii!5IO9P4$Bt^K&qm&#Xt1@=-c8tt>I_d;bC41DBMVwgC7 zY{l|$9V?6OQJBNK(`Uy6@_u~7KN`pWi7$J$^va5ZEWOg=oWJm|fZur4Kk2gHaPnXI zSCB#ZIjP#8bQ#OvqECM1UxB~DvVVlR{La6!f#PWXZ$K1TI6zz+2u1x_GPC|4Uo()C z^XD$iem--U(m_fLtm6j=ci@b^PD!>L(ivGU&7aZ94}W2WZ{@ zrfxy(KS)m;G=a_slE-8NA*O7c9H0qwU7RdLtRR#2@8@G>0uXUBu@eE9IYHZhyH+-k z*MJSw3fO=gAotXt`vO53_SiXCK*s`}xBbeYvH!xM{ed|CbT&LUK_#VMn;_^LJh!hu zn;^(R_ICyw`1dvlavl5yVEeTVf~xrW1OKfJ{++!0f6M>>GNAv5_5YXl^-I9wU)z`H zPiGc0@Rue(zxa z6D0tYj}!ocWdTfoc20IsF3jK0#RB?vzt6KX{W%W+b^hPi13;aao#oHv-`D>qB^$`! z_q-oSEtd$C_Tgvwa~U-7JukET^109RK#-)u&;9IeLQdJ7$cx@gf?G!{u z5;CA42`KSac}46Mh9EbZ9cKCc1qoJgBeMMWY5I8*b706&-TUkw)M`#jg0qkhNy(AP zC*Qs$7wIT(-Mc+4JFmDuwUR*7V)Mt4tsfv`A${i_q~&RupPCh9_LM6n5Gd(L1jUN}r$*SjfO+ZZAZv~-kmQpp&jtekXW|o0XMLD)eH%~7q z3C-ChrKD7i7Y*UkibYB+hKZQ4Rx0Q+J0Vj?Pfy5{x2Rqgz_6J#2i6azr6ebFQZkSm z$Y|UKL(JPn01WU@7cq(#jW%xkHRFVWClQFA{NRb95 zzhX`yN`0-*EAE2gR~vR5i`=dvRF^77e%!sD3C%es7(wFEm$sppoI@v(K!R!{yAg5f zcC%92R7O*#Ek8ABwTmu2M!SPDpSy~#9ReOAIvwV?!2?N#HuYlDVAU4RZMR<%Jaj{W zfTI#gc4jL0ZqKd@?`8L>XuCHUu;Hsp=|Tp*F>GJ-AvjOof~H2f;vs!0RUiETJ>4cI zF{=OlQ!91)@GwSol|{G4OMO##yUZxuv{+JOlc``wFphCTQXXX`xvFY0bvgOES`k%6 z`5wMks1T1&6Mj7%7MEp!r&>!Xrg8Rr92MD1jSV?oxi%3IB5uP-DG5VJZnjGa4x8L) z`dLaZMj(B7(>vXg}`zs~ml@c8 z!A4YdzHV69VEu*;PB9%M)5f5SrmRe^j92G`IE-_;2ZcJ6Nv_}7mg{zE){3|Io{mBA zNSg%Q<%sD1Z#FxgtpG3FD$T9l!z3J%!Gl3O4t)A;%K60~4T|_9ohoR&jjr`10 zXL@yAh!R~~+7jXwRvq%tg7|1#Q!c=y*P@-MR+*FZaNv3Sq%J0WBTza8*uzxYW}Pa2 zL_;5LdwAbiFW~Ro(4WRYTxxE_Jhj1nbzRy8=SbWa=uO@om{r{KQ`{Tg#I{4+=ZJ4D z=$o&sH~L|2G)lv_6?gL^!T-adKF#^bnU52KWyZscstH%j^hBrlD{-p0q365GJ5IXY%i^3ah-w$B`iq0@L=#*hU( zWqDwVaPnAQydSi|7z;Eu%e$Hq7ZN-3v8ZZgOis zQI85QE${_GQlY9|U*?p8mzy<5Zcx}QBVg=!xfAskHLzL%C%_TAUHU0B`pqKvyrx~S zFWaTq$x!a#{ZzQ#ojzya4eO|y;gvoO)%?X&FXQXR5L`)#o2u+-t$~XYQeMebutcqw zB_vq_BfBLd+AOv;o8SBIAoAh6ch@@IRV(~W#eR)3=Uf`-!(eUY&INE3D zzZ>MdbFUX7h+w3}s2Ya_^ zd@N?5M?baDtZv;%Px_|gY{~nzSz>gofwe*75LQckjQC|RRmfDSwac}V&cuf=27@G9 zL5s5fu~bP`wU^Us~)p8yj`0Kt)pBo)^`tgQeN$x`xMSP%k zWY!DVeI*C>rRFoKtKa}pN;(+G?qK+Fs0*e%!u1U%cU_vj@8hyZLW*jU{3F`82R>`| zoR(?4@A9)=+@rfKH+0gY`UKeA`GXVceXOk}Br3_XFi>E<8B~7{CBV5ddts)r7O<5$ zQn_alo{)~Iue)2h_wnl530-&+#c%ZQ37 zbcJupJ`4M^NBH~*=Yxdp5xwEMynFcL&}3>?U$l-|@O=~IUq(NIvEI|#vvxc%oVGx) z*pg;U4O8Hot&F#O+#S0weiIF7(MH1mRHIjBJ8TeCMU~4{QXG;)d67D|`s2+KaFo$r z(p4+JvPitNOrC`%RVFLCDYBX!oNZrHai*H(F@dC#jLl3i?n3a0KSLX0J%rU4t{og_H;)H_z@1yGm|-?CVg! zEVte&&qtTl2s>F0h+RikNG&)RxcMB4rH9V3mGU1@Dh_6wR0*h^E$i z0?Prp^Ccn3wqTi2C;E@Jh5snrl%0v4`M-G{%2kI}Qk-d!dCeKD z7}6>K$=)4d*&M2X%VBhyD^n%UXBMMIA}z@XCJHNni5xB_mT5#0ELt5|xJaW!ftI6d zuCS)2Y`SQ-d1h_y=^CJQb$~>)Q|4jOe4*A}<8-nnT4HQFX4?fy>PA<4D|FHe{C6{@k<>8Kfm z8BIhA7?}7dXmrkJX}7~leD@=4wPw}E&A@)E+sUHp#mzt{p}=daFx#_5Dnx|WD^$Iq zOtrG44+3Bt@0(SPp$30cU9GrD7AeWhVG*#Bvv8S4C=ZYUje_3H9>jVjd2Q3be6%JM z7U^4R0t7(SUEpwa8#6?X*xP+aev|IP6#4x``~CNav{mWVGYamL{1X?}S54|4mMsZv z5F)pDgSM#GAkL0Qz$o|FmnF3EKe9i0PmmP|6|nk9`(U(NnS4Im8*UkfA0F|G_5a+# z2+f;CW*vkP9Mav{MRRh-e+FrUc&lf-xVjQhigl_ZC>g+uy~(qmYM4%@J^naempI9& zW&hrp`u)w(n!9KdCy8qppNI^B>xaq4oVc9BsC2{5ZD*0K2v4pa`)`gj7vtCPW;k*V3Eao)yykk?8) zEL3ymC^)P9QZQT3uZ@dMohT|YJ%Ed2Zh>nGeXr~H2K;H|&D2dGqNfYd3v6d^%W$f2 zSvZA?p?t~c3MLJmq<50o5)x8eki6b)Pez&@INtSe28`f<*qr*T4c_c8;Y(8(ZTU?6 zLf9P8&RZgwy^1NUf{I_lVBk??KCIQk2F1MqFlC0*8%3a=n3me|M5FaVzB<$oO;#a6 zhBvOR%GIR#ZlPhf>$EvqUp9Ba$=!|kXt#wT-xO-KfZj*Joc_uUwkHPBty_kSj8)e6 zoXwI4e$vd-!r9~sG^DL!@FYfY`rkHvFtf6BeHSN^93!4{yMp<;db~EjBu|rOJ$&I5 zzPq07-A5^Hm|g8=8khRUyWt;!2(?Z+*(=%t=K2<`_f-vFGcz?>JUvR^brKN{3uq(k zc2M$Q4lnG4%cj@q@)Sj|I_`H;!j|X*N~_c3+K@?I_%;P&)n8oIvyG!PnRv(v_>pL} zo~){9sFqHApERF4cPNrt|7=T|_9^-k0cCiJl5&zKH*Ah+ztp-tXHWmTP%q7fm{PGJ z#jT0Hi%p8m42cS?A@;lNOIoNaJX4IVtxa?c$cRy1Z6Z|&aeQGMh#Rt}ML@ut>uUXS-fflKmAh5-Vxa&an2!(Mv}?nn>C z4u=?s-CXlFho7Wd^z^0OM2a?Dug&x zu(0r!2{m7)fVJlZk61wQwla6#IJ!bzM*v)Jp@AZ+>G{&pp@1}4iFE8hiL!Ej2Thos zcu2Cr(0v76B|fQ004kjJx*nXJNXJYRnk!L7uPGdd?=iAiyRS%!Ji<*DrPF)7FuuFh z@7>j?qa19@sPMN)DJGk*&kXQ7*}~#k7nQ40%Min73S-B2Duq2+TFdm~Rie=ulrbn% z=ACijYaB*2CxoHp_cuq~zNUJ=%Wg`ynj`3@V48p~sjlohWTL#T?%meh;uBq~jD}^K zCD|G3juyT#f)LpO2p7@N`b&#vj-hWbN=@hHQs)h@IPycn*UA;zT6lV^h$>?bSip<> z7u~>_`*#aKe{j0lHS)x*RcNF44KzHFNk#hzh~`HO7Wyb9&dp5Tj>;BHw-6r8@ER5W zdr%xvYWb2S_PS|53{x~YME4D35%FiaSjiksB${tB6Wd>uQWeNm6N*E}u}pRa zzbzJvN5+fHki~Cp?q0aEMeJ7?Ti1E7v_ZhGf?bi$#U*H93FM&=7k#Q^gM>dULg_)K z!NzT#vQn)8CgbYqQit^TBseT^a#d;pFDWRn}!(Y_B z$AvO#`ih2Bk6lb?23}i_zp5KGX=aQ8#qe!#IgsvME8sZxDv1~AtLADO`b*4(Ks;eL zJ25aVdL7jx>8vp^ug8FdO!8Gf?U$-Z%eOa=2-qo~kcUN#m`#&5kJPCrzo@tBy=%ES zi^XN{Sa6N(}; z5qo2Cg5NHLn}i5qJqC&B1cq&Lhz5yd=(s-lsRTkqt$}&dL=YF6H0TB3>rioQ3uCdd z1vvQJ>|>Ym>(_{9CJ0fUi8NgKUi#` zvC=g2S~t=|wFQ+1#}|~4#MiB;y?H@}G@`e(W*cF0;VsF0HnQk@GwU6!CPym2>~&>S2Np%i z-1c_HodTtrPf9hvd9^OK!7H^ZI+2t>k8+hOfSc4&l*Isdo!H%H>-+gZl z;Tx6YgB^;R*3{Wu-j$%_7if!uy*gahazTXGi~3#>0`=~IGnk0O|IFa~V|sUqij~Hj zU~C%*KUp30@aulC!-VF9Xz^pTh?u}yApWh0o566TDN;DbQ(g)R6tF!5%XOPYkHstp zCmH9RNlLEv{${Zp*Ovz7tavVvJJLXutVE`pXo6)&oxj-hvaMawGJReMWU-kikWWdb z7hx#d5MBKkQMYi|Y~B2HO8pS$a{b1VFES(2Q$mT-zhLZucX@6M?fXdDLxik>t~^V% ziHG9+50{haYAF|4OKPboL1Am#hfw>RnwXPU6_fW82((b?g0&R z7|E2=ozaKQI6<@^#z(tG;U$8vDJOiZns`c;lQEA}nk$@zCf_YWK#ds6#YK8G3X0U!<^1 zYBG_pz()2rX7Rq9q}4DJ4*3|H4=zjXmlX{ujm{(Q$~ zFU#3TG-%w;h>1Yd=rvYYPWf6(_~8rqJBMZ%+2r=3M0y96ud6Z(-_k5<4+jYn2SE2wYj2;rl_7jlm(~mBBvNCShc4}Tj=JS z^?2$sjX88BFbPL?(~EnI(lmcRVh2^?e6BH6-`Z!+7F?)uJyo6?rTblo4X@e39qjnh zQR#58-|zE@`wp$sbvfl`r|G!K(%l*FDX;rk!p*n5!wS`#^Lg2HA3YAj6@KKy&&z@6 zxmf{A5c-i&K|(R&>tje8r|0lk5aS-T(ke$Nv6ar>D47YXsV76OoEBAC8WcA!c4He` z^M;RZ^tC;0z$eWDvakpVI9B~rQK5bJ^E3JHf+c$$rN7WEBWpS<1{|T*T}&5)ETmMI+gmHjBGiF~crj@kWS9J@+0VW@cFc zKHA_Ub{7E=!^05~f`MFs>ubx|%1>ii{u@@S)vON~RxSt9S3LMu^zH~h&P57J2&0y# zCp&mgGb}ELP9I1-?O(tXhCYVLbh`ygxXlokFlAi##!ve~4eB?Up`q@+O+m%8w;AlK z>AhdR8vlk*`gE>J_ysTgYi$dWP@35H%r6rJ53QZb*)u}W3ZLq&R6gr0`4-Khj=@6M zRKgIr5Q|PfHI+;79u`s;RrFlG(Y6uA4kGP>@eIq>x9(`3z=cW z;jH=garW#&8Qd+=7Om`U4*oRoz%sD4w%hAtA@1wv5yhJ4gWz=K>Kh(M`nwwnE=pRb zRz&iZ(%=wX9M*VCyqY6eC*ERj6vA)pRi@&FGCg}O|LXYTu0CirS| z_M{O*aSipfnw`+Ia&^5Lc=V1*r)8YkgmWnnG0E#8x|8K}EE%^g2fP}0T%t(Bz(~;X zv?V!%F7!lwkZs{baO%O)<5l4qcpydffZjKxbEx}l?2vC@*1W*4wMMZfWCd1vCE(MQ zCuka(pK$7{c=Clh_h-kWPRRJ*CA!k@*qf;d9Sbq?86?I4a*Z%V=NrBhHA`!_s(T8) z#J|5_o_^bYm*3ck7{J~e$LhI|ZBLmP3f!cpw~n2zVOy+^#m^oci@v?}b_I5Rs;7kH zmHKkdRZ@9+1_$MtegZxQRHxZNG@ggPq0A-GZpQks)>CgSX@Qm!llcv1YTTmw9*ubN z!`F#PO1Brii-U|VRbatan`D9C^l($m3U64avhegzlM74A4(g@x>k8N^l_%r*d}dzD ze*1t*iE4XRxfXG-qI+i{FB&Ge`Cb=en$u9fvQzG@7it4F99@yo2`uO@xq8RBc=@Wr zt5n8>#TngI_s)I0R*IIl?*1Ai)x2wk`Qjgh;?B$9Fu^+a?)CdO^|=so}ci-q&0x zusQmV1|!9tk=yIeo`KyMdjpUv8G~rsgQpg`b?9LQ$oyUFK@>m86HHjt>p3bXaoC7Y z)8eAwehg}ml*zkt>^31XmH${!^B_?Cl%n&Fq1(7e-G*W{sV89-h_hnZWfq`1s+h$< zOQ}vfHDFRgV(PCWB;laqSz}?L;vkQQj*UrsX0dF0{b4H@H~e9Y)70D8atZU8TU})U z14D9QqcldO*3zI`<4#Q;ikiew1j@h8UA{mJ+(I23e#DAr=lva_0+?J@;nNcz(RtR3 z2z#xKu~e^ALmG{&IOf|~lnwf@i5+woujv`3wMUk`Bu%*&XCcsNDU{jap`im3PdpA$ zu9ZfwRatkR0raRV;6DQBKRxIFLh=5k9Ry?nDF*$KkmDEipg%ch5F%>_!fYKtAg~n( zz%>Bn=y3dr0o(tA#ESo#QNs|#e}b|)fT&#)5btRVqHG00?5?rpuRtuvKLN3z3;YSh za)La|Kz5G5^00rC^7$E}@<#~4uZli@0I?v$=1(9NL`44)Ve)6V)UOciFG%u#%_y=0 zfqx69`itw>PZe4XO?A2~yRbMRPm2~@E4g?Y>k3_1eGw^V)QjX*w-+px53G-08UL$r zAGK_huvHjSAtqmMA$j>lh;}CpjF-Y(*}*u%6gX*`8|bKII zkBZ!7WBuwup5xpLI!wf&ceT;w+AS>+`KW?M>2Xhn46Qa7>6G&~l1^I)wBzM`H6DH-Y045RTQ>vds&C)}`Nowxj?-Y|z;&1xKPY=tJssh~ayZa?;+ z#ns2P>_+iZmg=|;vvC-d{ihw>=2;KRQ2j9d*zW=rmD=^q3|G6AOtosJpO>9>ErGmM`gnUoeBgF%D$};AC|!Q>Cs&J z9ypjPMChoJ8Z_NQS~!TwQ!#dDm)@@>TU=+Avj&8s8oRLL+|^Xd-L@XFV|=X~I8GPF zTaXH+v&h<*N+U>Z_Q0)%=d>FZIl_R9Ps%JUmbaz3lG|lDN zFjGpLz0_#*(SL8PXy=7TU80(gjEhPeiNu18}2Q zM{{1`uREh(c)zq2g{T>Yy49(txTi&kd7p`5WUD*&9x>ln1tJB%4SQ?^0^a_I!L~1C zCO3^z=xyesXNwOCNzZ2c50<(Z$$G`byC34(ptFhL(V^nyw&ZY2S@=Qw!$=8gxJG#xCph@_VSJp; z=Tu|W0n`(KefRElcodMnv?TEGfh2YR^7_UHC(-q!I_9C^JR5~VGTu&*eC|<-;55wqh}b2} zKbZ+hr2WIOD7fC6Pt+u}<;$syFAUU>+Th025XyrTa;}7pf+t@!I%HZAWf*WljCSmd zDvHq=5q`<%TU{^@r)}8mlb04u9?O{!J&Wq6skWsV*(EBY)aPF8L9QigPHO(h_rPmY z$j-3+=?u(z{Z;{i^G-|j=N$)V9&HBtZOEc6Buf`y_&VOZ8p86; zn~se46-!Rg;5swSJpxCMn~^yTD6Oi#BQOp~DX=jo9i%*v1KSx27M%jeX6K9eRj@va zAwCYO%$3Ib=-*IZ&3SL+6lK^9$viz2x0H76%R1Y99+FzFWndM42}r{c z&3VranT)DPTf5i4$7uM3skHUMbc+ZL9?E^gN2l}i3xP2hEbo0?$htP$N?&v^b0JI) z!=ixYRd@p3M+~fc7FAOCQYc88IR7@OyLk*8}0h=bM{cKD$__TXz;o-;Eao4fAM+$(89Y z6zcC><~XJK-j6AYrHYMs+-y|a5j@_n(`I@R*gN+S)9rgQ$ESHn|L`M(i-W7nM(81e zETV9ecCsym)Z|AXFnibYedAnZJ>>N$?6*}xeokg#s19W;b-{GA0CWxqywpuDV*uR5 zD>5O-*U8n}F(I&b6{j;HiKbmd7(-%$=O~oQtI%7b^^q(C7Jg9}(=R9Am7<~J&{_s* zq+#^lF>>Ep;nOW9lhR=7T^~6jMN8sn=t5cN#ky03XQhe{)YqLeJlQYE>cUPRzJ-r; zkk(=nUEJyaaqx7z;n-5l`T9aQ_2IOhV2|NQyqoJVHaqa>Vq*qUQIouG>Lu)#vup7d z$B`7tjECmUk_}~aeHr?P_@jAC)zlI3J{a|E-Vr3|qbcoST8=w+fDW!M6hS@35AGbh z{KXkk3wS=mU82RI`b|V_jHwTvWfJd9+ca_ex+Qn0#RW_^io4{r*EJASm{!+{KH2M( z>3pn9i9^7nZ5I$tZ-R9%p>pLCvZeeAEGtAY2f6eFU2?HXdMW{oQ2Z-rz$!`WAkCvu z$v4e>uN#EUmFla=28rGr!nSx0C;5)-3bMjIpR)6F<6$10aK;5)(hxX(&hgO=||v<8;q>$xQ- zG0+Oo&SY_M2r+HA($$Fa4-%aAMun-c!ge72?J~byxGrPA5fbpGu7CVQ#Mr~*v`$HGAk;sMClYhY_Ou5 z%p2}d>|{#I;=n~kWC#@4zf%(z{zm>-(2L*Z8&8=O8DuMdkwTyDe7I|(`-5~d&`v_4 z{4AWkS|swm&vEzDXe#X9BmB;uHQ5}d#h@#Ky;|c&2byP}pI(rt$KDiv1Fo=eH;Dvm zAcDh$}5S?+Xd3J z%)9Y)>*T$U0l3|5V9=uihI40>mZVzx_B@Bd2V=!4J43pZ{nwJU=R!tDFb}9zm8Zq; za0jwcVLz|Kv}3obK3u&!-7n;d<= z*BLW&N()GDGBl@;uTnm=`O#fI@G{Lfm4|ez-kMW^!mIryk1-{B;M7u`^RYucl9zMd zAqERIV>eJ%FF!NyJ*;Ykm=;LxBbRW|>DmAb?{O7XF5iR(4?D@|JU>HEi^g4_OY8kN zHj4QvRAFYk?Yi2|6Ipehnx zq_~n*9GVUevvea+ka~`Ugh{(6O6;ibr9>H?`NU*<=dXx` z_0=Iqt0+^HGA0_`ZXS=g)QWsUJ`UDvwCm{pHg|rRMy?rh;Oh2 zHI?Z`Ol&RXSzj16&4-8eV1p2#RRiq-jV{P|eS~`b3E|qMu_9i(LrYXl%qP!m9>f(C{FIPQqheHn| zTPX{L&L!__&zrzgY_!xN7}s(QpZfx3#x(!-Dwc_XfhYqb_&o3puGkY_aU$SKW2l+AC zpYvmaV%$OT=OEDLFO~qnzbF(C7a*f&WdzC;sHDX4&yrXmO`-qH0`L>A`j=_suQFKw z-z2a=+H6Ds;IlXz5fGH85R}LAS(fb&HMT#r*#1Fm?N_Nakg753?_z79dCuR(*8XeF zE5I*uOMk^JM1I39SpL8*7^U?L6l|>Ytp6c%8A$*5@7x98x3r{xa2Fsv;IDyWe;QeS zN6A<@K$HMz`t8Na0w7`mK}l>J&*qlr_y67W`;otu01zz%VB-Yw6Ck1IXCUjDJpjR3 z0QP6(hy|3R@p(UX77h@)^?U{<(4Nn=0bm8KWn%?paeR)5`{x%Ms8O*qfq*MeI^y3; z77)Poe1*@;ETGSLem$2!;4`lQ+V@}Eo=FH0ng!zNSV33vbIVVzi4FArJpFmbXA0tf z?)Cep|5pA^Ts)ue_xWGT-`D?nJ^y~(pWFU@?zg@FT+hz(7aHRyiuhMsBLJj4_@}KA z$jtVq%AX74Z`y~y$@e{LiT|!9_cIT$!ta`M4j@CM5U5wZ|EWx94bld*0~sWrl?tCV z3!n4;T7q-|fA6v&!=ovq8>r8K`X9)Osm`eOs|6AW{Ffx(zsZUJrpX7opFsA%Y4SZc zClLSk`^fVbQu9|6Bt0`50~3gQ0}Vc6M67?dz2VT|d|SCISC1oj;J0A*k|xOL43Ks@>o2l*qGy;?K0pf*>`r;2*2~FX@m$!xqT$%M20$J7<+W)Zp{x+lXJm~&| z<@c8wXZ^Lte<9WW8!Ip~=q}kifJ8X0;9)>=f%1dazD!6>XXx%yQ{Z2{(a8KJb3@_; z3C+is+v(7Xum+<9A6ps$(o^8ZZ|1xRt?+-JbM4(DK5060c$TTMMQ9dZEvPVbqX^Svw@eiiwY=$e%9YRO4v2vPtTG>@PBT zd(VD0lIAe;IU+?aB1?sY)+4!Qg4N2U>#qy7+zSrVoU7U(7W+y^9dj{tPgD=U()f<& z@}^emqMI{hVPrIL;5`DQjltL0ALrMho}kALJIX|Ye|+rtk0374F97HcJL)?;OY}eA zVCKJA;&auYT@;NPWT=8)TD(o8O6^Q-^^!d4c+J(3No5`{{8lBpIqr~NYdl|ioczvn zxWC0gd?H_S-k|_Z;w3*78o$!prb1FuUlOkMcQZGNPs3?<1rR-o%l5KZ1Baua_QivOgORL{-moK99mMa-z99hIC;92_c}jt;b0>wu_U zCrIIT)?2jaEP_bx7q5R`5<`Yv#3_z)KXO=i@xR!6tLQqiWL;NaF*AdO7Biy-7Be$5 zGqYqdGgxRbSji!rSN+F0qDo*5V zjbpYy+HNoXP=Q~H0J)Lqgft38iyI<|*d_cBM%$d1lad5HHJV&7wut;z*?n1=M=ytk z7sJAVqevnce2?>-(FeVGfQj;|@14LFHC+9oppvqsY9@;{rwBux)~-_gub30S^gjw+tT>d#bk#MP(sSxk(45vc^(I zzRRyVpmHKa78-$k+Dbftb^o&4Rz`hP)_Fsj-E(S*cnsx0yrLED*Wsm;kjrX;5ld>W zUSdDV0tA1tW?)N{ak~{%M~;8yZv(ob_2A#w_y8N0KSu63KX(se>C1ZmHgeud4)I<1 z;Kz>-A!u!W!-tMFGhQU9XP;)u#XKKE=S3mM+#Qt^tqZVtWSPkNg;mXFv<2Hh7hP>> zo@M-YocsB%A=4lOZN=nVU8Pg*7wS^HKsNvAd!ILfy|W7aVEe0f;d)ANnq#dU|kV0ELRQEr@(v;wP> z?^F-^8|)-N0+g2^N+jC%4XFX$tn!p9HLt9dbBZF{o4WxbY=ezY4|H@kLJIYw<0spB zc7!x8Vo2S1jlzO@bIVJ?wfHF}Vq8~gccN73|W zJ=kW@(Up~xihYn^3s5JPI)4xsg|y(>4XjtHGm{3NU^LV8FBTtJI~ua|Ah7(FhF@iX zr=yF`q>!{^E#q+s=Jf_O?h;N4q#wMEAGDT7#GZzC!Vc=+%DGp>+U)p(8R*cB-+0R9 zO5l2b#h3Mcm`?ODmLXq+>|HyOQ&V{+!T>l1-f6KZ@qpK8Li&ZL^damA{fLHkV|C-~ zFUD~Eo1z$WQU>yLM5Ndc>u+pM)HT%U>ib7+^_D%=n?}H>UH1xA{`HC$cRW^>{q?& zCHa2ESH;on(wieqJLo;ZJe^%Rzyco+Q|qL@$kkk#avJgJs>Bpe^>dN=0Tj7GgF6K~ z&BSMeTa~B&H43$NTf}YfpC;jn&U#$dhE2Bznil)8+!wJIT5N0%VMQ*zvDK53L}ur5 zuU3oIJPgcJiB3Yf+gR2R%0XJ9p;l9KfYh)G%0?o}=CHoMX~ACr1E*PDC+aq&ty%5G z;;TjvB?i`xoaq)76*|pNt0J3|nQUB2xxq=?Q$ojr?_Z?6FvUbu9X1cBW1~t(Hme2H zKh@$vt0q=)C6z9nmvYZ*@8=H>PkZk(JHX?~qkm6gtctEi<}V`|jLQsj^zKeHY-l{* z_CfFzI0YEyEMi)o_-kYiX8csBsUvdMj zW{oeZcQm=A3<`H-XvpVrXWVvT|F5TOu#oLR8+0@sA;%EA6MPmM(L&DQ*B3LgT4VAU zuxSUPJJCfhmCpUZgh+cG4C~Lm9iGfSVquq|367Np7v@$(p#>K~m6dNo^zh)iiB%tH z2%I&eL%(6&z1=jebO%ue-muQI7`&i=AN7@5D=rSCcRh0cLX;oIlmF?cgAS6) z_J_AO3Pn507Ei@|n+ElUZ+A0TP&o;(>$a>azjkBex5oRF8+*M=b#BlGadb;#rto8@ zPpY_WyeJhvlnC!Hn@laIHW zd8j#ZI)$S!rdyRjRa}1H3c9X>qeC>__6B{)@7Vo(_j-1yQ|H2UDb2tLCe#gPXGGmk z-{00gpv})tHX>3_wL8xM7MzJTj1ha5I5l)^F%q7uNAY`+U_fi#{W2}z+io*gzEo)P zj`(>wWhjy>qx#SL;kbMFa8v^>CiS?a-p^~Fbu@YFP$CPfBhRa(CVEsKS;bvr;6-HF z*s9sj%LlNkIXsnt53D~gZmB%>7Y;{IykqE8``8;DNd|RLqF-!$%Z*@gp&GjDoBb~8 z6ozIFT9?J$&x8SI=nH0U*Ph3x&qGdY)woZ8R+vam?vL_)3?@s^LI@!UDw_zueNP z<00SM&9dFGd#@R5w2qGRL$?Fy*(G2UpXs>nG zo-jvtOlwg~1MGs)wQ2tGsMCAG?RK4Kzg2p5-$<8zkmLLQVns$g>7 z=i1C$k!N|0UC~kszIUmCyz2~Pr9(m~apNf99Qkv)3_M0i1GRjaY#0K0PEn&cH4(-V zr`XvhUV)QKW}osn*Bm{3tD3(lR2A$+4fyC6e}v_u*0(HMdfNzBn}F?RKc($n2~4xG z)+cKcb=|pR{6RU%AH^doBgjFl(U;Hu!G=4tPt}@;S-Sas71xIQlvG5du;#6%FI=L`z*6rJ@`AT2`l$3#aHlZWis5+?Ude}gexYStnNq|t)S44t=AGF%-t)Ip z$atMrhvc1K__4CA2(km^P6(XCik1q=QuLcrnus+mU;U0Pj;3hLoQMC6sgCGgdpb<*)>Zwkw~TyLLn~ml)bY(JyKH z{j%UNX{VT3|FbXzKKGhU8U{EAYN@5Q=z57Ws=OpGPy@53GEua(AED*1$#t zyb*cPHt`#Q9*-DoS*X$KGz|~n102e);}d(IrrIQAVZS$s$aV*iV|d+NO!JlB38qIw zseAy5%7z?WzJS~I&gNiqAp1_!1_RlU^HF!zoP-aS;Nc_L0MBt$md6%q()ZfMZM*O%jmeu#K{dN#`7NJsvAY63=gO#dR#@ zF>*a#NmyI61KTD&A40D35YeUHQ<_m{TNtkTPA@45PYru9+F8r(M?D64L|etSj-`Fo5Wt&@6RQ2`ZWB z>z?qPfhWPc+iq%QR%NgrK#7%iX=xpm)++eNvrWyQ-u`^65fxWMBpi$gM zTt%b<^Tj<4tU}$x$anYa@iI3#8c&g&$Eni$@_L0VwwrqA7+Ss$T4hwMC4S1Spits2 z&{O)t$_!QI#2bX*H`(_DtI9()+RMz~qjG9K=2Mooy9z6qR`<)Cc8@+18p4T-JK2ZF z-i<@!Z+7Xu6q_@~)+X!I7^%L9qg55K-HBQ_IJv}_e>>s1Hh|%!OSBXxF@m;9UQxCw z1!v{6xl3qWQatOlu^7%IDQhYc zR2%pVvfHZahh?TOZ>1k@>|SfcOKy)@CBj84;diF@Vi;gCa8pp$m68h=Ft+vb4^Xiv zwPUN4$Lp)E_~tR(?j5ni(*_v$a5Eq@ZmT! z*EbanZK%p0^Y}v_$YH`X;O+%51msnFI4i98GY`q@?GIQW zPN5kt!VI`+D2s}BX1^|Wf@so8BANwqd#@iEiW!fN;wZcGSO?KEuuo}aUL}_AiU#>L z0u9#ZmJhwv9Ok>yo^*DsY9*z2fp7jq*_DR3X6HCByLF7Kg^5k~8}1M4RwvfFN)X+0oeuU<_adf}I~OA0QWwSa&=)Y@*NB{8r~14uAb=81 zRj;9qRa}=ViNtqL*C@-mj;hD`?8c(ip6cA}0EHrJ9-b~dpH!mz-vjnBlE`=S~SHsW1A^J`Vl}08%xV~|C^jg)w z6G|aNxYOISz`4q-5n0-{osl=MjD&3p z37t`qRNy70B>sMc0TnGwWN8_<s{yR53cIibZHD`FmI&M<3S=9GQ;a#Z70+_ZGuQae_pGp*r$ru)PXH6Ta~Y+kNv5 zJuPV7^qf~^{l$7Ivco(95EHbx>sc$Xb{wu5D_|yb7I=AkW^9PuIAW>D z1g)J)-XQy|NduuO?(#a%?)2t3G*(lpl9Zq<4muRD`F+sCxH=CWb|$$SmU=@i~?s ztZx~&E}sQ(y{D@`wHq_=p$P2G28)S4Fb=_+?akqNmOCUJlvV znKupzJo4xBQgLW#+dcR;4GA};$n|m|<74VGGV?rkVgr~anhq!WP1wcLuy4iC%AO$c zx$n*IVB4?MU>}IN$;|Die4L|d*~Y>+V@zVuQKQt!=9DKr45f^=7a}5&NuBCf(PU^j z9Pp6QgvOi8%F@ABTr#W<2|+)k)wM_@<>#jn;`&iE zE;eppi3o>Rfm38&IeCAWIbl9~$tvNXx7pL{3BJ}+Jk@R|e0Wf*;oF^H?-l}fSX_r4V~Tw_h>)2 zy%C?=H2nMLGNx1(aB~Z3JG0knMP=v7e(q{wR_J$!*DI(vW$q0)S;}g*gtq>6u};7r z>hTk<-1o>By>|RxsqM9bDJ0Pjs}|zmsnRB0aTbk!pV?-uUd|h|de!%oHi3RlN50zj z#W_!_l;OaM>@?0Wh&nuB2yawhHdf7;itI~%iVGn%^gHC%W#|-?%{-D5JVh=4jGjl2 z!@$#C7#CJfeFMFNPeez#&&aw!ZzuUHf0@eoZ`EI6q6eg)eoiMz*#r_I0_6U-8>JB5 z3^hwd1TV0jjYUscolr+<#D~4Qs(fyTowIUBB#3sqScUtP9^4NLa|*~Np=0bqOmbut zPMZayWI})z`&y3;*TaRfk?Bf<~!meRX{-I}FE0avgh&{TwcgsF!6uqYzx9g#CfhB#;paEg`4` zNb2S}Vz7w)>bnF7I#qnxD3vm_6gyJgXSH6nPRz5s&v#m#PoF(c$|cSgnbZ^fU*$$G z`G;wq6N!T%O=*+G5+aD9*%LsDp`G&whV^!#+)r(I)!xjZ6duJ2eY3dR2!l0f3kP5AoDZ~Z4JzrRo7F)#uqXZ(Ev$uQ1BQo#hb z-@}wckso$4?=0cNq-!WP9ta9j@PN@y-$1FdkWZ0Mu(3vy7S5n!Rx5eCM0E^boa{JiFZy*#qm+*Wq(c--hS34Me0Ff%C! zN41%pavz9B_+(b2AwO6M89h z6%`$=@j5CrEDVF3>f`=Ht7g7xTxp^hT9dl;Kwnnz`FZ{V^4Y|zRAr4?=dGdj_4NVG zATs%U-k3(qphk8bDijkj7Wq2qW|@ovdGkK3Cg@^UPKC{mL03#V?i7rnpe?Xd5^i#I zU%Wmt(Cb&++jJX?U`($D^%Bcgdi7_$R?p5JIU6N>4PTE4`a$XhZs$3YxP@=OC0zCC z_7p9Q0Z|Ka(%^>-*X>#joaJi7r4b5eCDtRt>#y{FT1`iXjo{_wK1V=;?^nt$Wl+Q} z=85GXb1Of!)lzd~P_v$N((ahBYmIep;3g}Q97IKRWRzmY?ZLx~SS;6tpJce5vI$lz za{(#iecAx-mX$N0CWYa|gaG?$=Mu0a*Z{%8RG2USt~4hG{N_6PvV|+qrTtk?HzIJA zwC4>j*e5B?wi|)Oyt<`5UOmf_Y6T1#ZRaKQNLPpTxSD$7!;c)^MOcB<==W|QB~9Pp z8^v1NzVB6(FOtf=XWvdsU`@xWnYXmirA`8WO-`+R9?>r4ChPHrZ+jXZGB`v>r*&5W zmc&s(g^Q={W^k<+I500}YKbDqiqvFLLt{}UEh^1&YW{+c(RsWFf3KZ!(mORnxkRZh zsIJ?pK+ws)y0b6VZY;h`XF!R4>gx$Olbn&RxzopoqMUG$;dRN@+7PPJ4|WqVQCy2n z)nO^}oDLJ=T$&lO3`UO7lIs{H`xg`(6&1ykSf;i6c+$SO{h;HnW2n|lFyqv$`|15! zM;!wEeLi2u8(iNS)kVCcc^jM(fM57UT}Or^ebg;8?7hcCJxQTa#hv-ipf!(G-2x8Y zCdU_w$ZOqszqxTKM4*~yOwgxI@=vmr+_RTg_~t`LurO8B&K9U?9Bd%k$dw=Ou4H6{ zXbK~gKARatR<&j*W=%Ldvo<(i9v^5#5sd}Ef%Wo>K&;jSd1aIN_RXn5Cb8#q6rDws zEZnX^wsMMner#s|@dS|~U79Ie zyiezY{anQ~iVt8!6fHY5U)oRJzyEH}yOP?*75eT5%nr-te%`M=HrDS5r$MxOMiPP1 zxrFsF2_a47?x}C=UAEeLCpkHy_z1h*MxF&3_CY36E9fBY!jbmY4Z3Vy^bx-!*~nMX zNx7XtXQpK9(ZZll8Ye7^4A3;DByrWp2s|FH_h$!_ZyIysit7}|j8P1jW3l!)%)XuS zzp5ha*2M_9rH4KVl?b9$%Pf&ia?##u+T=XR8H4M3KJKQ(c_?-kHSdgFMi;8HHZ?W( zB;X8yyAHb5a(F`01)8VyR{EtS{RxWu>y$WSW57(OpTsc<0kg&aoJsQM3=+U>s=pOG z1dES+mr-MW|96^Dal_cNYa`A zd;Lg4h8L07AF7=I1yi;kvsx_wetO-HxhTKS%K7`p3lpG*_rH6*s6Z*A>|B3EWQ2mO zT8J8sumLYq4oA0piz+t{mkn7RK0t#heqd4rQ=~kAP&j z<)6GI27I)!*RSMhx?DqbDJkfYA=`;wIe_`!se@RA>L%8AN@=VLLK3}`f%KErB^5>9 zgdTbY+DjftU>5*H!&UBHt`pSWt!>3))pRXl7(Cg6KzHURh zL82WeKbXZC?x?+M-<;H(*=*tj(T^E*x0BM!;Io%{AiRq=docN|$;T-hhMo)B=hH|) z-mU_*rqe@#$|&Fnc`jniTwN}(Ophm57Wd6|{O(>BQ7ku;q{H=HPvnZOx(L-h8+N?` zdnmlD?yF0qQwSz(OVCanDTpvFDed{W>Prx0v7zlP?DVnSenn=fdgz{>uDnookUIf( zD11efAr~}>aj`z2Gjo2(deDTXJ0J?-`|xL5F6pU@jlkBcQ}=z{b|S9yQJK;C_?XPN znEu>CANBAFWK=9H$B7&sk@K4!e2z|WG$~JU2RLK&r#3|MU<^5~0j(C#+1GF18@d=9 z<6=--H)*>zrYK+#6;pZ627c5p&W-beE@tL3rNC*CpauiDAvuqznqRCE_QSJx`a5x=~hXbhMj?MiPwi*6SQC zC)i!sw(o6UTO8J~D(=q{qgpPr-CD+xHGF~*549OaEFB}exd+tDmUdX zUy@#?EvIejpIU|%G8l7B*Hv)|uCYpQqDL54anUJAWXQhXrilo!Gv@O`qK=M^!o5-` z4+Lun9SW}eq%-gpJM$eHxD^NH5FvP^Anrm$MK^ncx6$=_$s6z*YxYk|K-t092HeFrT%hUfXX2zmp5 z!KmzS?{%>b+&ExJ|i6hnwg< zfQfjWAfLlB8&`sLi`w7GM~EyQTWQfQrK_s@W~YU$&jBv7s3pYJx#LXW$Os+l&@O`` z7z+9;A6nmAU|0pU;;>CccQ@a@+z(G-+w{(#`@Br{_x8(%YFI4A^wflTF1};x&lo#Q ztW+}N;@sVR4rP1_jlqEDlD`mhwC$Cfl30fDLDD4ji0#;g3bjVCkjoB!LeAm&c-fYV zBu({pT(lL_SLLxA1CwnXQlwY+_N0&xj%GL2IRW%TSXva>_q|JzftbF?+*lB>2(%7@ zOUFtkCzj1Ia?=q1NqRNdDNr0Pu8Ty`^mtxzvn?M>(qmrqb3DR=87_!p&CYBnCO=>W zU2t9Ak#-Lz=SiuGQwX`@jfI|TSoQbqowE>mqV&Slo@W&#h1S0D-2%eID=VVh9=(&% zfnRwMN6>nZv-Qx+fa#dAwqL`*t3^f>-g?s`gFbR06GLnU22LXOiG8BrTrEPru0@f7 z2=e6Q{+LjNAg>q3PDh6#Au?0oj2nBV{lS!oL;cp22A4D+jQt~9Ld*p)Isgw~|DlOwwDw)_aI zKqJc2ePuRdx8B;@+Km}+ts6}Z2k-}VajQY2k2CYotTIqP$e|+O;LjogX&g4~g=`Q~ zER~yX-92+`!kxrmU0}S~W@=A~I0xNTBFI`I4@7)`Boe{Bzm27?)&-*m1iLd|H_2q; z1opL-?Q)4FegE37Cn6LVB1EG-pxZNL*fE%D_`NDn0!n3lA8o#+LhK`gEqz#ewt76o zZYL@8t3=ewPs>l=TgEMzg9P_duodG}w>o6ACk;)^)~E$Zg4v76@&z%q3IqM+96uFk z@$-QRxz&^;dz+l*y;Bh*j*8C4krY)8Y8DRo=+5y;W{rp*HNd+j-ZJqsG;?OWvDL|{ zk2U%J{VF$n^+_dz67r@3YxLVoe>En{(g*kgJ15>9h2ul_);3)o;gn5P&9!aW1@FlC z;;RX!D_YCeCey2$oP+~d*{{p~r_#5PR{0q^AGlSVE&Hl=GpzdJ0{x37u$%L9+;;7x z=C;GjQ2Qyu?sRNBiu)M9gG-F)7`u8uVtB}=3z?%?`e1;zE1aHRA zCCXY=T5(M&m8)2&la{dRD0ni@VzQd1pfvSh$l>}~m*2dGMmW(H?E-aWm9Cr)$t!t( z*`b~6=;wB|fs+DafXA=f+GqCZD<$n>DyNp?nIzt%{a1ux%kFicodLWiFuQLv>t4d2 zO^e^!Q$0+HYj%1T2KdI^yPen?pu1hRySZM?w?s|0)GOM#9pzqB=ml$H_R3 zvL3lpv2S_K_)|oU6b&GpMxbNWERTev+^r`rUReymLuz--C2BPTX^f*(_sQsjrk-lx zcnlpJYTG;NB>mDITeO00(*PS{Vz_2+q%0y1v^F|i!u(auNY23xENx-tKD)9`6MJ-;T)6QL6*SQ2fOCT+905RHdN3@invsv2{h= zf!9@_c5Ch{*3JEpAiEADG>nvHr1bZ=>Ts$g9 zHZI%39)E;>Mwr909UE?BW#q0t%VnIZ#3T$M0x{jT9%N7=vjde;La@C9V>Ha{pfEz` z*G*jfcBPyA(xZB`XLC&-R8qS#Gfgm1XszfrYxng7?nd^qNK;R$Y9-XcWaLbBMEu&K3TS)AYfDblGG^Qd5=_tVC)j(O9w$+u*_@k zsf_-lhV6^_+%=^+ZIy4tA8Tws4A;BX(~Pzagsb7MHhGcH8kJs;rL=pLJU?9oP;FsP zKJOIX=7By(x24$CN{Rr$mHwoNzHHQwfCGO>Ne z1qn{a^=O+|gEQ5+jS|^Am5r-Kw8gusy+^xst!Ts~gGbQCz@4MQ>sJZ zX}ibXaeLNwF;slY6^zffC*^I~W;}2Ya~)f~EwaPoX!cEo-^OXL6j@;Ss6_(w(@`vZ z*q3}NbAqnAw7=k^p~!WnL%DImR+5y*o=EF7t!Z;)GMHiL zfCM`s>+NBU0^ypYW+WbWeOO>XLJvcaTMcO#o_-^J8S@G~LyyuPou`{0b*$F~mz;Ou zOt5)4=7tvsigof3D*hU`0W4h%orJwqOF&A9cX54kJ!L8VW+%vjBPw?!!=V^$WKbQ< zRLO1vkHEdR8u%M=C&Ue7gI?kIY@B25p&(jzd|GE{dJMd%n31rYn%H3GCP=-4=NncQ zu8b;m1B>1-cQ!k7+9NHf{w{WM451*=A@lm_?7(NqnNjj8ECswGGBSy!gOv{=uOb0}A1o0EhucBYOa1VfJH0`U7&Y`cX*7_7A+p4uG>b z{0>++(mCom0gw&nKbWtdAPPnRTk_6Q&%}Z7FYF3{Li$lYhk+g-)b!8n$`3s1CwApU zUW|eMFWB7QP%Di81w+B`6GOrFxA>Xp5B%(BH7VAY0K?B}QjB!}%$)t;xPBHi14Iq} z61M$WObQ^~^K!fw9^l7;{-DtQS%~Xr3hICBJv)F?`{#2p0r;|)*Gv102-%B}851*r zHTzxIjO7nevp<%Ae*b)om-Uza|JdiB`mnMC_&C6JRu(pZmJfh|1L*#+u(SVYV|(H8 z*nblaV`E?;WC1Xr>;SQ`mv%OQkl4#UFUMzn(L@3SKG*=v8yi4-=;fHdx{hD9F>?Tj zH~=%p{POvKUotTO__>$Q1XyPT@SThR$*>=c9pF9ti})O%{g3T0?_WgEm;lH5A!zn; z3_$;vYk66|ync1wzis<3zRSPe??pEWK!g4KSN}=7?{`8Lz@_{IXaRJd{RADJI%fbc_EY^YeS19v3nNEMBV)%OAv?O?8-Az6ES((a^c(=D&CJ2#ciROZ z#|(_D9RWa@JHTX$)0t|*(fzP@s(`?q+FuOWugZY2zOcW5-xY8#uyXuU6|k42+D}&O zFG6*{M8R18K!E=%_>Sf0-}YCcc)xMR|A1vx%&gy9JDB}r{ZCcAU$C>kA#8uLvn+ti z`k7z)h1FsLD1`lAeEmsw{`%ej$?*3XqLkFa|hm`A`SyY92#8T}HKkmTGq@b+LFD2k(kXNW2O^o58E7@)SStwgg5 z0b3*nXm1kDZKTQQN>lNPn49(L$EyVN#C84YPzT31kjeQ8=#r*n5r}CabwsV`V0uKX zl9oYph&gW1G=bZ4%+a~|;oGTjR1vP2%9u61oq=j(Nmv}1%d<3w9#DSg(Grmq4()9{ zi_4F@9MVs51i;`x=&k7mzx2L;f;|6Gqu_Uc^bd1N_yS@7)jj-Iv--o0|H(aM{8zJT zqht+8Cm9+6>I3}t==fLn@OPJqnF)aF1N2n?)&=+{*XsXPKSqE^=F7SNSpHA1<3*qL zWuHHmf9ww^xJd|r@&Pp}0Inhvz(oYOi)_EUddz@=oPYFV1r&7P0Jwwf^nmREZkrYG znEr9R7nkwHyznvejjS=9YvI8)2R=}~C0q0@?Tn95VK-U)FCccz$U;@gX6cN6@W@FOaPxB5E1yf<_n!IpwbKTk4S(cof9A_ z%?>D?`)@MR|IGJkGxm^BI#~k|-v)5T{(~mDV5oBb)O@jz@ypBS&r#8aRxw2Y4wxe%+9li7cXUYa7siv==4-Yb zd8|s=8AxRh@=2mrV|@0=^vU#W2hf>*uf4%v_1G%w*`1N&XlE){L5{Tdi4YvG^L-uF zb*NEcw(ZjNK4_&vL8SrB9~N<7D!1XsqA#1lFt0`bP+gMNd0|+3c9qU*r5fJRVZB7= z87y9*F!a&9RaIPZSV?}pZ;M^KB$i?;5bW!sycFU>G&Hm%nL@i_{@2;vlKOJ(@bm;B zmUfwnLFy zJj2p7bz!9L_Zd7C*kKxzU&Q5Pz!IicRPzE!!J*-Y@~%%; z*=X<=+7$NPg5(B%wlUq#j-lMx0fV~ejat>}P`O3o-=55Y40{#kWKfd1FgJtet`(l# zWd!lazHJ%$`U4+e-OhYn9dW}a^i}KShU~4-bwL>)oLt{~>=D*vz0m`1@S2W9=#;O# z>WVk5DP1}$|K!p#?qB{*e!@RtK)yzBc49? zv*k3T>K%J`r^|L{9tZwCet789zr#U%|s<$$3>pbT;CtBX;h)_kpCL<93tf8-m zZ6Q%lzKF8c9xEb+^tO@)(+ou?A@cYu*T|OoksKqY6>J^EcyQ=hY>lYNTsdhgxl>oQxR9g4=j7NP$QH4oT4b3X+Z3el$+kXnW9?$0 zO2TP1yAz~B;m;(CvM*!EA13slREHr%%xXR*E6Gy`Mm(9?a0@xS!KzzrVyoAzU?>;k@_Hr zOaop%pMPq~5Iv)|$24WnVRL_^t+nK{G3htsS4-HZ`EV|>scw*}ree~NsNYQ<&Qpn_ zeGL@ICiLlas`QG!q5Pmz!1(gn1RYXA+W3%c?vZ_{Gu~mfVa1K`RPm$ZjHmMZsp5g6 zGlJnFxdXH-6)8d$V5=QqA@#rj;}O# z3EqJOd@RQ(b>d)73W`P|h>HAjcpR5FY`zK3Y{lW(jJkH)(qvSUtY1AIr19#E$>H)A=tE$p6ca)c^gF_OH*#!U1sCUfe}M zWbvg3GoXssZ#^040iNSaaPePvd@1|&bL;<`{FayN`qlOPy7iBqf8F}mwLkj&XZbJR z%g>(LkD_wF&%^uarWRHOq%{69gapL8|BDeM!*3~we;1ega{&4BWB)3>@cYfp4hXCN z{QA!?_%FZUFYlHAd{6)Rp8h}lANY$^`mfT;KMAb7B#4axIi8mku3FZ;@{T)s90zTNC;U265ez|M$Tpi zM)D#8bbmiznvn%CE|wBEYO4ByR&d%C%uY;E0qZd+L} zIdQm|_sFWF1tO6lprr##0wGK#UxjdIpHvAF8LN5(0(bQVE&!re+beE=d)&oOLdS;T z-aG*H5WWlxEc(!Hw7Vx$81O7JQKr}q1T>)2yKO1WDbagJBt3-sG3dK7KU5XtFy4 zX{MEkwl=r=lI>y77|#ykm%|sIIIvl>M@unSEUC>36mIfFjb&%GmrJCP2Bd+efy0mWacLL=+lGzK9KH6n0d_sg2sq95NACIq02Ku`u1xe5@9ck zj~}_*ag0OR5xN z6au_FJc)zrV{p&hz0d5YpDt9f2ST?_Ik@G7icE(ZTiNAW+$<}6)4TH=+@6a=pXm=} z)H5t%-&|z@u?#_qE@gvk?(q8NA_613$$q<9x!(>z09#MTDB!GOzsUl7ysxkgy^S4> zyvN-^#*{RHy2A>$Shs*0^93RSMjHS{%LaDzdrc3j+=!*tdKLdgu0x{@| z!1$JS4i=gpX%6h#UtAV+|1Gg8FgZU2I~=X=@G55`)Uhvw?yHD^9bNEN;0wf8daoIU z{5D@JiNY}Yju3(yA~e0_l_f-l7Z$WbL_ij38bdFFqzt0WQ7=OJj?M|DDI>uv) zn&$5vwA=$J>0eyQSO$mF13L$G{XSrg#TGXMe5dp7RJswQA|Sf!=oIXh(-Q*UFRP~p zl0O6zPEHUO34GoE_BE0yb+-sBVUQ??d~hwHmMEP)4A$F%SeG}jVg9*!uyXZpWE3I8 zg2V-__|ftxP9_q;$mPMA7o46=BO>97`T^8Qa)p z!-ReRe!NRnkDFmF<<$tMB*QjP0h$9olP^}!h<=r-TN&^S{6VmhKG+<{q4y!fA;%%1 zGwwaQNN@4_i0yGBBrZa7Fx6+4wb6BOJCsJZR#a^mn}D01nzQ*^WKW)U7#~o+s4Q|( z6h}zsKwSY4J*FK0F@Z)QS5a4C66ER7nO-2G&# z9RnRR9iuP9B*`q|@dl9$f!)ZPVm)IYQXZ83iS$U;NV}5e-pG-T(=xm{6F{abCfy@x zQf3sX);#~X2{&j)(V9@75RR%~9-x>wMNzC*tY#KgTU?vvSnXKl7=Nj>Cx%rPQ6G^G zt3jr-T{$A0$^b1ep4}*`nn07_K14dijwU#r<1U9%Bs^tP^f-m3hBa?gol~t=tyFDd zC}IjJmA)-3k()RsJ@(%8B>4@UoqD%gwSm}hToeVBceJ#LdglX4T6{mItex%GMI zdCL~pCILk@>LnToDkB;^rKWs}@<+-A%4$>?G?_QcD*lO=i6DtH6nM(}3TaBpa@Vrb zO3R--<=oVR3f7C_vgHfxm5sy`bIm^uDbXnK6n>AOm2k-=AE(;oxx`{2WszaYQ7>2T zSZHmIau0FObT9o*4CfCnNUWSEnWtg!PC;o>g-NAG?V=rBJ3I&NQ=LqyiiNa>2$!Ts zx^wXL$Eb{`Wa%jBno&Wm>WTpCH0uw?Ry+~-f^>2xzROZxsw)C~+8yH0?}06K%{p1w zb?GZn+os$pY|NG>^aSH_;`QF^)vOgEeHr-t=4(;UZctT$UErDZhW3UG89JF5*%cXr zq>-db%66)A>XUhaO+RBPV~dqEs|(wT>9X0AeQFouXm!BwvAQg^Cr!PYqlRZ~ZS|%` zy{fdDnYyrsk_H@85vc0cT6w4BH6@aa+#q%kKH!)RS-9+&lUk z)yrG0RO|a|>bnakWE<$~%6r#yT1z~mZS!9JJ>3Q$KD)`(7B=iyf7Js#t&>#pW=Eh) z(GFBDUE^B=TB+KyZg=lby_!AsR?yl#JP9hM)CV=@*B~BRAFgkC&S%eLE}nUTP*w?K z(N3AinCaOn*+P&}(WX!@$>um3Np9bUSclMmtq7(H zbm-wCu0+Z~fXc8kc<{}T)DSsp- z;YKk>-bQ{zjwYcc2_mf{+lb4HmpLvSM|+gKf^rJd2+G5{#!|wvVG?ALF%~m9tNvbnRpVkPv)Q=g*#=)1Rae2KLgV6a zyz5?gRfm%e$AHt!W^OsM!rne;FggAu@JndA&j8aP)fbO8QcDSycKfG-hpKXXjdU0i z=v%O!Mazb1OA)Ib>ys6|c7x|AnV`dN3t=+hEn$K%wZ7SQ#>bNN(x4AjT=x>x67a{} zhwDe!3rCgrrp1nC(tC6GD?CR=m(|_XvmSZZ+B7=K+BMOYGL1GLy9;w2I<}v*?)en^ zRhEnGE6mH4OP1w$TztKBPqR0=lCZbZa?@^t8-tH$+^6bi&1Mq``f*3uA8L7P+ixuT zXCvXD;e_D`qEDkDaN)QYCQYa3<~~j-PQbFkq!&gBgfycS#m3vRJVL0rfzM|A1w*bAEbA5Q78g&~LJ9;|mr$8m`n(p6=tkra9U)e^IuE~8Ldqe%R)9}HO7rK`fpX$TdjLrOtchCO29jSwKEzn_zQFu;R?Zz$lgLA7- zi?b(XtxWW&jE*ks_O6?>_s5%UA3f+!Oul9LRPMe0uD3>9EV31yh(G&SbYpN3vNez@ zH#^=={#FJ*qN+dhIpJwC`0Sx@vv3Qg1SK-wIKHs(TcI_t#-rtf+y2Gfo_|)pPlb2R z{d$WIuFqb&8Vl1?+_U}K?7GVNr>Iu#>t>G`pX;;qO|}b%Ae*ffe6P>0v-iA*kG-DT z5Qo8G(e4B-yly`3jWMm2r|CeTKsSLG_rHqv0g`_InA!RF4ktVNzr(+oW340=R4_lE z2)k=k%@j3hI1i7u=~)vY3)LG{vw>Pm$`uGk9wb@rWy^xpm9-t)uleT-o4PFIdf}kM zm?Dw&F=fy-(zB6~q|X~#>NHRAGNff_NMoqj@eW?Bx$!<++;7P!G;yFxO}?L{ zbe=sdUDmAWs5Z9P3qX*Kto`mn54+U?Zn?#oNNProgV~C&x@Vb^ zD-F9mS5~z_Y))PKNuWwrSzVo0agI8wfb&8xr=MD#hP5VzM?LWIx|uBe4NMT7hH%wY zAB_fy7$w7E2C1{iMrnE&Sg}|wbR9soJA-6D(L|d(- z^p^b1UVaABw1sFgf8Y-J*(-GygvU@@ihaSAJVNznx*)JC8)u-XW)z@FNfn3$R9cj2 zN?Gh(pg?0HD0a@yHMs{cu2g6rfT7^F7nbxF{`xga!20GO*x3n0KCt|dKH@`!AHNTG z8nd)c1A5Fib(5Uv&v0#r-wJ0xJr3w)nkw`H4d4>H@Hai8;y$p>JjdU7>NgG?9%VJPQH-MSmkQ~D@|{5ryGx{yC=j3X&f4n z)`I_{y@j6m>42<@ZwMhcbEE#m>)8zoa{^B7|FHKKP+e_Z-zcRZEunNsNyDG+?(PQZ z?(UTCkdTrFr3ECVL+K8YMnFQ5lp`o-*DiL|5`iNTyw7(zd7eV zTI(FaSG>B%pETAG)qO=iL7ZUvhXtc-iH>*0lSKyleG0z|NqRRZ9*nT}6=L#a5-OioFV&bSWYReq>Xpf5K zKvWyf)x#6wXi^epR12@Rs^%q1-ACeCpPRt}-!H`ykHHQjJ}|-2)ZoI0z#0M^Fi6mG}(B z;!izBbK7c4E1Z*hH{gdj`w9}goIE~lt}`rg_k7r}9BpjD$XRgcKo;OW5`+_W>PGX_ zdA+OmzC&s4m3GGL*ta`$V4*@O4mUFMHK@*iE<&OXpeXtOu0>zZF@K>avjA8D01o?G zIg!gR#_y0qDOqt!DFuG1zu=>Pq?f-4?!DBZft{all3zOXb-no}qziyqymo^h*2@3j zgJ8b01^l|hCEWKy>;GxEWcy3J@vrClfr4iKULWJSDgF0-mdk1x*Utfcelu@ebC3T( zy#9`w2R^GmQS-t8pjDAph4!K{!v!kd!rBV>-_lYSfQ4R|J}w>K0POV&1Al=={e^>f zG_-dx1=|0>%U)tne;i!lPA`!1fPefKKHkvI`qu=Y2GRXMmR_F&)BrZ*s=_RQw+1lI zzfXj}SyB`f{xAcWf0lG${Wa3R=<|mH1Au|}AFNFv0L%R!T=kmD=8C8j_tFV_;VFdW zL`*t4P)}YR6+sj;6DSgJQo!DpW=!5P@bwf*X+N3}T$rF~G`l+H({$>zrIhIO^u-DjIU}Rh*6tjc zdqpFQJgN1(DTR_U(It^*#LSlV7U82JX{j^_!IGf~O%PQ!IM{*uar73jfm8Ds{<`w; zm0e}77}XeU1{kZRkB>F<_|Wp&%Ov65C1BuCbt}t`lkPD*in4X)ygShLk$RJ=f@)eY z;Gv=-8CEq_b%Pa~#c}EwmJW-cUdxodVra_{Li-kh;bc09gNFWY| zn<5X|utJ>zVG8+!Xt|Ncgy35PQhCn!XCF@Xj*jOD<{mD#E#P^U&QElMSJS=`!G80w zK_NBkl~nq1MJ~!jV>%h<)Uol2!gSJ(RcgI`EXUCPRIxD%T15Xap_~pjs5Z4a%Urkz zLCQEc@=VWrYaUGh)K2XHd^?PwPvksyB_&~sQY~n79tWKWZ}{bx`e|CFg=jk&sN!rI z2hu{A=&d`HFJW^w!e|pU3#+l73o`rCO-5Qg1ZN(NAo_q#`|PbOE;U2)L)-k$y&W^J z2s~(^!%R7-41Q+M52LdjTbuXMbut)5twg>BtU|w-MZxdI(-Ips(bzzc{8F4I!E9t; zIk1AvCgX1;D5^Lc&k;L98W)b{pPh%5vM=j~{hEhrv2uaAScH8Nu3Aw|O%4-MTT5S? z)+1=4+9qQxyYhLjUYXu#l#|;63)Py6dC_rKBkN0;>AeCHF3G0hIEM(XeaMh93L1Sc zFJ1EPU7f}Xo1@yswPU@OfK&(G*+OaEZYG|+hzAue&L8c%^**$EwmxsO&Jh&x4Da!q7s}Z(nJ=* zy1F~Ea6)o_X6lIh4Z`Lcl~f8StWP?U`i*`oGalC*qy!>kg3Th&trMjE%#v2u1SG)rK@3eM1g zFHoej6Z)GeR~3WyA$!t@@WV~i&)i0I1<4J_I1UdZla~(eWyNeA?wl&m*?yXKq-lQ` z&^a^{TA|cqVdOU5uh=YT|49#7lW_5*%p8d_1~Cnam1FN0?Cvri~Xv`zKZODXRs z*y|PYqBY<$uYI075uEQB$Z5&Ky-OF;FylG@wn+c6hD`aaqN&wlzHM*49j$x+5YeaY z$zE=8&Va1x`HaARW>J&2*IVFo=|y;VIae_2R*$r|Vi?@TlNzuCoF9!J5SQ3h?tU>b zD$jpMSi;#vksuK{+`cR!k3_0sWh8)N-=;va9i`%nk;l1xgva_)5w)#J#A>df*3HDa z!`J`a_{LYuh~5D%=O9{R##PV$XX_6`BjMQ0Kvj5_7G}!zwU)9XHuvQSv>*dIKj>#j z_0woO_T{F~WJlj7Y`sG}LN^G#0PxTP_Sf-oo#;s(DthsbRw)L)%;-8L^9^s=&0M{q zTSO$n>3->+=#xlrZV!$gjV3tRVUao$x=(vb4v93O(M?1gk1nA11!#FqOE@3-+->ch zgP$^aHDAi{!I;riDcH>tXC`B#QKzGuMX)2^=Jv5_+0_1)KBTkv?1%g2PC%AVGfuF| zj{VYXXU&~@dzKjvtA(BUAgJxgwa=)+bR#Nv$Qea9GoFc=yx}zPwTPLGW1|CqA>tL3 zOeM}IVTyn3m;@hpqEY7tPYCgv>?;Llz;l6?u`)rVL+eFZ1K9>AJDThhbs_c<5b*wc)%5IzrT)gEAR>fC^_%j(w3*Hz&O|}tlCyo?^ z5g?i2A*462(sEJTduO+%Lh4dOd-mYI!Xiy{)S9h!C41M8M}xk4DQRs|srNaCss zRUhAy-t)2%5QslDNm@6v7E*x2CJh+hjg>#reJ{~odJpZLm)@(SzMpOBC7Gp~ARO=rVS<#Jj^}QsVG+x0@YJ+cc(6c}+h^l?aD6 zK#^p@_DXSl+a)Eib0D18tqBkChUwgnIibL6uIO|*8vfjs8=>4`5K=ds&$-B=lJSV~5kS*xMc%tdvVvNh!g znwn6#+eM-xeb$had7O-60ue)JX8yP?^a0TjW9yWGcs4Hrb7^Vc;;M@98Ko&@y7yTw zxGUY3HEmQlmbTm-LMC)3;!uk0Ni$dGz;6?7eqLF&u}!1X(=Od^pwy%mj=^uJkH9!R zUs>O%65NdDxs=rYfhhfV3^@=0_nRbrfw%k(DEUjk`yopIZ+k1Ri|E()FA(8ZxbR;d z|eFHI?H$&t@*13(`7{F?`?kldV%1+I${IR*w@cr?K1+uG6CUxj2Bq#?^}i+ zczWO%1YpW9T3&2fE`UH6p?(+G31ABZ`7r`Pet<{u61{!V8<5nQf#Zwq#oyoW_y2U} zJC&|0FaQetrvUy#fnjC47P5EEKl|M?3q;XfsVi62(0*wcKOD8!BXH^IzB_6`z}x)Q zQOounjq<}$3#fsz5|Thvtdtn@fAH7-h+hMgf*W+rUz!HP_2O}Ce|JO!ucm7wdRdc= z;M!{fde`6I35YHRp7P4~3?S~Wf{N*Z5X`^5)1?devh`&t&dYa_0NzRd_gDI%IWw^R z@IEu#^fuQtXSN?6XHHJqp8%hW%S%dK4jKQoNa7y_;!N%A9WK;Q0(#Kj`22FJUsIUr z|6aZFC(;LqDZTh4{2cBde9wFtbpS*&u+aZDtF8rt{@LWn0H~6`eOG=1VCxw?($#xp zV6bd!3#8XQ7aktY$H-Wua^llTp1u$R=bV=TK4^p?kN|<9MP=_ zZylQU=Jsw?wU4PfvTE_k>2g`f`j5<_;fdkV;i;+n9MQtz;i=GZ>=nX5aj0L=JWwS- z^7g0_KB+j5=TDb=M`Ojy?mZ0$s)?jm6 zEF_1uI(8+2^$Mvige5TE@STN)dSqPYa=tcy^10D{Bnd(;nfM!#SQ~A(d+9 z4{u!Ei=6T$^2=zsW*Sdlon~ksyx3+(uMI$}7C2+6N5XHK@(dO+RDh@#KMZHu^)Q6< zVjcLJ&f~ZXQ9TzjGP!b(RRu(M{$b%=yJM95J~3XpyS_|0i-?M6-NVmOqa-ewhI%)<(zS$b^SBYp6!}3>bDsw@qNPoSbhi?fUnxc z1o{;b%E)%fBfl&JKorYgV5C5k-=@d)$aWy&<>m=V|NBI|W^MZOLnj=HD)%N+v9h@aRaoBK z<8qjO7&OAl5n|J#jr|bwA@x~Gt^#5!1j3?IGAClhy6}AJV2x~QgT^EKjPZk*t(p#m z!Tb4xrXy{unoZtNnQ6smt>6(s5F1!%P62os0iO3DAZ;bsS&eB3b3GgLo)u`z@=qY0yE;fz@AU_T#qzy&UP7U=j6u9H? zpsd<_ykg&Q*0R2-WXr0)*jcN7+e)k6(bBZ0e3o7~sP)l54D|dYpTI}qM7u4i z65G(YMD!kXSg5a4m)UyQ26m3WW$?fo8uQV?54d}NIj8_6F3P)MH6@-d<$glCPP)ua z?ivU9u4~z7 z+__&${$v1$QiyV**xj^ttz&V~F{{t)u{KGfnV=r|GsS}3c1bxRHx)`1a+oihar@$a zgN+q>k9!O#Vv9b8zWiE*faI-411f~cUBeYh?;6=ew?H{-!q-QGL-#k&y<03l#HYGnefxBaFQ;qS{FAO`HAmN?{Si$2 zw3JW~KlOX7UgK=_6x>dx@ft~zQvs*3B#aeU)^LGWxi}629v{DUgg9V%*YCLLqi{{* z<8QZ(EX7FhweP?^wWQ9ex-+B8Bu*ix1k|l(8M_z0fQ@vg(Wt1yYAMWFEY(d>o9)xe z=XOT>yF4roMw^UZrRLmFtgAo3bZWvEJZc8rZgRzzl>Ed?O$Spt3v=KV{>_E;lPOyA zJC3F&Z$B`A<4H-#psTPI7W$a`WVViZCNz*WLu@DP+HHCh}3#_;$WXz@z?d zMtg8BCaV_|i`uz@ujUz5S^{>;D&U)U0x*xdOh274Mp5g^Eu6h`2@n^-jmPxnc7|z? zJccZPG%O?1=D{uron;~;1Bcln6=5WRtG8K|^ED_g`OD&@@0mup#F%P!)0CjHD-$(h zRN!lx34{E-YAcFBnH6Qb08fFq+Q6A*$6D%B_WF(-5w6?b-Jx9^dOc{dWqade;}{fk zje3|o8Enbnx@6p9KDAycw8&hbG6Gu~ME_Q6Xsb`n)<_kP$?cJzjf|S@(QCwtA?23K zZ#U5miseHvzK%e2ICyaXP0-uKhAwoh25@KM;c@92-PefeT#Uh;0*I~4$>p$fZRm_9 z1^0r?Vg$AvRgrrH$ByT?As+VxX-|8;cS9mAe%bX`!v#!i10vU#OISme8e%2I; z+D?QsAe2T?#*7-2H{Q*Lv#yiYzG#6E$7@LbEHY0;N9S=%1M_o z!+yi{4ZNbYHizjU0_X7`53pk#CtTqK{mfGsGgyi zA?N#uogLy*;4EBavP#@tOZR;Gg?thil`TD&b4zDNHoS)+mJI`?ce1B&fdiA7g{UJB zCYuLq0-MT{Sc?RSjWpHiXRNh%R?;V1`;^YBc#it^J|v4dfYd$9eC=4q=LKV)P0lo{ zOcp81k7nm)L8Y%FhC2|PH z2G?=UhAkZQrm!vHIo5#^;oH}W(n8X5sK)eNG|nsUxjf=rU%x8`9xHQ(2%Fb@sw??OvWz56ON%$Ldxe5MqZx(72SHKHzn(e?lmE<5Ka@Ec^6qzpuP4W^F)B`3a?i#d?d_ZLY`7YZ%LemW;F8CB+7T zLd>D|-E$L8BUY%Q{BCY*V!MM)FAX5Ok(}z{6BcO`Zo_GQVfk_$kkW*e(R48w7d=mS17b|JzFafAjvAA=yB6`il_hAJ=6Bvg`cV zzu3~#UFdUw#((|fpZ1vn<&~M?dV%*V8TUKd_cuwKjTX=;|0qT?(EVf8)W*)#5=f$D zVQ6`gOXec!46qO6pt;<;asrxK0Wf2GL;Xu)GzidN6^N^Wyv_j(e=}VD|C1UfDJv$4DuV-!9@5$Ns*@xJLr#V?luSmOvjG#2#vhC6IPvu4@XSYC zCL0VaFH4FeEYu>bCVuj;BvqVBi9psUzwI;bIuB?BjoDs#x!y9JTcd{VQWETnc0Uw`U@;xp80wC0KTA3x>ncJ4xH;b8_$(7v~lsKRhx#4SinaoTfik$TGqj6~1~%WoXs}+M-T}P1Ejua75eMik1)S_fm6pmO>C4yz(+oDTn zIk%xgEcf?{q(LBAh?qf=cGfsy6u(0{gk0*+pi zED60&tk~Vhlh&Al(ZPtgSiE<}C8ZAQlcbQ7ykx)u$o&j$)y#xi{NzTxh9PzK(L_TO~4F`4I6wJloQ8d^ic5WL}XMtL_4 zn0kg@;F{yjsA+!HX`JL$jQDSb4s3A;1>Au@<>OJiA&SzBBfpc?`q^7 zlG=oflbCR~pe+?uvptHm*)!!d2lShpDz?B3#ny}^BU=W_T;G_Vv?6IZLGR6)?{zwr zvEA31`<#`YTCW$y3N%V zM2NwSZ*04-9;PU3<&a5`e6XN>z+qrE%k>|B>3l_}irw9xj6v>A?5} zZfV)ub4e%&DBRM5)8~?aL=}**XL!7j0AC{6d$>LB+1w^yz`j zLciNkfe^93qz9#EzE~Nqi$I`1D*^O?q;sPPbeWiHP*q1ZsW}5D;)@r0ZzmKr16l zV5DndZwTy25dh=D_x(^oihz!W?z^xmYEBzm&S1B<* zfOtZx*JyW<;PZFd{atzm@{RsRx<6aL87}>UH)wAxfZvA=NE`6ukDdWI0Nl5X7x{BQ zm;e1X@c+n7Lr({wEq_xae>3MA0MKv^z?|!DYOSG44%!T^37UBd-f_$<7a?Z;;N;g^F^=tpt~njYQfctwsl4P zl}862%8OXA#(L(!)sUB!OUX8DaPRvgA;limJcQ(nA3%>+WJ<06wp*4kx*nmtgjqDE z2eP~$uYY1ziE;i}7IE0hWJ2L~*of{}ZQ2&|)5wa+ne=hx`kt%_HAl<9G`}r*ozlTvyb&);hJthfD6_K0YcF(b0bmL=LyW+i4wu|w#2zbFhj0ctMX zdI)hA8zDWm9fMSIXWrRE8V#O&NwyaJnk<5|1Q-bXQ{q4*uw})Lu*Xp!KO@x(pV3FX zL;YwhJceKP%p}Q(BZ$#sN{dp_Bhr?#f;M?&I^*+`TU(M}mKT|hT9Hu8`0?s`!@VBc z-Z#{t3!C$Z8t?#lp9u?cd&L-*K9XY}-QM`jq4CKG`t`@?uz@(}dd#SM5^4r3;a%n( zg}X~*x2(JC8yROGyC%JF0Xv`RaaYnk$83m+U7}47@On=H@8V*2JNapc`efN5p z;feE==)S>NEcVf12N}IO(U^q!Lci@pC0vPkS~kizf+)3-`66M#vms_K%H5N3tMeTd z*L>G&ZqG``1E%9si6uc2(j=$e>F%?`>9iu;W-Lr=|J+l)B%Pp<`(FbZ@-dw3QjHq@ zQ&^S|GMIRtJXNmSq1Jt)LEy>_J{S%Kfop?b192D<7Xf)W|43pTFR8y@qBO=0+jJu+(tvVD7YT%yuqIi8oa9~^{x7YCaWLqp; zu&X3om)@R+$JG>0+$DETK0(LD)1CBs5q0M{@H1NNlgD-v@{>m#Q`lp?eKXI;SYTK1 z#f~jlBOsd8r|&-U0GFa`el?)?uD6aGU4m~<6Um-C*i|^mR#Ob7G7F3gkMCY=_M!o_ zXnz4abYQ_Nw+D8PW)COvF@|#X!20-!nzre3tKHJH&ZS6>q4u5Wn+Sx3*+~}#P#3^c zIiQH+*1V(Nf#%;T6&Cg7m(6kLDk+p84r6aL4rVW?^Vy+qZR2~flr%9jvW=H6z=J7e zL8>IRATzJjiK{g#=Hsh?!qK9}5p=Ll6k@m&ZH*^1HJ`m=$m^E8#|cM#sN@Zx+3yoU zOx*aPzNW`qx0rx_X-9gd#>T&n9Bh8=TbdgDI?!_f^et-xM|}qaQ+pc=T~}IrM*vuT zVFmed!ou3vRA1LZ*UI28XRPhMpZK%Fb@^@n5y)+Sk;(T0F>n)l;HOdMfAYcqZsNIy zR{-)%1IdGd{4&520OWH7{bu0-)`!b==@$e;^4IcpQ}$q>fY}w&pXJ8v!Pl3^eJXDR;fRN|mEC!$GLzkH9QPaavMrJ=Z;?CVxZym9|Z1mpdwCDaM z!Z>yMBFsK6#`*5>bgH26N)1&aO`DfcN(h}BHcGW0#axl^Zcnhyj}FaeTEcz4+sF0^ z_Nga#ePZ5pf(Ej+MKpCp8JkLmj_n}rd+((Hv`i@SmU-FWHnC$BCc@y?M{OLXc+dLl z>TcWKHZEnX$h!NC8XI#a4vP58T>ag|1r_d+YR5|NCql$l+I}NQJFa`JIN7UA%f#gV zBn{SYI5N^Dl}=&kz-BqD?%c=$|45W&xj>0rH|74e0y9Q=i=yfR4%N}^UWX@+Liw|} z=%n|UsmY08t8(zq9|~EZcaBa8=2xWkt@p0HAm6Ee!!)u!Do>T#sCGmo`Y{OTNpiO|xCO-*a$b`2hQhp0 zsyB&(3DqfkG0mUTB#y*aBzvMBUteO)O&k7+sHbRpxxy~4X)Q|`t)Fr!;dnO~T@MxI zU<+k2{tXnNT>jAgmFE(V8LJA$)<&}$;$hSbkA<*?Uhdk-QiiTTJMA!IMbMk25#~vH ze;x!GCO)Db9kYaYI;ZxbP{(y-;tBP@y$c|4I+coMg?quQ=N9fXdPo+UZftT=`^t<7GVx->zn zde8FZ8zZTzB;JHV1Q#|&>1VQNETKoWZ3<#(9`xtU@bFAhoVvz+1G^`+JF7Kp?o(}; z_ZK5@q%rlP)6S2;f;~_5)4mAOYYh6REI0x#`gw{9OiB5ghRpoO31G7jZW{)iVp=7) zg&FGC^7@)5<@?B2;S3$|1qTR^vCnlV@_Ez6&UzL=!4GWHK z`~+k}$#W@3#HK+9r2p@dXm`M~d>8tn{DTmX(knCN8+q}Oh+!(53k)t%R z!BCv=O~_qEbW5o@*3>@Y^FwS$hQr&bs6?AkM(!**M2UUdww#TQ|e=v81htryYs!n>^AJ-J6l%H zhAtnN)Lm2WM~u02PW@y~vaCDIeU2ngVeH6V_EiTbu_m!_sGPfXfQ-2TW8#iCGR`$c z?Yik$nqTHJQ0Z4HGXe(C6|m$N_~h^5Lks|@>o@89ueP&m;1h=LIg)Ef8+>n|OXrIsCI;1Ofptw`&#%*-Hz=Wm@J@$U8Guayf+xxi|;Ua%a-~;s}|1 zaO}EYXFQXuAv_NIV2t-9XuI|cjju=kBR5GpR_i+-%A)yLm)1B(VP7zqJ`ZJyizG;X zS8Cr{_(i}c@9wUD3)>KEeZJj6mwQ#|Hg8jmkeye+Y~lIoVwhLRXFt@hQ0OnIRdE71 z8`h4B$gW&y ztUq?6?y^{C_42p7y`>3FrD}I=D5eZdn(HIIurwr3Sy|jP87_(UkCx{fW8$tYmKU?? zhLAXhABnTBt&_iI+Kubv4_qIBV){8zZghfN&dwVw$iO7!zf6+)XR+imJnehepG+Vi zC8nr&E$J69JO6nqzwfN_Gm7qp{Lz0)!e5`7Yl1lFnwItR+UmMCMuI@K6+K-C`>U&|>k8`qldD~D!401)5F?g(EF#I>5*={s5)Ss1#|8dy8%>R(nrF>$mq*0poAw9s{QptUvzyyE7xcECf>I+$7j z3F!eT_cEgOstODNknqdcPS?p0aFDUm>N#3i7y|WEbd8OHl2KQii?T6>78a&9_NMl< zhL#4p_9ov87X$gBt$_>E8UZfyOHa75qp8K^WiS2ZKaZ|_=9k{K3pA{QiM69WpdkK? zveg6fdi^}OA>{V*aetk^y4177~07uL77alLvtK-o0{>PcIfS^?wA0;2t{6x=SON8^?Hw=i|3D2N6X3U>N4olsfa%l{$kNRU zl)ApG!*fCU%d6=d8kkyG=w6^9ezpgm$5Pi`-_hdofmm5Degx|I*a1B*c1?6GjIQqR z{iHnsJ%BFdyPO!bd{=klyEfVQE~gSL-_KX)yPRNrLbL)uZZCAzS?H>>(6!D&KYNK? zwGq2&BX+Hg*v~dX4konHSGSY7YA$otT;^JHnePpL_Ob*l(WW*QuCy{tZLs&v&= z=~`E%pMBJ>epEEEwzHxI=D#H{NA)a#B12bwb+3Nbz1A17d;lCptNZg3x|hSC3$W*p zVE||fFc+=iRcFI%odGg^pOB_kZA`D)m|kmR`m>E8Fbq~#x3j)#Zhh6<`dV}A?+t$T zGB9;A1s>4)Y7iW+Iyzo;biCHl@n;X$s~-U#1qQ+O$Laqd99^?N@S8f=%Np7VSX}B= z{gu2AR1fAbi;Mjsz;QogPOQ?5*#8>@cOkOwxC!naSs#k zvx&PDk5kYvblG8)oHbI~#=qDo31Ql*pv4S@hLS$%&{K|fkQr<-p7c5&jp0ex?pruI z$Fd*@eMxKp9|?~uCF}uK_0oZEIhq(!-ny4|D}%JvExZ(jE6N5fA5RgZw$7OQY`CYR zDrh5(ofhgyPzq9#C6xVW!jZa3EvSQ8{|SR~0IIimjbmNfM@lQO1-=?s-;{%}!na~7 zdU57tg=f6 z=^N3$a-){h2(B|oX~YfnLzO)#ezUTC@!T7Kj$xS)XxFqs%YdfrDTT6~D14$8i%lFB zVzJoM;4UzU;6wTwh52hHk^dsyKuj!upqnqkV*+@=`fpU5BaVWFnc!&q50myjza|Xc zN2CBZ0`Q0=CjOow_X`8-v-cZ)V8h1)0w#+Y1kc5vJ(+QoinL9WjbAPCQzs_)x{a1k z+i2$(BVFW^_D*|w#=gSjt9nEB^E*OMn9dj!=&^mQ%^C7`5E-34yqfSNI@AWya&6>L zyPkB4suZYhwCj2nB|=LKaBon(enke~w&&1yT5v~5;$HZh&-UuChaB*QI|h+51*oxK zG>jPLOxfW;Z=3UVBqwm6^!lXkj;H0VD5ywf$}(jX;%1$Ohs7d4sdIkaMEs#y*?Et5L_ zBPp{v?`UJ92o619sE1032gt<0&V(nZ( zQl5@)kw<;cTp-@<d%-@_+~i>l@?oYx~(WXhL$3Mfp!RIZnCSk%o?`Z z^I7UXRNYrols*bAramdNWKK*(bGCs9h3VcH>fvrRYq3%k)=&5N%5RM(4TmYf$Dalw zYBDmt|6q`(>|z@@x(xzslSfFLM($JS78f$-ZH9 zyn4Z!bCU_L1Bax*S-FP93}KT z5ZIcZ#}>x}p%j*KJo#8h`m>brV_EKoRsWgXLN*Hq6&?&)*dn$t*}b0c zU&H3K4MUQqGck^FXFTuOoakG~!@KoL*9*#h{vE_% z*b8tg_SxK-DWhiN{4bdc;zaIgF{o;we*g3*)6PitK^^42E}1Cz=W8&!AJ@Nbc2L`$ zU(v_x&i!f^KDaL}5x?P`X8Uf8m=NVb135K!o}on!Xe1Q$^xY9I6yK*EkK15S-bKl6A2p0lA<8^_>j_>VcZ^8WR~q74`MEy?)M zXm;B@Vb7c&h!dS7Z0$IrM5d6uvx$iJ*XSE`uAmEFes3*4Ad`L=V(q@J3j=v#LePq7lQFF z3u;->TK~+m8zM1=K1G2URPjuBcY`rx?atQ@S2*80A7!0CR>-|d zeVweZ9-H-mh@0$*T%v+RyR3wOOSWt=+;VC}g0H5uU`=X^oBvB*S5jI%J>oDT%0@m@ zPlJ_RKSSTIg*IpLoS6u3+^7sBNKU*<3p{r!$sU=)e7IL2sxP6|AI=8y;;@`k@J?eu zxb45-3Gh+Umkl6U9gwE?yW#A6!d?cTy5PSQ9X~qAhoZ1WE=fM1dxU zXC_Hm9;`4^VO7Q(X=}{Lmoyy2QdGmSjQvVevuN`7gMHn>deToI@DsCZQ#Q-?$O#)k zHj5y8>21(azd?KfswTh?Mpj6Z2p+1`0uS%ARv9zAHIAj0R%9-0LAK%Cdfx; zsf7fHEU>kik`=l|29a^QY`39&Xn2DyGY{OsFilLE7@U+!X~cGstPR##`+Z!ztfRlW zZ7Gb4J+`FE3|sV8BBS<`p5a4`w5-d|H)XfY9@tl)woe|d9t{}@dVcpq?87mPr*FVt z6sXkQ{dlzFM$-6nKzlx|DY`ei{CF=wNKH>U$Z^cg*ld&m$=F$Jd$zoEaiZim~MzojFAa&m!}A`bo~61JhLp3}atv4`$Z*mB8mREIDua*PC|`iG+Ukx{Zx9{Bf-`1o1F}nl3J4@ zoA_`obnpT&&;hLd*wQ0K)!a&_&pU$7kw?%d<7nJuZIoEN5;;mRmE>*A^xoyK6F$aP zD47dUEDbeKHqS!QdMho+d1uMhEMnUw=lPxY9FfK8`)~8VqFRmGQjM?y{=z;j4#a~! zNfHiJU(lNe?(Fg`>K~qo8Wotfxk(+5#9OIImxpxW?s%<<<#;u0z46RvxIYsA)%LJ5 z{f;p-={km%hrbI`t-ZVnzqQ)XOC6o&uF2XjTq@2a@(%?HoezlNVuH&aBzu}YFenz1 z?_H-{_NLG$g`hu79t`ux9%G_%dtfUC2uz*$yLe!5U|?Q1QslZt=)Xu2=07Y>PvB5m zfzRBba-+j`o1?|?!)n-P5rk&iK{3jtvrwv7eoL(VWZ>0-KBHaZ-*Az?fJ19ZeJxe; zyQdzhH~=wAOHG0M%$c6I%3Rtyxe28@k7V=hSuea4_C%OLeBu+3Mmz>W*t@d>yX}tT zohGT#2R-zk$6yD|8qNI!c*M|!M;YQ&0xi;17&{8{Rq2(_=Hj6y+(0JN6dGX^)>sITRgq!dR*@Xg5Xpl#EBI?@-pf^7(u?X|1ST1G-HE z4`z>~ljUQg7^)oR%usal43}K#cn$WCZ+g1Ih?zuTTap)PAR#$iG~=pzFFs-3tIS|& zTDP5Uq{cOi+J8}000BkSZvKRUBLdU_J5I=W@BJ0`F2xM8xGsXFWK<>t1qWKi!iRqLuVMb~}bY>Il;#cmwi?v0b0H!y`mQqFKal+wu#x47E0Ji#)ZFdQY??!V{-`sACDDo9b{Ex}T;bb`*tbv8<)kGn zZ95~zcF#mGFbiHLQTMR+^g*yeoaHbq1V-uFua8p3X&W1* zzyT-8I)z<-QfE#z^F^yG#O7%?g~Jndydm^Dlu%8ix;dBmuD8$R1bPKsE@)NU01c+e z>Qiwet^OUO0+8yqC~V^>G2NYXoqI;_f~*bFH-M=nsstZtPliv)4G@}R#Qk6p<8)q;X$5z!b|pdyxLM7lVFi) zb^sAxxFCVOtyOcmkp}<627)ID7wgI6MnKt#nn)gtG_Cq#==E;agclx2m87~PguE!hC#W8h!KCQ9i z2|-X2gJ)5OzAD~llA)90Enz@+H+c2cfDwI%WAlZd*eZ)m%BtTBQyLY4wO9O%vnD+w zJq);2;fv~XPq!$rPDVt7d~)(%rVBgKv)U;6dlEkY_8Yiy&)e8;$ zV8o!d&oW@`(8zY!dNZFRd=`o&!HQxiol&l9Tt>q$VDVF#Ac83=U*$(aDXM;^4%;!};ToCv!+1|8_(ic8#&Q#tgc25v zLRq4X5k9~2Xmxbkq1D9Y7n+cZHFij0?Pbk`{g$eN_ij%!2ng?77Y+8bB)d+HngHQ4imq^cI`VjM*4Ms_nJ_|(?amjeA2@=;=IGpTs# z);#IlJ5Rm!G(H$|F@;t*-}7>t+i%8%7<;d)X=!S$pxYBU(i`4dLSn?1d@C&G(+W}f zD5{VnWk+D$c7Xo#W~ z%j0^^B(N(g;G~?Mk6;7qu5I8hE|}t>c*;!-24uVXHw+0NmOmR3fHms7K`yztq~*9( ze2|qJ)m&4;yO~0O5xz|p!fLQ4KdkN3M>9_e+ci-S99D0~gmD3i*s8rF{~fK5ee_PPcw5xBQhO> zU~E=t%LthqZy6(uYKazy#(E{ad{%Aa$S*9Tozn1XYbwvpt$rUA z;;b*K%f6VHkI94pn~AM4$LD4pMk~g*S~)BHh3e=)M!P`fJ<2RrLaki{3be#Ws5O;a z3}z{ubygFbUG$}>1KSlk%Z2@wI4dmNSYSvN4V!ico0tb|AoEy9v1QIV4g%Vj;~&Hu zrSd8q7bm%V?@39oae-cHFzV8zgE?p-Y~;LuKFp;>k~?EZ&3*(h5RbdSI6Rx9ZY0dVWgz&I$LCTVy=DKca*w+#d{lwyT?6UNGAe3WF-d&E3X z@x?pvIP!eYK!k>+xC$fsD}q?vQH$@Q6Py(>&TAaWfWYC=!K{&%eJFM5Q`e#w`3~47 zT+%SDn(@X76cp}(sj|VSJ?^s8IgbbASISE#OkY3kQGbifS(nA4#gT-Xzx?9OETc?( zQJ@Kv3~#>bfX*0ay;I?<5uNs_xktGQ?_BLHQuD_{*Es;wB5OZIDL5G4X7KYHsq*g_ z2^g6EAR{P)qX1r@x8LR#y}za*jNi)xJyTwFieUMSGtQWUp2bUm{0fEltM8{e;ktAD zd1UsL=cxx)!-V;f1U23LojtU%_&Al>ZjIcx(___EmlJ2*z9Jd2L=1){ED;a-k({Ng zaf*l=FVpMxbZJT-3d}@kjNpmX<>q=2E-rfs8RmatqVNh`@?;cJza0t5TvY-lA?e>pb=fTC_vU=x!4P&A`EZS`3DOL^+FmsP=%kUE9xWL8qyT+QV?Oj?=DYeflK z(kP-Y234H4CR-i%YQw&|tS5dgjfnH=>ku`n?&S2A$@h{@Kj{TV4MsDv3oImRj_^hz z|4X(9R>nUFg5VdHAgG;h)(boyUHlJ~Z(%QxD)x02s^YxL0UyQy45;C}q*ltbx#W${ z_YuIDC>f{vOhtmh2@MhaCZBMvr%)YJQI|)F4#lSSy4HHfrxY!`cN+xdtfQ>izoS`T zuYCQEZDNn?#)CUgbavM1kx|H}iP3akX8^7D4T^jj}76;$c-aUFZK z2!=h*Ng3wguntOwbQjeGM$n6dESm>}7HfUakCanFVUZD|l)0uDB1msbN->F&6u7%d zo5rRPOh6ZhzJo24YhA!T*_m^3;*^SZ<^YRJp}{2UsC_mbKc}KLAT9ke+21EaMrow1 zATu=DGV;r#boqNJ>Fi{}>MLnWtdS!hn8A$k$T4mt&c9@AU}OCwaR3gyBF?ci9AA-8 zS}@sUN_KU)ezH_Ij$HeSU2O>(GA)clBlJ6pFvIM8BY>i zro#e}wHmX+Bc#POX9>(G?idPYz=n`{d2d6b;_nbXfmeF;f{Z&3y#Lj3Ca;$;;h2MH zKHU>Xtq3p4$!DzH@zY_8q-05(ZLK-@X;ln&zc_GEOZ&k!JbFQ5^O5}Vv)R26pCri_ z4Z_}TNIiIu8$)+UHr}r{<<3>OBa|RBDr~^?3^^i>(hNx?i^-rH@*5Q$3=!;q-hC51 z<(MR9B$<-E{{9tbd6J8(-Z-m~WU~V)%Qo)zOXphmuWpnW8!`iHaMc42{5o_665XFj z{E7#Iha5xR0&lK4Fm4WZ578OsMpFGdHVFp0KQ3WE9k75+;+BU)ggQ0f%qJEG8uKk^ z7=axr(l{|OpWOvk<`eD3!O6AgG@hN~5AWo!7-l_KaD79wLN-)BFpANuabBOD|y~ z*j|AJ0*2QwGQo>aAwF|;oRGNI>RP?!eZiS*3qX~&^am4G-hSNDGTc%(M@sIkr|i!5;G3$NwLV|pNCXv zO9$Pqw0OCIOA^|na!k4na&Q=v6=o_gMT6)$c6KsqU#g#nJk$8NUclhy*457fLqfT*V57cWo#h0hD%;v&x3Q6Bi43e zF%%-7W;@)P>f+aK9|4@G+T`OzABOs}baglE4ijhfw<(IU{c*8*vG|!vPV|iHa!;#i zd?xzDcDCw8yE)r$ReXVX>ns*CUXz*5{4USMgugf(|9o$geS^a%M&OP~`c&5tfXUq> z%acnUXV|H~v%_7E9CCOsE)Id|nD{H)s4H|_DL5JJ;KzC!?f=u>mw?r{eGex>5iT+h zr)Z+#%tI=gXr7~FI@M{QNu4wpLZ%Fn5~YkOMah&j7$ZU`MJY3>C`yJ*-+IqE>b(0s zx%dD7UC;A<&-d%zN36Zq9@g4x-22^o5Z%T+=~=jERi2|mRi33o;i&U_?LR(mq+alP zJo%F8UpAi)q_9ZjY<#rL|qBQDaQymq5&^!-U2Ps%86iLH6JrKY%=N->kWXZFamC}K<{ zHTYmCkJgm3@twhogs+FEj0xE}sd;S342`lZ4cog}12<{~ZK^n&WbCrNW5%`vOVX4R*1%tuqtn*wz)&D%O9-W(K@TgircNGv*L#SY;B16aP-RK#bZkLf9Wr^zxD8G ziG=?%X#^UD+700ar$|g-cROf&cE!EJhZX<&RP&Ul;##qHpwj6L8xN?(N%h>b`*C$e zQ$^*E8mSG>gBNSklt}3lXO$)D6uVl#UN%y%|6Qj<$Md>dlqknbw}&S#eIA$I8Zod} zrl(x>#zNzSnYRpD8iJfDz8_Nk)W^!vEN!Y;p}RCw0y!soe%iYHn~9Fs!fE6Cgf%@a z__%l$W3z0*&VKLB<+DyIEI8P2=d_?huKYQrjk=4|9onuKmnhlgdyP4kvrTJlhEnj< ziX%QD?``YLl?KtMNd^Ky_#L{qAmD3hV(lBnl zLT!dmSrmVbeQ`?CMu+n`b8HqFUd%9lzC&F-g<1g)bSx&5onFb3D6%?B5ip~zXW?ABMbjH20 z=5a5E+=$&%SE{z-wC2mId!KUm6-mXv%H{Z{G_tL1+B8<*Oh45wZ7-Mn+EtSZmKa_Xibep8ZB3$E7*gnQtYetWd8pA%pZAj_J-HWX1N{8!vc@6J)^wF$qb&*Zlc=Yeo1Xe?(x++v*%@M z#MB>6pgKm{*hFWKdb?xKoF`5$*;D#QTo`M)?#G%JyE8*0u2=1C?Rja5_3bGsmX??F z-j^-wU{_x++xsTsM4aOFFE(2@ye(Zh+41vPwa1q?U9T$nvUbIg2Z^PNA`f_t(^qdW zyFT^n!cEDG?~T~bYIT_$$1A$grs5J+D042i#xikpad4k&{SWMM&9vV?`t&|!p5u)& z(ongzhHdR5rKa@`w3W!GKa`1}bbGo{z$eHLy@36u?NV+{s-A%rkL+kUNZ{aR7jm=Qc(6H{zeDBg}LI`<1P-fFXVn(^IkSY`UyRD?6!~YGk@ea zt{IZFC;W9%P?}k2xM_MuW$zv3&zttw#ZFVq>8R?k8Rjx*fJgG?bY|p_sG7=bi=xY( z>>n#yjx~%NrtE*sX1}@hW7YSczkL|h_|Tzn!aM7tYMUVzFBhGi%)giV=vv3g;)!sS zZb|vd;z7@1R%X(Uw4OB^_CU4oov=$^*0>fVPa18epLil%dtZ`gT+rCixkLQlw)(Yg zPgtwc9zAhuz3;q9!?dQ{1_>K^+e_-`5!OP9oclxR1-SW0vKkboT)}=tjL)XY)G!tu ze5|n8CG2Y2?g2lwCvE0{qtkbA*u$Cy4tgD@&K>*9wJ`1coChSc+}g=ECe4cL?>9kV zl7@S~+H;rbXZKCcnSbt0{tB;@Z$aq;OO$f06H-E~#(g`Wa!Gd6iy8SAq03VTJsrWy z+x>HP=nA#abp5BML*@^E_Bm)~`03yaN)7v#lTM$zV}5eapoPsE+yQ4tJB)mG^#0H# z27R}mo2Fx-)iN%wX`V-kQh3S>lWX6L$B#EmcCy-MLMp#k6*jThCEdsN&i8-?mT{M* z>sGccEwrv#`f%Q(%9_1XLu1v~+}qb|ICOs0I?m~`1rg;26OS#e-4qqCc||ABD%R9K z%I8>-j%rr^%)~=eH)UU3k+dC7-G2?2m%5!8swRD$L|N3MVIy4ZEA<{kH;(JE>0@|T?5tRFh@ z%1q=uI{LJE`T~y?!MH8Y|-H+%8Y4IOB zN~GQmjgffG8C==%NA{55Ny@)r$))9aWu{rHrDwa$THN4Hk#YGl&4)Z4+oPRU?3mkU z_l<|??eaO+87kwf+^tk!jJv-lyC_<>fjcE>Xz?_ezGn0Gy|WIPHzs?NM^i|-;b7A_ z1s@&1^EQSxmTqLx+wV6tRA+3yU(?L-OwV~Xq-8GSN7VKMo-1YtdtN(Bg7MxF*^LYM3MPZ`Gf9! zynesTQsCY>=`U58O1)%@8$8BN4)I<#xre=R+;xxH>Qa%?hQ3h&Kez77e6j0M?JeWJ zfx9xAt-&-Y?6!VrX0?-YWZ8^iIkii-SLj7mndUq$|K_XCJi|U{IrhRT)8G~}>*Cp) zVn>@jEFa9_Ke;sS+xK4e$Ig^2QMuhy^FWqmm|H35P^odyG9@#cu}vq_95r2&zf(h& z$IKY@xqZ^OY6v#Me66}5A*G4*0ZJFZs|~;tLgma<-OcBnS<6SCKpaV zc*(rt`A*v4nUt+l2cAip^_F%rxkJWlzUH(krcsslyQdtE+OKfkczDm(J$c_~s(O7N z&UGEJ>0ay3XzHqp)i=0)xs9o_E*;Rh|4}8jap}CLetq714PRHwM!vr>b^o}&y`)zu7xtDKlH}qii9O6elw)9Zcd|}+sta5NIMwBH zsM5P)w(Yc&@8)<#&itsCqp|5OqBBOYtiU*5?f4WsMoUEsgW zxH*MVy@C zpVlneuzm5O{PtdYY4)G<6Ov7`FVI~JI^xcZZt0^^=5HC){K#mV()EV$hHH5=$`eRz zXB&L)Ep>ggk;D@yf|tgA-7)bmo)zxy^mf83dF%vAfr3SW&3(>*yB8D=O*^))VS?fa zt1svM1{q`DTt}kiB^p}I#i1t&rWeIc(PXBPUmEF0lat~M7A0FGS}J4#x8D7 zs*G;gjV6UR8jG#-3%nbqD0tZosVlmlV!P+Xwu<=W9Xg@?$`@om8*oi2+CKd!5kekEfu2HQ0WKb2jy)k`X04X=B!(a z%90g>cT9@cFgYFBlw-WL(Vlure#w&QAF4dftyK-4+~Zu%DI5H$c$2c+?81owL5EDq zD$kZgk1JX)-Akvh?F#Gun<;B(p6W%O7Lz0HPYvVmxfUL(-Y%!p9yBel?B|U1CF{fV zpO$Vfv>uaSHsZZ{`c0*ZedFcJ6bg;X!=_$HXEP?cU2(j5C~sNV@F`v#gUxY6bB}LU z3|_F=A-VjoLf>1-FZiwMw`0S;^uJbDk;%C@>|xDMPuho~-05jov@R&MMF(hn%h8WE z+>xx*a+M>SHRbc(y*3;4X9ZDZUzL=Vy=(FgX&8Dm@7&iL^2difb3C&%Qtr~y9?KYk z&#srmuov`{y}!{b$8f)`+PQwWdq^!9!uwO%hwh?UzX6baSSLDz7iCZPG~5w- zXZ&)@VPmF0UU5e{7(8yJ!xtVO`F?Nz&E~34t2KTuI5Udw;Z?mm(3IM7H%fW&!eKA$ zo_$@^tF(`vyba^H<5nM^FRtzbM=})j+8(X$kWGtTdAx1iZKVYrN8c-M+43ShS3S1& z^w~o*J2bM>#zZP4xHVNiS$}+Y{ll8pO_a^mf3QI|w zSlPGS^>x0cs-Exbqc4y4czZGbo2JbGMurI^=3$#zY8o-~Yk)cL?}oGah6c8 z$fn)RZyo1r9oOi)n)DiSL?5Lshe+hoAId#+x3M>K6SlEe`15DNkAde;c1XQVa^_ps zU1HqeH@s`^B^`VDY2dOU(>|}^3dv-N} zjg+3Z2g79#FHie?aLzt^s(NSo!Bn4%ljgb}ruF9y`$043hknVQIitq8j-3AKOsIYO zwv5fG7l!get=H|J?Frw=+b`_U-?9-%z#iinCND)zVM)xI3+^@k_Z1|S)}3U@W0JKN zTnX$ezKr5Z+0#)SrMW96uKVopX!2ST#Iij$oHD$fJKsEXX=B#0erXXQIU{O(sYa6) zMYo1Tsi=>g7PDDVw!cY|QZPe#`OGcb>B<|wsnsn!NNQUb+~;_kOpXHUiq?V~cN6p8 z?q@h{D$l*DS9h`ZnoDWdTubF2RK~sAAHcJ>ShuCXWurbcMpnQ`K> z?PYzZ*4wM2rbG;}{p;{%$E~4r9`<$jvZ8jF-lDmfjg49C8oGhHO#S@q>&@jiq92cU zXfg>tHzqys+-x|a*7wKG5-FKOiISazKa(|}(Ywi@Cb(u_h79U$IG(zqFvYcWLRy2< z1-ATn%lOjF%oq1)BaCz5r+H}cXvNCnh^C|O7Fvacs?M1=_P~l)lXSNEjabllKHtQ3 zOPWDZ+@PNhuGPC#LOk6lX}dHkRo^_a^Bdhit~OEC*0O5zv4*+Ha{WAYpInGvzx`-} zYGLcpnlB!6L*qJW-d^KZw3zHY?J?UYOd1}prCZu-?Sx~jAr98I zdZ#ujTRz*Jo?td0?I|tgV~qWdN1EGI@5M(X$yScOxxD<*p{Tsdf`_fW285eGIWFMmEVw<=E!ntk&Ht3eCQ^ z{W#`ZWYZ!0xeEJ9{n1;B_jO%wiF)r3B_F!YjoS%>+avSxKRwm)Gh2OF;XwAbt-8I} zXI4~SP+4GZFsN75KFf~WpjgGJDOoLpCs&SAy!-0h+r5vzGx^*5N0={a8?5Uyxb4uy z=^hpd{;u>Km0I1Wq$yF1v8JQbo~h@?-l~e?DJ1Te+M-zVlEvEl zy?HCt_oOl24jnw-iMKP>>)_Yn&E74a6y)~?l9B?FLb56x2ZjWje?3^svAS?lF0}m_ z&yH;+-_wc~KSBNUq$d{Vi=rx6Ez03H&+VKNb^fn8mhXBmd$eOsg_K2m?$xh(X)oKZ z9KPnY{L*oDtH0elXNPUqYU+A7rav5+p7g?4>du-=nI)+idsH*aayst3w&iP1%UNdR zRPgY{X)H+;13QFYtorVk$frM(grIhtw-f5R$Ji|=c`?t^4d-l-dF*`V13ZQF>WST+ z8fomOLMxki&T zx_af|b<{ka9cj6Yx8tj3-JhF7E?@9jbMk1P{LG3v&Cu|U=EhvBjA`vR9o46g-#3n- z8|fHRTwc7oUiD!a{rRnEdY$Q2SMnb2PL+jLv;5E0zf8N*p?*K{%Vx)b(leDcv&zms zn`<>!C-kUJpjb{`~7lwvZ9-fwzKVxgJlS@lJgbm2NvBldh zFrx62eaQXQdrgzx6uD}Ye_D`lUBB~5rA=Wh_Kn!sF+HU`jwGu}WXYdNG{9>~-Q?{S zVgC6V*j9Q9$5~VQ?r;n9GK};Xxg*#5Gjl;NrJXlkQU^QpPk+^1a^A+KZLCw?i9zh) zJyz9Zsb*PzWP9!^|8`Y5=VsUznRgqWjN6tyd{_L7@KLeZP0z&<#t*^AFAWgaT>p*&}u4sDaF%enN}cLT_iQr4O-w9Nc!`L5slzU#i)GN#N4O!=jj51V9V*PmE@x+FC*J!Hr8 z)wA*nOP7{UdQ=*mu2j@`{-;Go45#nvC*~W^$G7|NxThYQJ%>8G4p9p6)wQ)b#NREn5?@+8x$ z==BjZoj`Z)ce?TqRhy#5=$FN3mNbTEomw>U>!&-qi-UJ}yzrqOxlXgG@@c!jM(@qG zPm^fnhwD=s2HZWB6g1}k6_@PjlP$qXH+BE&sHzxf?2uL9cgO9o;a-Ufqc~a%x z8*=$0PSW1rUH(1k8fTMH%HzvF>)*{enjM{LU!5LtO(jz6&h@l~O^=QCj;nvI5pwV2 z)g*q%$lmJHheu4B?Az0)_rbKlru#FT^LH#yu(AuOdAHSJ;_)vHpKZ;g$L%zFd9$u? z;P$ZPFYTQ_#rR&kb;e;(w2ST7YY8Uu19skz`Fv#&YqRsAB_*%5LuNRcYx-D>Zh3C! zANf&63j2wCL6e$2lOpl*1i=&Fe_-h|y89wR_!$_S>#6?wL1$C$h;M^>g!A3h53dm!jCVV5{D3t-^FyGuzkz^}60pGj`vw_-Gg9a&G&{ zkYoP*y>nJMrd`fl*;;J)`l*-ZO-}GDm2GpL*5^)s?fKlB>oBQK`gUXrhu&bd|HXvL z3^zN6m`$UabLu`m+JB_qQ0JQLF=Iw;NIx+7Nl;Jy-Hz(43Fe#HvV$&bx9AKTb}D%A z;K8?gO?k;oa=m!>uOGBo-xgkcJDOXVIp=(@#;U>QafjR^>7QCC8QU0bbeH%+8u_DE zf940NPoLFqq|KT^hNdIV^^}TKJ9=26*7-BhKc%}5iSNnFtt9ndY1a~&(0sBf{!s1# zdyAyIpL)?Ya$ariD^*y0%VS|izsoO=gsfnF{-DsrU*UOXe{trI>^b@gjoK5up7mGI zjJx~f+1AC)@6N?+lxAc(&{kwSHU}zPnX!IOUhp2zS#zI<-HQp1NZ1_XsPKmWwqs7A zPDJz@tuvZV@3fPLQFJwLc z)5>z1@nLFhd9JHZ2Q?K+H}`j`B9na<`o5(6b<^T z$dtD3etXC8LTPmPk#V#1-x`gpd+YzIrZ&TF&E^57XVf2?sPBs#CW0e^z#NTX5BGy`d3hHk9vvSDwGtYAw8T^a09WK@M*L|sdNi}=U$Y(vs zao#)Iv3mF`rTeK_J{P64rf-ehabxthTdc+5*Tzk%f4!RiX!6imXN`7Az0UIqzuqzo z_V-E_?*a8Z@q9?Zn+OHqnD4#^q+2D)jMW zB#iv1Q*Celt>xU%+fCSEnpZF~zZ|spo-O6)6lylA{Yq6qTL^Wef#KYk8JCYt4h?+NtLDbEorBfP zFY89lJ8GzSJI9uG!~RRk<4CI|E8SvVt1-8tL6csf5vk4$E77jl3{U zwy-bhSgCw5BdwzKf|}CD7YI;GHb}QVUOX)di>y9Z zaObb2%5;H0Y~O_=YQ+*BnpLL@JTzjVy^ohSR*Ic^6e~64dYJOK9tKc?nLDu(Be+PN z7sj{e`C=msh68=x&OsP>fNv zn_?Oi3rO5GTk*!}P%NOlj$_yqE*U2*qXu z1pJ~l8=;t)zb7xqBrMPbUP1#zgkZl)?L&NdP>RsYEI7c}UhhMvv{VU6d{yd2rnqy zz%qdAp^m*5ft!-BOzIrw-%69~ny*APtnmly_kghL@h zFHs?;HJ}h7mssHvb%x;CKr!KR_vQw|^}Pa>fQ%Y$wf5JdVE+LcLdwoEDwH9F6qQj0 zcnBp$Wi&wI~r%CtbW2m2jX0p^31BNrn=HBBBzYqu|DRG4hK_V8(*`=7}XRU*YBT=m?l}C_yM8 zYK;LU5^2B$8c-$DfC)5!r_6D(Bx((4Ah?#3I5wbx;Oa+037AR-O+W*j)y3NH&gu#~ zV^PG+Zg7a3=t*|qEKQ3e!Tfe&(NTdCm4H4)B}r5Q8Wj~IQ3)6@RE9()V7pNH5tV@1 zLPbPW0u~Du5K##jE8#<8C~H|@r-V;mq9trHlpvxZY>f>T1r-cY3D7|J5DTF-pn+tO zU;_;#iv$~JAXy~XKm*Al!3G*g76~@cK(a`%fd-OAf&(;=ED{``fn<^301YII1P5p! zStK|>1IZ%60UAga2@cRevPf`%211cQxxfJ$&=55#d3O|($G@waR3sf@DKyb|tD*RM3&_HmJi&#mQ9K-P7 zO;uc1U4<}0IzoxALKq|+Ax2jrjFXPgqpJ`bDnb&RZow=ZosMWsqy{!LghWUUYUjDT%KEvt^*<#Mgk? z!V`&jKH_U&v;7@Sse;-5j;2&CY_`9nDOC$*D>wt$9ZfM$gDyCY*L@9`t?-rTF2TT2 z9rHTq%-_+JrUkPVz9QXi8^BxP)6w15fZ4)ZXx-D4CYbH-XiC!pWy1U&O))!4X9{R4 zZkq)mS$DP>M+`a;v}*=@uA48!lM;l(kQy|o@jE^+U~n`v#KX10 z(87B8-P&dVw`pj!hqOV58o%QM1J*VT4g8Qcm{0>*+rOv@lR%@u<3DAu6J?48uc| zLuVOG8;$=u%V5H2_}5tmQ$?e{&N7%J8u@jW!Sv9m?^hW%6l9J5D#Aw64N*YC&}i=$ z7Kj!a>-{PMnL-1-Uqzrg&_M535l9glP6&Nq zg3*bAwJAOi7C6iV3~bu+IWBs!5nH)bND(r?sUl$DIWEQx!KlE=C1Bt=j>DjnXyA(w zFmN0f=LUsD1?QhoAJ1=reiSkT3_BCZiy#O!NhiC7R#%7s-YK0ZeM0@xi9iu*A`!pY z&;^s&1)kqH44^EL7eZ~+)rZjA?HrZFK5+b|2>mS)221j&aQvo-=>#hHl}red2&BUC zTj-7nx}ZSh#*&19W4F-v`aJ@U+d@a{_Xs$4i*c{JAqfPbld{6>^>2F+1oNE;LXYD2 z2smyFP5Ay$7@mgrhe~*A;wa^&<9s$Q`@ipEpU2&|Yi0PYdF>t)52-6(D z9~F+-6w#BzLfa~N0g69t3)WbediZT0xYuL>L)<2H(+7^<6k$5x_kG|PP7x*pevg6U zI7Rf{+HYr$V>v|_y8pfpJkN!J`|mOEJQvea-SJ$IU+EMkiZBNLeIIz9i|MuQ`VcUn zs}Gz9CYghRJdGFzM(kfcTQ?YZo(s3oemf6AUPr7CZ1Mk1A9$V%x5|Fs2cGA`2ChAy8tS^AKNDpa7{7)U5caXJc0s0bD?IOyb9Oi3qUcM?k;{H_l;$ zF-Zy%#gAVayNZhvHVFypKyXN>bJnPqm86#iPDdvOVqM@ID{&S$c8h5oY|{xlibI$- zj@x3Bz?KGDlu~|@{3z`J=EJ#~-QVLmv*mexs1wOfkB7mJGAmI3oAYd6{ z0s@ZR;)WQbD=|}s84Mn**gS`#pE@{RU^oxDIWgr~APM=t+9u{l6;jevmT zHi`i1h=70-Z824jty%0$1OWlhYw^?xU{JtZ5isz)Mld9}6T$;!opi!EInW0c_J`0u z@VPbA@h5sL!UJYqUEo6t?6@zX2fT1&i>oUZVSdI{Kg22{l@5p{T5i3x!Ty7SZ!N4)*q~|FE4t= zTG)taK*IJZWKsLVv=2$3NJzpygnEl4T%q9H3px<4CfG0({!2It;W4SX&>waj8wP=` zSo?0qAhy=ZUz4my0iaq5Mt{WKM3JQ z2uT>ilZ1geNocu9!VLzJDEKCcLTdOe9I?nUz=pU$kNv}uhzSOMB%;`uB+9(QZ$Y#0 zTgY-z?wcgiv+!Fq457nA677|N5fpwM^3S*s6H4{AaC*XHhMA{$6}<5{JQLX*-0t@i8%R zwz3qiRVyB!>%rx7_4P&Xzsu=P4GZMDFXHh@Zagm^e?6s^g7Zow9}hjHSqv+(RiF{i z+s8B_i02St?dTq{$erV%G*w?tH%uqYFVGKKBZc|-`UmTT=_zqN0^E2y@OKQXtwa)3 z;V;rtGQbK*&Q`W0qkteD36Ae*y2E!m;1p^Bi{Wsh1_{nQlC{YkZ7NHXLertKbRexO z`ccxCgTLtpd3fsB8&4N?2mjJj^5*jcb+olZLqoMfX<7k6UfN*gIofbr0F|l)AJM%00y{hM57rXQQOiBR zPdkhos7=u#Yj?H`h`K-%9it!~mmd)17!csAZ^?D!Ig>(tfFIt#hoB&yCkdlAXf0iB zv~pMPUG4CUxqO~JP=}^TW@%Cxjufg6nXW^jOeQmQXk@WQgf)>itO7iIJj2D>U~5u1 zjzD2DQ-{hBZ$qpm+Jx$aZ)y7CHMsfi^F=`?3zhgz97|(I6fC69z4bKVy z>cBTB9wF|$AbkV(pa3^6pJeP4%=hv2rF{uFdo1`GKJchIvu&^YU=l@r2L7xO{zXV4$y$ zyWq14Z1B3;T}5KU2cSpSa{o1c;VKt!z`&P}hyG%XuMZ|{I=)yZxrew(V!nfWvrA`itC?Mb?zP_MaV&hns zd>_6q58w3vj)s=jMh+zGb48LSX}XQQm6N3biK<1`AsLV?f!-mYAV|RGUu1L$%-=wM{`22Ly%VmzqG9@QXwwrouHPun>XVpkN-x06nE&91yp`LIjKn0!Hd^-LVU5z!f~T(a;P3GO*+t2(~aiN(R2g$kvVL4HkSkT zSlGB2ZucF)MBwvJ_;4?{Yjh-j0Lj*Py0(EP#qC#PV)eRjEI7cE9}2;Vffp<|eJ}@@ z|KS!8_Nx(mdH3yvdh`56{svoC*LOw6G2=PBJkfJ3yGmGjF>CV6v%A=Kshll-vY$cN{F>0BRwci#{X9*Ga1ZwF$|s*g~> zG24L*R=nqbK3;5u`i@xZm$V4heg7XWDS^rr_4v2KE9TnahKfU!KpF8)M1m@?P`F0^M-q%>JFIvf zK3tL&*B`uj%n$spFn6sooCJuAl#`R0G0BY^407q?0Yt+@G)NE&1&e|pOjx;~MFi;^ z2tB!-vW*CXc(W3i-pybH;@IUTBW?b#g%#`#($s%0t1yHAjYxGf@jtAkAzMI##F-z2 zjR<4m+6)pn=a^>`EC?wf$1V&+1gV8C{%Ro<{0|sx6XXM#39fHfjE1!Re-)#J8ukAj zrHrLyC3)OJ8cWjV668~YQpU7~kH~&@S|NeE^*8vz0yj!u5L%Hy!3dFY!x2^an})hI zdP1SbKXeKFuQlZ#@n1n!{@<~QMqPOXk}q!w&-YKtn^<}R zk(2+sIQYkmov>kiRzXOKZnF_W6k}uqMF@r6NZ1I~?%WCOCerRy-v7>DB-p2ar(y9{ z{@aN-HU9SR|0UPol1RM5f5|0Ijlcc-f64W?BoeRiUvi04<8S}|Uvm8|iNq`Xj$C4A zslXA}QwoKXQW9>WW(YoH!44_9>gsBPZ^5?-;RlBBAsz1N;|u4bL}x+acG>{7V7RxG zWM*Q-q;Qx_P3+z;ZDDP29fdg(K@|ejtTT6}W)uQjt$ym-_He!nPJM-2Ln>NLUE4u> zhNHuL2onq_!n0w*cCknbb`bUF%EKJ6K?;W>I#W5_2e$Zww5R(*M&Fp{4i^z?i_V)- z8Srq9HHoHe59b$nu4KVMOY9UQ1+L8bb=b@_IyoWS(IIqLNo2tFJ==EVTy~dtU76E+ z8^f0yJGPfyU$eeF1{<0_kTEcp8ERs@CUXb1%8x(Y#w0~6+dXSQ)$+#jp6%qu*X&cn z?#HAIXU|Bn_DZX08Q=1W^C`5YrS5Ujr<69SeX55tPgj!rNo}dxciVjPm0=1)-BM+x zddiWc|B|AHXK86pQS9?%`&Ema*|oCYHtm_$XPZxvl4a=y^1GkWn)e&zrKXK!_fd;K z9h5v}adsx_wdKc=$>E1~sI0Ra()7O9;#~Uig?ozXm%ZZD6w7Uyx$304SBl|5@_V1; zS@%coU{Ap2(Z+w*^zdtwj+~>08pVPwCStIz|bLZOI+w~V7sx5K6!|K>O z;QX|f!rLYM+TE=S7MD^JkC(1YY*aaxoylxGK0C!SyLipivCrm@{oEEF=B0ikKH|`@ zt=BH6TV^>ueOoo@Uhk08!yFdGb?FRoX5)rK?l$IuekleMOu2Fw91nn zlNSt3UNvQqbmSoEO9u1}eXf(nzE~-pGxVAP=Z=)#;Xa!C#`0H<%Nge@eR;u@5j_ho zt_U2oIcn=g*>^Jn$1Ri1Ugf%Auw~Tx1-*4;j*rq8l;(nc1IT#XBGD>eqL-*Tu|&XINHOcRmo&qxfyl)s(U6ihBY%fHuDqdRuR@| zv170Oc+o3J(Z!;fG;sT;ZBv!!t2~}?{y>gec0Ac!$Hc%V^@H72wGy@A>J{;`9GOnj zw(NUlJNfY2dy0)K8b>zzH4YiI<&|;2L%i~Pr(T{?tZDJyTao6i{d!Ek>RdzZ1EU+7 zUXL%|T5XF|ml-#o z>b}b&(dwqbE5%nPuO&xypRpEpC@x{{U_H)y#lT#yN~nU*BP zJ9X*kv#d#3Oy@1Gb;qY?>1ENfnzGKg>^;81(lRHM2%-P^WlmG zOD`^|Dtn}L*V^mMmFD=m2}{o{Kec@A_m$t%KMov|Hz0Pv!u37Y-yZX0W1>67S%JAG z<*Mfxzp-&+w!};sqdI0jM>aVqMJIUxyKZrs&Zd+b$$gS-bZ+Od^HR^A%6k)Xw!wU{ zLP0`-{}R2Xj+<6b5?XRg{c7KyyI@aJpv!)g^Dm&)9;{tdJEQJc#2~%maXZGj>Ye+r zMlVYDhTaTa?TCx>F3wwcENkA*LfJ?AAI)yDYZ+~rPoD0qT01$p_378t4*uuOUv)o* zyx06t_hf0+r_=Md&EN5O*JI7UX2feW4jMaTd3{TR_NVdh&yTv$*R-#9Klb2ve*0$a zqXxP@*&CH-;A3!PwRP|B6W9}-#}`ihY_P$?)a=?)MOLxy;&pkmzJ;qP(wV0;KRmxP zoO_YGE+>i`IdJ&8S?gM4&!3-`GwtjG--~s9)BCy<$85N6s&Qgs>-THdVGX+6^S;Nr zTXuKj>y*2n+;rV0xqZB%8`Hk2vSh{3ua<*VTvRyY))y;Z4JolI4t^H=eEswD)`8}> z%5SW8ne{jKwbtEZY-(;+vyE@GP<4kzsD;;dqwPDD_ge2y_ek%bzAUaWG1Epbp?A7+ zx}Rl1(VdX}OP+@5nC?squsk29cHS79q*|TNQs1}AY{d?L-zXaA^-^IQ@0g1DRo%EeC z`QGfBh!eNYW}Wnl2!GZ(_wBupr5~q;d=B{#y6n7C_Zu8qtZ5|eNXpKe{$IVaB&7JBO`N6=GG(9M?#J?9G!FYPL^?2UbbfT z{$s~jk!H?!*k!A@jmk;&n55fS@W}( z@~7mVF3>7SFH|htU8GR7^_<+fHRpbwk2v3cA@IVRi(VI>Uz≧brH`_loU`%dS{l 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 literal 0 HcmV?d00001 diff --git a/examples/data/parser/untar1.c b/examples/data/parser/untar1.c new file mode 100644 index 0000000..fe43139 --- /dev/null +++ b/examples/data/parser/untar1.c @@ -0,0 +1,201 @@ +static char const rcsid[] = "$Id: untar.c,v 1.35 2007/02/12 20:46:09 njh Exp $"; + +#if HAVE_CONFIG_H +#include "clamav-config.h" +#endif + +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#ifdef HAVE_SYS_PARAM_H +#include /* for NAME_MAX */ +#endif + +#include "clamav.h" +#include "others.h" +#include "untar.h" +#include "mbox.h" +#include "blob.h" +#include "scanners.h" + +#define BLOCKSIZE 512 + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +static int +octal(const char *str) +{ + int ret; + + if(sscanf(str, "%o", (unsigned int *)&ret) != 1) + return -1; + return ret; +} + +int +cli_untar(const char *dir, int desc, unsigned int posix, cli_ctx *ctx) +{ + int size = 0, ret, fout=-1; + int in_block = 0; + unsigned int files = 0; + char fullname[NAME_MAX + 1]; + + cli_dbgmsg("In untar(%s, %d)\n", dir, desc); + + for(;;) { + char block[BLOCKSIZE]; + const int nread = cli_readn(desc, block, (unsigned int)sizeof(block)); + + if(!in_block && nread == 0) + break; + + if(nread < 0) { + if(fout>=0) + close(fout); + cli_errmsg("cli_untar: block read error\n"); + return CL_EREAD; + } + + if(!in_block) { + char type; + int directory, skipEntry = 0; + char magic[7], name[101], osize[13]; + + if(fout>=0) { + lseek(fout, 0, SEEK_SET); + ret = cli_magic_scandesc(fout, ctx); + close(fout); + if (!ctx->engine->keeptmp) + if (cli_unlink(fullname)) return CL_EUNLINK; + if (ret==CL_VIRUS) + return CL_VIRUS; + fout = -1; + } + + if(block[0] == '\0') /* We're done */ + break; + if((ret=cli_checklimits("cli_untar", ctx, 0, 0, 0))!=CL_CLEAN) + return ret; + + /* Notice assumption that BLOCKSIZE > 262 */ + if(posix) { + strncpy(magic, block+257, 5); + magic[5] = '\0'; + if(strcmp(magic, "ustar") != 0) { + cli_dbgmsg("cli_untar: Incorrect magic string '%s' in tar header\n", magic); + return CL_EFORMAT; + } + } + + type = block[156]; + + switch(type) { + default: + cli_dbgmsg("cli_untar: unknown type flag %c\n", type); + case '0': /* plain file */ + case '\0': /* plain file */ + case '7': /* contiguous file */ + case 'M': /* continuation of a file from another volume; might as well scan it. */ + files++; + directory = 0; + break; + case '1': /* Link to already archived file */ + case '5': /* directory */ + case '2': /* sym link */ + case '3': /* char device */ + case '4': /* block device */ + case '6': /* fifo special */ + case 'V': /* Volume header */ + directory = 1; + break; + case 'K': + case 'L': + /* GNU extension - ././@LongLink + * Discard the blocks with the extended filename, + * the last header will contain parts of it anyway + */ + case 'N': /* Old GNU format way of storing long filenames. */ + case 'A': /* Solaris ACL */ + case 'E': /* Solaris Extended attribute s*/ + case 'I': /* Inode only */ + case 'g': /* Global extended header */ + case 'x': /* Extended attributes */ + case 'X': /* Extended attributes (POSIX) */ + directory = 0; + skipEntry = 1; + break; + } + + if(directory) { + in_block = 0; + continue; + } + + strncpy(osize, block+124, 12); + osize[12] = '\0'; + size = octal(osize); + if(size < 0) { + cli_dbgmsg("cli_untar: Invalid size in tar header\n"); + skipEntry++; + } else { + cli_dbgmsg("cli_untar: size = %d\n", size); + if((ret=cli_checklimits("cli_untar", ctx, size, 0, 0))!=CL_CLEAN) + skipEntry++; + } + + if(skipEntry) { + const int nskip = (size % BLOCKSIZE || !size) ? size + BLOCKSIZE - (size % BLOCKSIZE) : size; + + cli_dbgmsg("cli_untar: skipping entry\n"); + lseek(desc, nskip, SEEK_CUR); + continue; + } + + strncpy(name, block, 100); + name[100] = '\0'; + snprintf(fullname, sizeof(fullname)-1, "%s/tar%02u", dir, files); + fullname[sizeof(fullname)-1] = '\0'; + fout = open(fullname, O_RDWR|O_CREAT|O_EXCL|O_TRUNC|O_BINARY, 0600); + + if(fout < 0) { + char err[128]; + cli_errmsg("cli_untar: Can't create temporary file %s: %s\n", fullname, cli_strerror(errno, err, sizeof(err))); + return CL_ETMPFILE; + } + + cli_dbgmsg("cli_untar: extracting to %s\n", fullname); + + in_block = 1; + } else { /* write or continue writing file contents */ + const int nbytes = size>512? 512:size; + const int nwritten = (int)write(fout, block, (size_t)nbytes); + + if(nwritten != nbytes) { + cli_errmsg("cli_untar: only wrote %d bytes to file %s (out of disc space?)\n", + nwritten, fullname); + close(fout); + return CL_EWRITE; + } + size -= nbytes; + } + if (size == 0) + in_block = 0; + } + if(fout>=0) { + lseek(fout, 0, SEEK_SET); + ret = cli_magic_scandesc(fout, ctx); + close(fout); + if (!ctx->engine->keeptmp) + if (cli_unlink(fullname)) return CL_EUNLINK; + if (ret==CL_VIRUS) + return CL_VIRUS; + } + return CL_CLEAN; +} \ No newline at end of file diff --git a/examples/data/parser/untar2.c b/examples/data/parser/untar2.c new file mode 100644 index 0000000..90feb88 --- /dev/null +++ b/examples/data/parser/untar2.c @@ -0,0 +1,342 @@ +#if HAVE_CONFIG_H +#include "clamav-config.h" +#endif + +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#include +#ifdef HAVE_SYS_PARAM_H +#include /* for NAME_MAX */ +#endif + +#include "clamav.h" +#include "others.h" +#include "untar.h" +#include "mbox.h" +#include "blob.h" +#include "scanners.h" +#include "matcher.h" + +#define BLOCKSIZE 512 +#define TARSIZEOFFSET 124 +#define TARSIZELEN 12 +#define TARCHECKSUMOFFSET 148 +#define TARCHECKSUMLEN 8 +#define TARFILETYPEOFFSET 156 + +static int +octal(const char *str) +{ + int ret; + + if(sscanf(str, "%o", (unsigned int *)&ret) != 1) + return -1; + return ret; +} + +/** + * Retrieve checksum values from a tar header block. + * @param header Header data block, padded with zeroes to reach BLOCKSIZE + * @return int value of checksum, -1 (from octal()) if bad value + */ +static int +getchecksum(const char *header) +{ + char ochecksum[TARCHECKSUMLEN + 1]; + int checksum = -1; + + strncpy(ochecksum, header+TARCHECKSUMOFFSET, TARCHECKSUMLEN); + ochecksum[TARCHECKSUMLEN] = '\0'; + checksum = octal(ochecksum); + return checksum; +} + +/** + * Calculate checksum values for tar header blocks. + * @param header Header data block, padded with zeroes to reach BLOCKSIZE + * @param targetsum Check value to match (as int not octal!) + * @return 0 if checksum matches target, -1 if not + */ +static int +testchecksum(const char *header, int targetsum) +{ + const unsigned char *posix; + const signed char *legacy; + int posix_sum = 0, legacy_sum = 0; + int i; + + // targetsum -1 represents an error from octal() + if (targetsum == -1) { + return -1; + } + + /* Build checksums. POSIX is unsigned; some legacy tars use signed. */ + posix = (unsigned char *)header; + legacy = (signed char *)header; + for (i = 0; i < BLOCKSIZE; i++ ) { + if ((i >= TARCHECKSUMOFFSET) && (i < TARCHECKSUMOFFSET + TARCHECKSUMLEN)) { + /* Use ascii value of space in place of checksum value */ + posix_sum += 32; + legacy_sum += 32; + } + else { + posix_sum += posix[i]; + legacy_sum += legacy[i]; + } + } + + if ((targetsum == posix_sum) || (targetsum == legacy_sum)) { + return 0; + } + return -1; +} + +int +cli_untar(const char *dir, unsigned int posix, cli_ctx *ctx) +{ + int size = 0, ret, fout=-1; + int in_block = 0; + int last_header_bad = 0; + int limitnear = 0; + unsigned int files = 0; + char fullname[NAME_MAX + 1]; + size_t pos = 0; + size_t currsize = 0; + char zero[BLOCKSIZE]; + unsigned int num_viruses = 0; + + cli_dbgmsg("In untar(%s)\n", dir); + memset(zero, 0, sizeof(zero)); + + for(;;) { + const char *block; + size_t nread; + + block = fmap_need_off_once_len(*ctx->fmap, pos, BLOCKSIZE, &nread); + cli_dbgmsg("cli_untar: pos = %lu\n", (unsigned long)pos); + + if(!in_block && !nread) + break; + + if (!nread) + block = zero; + + if(!block) { + if(fout>=0) + close(fout); + cli_errmsg("cli_untar: block read error\n"); + return CL_EREAD; + } + pos += nread; + + if(!in_block) { + char type; + int directory, skipEntry = 0; + int checksum = -1; + char magic[7], name[101], osize[TARSIZELEN + 1]; + currsize = 0; + + if(fout>=0) { + lseek(fout, 0, SEEK_SET); + ret = cli_magic_scandesc(fout, ctx); + close(fout); + if (!ctx->engine->keeptmp) + if (cli_unlink(fullname)) return CL_EUNLINK; + if (ret==CL_VIRUS) { + if (!SCAN_ALL) + return CL_VIRUS; + else + num_viruses++; + } + fout = -1; + } + + if(block[0] == '\0') /* We're done */ + break; + if((ret=cli_checklimits("cli_untar", ctx, 0, 0, 0))!=CL_CLEAN) + return ret; + + checksum = getchecksum(block); + cli_dbgmsg("cli_untar: Candidate checksum = %d, [%o in octal]\n", checksum, checksum); + if(testchecksum(block, checksum) != 0) { + // If checksum is bad, dump and look for next header block + cli_dbgmsg("cli_untar: Invalid checksum in tar header. Skip to next...\n"); + if (last_header_bad == 0) { + last_header_bad++; + cli_dbgmsg("cli_untar: Invalid checksum found inside archive!\n"); + } + continue; + } else { + last_header_bad = 0; + cli_dbgmsg("cli_untar: Checksum %d is valid.\n", checksum); + } + + /* Notice assumption that BLOCKSIZE > 262 */ + if(posix) { + strncpy(magic, block+257, 5); + magic[5] = '\0'; + if(strcmp(magic, "ustar") != 0) { + cli_dbgmsg("cli_untar: Incorrect magic string '%s' in tar header\n", magic); + return CL_EFORMAT; + } + } + + type = block[TARFILETYPEOFFSET]; + + switch(type) { + default: + cli_dbgmsg("cli_untar: unknown type flag %c\n", type); + case '0': /* plain file */ + case '\0': /* plain file */ + case '7': /* contiguous file */ + case 'M': /* continuation of a file from another volume; might as well scan it. */ + files++; + directory = 0; + break; + case '1': /* Link to already archived file */ + case '5': /* directory */ + case '2': /* sym link */ + case '3': /* char device */ + case '4': /* block device */ + case '6': /* fifo special */ + case 'V': /* Volume header */ + directory = 1; + break; + case 'K': + case 'L': + /* GNU extension - ././@LongLink + * Discard the blocks with the extended filename, + * the last header will contain parts of it anyway + */ + case 'N': /* Old GNU format way of storing long filenames. */ + case 'A': /* Solaris ACL */ + case 'E': /* Solaris Extended attribute s*/ + case 'I': /* Inode only */ + case 'g': /* Global extended header */ + case 'x': /* Extended attributes */ + case 'X': /* Extended attributes (POSIX) */ + directory = 0; + skipEntry = 1; + break; + } + + if(directory) { + in_block = 0; + continue; + } + + strncpy(osize, block+TARSIZEOFFSET, TARSIZELEN); + osize[TARSIZELEN] = '\0'; + size = octal(osize); + if(size < 0) { + cli_dbgmsg("cli_untar: Invalid size in tar header\n"); + skipEntry++; + } else { + cli_dbgmsg("cli_untar: size = %d\n", size); + ret = cli_checklimits("cli_untar", ctx, size, 0, 0); + switch(ret) { + case CL_EMAXFILES: // Scan no more files + skipEntry++; + limitnear = 0; + break; + case CL_EMAXSIZE: // Either single file limit or total byte limit would be exceeded + cli_dbgmsg("cli_untar: would exceed limit, will try up to max"); + limitnear = 1; + break; + default: // Ok based on reported content size + limitnear = 0; + break; + } + } + + if(skipEntry) { + const int nskip = (size % BLOCKSIZE || !size) ? size + BLOCKSIZE - (size % BLOCKSIZE) : size; + + if(nskip < 0) { + cli_dbgmsg("cli_untar: got negative skip size, giving up\n"); + return CL_CLEAN; + } + cli_dbgmsg("cli_untar: skipping entry\n"); + pos += nskip; + continue; + } + + strncpy(name, block, 100); + name[100] = '\0'; + if(cli_matchmeta(ctx, name, size, size, 0, files, 0, NULL) == CL_VIRUS) { + if (!SCAN_ALL) + return CL_VIRUS; + else + num_viruses++; + } + + snprintf(fullname, sizeof(fullname)-1, "%s"PATHSEP"tar%02u", dir, files); + fullname[sizeof(fullname)-1] = '\0'; + fout = open(fullname, O_RDWR|O_CREAT|O_EXCL|O_TRUNC|O_BINARY, 0600); + + if(fout < 0) { + char err[128]; + cli_errmsg("cli_untar: Can't create temporary file %s: %s\n", fullname, cli_strerror(errno, err, sizeof(err))); + return CL_ETMPFILE; + } + + cli_dbgmsg("cli_untar: extracting to %s\n", fullname); + + in_block = 1; + } else { /* write or continue writing file contents */ + int nbytes, nwritten; + int skipwrite = 0; + char err[128]; + + nbytes = size>512? 512:size; + if (nread && nread < (size_t)nbytes) + nbytes = nread; + + if (limitnear > 0) { + currsize += nbytes; + cli_dbgmsg("cli_untar: Approaching limit...\n"); + if (cli_checklimits("cli_untar", ctx, (unsigned long)currsize, 0, 0) != CL_SUCCESS) { + // Limit would be exceeded by this file, suppress writing beyond limit + // Need to keep reading to get to end of file chunk + skipwrite++; + } + } + + if (skipwrite == 0) { + nwritten = (int)cli_writen(fout, block, (size_t)nbytes); + + if(nwritten != nbytes) { + cli_errmsg("cli_untar: only wrote %d bytes to file %s (out of disc space?): %s\n", + nwritten, fullname, cli_strerror(errno, err, sizeof(err))); + close(fout); + return CL_EWRITE; + } + } + size -= nbytes; + if ((size != 0) && (nread == 0)) { + // Truncated tar file, so end file content like tar behavior + cli_dbgmsg("cli_untar: No bytes read! Forcing end of file content.\n"); + size = 0; + } + } + if (size == 0) + in_block = 0; + } + if(fout>=0) { + lseek(fout, 0, SEEK_SET); + ret = cli_magic_scandesc(fout, ctx); + close(fout); + if (!ctx->engine->keeptmp) + if (cli_unlink(fullname)) return CL_EUNLINK; + if (ret==CL_VIRUS) + return CL_VIRUS; + } + if (num_viruses) + return CL_VIRUS; + return CL_CLEAN; +} \ No newline at end of file From cf1e023ef728899fc959f10e38a8ff27dc5152cd Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Fri, 31 Jan 2025 17:31:04 -0500 Subject: [PATCH 04/20] Update README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index a52ce9b..cbd8735 100644 --- a/README.md +++ b/README.md @@ -48,4 +48,9 @@ $ ollama pull bakllava // Run the Ollama server exe or by command $ ollama serve +``` + +### Run Jupyter Notebook +```bash +$ jupyter notebook ``` \ No newline at end of file From 1ac947d9b59c8915e88bfac8ef38bfe0a22c3f0d Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Fri, 31 Jan 2025 18:16:21 -0500 Subject: [PATCH 05/20] Add initial untar.ipynb for demo --- examples/untar.ipynb | 97 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 examples/untar.ipynb diff --git a/examples/untar.ipynb b/examples/untar.ipynb new file mode 100644 index 0000000..a43a650 --- /dev/null +++ b/examples/untar.ipynb @@ -0,0 +1,97 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import formulallm.formula as f" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f.help()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "code = f.load(\"./data/parser/TinyDemoParser.4ml\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f.details(\"TinyDemoParser\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f.query(\"m\", \"isDone\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "code = f.load(\"./data/parser/GeneratedTar.4ml\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f.query(\"wrongModel\", \"isDone\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "f.list()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.16" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From a53bca163e61620c8028aa20ce7538ad969345c0 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:13:42 -0500 Subject: [PATCH 06/20] update dependencies --- .python-version | 1 + poetry.lock | 2563 ++++++++++++----------------------------------- pyproject.toml | 16 +- 3 files changed, 667 insertions(+), 1913 deletions(-) create mode 100644 .python-version diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/poetry.lock b/poetry.lock index 824b0fd..4b7da63 100644 --- a/poetry.lock +++ b/poetry.lock @@ -239,24 +239,6 @@ types-python-dateutil = ">=2.8.10" doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] -[[package]] -name = "asgiref" -version = "3.7.2" -description = "ASGI specs, helper code, and adapters" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, - {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} - -[package.extras] -tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] - [[package]] name = "asttokens" version = "2.4.1" @@ -351,47 +333,6 @@ files = [ {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] -[[package]] -name = "bcrypt" -version = "4.1.2" -description = "Modern password hashing for your software and your servers" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "bcrypt-4.1.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ac621c093edb28200728a9cca214d7e838529e557027ef0581685909acd28b5e"}, - {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea505c97a5c465ab8c3ba75c0805a102ce526695cd6818c6de3b1a38f6f60da1"}, - {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57fa9442758da926ed33a91644649d3e340a71e2d0a5a8de064fb621fd5a3326"}, - {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb3bd3321517916696233b5e0c67fd7d6281f0ef48e66812db35fc963a422a1c"}, - {file = "bcrypt-4.1.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6cad43d8c63f34b26aef462b6f5e44fdcf9860b723d2453b5d391258c4c8e966"}, - {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:44290ccc827d3a24604f2c8bcd00d0da349e336e6503656cb8192133e27335e2"}, - {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:732b3920a08eacf12f93e6b04ea276c489f1c8fb49344f564cca2adb663b3e4c"}, - {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c28973decf4e0e69cee78c68e30a523be441972c826703bb93099868a8ff5b5"}, - {file = "bcrypt-4.1.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b8df79979c5bae07f1db22dcc49cc5bccf08a0380ca5c6f391cbb5790355c0b0"}, - {file = "bcrypt-4.1.2-cp37-abi3-win32.whl", hash = "sha256:fbe188b878313d01b7718390f31528be4010fed1faa798c5a1d0469c9c48c369"}, - {file = "bcrypt-4.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:9800ae5bd5077b13725e2e3934aa3c9c37e49d3ea3d06318010aa40f54c63551"}, - {file = "bcrypt-4.1.2-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:71b8be82bc46cedd61a9f4ccb6c1a493211d031415a34adde3669ee1b0afbb63"}, - {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e3c6642077b0c8092580c819c1684161262b2e30c4f45deb000c38947bf483"}, - {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:387e7e1af9a4dd636b9505a465032f2f5cb8e61ba1120e79a0e1cd0b512f3dfc"}, - {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f70d9c61f9c4ca7d57f3bfe88a5ccf62546ffbadf3681bb1e268d9d2e41c91a7"}, - {file = "bcrypt-4.1.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2a298db2a8ab20056120b45e86c00a0a5eb50ec4075b6142db35f593b97cb3fb"}, - {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ba55e40de38a24e2d78d34c2d36d6e864f93e0d79d0b6ce915e4335aa81d01b1"}, - {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3566a88234e8de2ccae31968127b0ecccbb4cddb629da744165db72b58d88ca4"}, - {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b90e216dc36864ae7132cb151ffe95155a37a14e0de3a8f64b49655dd959ff9c"}, - {file = "bcrypt-4.1.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:69057b9fc5093ea1ab00dd24ede891f3e5e65bee040395fb1e66ee196f9c9b4a"}, - {file = "bcrypt-4.1.2-cp39-abi3-win32.whl", hash = "sha256:02d9ef8915f72dd6daaef40e0baeef8a017ce624369f09754baf32bb32dba25f"}, - {file = "bcrypt-4.1.2-cp39-abi3-win_amd64.whl", hash = "sha256:be3ab1071662f6065899fe08428e45c16aa36e28bc42921c4901a191fda6ee42"}, - {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d75fc8cd0ba23f97bae88a6ec04e9e5351ff3c6ad06f38fe32ba50cbd0d11946"}, - {file = "bcrypt-4.1.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a97e07e83e3262599434816f631cc4c7ca2aa8e9c072c1b1a7fec2ae809a1d2d"}, - {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e51c42750b7585cee7892c2614be0d14107fad9581d1738d954a262556dd1aab"}, - {file = "bcrypt-4.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba4e4cc26610581a6329b3937e02d319f5ad4b85b074846bf4fef8a8cf51e7bb"}, - {file = "bcrypt-4.1.2.tar.gz", hash = "sha256:33313a1200a3ae90b75587ceac502b048b840fc69e7f7a0905b5f87fac7a1258"}, -] - -[package.extras] -tests = ["pytest (>=3.2.1,!=3.3.0)"] -typecheck = ["mypy"] - [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -433,43 +374,6 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.3)"] -[[package]] -name = "build" -version = "1.1.1" -description = "A simple, correct Python build frontend" -optional = false -python-versions = ">= 3.7" -groups = ["main"] -files = [ - {file = "build-1.1.1-py3-none-any.whl", hash = "sha256:8ed0851ee76e6e38adce47e4bee3b51c771d86c64cf578d0c2245567ee200e73"}, - {file = "build-1.1.1.tar.gz", hash = "sha256:8eea65bb45b1aac2e734ba2cc8dad3a6d97d97901a395bd0ed3e7b46953d2a31"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "os_name == \"nt\""} -importlib-metadata = {version = ">=4.6", markers = "python_full_version < \"3.10.2\""} -packaging = ">=19.0" -pyproject_hooks = "*" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - -[package.extras] -docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] -test = ["filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"] -typing = ["importlib-metadata (>=5.1)", "mypy (>=1.5.0,<1.6.0)", "tomli", "typing-extensions (>=3.7.4.3)"] -virtualenv = ["virtualenv (>=20.0.35)"] - -[[package]] -name = "cachetools" -version = "5.3.3" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, - {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, -] - [[package]] name = "certifi" version = "2024.2.2" @@ -659,86 +563,6 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] -[[package]] -name = "chroma-hnswlib" -version = "0.7.3" -description = "Chromas fork of hnswlib" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "chroma-hnswlib-0.7.3.tar.gz", hash = "sha256:b6137bedde49fffda6af93b0297fe00429fc61e5a072b1ed9377f909ed95a932"}, - {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59d6a7c6f863c67aeb23e79a64001d537060b6995c3eca9a06e349ff7b0998ca"}, - {file = "chroma_hnswlib-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d71a3f4f232f537b6152947006bd32bc1629a8686df22fd97777b70f416c127a"}, - {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c92dc1ebe062188e53970ba13f6b07e0ae32e64c9770eb7f7ffa83f149d4210"}, - {file = "chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49da700a6656fed8753f68d44b8cc8ae46efc99fc8a22a6d970dc1697f49b403"}, - {file = "chroma_hnswlib-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:108bc4c293d819b56476d8f7865803cb03afd6ca128a2a04d678fffc139af029"}, - {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:11e7ca93fb8192214ac2b9c0943641ac0daf8f9d4591bb7b73be808a83835667"}, - {file = "chroma_hnswlib-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6f552e4d23edc06cdeb553cdc757d2fe190cdeb10d43093d6a3319f8d4bf1c6b"}, - {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f96f4d5699e486eb1fb95849fe35ab79ab0901265805be7e60f4eaa83ce263ec"}, - {file = "chroma_hnswlib-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368e57fe9ebae05ee5844840fa588028a023d1182b0cfdb1d13f607c9ea05756"}, - {file = "chroma_hnswlib-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:b7dca27b8896b494456db0fd705b689ac6b73af78e186eb6a42fea2de4f71c6f"}, - {file = "chroma_hnswlib-0.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:70f897dc6218afa1d99f43a9ad5eb82f392df31f57ff514ccf4eeadecd62f544"}, - {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aef10b4952708f5a1381c124a29aead0c356f8d7d6e0b520b778aaa62a356f4"}, - {file = "chroma_hnswlib-0.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee2d8d1529fca3898d512079144ec3e28a81d9c17e15e0ea4665697a7923253"}, - {file = "chroma_hnswlib-0.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a4021a70e898783cd6f26e00008b494c6249a7babe8774e90ce4766dd288c8ba"}, - {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8f61fa1d417fda848e3ba06c07671f14806a2585272b175ba47501b066fe6b1"}, - {file = "chroma_hnswlib-0.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7563be58bc98e8f0866907368e22ae218d6060601b79c42f59af4eccbbd2e0a"}, - {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51b8d411486ee70d7b66ec08cc8b9b6620116b650df9c19076d2d8b6ce2ae914"}, - {file = "chroma_hnswlib-0.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d706782b628e4f43f1b8a81e9120ac486837fbd9bcb8ced70fe0d9b95c72d77"}, - {file = "chroma_hnswlib-0.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:54f053dedc0e3ba657f05fec6e73dd541bc5db5b09aa8bc146466ffb734bdc86"}, - {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e607c5a71c610a73167a517062d302c0827ccdd6e259af6e4869a5c1306ffb5d"}, - {file = "chroma_hnswlib-0.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2358a795870156af6761890f9eb5ca8cade57eb10c5f046fe94dae1faa04b9e"}, - {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cea425df2e6b8a5e201fff0d922a1cc1d165b3cfe762b1408075723c8892218"}, - {file = "chroma_hnswlib-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:454df3dd3e97aa784fba7cf888ad191e0087eef0fd8c70daf28b753b3b591170"}, - {file = "chroma_hnswlib-0.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:df587d15007ca701c6de0ee7d5585dd5e976b7edd2b30ac72bc376b3c3f85882"}, -] - -[package.dependencies] -numpy = "*" - -[[package]] -name = "chromadb" -version = "0.4.24" -description = "Chroma." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, - {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, -] - -[package.dependencies] -bcrypt = ">=4.0.1" -build = ">=1.0.3" -chroma-hnswlib = "0.7.3" -fastapi = ">=0.95.2" -grpcio = ">=1.58.0" -importlib-resources = "*" -kubernetes = ">=28.1.0" -mmh3 = ">=4.0.1" -numpy = ">=1.22.5" -onnxruntime = ">=1.14.1" -opentelemetry-api = ">=1.2.0" -opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" -opentelemetry-instrumentation-fastapi = ">=0.41b0" -opentelemetry-sdk = ">=1.2.0" -orjson = ">=3.9.12" -overrides = ">=7.3.1" -posthog = ">=2.4.0" -pulsar-client = ">=3.1.0" -pydantic = ">=1.9" -pypika = ">=0.48.9" -PyYAML = ">=6.0.0" -requests = ">=2.28" -tenacity = ">=8.2.3" -tokenizers = ">=0.13.2" -tqdm = ">=4.65.0" -typer = ">=0.9.0" -typing-extensions = ">=4.5.0" -uvicorn = {version = ">=0.18.3", extras = ["standard"]} - [[package]] name = "click" version = "8.1.7" @@ -776,30 +600,12 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main"] -markers = "platform_system == \"Windows\" or sys_platform == \"win32\" or os_name == \"nt\"" +markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "coloredlogs" -version = "15.0.1" -description = "Colored terminal output for Python's logging module" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, - {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, -] - -[package.dependencies] -humanfriendly = ">=9.1" - -[package.extras] -cron = ["capturer (>=2.4)"] - [[package]] name = "comm" version = "0.2.2" @@ -906,24 +712,6 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] -[[package]] -name = "deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - [[package]] name = "distro" version = "1.9.0" @@ -982,26 +770,6 @@ files = [ [package.extras] tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] -[[package]] -name = "fastapi" -version = "0.110.0" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "fastapi-0.110.0-py3-none-any.whl", hash = "sha256:87a1f6fb632a218222c5984be540055346a8f5d8a68e8f6fb647b1dc9934de4b"}, - {file = "fastapi-0.110.0.tar.gz", hash = "sha256:266775f0dcc95af9d3ef39bad55cff525329a931d5fd51930aadd4f428bf7ff3"}, -] - -[package.dependencies] -pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.36.3,<0.37.0" -typing-extensions = ">=4.8.0" - -[package.extras] -all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] - [[package]] name = "fastjsonschema" version = "2.19.1" @@ -1017,23 +785,6 @@ files = [ [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] -[[package]] -name = "filelock" -version = "3.13.1" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] - [[package]] name = "filetype" version = "1.2.0" @@ -1046,18 +797,6 @@ files = [ {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, ] -[[package]] -name = "flatbuffers" -version = "24.3.7" -description = "The FlatBuffers serialization format for Python" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "flatbuffers-24.3.7-py2.py3-none-any.whl", hash = "sha256:80c4f5dcad0ee76b7e349671a0d657f2fbba927a0244f88dd3f5ed6a3694e1fc"}, - {file = "flatbuffers-24.3.7.tar.gz", hash = "sha256:0895c22b9a6019ff2f4de2e5e2f7cd15914043e6e7033a94c0c6369422690f22"}, -] - [[package]] name = "fqdn" version = "1.5.1" @@ -1157,84 +896,6 @@ files = [ {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] -[[package]] -name = "fsspec" -version = "2024.3.1" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, - {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] -dropbox = ["dropbox", "dropboxdrivefs", "requests"] -full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -tqdm = ["tqdm"] - -[[package]] -name = "google-auth" -version = "2.28.2" -description = "Google Authentication Library" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "google-auth-2.28.2.tar.gz", hash = "sha256:80b8b4969aa9ed5938c7828308f20f035bc79f9d8fb8120bf9dc8db20b41ba30"}, - {file = "google_auth-2.28.2-py2.py3-none-any.whl", hash = "sha256:9fd67bbcd40f16d9d42f950228e9cf02a2ded4ae49198b27432d0cded5a74c38"}, -] - -[package.dependencies] -cachetools = ">=2.0.0,<6.0" -pyasn1-modules = ">=0.2.1" -rsa = ">=3.1.4,<5" - -[package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] -enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] -pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] -reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0.dev0)"] - -[[package]] -name = "googleapis-common-protos" -version = "1.63.0" -description = "Common protobufs used in Google APIs" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "googleapis-common-protos-1.63.0.tar.gz", hash = "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e"}, - {file = "googleapis_common_protos-1.63.0-py2.py3-none-any.whl", hash = "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632"}, -] - -[package.dependencies] -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" - -[package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] - [[package]] name = "greenlet" version = "3.0.3" @@ -1308,73 +969,6 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] -[[package]] -name = "grpcio" -version = "1.62.1" -description = "HTTP/2-based RPC framework" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "grpcio-1.62.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e"}, - {file = "grpcio-1.62.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243"}, - {file = "grpcio-1.62.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3"}, - {file = "grpcio-1.62.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70"}, - {file = "grpcio-1.62.1-cp310-cp310-win32.whl", hash = "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f"}, - {file = "grpcio-1.62.1-cp310-cp310-win_amd64.whl", hash = "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66"}, - {file = "grpcio-1.62.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2"}, - {file = "grpcio-1.62.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a"}, - {file = "grpcio-1.62.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f"}, - {file = "grpcio-1.62.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db"}, - {file = "grpcio-1.62.1-cp311-cp311-win32.whl", hash = "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c"}, - {file = "grpcio-1.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc"}, - {file = "grpcio-1.62.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b"}, - {file = "grpcio-1.62.1-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1"}, - {file = "grpcio-1.62.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b"}, - {file = "grpcio-1.62.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41"}, - {file = "grpcio-1.62.1-cp312-cp312-win32.whl", hash = "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f"}, - {file = "grpcio-1.62.1-cp312-cp312-win_amd64.whl", hash = "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d"}, - {file = "grpcio-1.62.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a"}, - {file = "grpcio-1.62.1-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9"}, - {file = "grpcio-1.62.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f"}, - {file = "grpcio-1.62.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7"}, - {file = "grpcio-1.62.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407"}, - {file = "grpcio-1.62.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362"}, - {file = "grpcio-1.62.1-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d"}, - {file = "grpcio-1.62.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49"}, - {file = "grpcio-1.62.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06"}, - {file = "grpcio-1.62.1-cp38-cp38-win32.whl", hash = "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4"}, - {file = "grpcio-1.62.1-cp38-cp38-win_amd64.whl", hash = "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b"}, - {file = "grpcio-1.62.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483"}, - {file = "grpcio-1.62.1-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f"}, - {file = "grpcio-1.62.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd"}, - {file = "grpcio-1.62.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585"}, - {file = "grpcio-1.62.1-cp39-cp39-win32.whl", hash = "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4"}, - {file = "grpcio-1.62.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332"}, - {file = "grpcio-1.62.1.tar.gz", hash = "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.62.1)"] - [[package]] name = "h11" version = "0.14.0" @@ -1431,55 +1025,6 @@ http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] trio = ["trio (>=0.22.0,<0.25.0)"] -[[package]] -name = "httptools" -version = "0.6.1" -description = "A collection of framework independent HTTP protocol utils." -optional = false -python-versions = ">=3.8.0" -groups = ["main"] -files = [ - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, - {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, - {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, - {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, - {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, - {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, - {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, -] - -[package.extras] -test = ["Cython (>=0.29.24,<0.30.0)"] - [[package]] name = "httpx" version = "0.27.0" @@ -1505,55 +1050,6 @@ cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -[[package]] -name = "huggingface-hub" -version = "0.21.4" -description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -optional = false -python-versions = ">=3.8.0" -groups = ["main"] -files = [ - {file = "huggingface_hub-0.21.4-py3-none-any.whl", hash = "sha256:df37c2c37fc6c82163cdd8a67ede261687d80d1e262526d6c0ce73b6b3630a7b"}, - {file = "huggingface_hub-0.21.4.tar.gz", hash = "sha256:e1f4968c93726565a80edf6dc309763c7b546d0cfe79aa221206034d50155531"}, -] - -[package.dependencies] -filelock = "*" -fsspec = ">=2023.5.0" -packaging = ">=20.9" -pyyaml = ">=5.1" -requests = "*" -tqdm = ">=4.42.1" -typing-extensions = ">=3.7.4.3" - -[package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] -cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] -fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -hf-transfer = ["hf-transfer (>=0.1.4)"] -inference = ["aiohttp", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)"] -quality = ["mypy (==1.5.1)", "ruff (>=0.1.3)"] -tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["safetensors", "torch"] -typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] - -[[package]] -name = "humanfriendly" -version = "10.0" -description = "Human friendly output for text interfaces using Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, - {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, -] - -[package.dependencies] -pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} - [[package]] name = "idna" version = "3.6" @@ -1566,42 +1062,6 @@ files = [ {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] -[[package]] -name = "importlib-metadata" -version = "6.11.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, - {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "importlib-resources" -version = "6.3.2" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "importlib_resources-6.3.2-py3-none-any.whl", hash = "sha256:f41f4098b16cd140a97d256137cfd943d958219007990b2afb00439fc623f580"}, - {file = "importlib_resources-6.3.2.tar.gz", hash = "sha256:963eb79649252b0160c1afcfe5a1d3fe3ad66edd0a8b114beacffb70c0674223"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["jaraco.collections", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] - [[package]] name = "ipykernel" version = "6.29.3" @@ -1944,24 +1404,23 @@ referencing = ">=0.31.0" [[package]] name = "jupyter" -version = "1.0.0" +version = "1.1.1" description = "Jupyter metapackage. Install all the Jupyter components in one go." optional = false python-versions = "*" groups = ["main"] files = [ - {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, - {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, - {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, + {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, + {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, ] [package.dependencies] ipykernel = "*" ipywidgets = "*" jupyter-console = "*" +jupyterlab = "*" nbconvert = "*" notebook = "*" -qtconsole = "*" [[package]] name = "jupyter-client" @@ -2214,124 +1673,104 @@ files = [ ] [[package]] -name = "kubernetes" -version = "29.0.0" -description = "Kubernetes python client" +name = "langchain" +version = "0.3.17" +description = "Building applications with LLMs through composability" optional = false -python-versions = ">=3.6" +python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "kubernetes-29.0.0-py2.py3-none-any.whl", hash = "sha256:ab8cb0e0576ccdfb71886366efb102c6a20f268d817be065ce7f9909c631e43e"}, - {file = "kubernetes-29.0.0.tar.gz", hash = "sha256:c4812e227ae74d07d53c88293e564e54b850452715a59a927e7e1bc6b9a60459"}, + {file = "langchain-0.3.17-py3-none-any.whl", hash = "sha256:4d6d3cf454cc261a5017fd1fa5014cffcc7aeaccd0ec0530fc10c5f71e6e97a0"}, + {file = "langchain-0.3.17.tar.gz", hash = "sha256:cef56f0a7c8369f35f1fa2690ecf0caa4504a36a5383de0eb29b8a5e26f625a0"}, ] [package.dependencies] -certifi = ">=14.05.14" -google-auth = ">=1.0.1" -oauthlib = ">=3.2.2" -python-dateutil = ">=2.5.3" -pyyaml = ">=5.4.1" -requests = "*" -requests-oauthlib = "*" -six = ">=1.9.0" -urllib3 = ">=1.24.2" -websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" - -[package.extras] -adal = ["adal (>=1.0.2)"] +aiohttp = ">=3.8.3,<4.0.0" +async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} +langchain-core = ">=0.3.33,<0.4.0" +langchain-text-splitters = ">=0.3.3,<0.4.0" +langsmith = ">=0.1.17,<0.4" +numpy = [ + {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""}, + {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, +] +pydantic = ">=2.7.4,<3.0.0" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10" [[package]] -name = "langchain" -version = "0.1.8" +name = "langchain-core" +version = "0.3.33" description = "Building applications with LLMs through composability" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "langchain-0.1.8-py3-none-any.whl", hash = "sha256:19e951b0e2be099ff048ee483acecb47e1a39c33a47dadfee70fcfa20f45cc19"}, - {file = "langchain-0.1.8.tar.gz", hash = "sha256:c8b1c2954a07cd6422c9027459473bafae90c78f07015bf2fc6262fadf97ea44"}, + {file = "langchain_core-0.3.33-py3-none-any.whl", hash = "sha256:269706408a2223f863ff1f9616f31903a5712403199d828b50aadbc4c28b553a"}, + {file = "langchain_core-0.3.33.tar.gz", hash = "sha256:b5dd93a4e7f8198d2fc6048723b0bfecf7aaf128b0d268cbac19c34c1579b953"}, ] [package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -dataclasses-json = ">=0.5.7,<0.7" jsonpatch = ">=1.33,<2.0" -langchain-community = ">=0.0.21,<0.1" -langchain-core = ">=0.1.24,<0.2" -langsmith = ">=0.1.0,<0.2.0" -numpy = ">=1,<2" -pydantic = ">=1,<3" +langsmith = ">=0.1.125,<0.4" +packaging = ">=23.2,<25" +pydantic = [ + {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" - -[package.extras] -azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-textanalytics (>=5.3.0,<6.0.0)", "azure-ai-vision (>=0.11.1b1,<0.12.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0b8)", "openai (<2)"] -clarifai = ["clarifai (>=9.1.0)"] -cli = ["typer (>=0.9.0,<0.10.0)"] -cohere = ["cohere (>=4,<5)"] -docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"] -embeddings = ["sentence-transformers (>=2,<3)"] -extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<5)", "couchbase (>=4.1.9,<5.0.0)", "dashvector (>=1.0.1,<2.0.0)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "langchain-openai (>=0.0.2,<0.1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "rdflib (==7.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] -javascript = ["esprima (>=4.0.1,<5.0.0)"] -llms = ["clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (<2)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"] -openai = ["openai (<2)", "tiktoken (>=0.3.2,<0.6.0)"] -qdrant = ["qdrant-client (>=1.3.1,<2.0.0)"] -text-helpers = ["chardet (>=5.1.0,<6.0.0)"] +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" +typing-extensions = ">=4.7" [[package]] -name = "langchain-community" -version = "0.0.28" -description = "Community contributed LangChain integrations." +name = "langchain-deepseek" +version = "0.1.0" +description = "An integration package connecting DeepSeek and LangChain" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "langchain_community-0.0.28-py3-none-any.whl", hash = "sha256:bdb015ac455ae68432ea104628717583dce041e1abdfcefe86e39f034f5e90b8"}, - {file = "langchain_community-0.0.28.tar.gz", hash = "sha256:8664d243a90550fc5ddc137b712034e02c8d43afc8d4cc832ba5842b44c864ce"}, + {file = "langchain_deepseek-0.1.0-py3-none-any.whl", hash = "sha256:6860adb515adb749e07c4b549e5a45239dd273ce26d829401ccad749369caddd"}, + {file = "langchain_deepseek-0.1.0.tar.gz", hash = "sha256:b81a3c2672daa9f8de344f33ef63244e4fe922c25d535b713c69f6ffca430e28"}, ] [package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -dataclasses-json = ">=0.5.7,<0.7" -langchain-core = ">=0.1.31,<0.2.0" -langsmith = ">=0.1.0,<0.2.0" -numpy = ">=1,<2" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" - -[package.extras] -cli = ["typer (>=0.9.0,<0.10.0)"] -extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "azure-ai-documentintelligence (>=1.0.0b1,<2.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cloudpickle (>=2.0.0)", "cohere (>=4,<5)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "elasticsearch (>=8.12.0,<9.0.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "friendli-client (>=1.2.4,<2.0.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "gradientai (>=1.4.0,<2.0.0)", "hdbcli (>=2.19.21,<3.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "httpx (>=0.24.1,<0.25.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "nvidia-riva-client (>=2.14.0,<3.0.0)", "oci (>=2.119.1,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "oracle-ads (>=2.9.1,<3.0.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "rdflib (==7.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "tidb-vector (>=0.0.3,<1.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "tree-sitter (>=0.20.2,<0.21.0)", "tree-sitter-languages (>=1.8.0,<2.0.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)", "zhipuai (>=1.0.7,<2.0.0)"] +langchain-core = ">=0.3.33,<0.4.0" +langchain-openai = ">=0.3.3,<0.4.0" [[package]] -name = "langchain-core" -version = "0.1.32" -description = "Building applications with LLMs through composability" +name = "langchain-openai" +version = "0.3.3" +description = "An integration package connecting OpenAI and LangChain" optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "langchain_core-0.1.32-py3-none-any.whl", hash = "sha256:192aecdee6216af19b596ec18e7be3da0b9ecb9083eec263e02b68125737245d"}, - {file = "langchain_core-0.1.32.tar.gz", hash = "sha256:d62683becbf20f51f12875791a042320f45eaa0c87a267d30bc03bc1a07f5ec2"}, + {file = "langchain_openai-0.3.3-py3-none-any.whl", hash = "sha256:979ef0d9eca9a34d7c39cd9d0f66d1d38f2f10a5a8c723bbc7e7a8275259c71a"}, + {file = "langchain_openai-0.3.3.tar.gz", hash = "sha256:aaaee691f145d4ed3035fe23dce69e3212c8de7e208e650c1ce292960287725c"}, ] [package.dependencies] -anyio = ">=3,<5" -jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.1.0,<0.2.0" -packaging = ">=23.2,<24.0" -pydantic = ">=1,<3" -PyYAML = ">=5.3" -requests = ">=2,<3" -tenacity = ">=8.1.0,<9.0.0" +langchain-core = ">=0.3.33,<0.4.0" +openai = ">=1.58.1,<2.0.0" +tiktoken = ">=0.7,<1" -[package.extras] -extended-testing = ["jinja2 (>=3,<4)"] +[[package]] +name = "langchain-text-splitters" +version = "0.3.5" +description = "LangChain text splitting utilities" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "langchain_text_splitters-0.3.5-py3-none-any.whl", hash = "sha256:8c9b059827438c5fa8f327b4df857e307828a5ec815163c9b5c9569a3e82c8ee"}, + {file = "langchain_text_splitters-0.3.5.tar.gz", hash = "sha256:11cb7ca3694e5bdd342bc16d3875b7f7381651d4a53cbb91d34f22412ae16443"}, +] + +[package.dependencies] +langchain-core = ">=0.3.29,<0.4.0" [[package]] name = "langdetect" @@ -2348,21 +1787,81 @@ files = [ [package.dependencies] six = "*" +[[package]] +name = "langgraph" +version = "0.2.69" +description = "Building stateful, multi-actor applications with LLMs" +optional = false +python-versions = "<4.0,>=3.9.0" +groups = ["main"] +files = [ + {file = "langgraph-0.2.69-py3-none-any.whl", hash = "sha256:b64a5755fa2c7f2f67608ff4ce0ef8c168b30a0fb551a6c1d2e19bf1d2268ce4"}, + {file = "langgraph-0.2.69.tar.gz", hash = "sha256:77bd6efd967b4f092ec31d2148b3e6ba3c31e202b4f3a975dbb082b19b5bb057"}, +] + +[package.dependencies] +langchain-core = ">=0.2.43,<0.3.0 || >0.3.0,<0.3.1 || >0.3.1,<0.3.2 || >0.3.2,<0.3.3 || >0.3.3,<0.3.4 || >0.3.4,<0.3.5 || >0.3.5,<0.3.6 || >0.3.6,<0.3.7 || >0.3.7,<0.3.8 || >0.3.8,<0.3.9 || >0.3.9,<0.3.10 || >0.3.10,<0.3.11 || >0.3.11,<0.3.12 || >0.3.12,<0.3.13 || >0.3.13,<0.3.14 || >0.3.14,<0.3.15 || >0.3.15,<0.3.16 || >0.3.16,<0.3.17 || >0.3.17,<0.3.18 || >0.3.18,<0.3.19 || >0.3.19,<0.3.20 || >0.3.20,<0.3.21 || >0.3.21,<0.3.22 || >0.3.22,<0.4.0" +langgraph-checkpoint = ">=2.0.10,<3.0.0" +langgraph-sdk = ">=0.1.42,<0.2.0" + +[[package]] +name = "langgraph-checkpoint" +version = "2.0.10" +description = "Library with base interfaces for LangGraph checkpoint savers." +optional = false +python-versions = "<4.0.0,>=3.9.0" +groups = ["main"] +files = [ + {file = "langgraph_checkpoint-2.0.10-py3-none-any.whl", hash = "sha256:0d592cfda2df93844c6ea44d142170a8f7e5ba5320274e0e5e60e27f2749392c"}, + {file = "langgraph_checkpoint-2.0.10.tar.gz", hash = "sha256:2dcc04e09091d588bb6209e49d83ff5406d7231c2590d6ff18fb29ab8b140129"}, +] + +[package.dependencies] +langchain-core = ">=0.2.38,<0.4" +msgpack = ">=1.1.0,<2.0.0" + +[[package]] +name = "langgraph-sdk" +version = "0.1.51" +description = "SDK for interacting with LangGraph API" +optional = false +python-versions = "<4.0.0,>=3.9.0" +groups = ["main"] +files = [ + {file = "langgraph_sdk-0.1.51-py3-none-any.whl", hash = "sha256:ce2b58466d1700d06149782ed113157a8694a6d7932c801f316cd13fab315fe4"}, + {file = "langgraph_sdk-0.1.51.tar.gz", hash = "sha256:dea1363e72562cb1e82a2d156be8d5b1a69ff3fe8815eee0e1e7a2f423242ec1"}, +] + +[package.dependencies] +httpx = ">=0.25.2" +orjson = ">=3.10.1" + [[package]] name = "langsmith" -version = "0.1.5" +version = "0.3.5" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false -python-versions = ">=3.8.1,<4.0" +python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "langsmith-0.1.5-py3-none-any.whl", hash = "sha256:a1811821a923d90e53bcbacdd0988c3c366aff8f4c120d8777e7af8ecda06268"}, - {file = "langsmith-0.1.5.tar.gz", hash = "sha256:aa7a2861aa3d9ae563a077c622953533800466c4e2e539b0d567b84d5fd5b157"}, + {file = "langsmith-0.3.5-py3-none-any.whl", hash = "sha256:29da924d2e3662dd56f96d179ebc06662b66dd0b2317362ccebe0de1b78750e7"}, + {file = "langsmith-0.3.5.tar.gz", hash = "sha256:d891a205f70ab0b2c26311db6c52486ffc9fc1124238b999619445f6ae900725"}, ] [package.dependencies] -pydantic = ">=1,<3" +httpx = ">=0.23.0,<1" +orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} +pydantic = [ + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] requests = ">=2,<3" +requests-toolbelt = ">=1.0.0,<2.0.0" +zstandard = ">=0.23.0,<0.24.0" + +[package.extras] +langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] +pytest = ["pytest (>=7.0.0)", "rich (>=13.9.4,<14.0.0)"] [[package]] name = "lxml" @@ -2577,128 +2076,79 @@ files = [ ] [[package]] -name = "mmh3" -version = "4.1.0" -description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be5ac76a8b0cd8095784e51e4c1c9c318c19edcd1709a06eb14979c8d850c31a"}, - {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98a49121afdfab67cd80e912b36404139d7deceb6773a83620137aaa0da5714c"}, - {file = "mmh3-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5259ac0535874366e7d1a5423ef746e0d36a9e3c14509ce6511614bdc5a7ef5b"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5950827ca0453a2be357696da509ab39646044e3fa15cad364eb65d78797437"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1dd0f652ae99585b9dd26de458e5f08571522f0402155809fd1dc8852a613a39"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d25548070942fab1e4a6f04d1626d67e66d0b81ed6571ecfca511f3edf07e6"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53db8d9bad3cb66c8f35cbc894f336273f63489ce4ac416634932e3cbe79eb5b"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75da0f615eb55295a437264cc0b736753f830b09d102aa4c2a7d719bc445ec05"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b926b07fd678ea84b3a2afc1fa22ce50aeb627839c44382f3d0291e945621e1a"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c5b053334f9b0af8559d6da9dc72cef0a65b325ebb3e630c680012323c950bb6"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bf33dc43cd6de2cb86e0aa73a1cc6530f557854bbbe5d59f41ef6de2e353d7b"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fa7eacd2b830727ba3dd65a365bed8a5c992ecd0c8348cf39a05cc77d22f4970"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42dfd6742b9e3eec599f85270617debfa0bbb913c545bb980c8a4fa7b2d047da"}, - {file = "mmh3-4.1.0-cp310-cp310-win32.whl", hash = "sha256:2974ad343f0d39dcc88e93ee6afa96cedc35a9883bc067febd7ff736e207fa47"}, - {file = "mmh3-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:74699a8984ded645c1a24d6078351a056f5a5f1fe5838870412a68ac5e28d865"}, - {file = "mmh3-4.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:f0dc874cedc23d46fc488a987faa6ad08ffa79e44fb08e3cd4d4cf2877c00a00"}, - {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3280a463855b0eae64b681cd5b9ddd9464b73f81151e87bb7c91a811d25619e6"}, - {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97ac57c6c3301769e757d444fa7c973ceb002cb66534b39cbab5e38de61cd896"}, - {file = "mmh3-4.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b6502cdb4dbd880244818ab363c8770a48cdccecf6d729ade0241b736b5ec0"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52ba2da04671a9621580ddabf72f06f0e72c1c9c3b7b608849b58b11080d8f14"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a5fef4c4ecc782e6e43fbeab09cff1bac82c998a1773d3a5ee6a3605cde343e"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5135358a7e00991f73b88cdc8eda5203bf9de22120d10a834c5761dbeb07dd13"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cff9ae76a54f7c6fe0167c9c4028c12c1f6de52d68a31d11b6790bb2ae685560"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f02576a4d106d7830ca90278868bf0983554dd69183b7bbe09f2fcd51cf54f"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:073d57425a23721730d3ff5485e2da489dd3c90b04e86243dd7211f889898106"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:71e32ddec7f573a1a0feb8d2cf2af474c50ec21e7a8263026e8d3b4b629805db"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7cbb20b29d57e76a58b40fd8b13a9130db495a12d678d651b459bf61c0714cea"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a42ad267e131d7847076bb7e31050f6c4378cd38e8f1bf7a0edd32f30224d5c9"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a013979fc9390abadc445ea2527426a0e7a4495c19b74589204f9b71bcaafeb"}, - {file = "mmh3-4.1.0-cp311-cp311-win32.whl", hash = "sha256:1d3b1cdad7c71b7b88966301789a478af142bddcb3a2bee563f7a7d40519a00f"}, - {file = "mmh3-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dc6dc32eb03727467da8e17deffe004fbb65e8b5ee2b502d36250d7a3f4e2ec"}, - {file = "mmh3-4.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:9ae3a5c1b32dda121c7dc26f9597ef7b01b4c56a98319a7fe86c35b8bc459ae6"}, - {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0033d60c7939168ef65ddc396611077a7268bde024f2c23bdc283a19123f9e9c"}, - {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5"}, - {file = "mmh3-4.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d82eb4defa245e02bb0b0dc4f1e7ee284f8d212633389c91f7fba99ba993f0a2"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb04e2feeabaad6231e89cd43b3d01a4403579aa792c9ab6fdeef45cc58d4ec0"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e3b1a27def545ce11e36158ba5d5390cdbc300cfe456a942cc89d649cf7e3b2"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce0ab79ff736d7044e5e9b3bfe73958a55f79a4ae672e6213e92492ad5e734d5"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b02268be6e0a8eeb8a924d7db85f28e47344f35c438c1e149878bb1c47b1cd3"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:deb887f5fcdaf57cf646b1e062d56b06ef2f23421c80885fce18b37143cba828"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99dd564e9e2b512eb117bd0cbf0f79a50c45d961c2a02402787d581cec5448d5"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:08373082dfaa38fe97aa78753d1efd21a1969e51079056ff552e687764eafdfe"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:54b9c6a2ea571b714e4fe28d3e4e2db37abfd03c787a58074ea21ee9a8fd1740"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a7b1edf24c69e3513f879722b97ca85e52f9032f24a52284746877f6a7304086"}, - {file = "mmh3-4.1.0-cp312-cp312-win32.whl", hash = "sha256:411da64b951f635e1e2284b71d81a5a83580cea24994b328f8910d40bed67276"}, - {file = "mmh3-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bebc3ecb6ba18292e3d40c8712482b4477abd6981c2ebf0e60869bd90f8ac3a9"}, - {file = "mmh3-4.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:168473dd608ade6a8d2ba069600b35199a9af837d96177d3088ca91f2b3798e3"}, - {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:372f4b7e1dcde175507640679a2a8790185bb71f3640fc28a4690f73da986a3b"}, - {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:438584b97f6fe13e944faf590c90fc127682b57ae969f73334040d9fa1c7ffa5"}, - {file = "mmh3-4.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6e27931b232fc676675fac8641c6ec6b596daa64d82170e8597f5a5b8bdcd3b6"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:571a92bad859d7b0330e47cfd1850b76c39b615a8d8e7aa5853c1f971fd0c4b1"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a69d6afe3190fa08f9e3a58e5145549f71f1f3fff27bd0800313426929c7068"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afb127be0be946b7630220908dbea0cee0d9d3c583fa9114a07156f98566dc28"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940d86522f36348ef1a494cbf7248ab3f4a1638b84b59e6c9e90408bd11ad729"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dcccc4935686619a8e3d1f7b6e97e3bd89a4a796247930ee97d35ea1a39341"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01bb9b90d61854dfc2407c5e5192bfb47222d74f29d140cb2dd2a69f2353f7cc"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bcb1b8b951a2c0b0fb8a5426c62a22557e2ffc52539e0a7cc46eb667b5d606a9"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6477a05d5e5ab3168e82e8b106e316210ac954134f46ec529356607900aea82a"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:da5892287e5bea6977364b15712a2573c16d134bc5fdcdd4cf460006cf849278"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:99180d7fd2327a6fffbaff270f760576839dc6ee66d045fa3a450f3490fda7f5"}, - {file = "mmh3-4.1.0-cp38-cp38-win32.whl", hash = "sha256:9b0d4f3949913a9f9a8fb1bb4cc6ecd52879730aab5ff8c5a3d8f5b593594b73"}, - {file = "mmh3-4.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:598c352da1d945108aee0c3c3cfdd0e9b3edef74108f53b49d481d3990402169"}, - {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:475d6d1445dd080f18f0f766277e1237fa2914e5fe3307a3b2a3044f30892103"}, - {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5ca07c41e6a2880991431ac717c2a049056fff497651a76e26fc22224e8b5732"}, - {file = "mmh3-4.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ebe052fef4bbe30c0548d12ee46d09f1b69035ca5208a7075e55adfe091be44"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaefd42e85afb70f2b855a011f7b4d8a3c7e19c3f2681fa13118e4d8627378c5"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0ae43caae5a47afe1b63a1ae3f0986dde54b5fb2d6c29786adbfb8edc9edfb"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6218666f74c8c013c221e7f5f8a693ac9cf68e5ac9a03f2373b32d77c48904de"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac59294a536ba447b5037f62d8367d7d93b696f80671c2c45645fa9f1109413c"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086844830fcd1e5c84fec7017ea1ee8491487cfc877847d96f86f68881569d2e"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e42b38fad664f56f77f6fbca22d08450f2464baa68acdbf24841bf900eb98e87"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d08b790a63a9a1cde3b5d7d733ed97d4eb884bfbc92f075a091652d6bfd7709a"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:73ea4cc55e8aea28c86799ecacebca09e5f86500414870a8abaedfcbaf74d288"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f90938ff137130e47bcec8dc1f4ceb02f10178c766e2ef58a9f657ff1f62d124"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:aa1f13e94b8631c8cd53259250556edcf1de71738936b60febba95750d9632bd"}, - {file = "mmh3-4.1.0-cp39-cp39-win32.whl", hash = "sha256:a3b680b471c181490cf82da2142029edb4298e1bdfcb67c76922dedef789868d"}, - {file = "mmh3-4.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:fefef92e9c544a8dbc08f77a8d1b6d48006a750c4375bbcd5ff8199d761e263b"}, - {file = "mmh3-4.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:8e2c1f6a2b41723a4f82bd5a762a777836d29d664fc0095f17910bea0adfd4a6"}, - {file = "mmh3-4.1.0.tar.gz", hash = "sha256:a1cf25348b9acd229dda464a094d6170f47d2850a1fcb762a3b6172d2ce6ca4a"}, -] - -[package.extras] -test = ["mypy (>=1.0)", "pytest (>=7.0.0)"] - -[[package]] -name = "monotonic" -version = "1.6" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, - {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" +name = "msgpack" +version = "1.1.0" +description = "MessagePack serializer" optional = false -python-versions = "*" +python-versions = ">=3.8" groups = ["main"] files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, + {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, + {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, + {file = "msgpack-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:914571a2a5b4e7606997e169f64ce53a8b1e06f2cf2c3a7273aa106236d43dd5"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c921af52214dcbb75e6bdf6a661b23c3e6417f00c603dd2070bccb5c3ef499f5"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8ce0b22b890be5d252de90d0e0d119f363012027cf256185fc3d474c44b1b9e"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73322a6cc57fcee3c0c57c4463d828e9428275fb85a27aa2aa1a92fdc42afd7b"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e1f3c3d21f7cf67bcf2da8e494d30a75e4cf60041d98b3f79875afb5b96f3a3f"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64fc9068d701233effd61b19efb1485587560b66fe57b3e50d29c5d78e7fef68"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:42f754515e0f683f9c79210a5d1cad631ec3d06cea5172214d2176a42e67e19b"}, + {file = "msgpack-1.1.0-cp310-cp310-win32.whl", hash = "sha256:3df7e6b05571b3814361e8464f9304c42d2196808e0119f55d0d3e62cd5ea044"}, + {file = "msgpack-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:685ec345eefc757a7c8af44a3032734a739f8c45d1b0ac45efc5d8977aa4720f"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d364a55082fb2a7416f6c63ae383fbd903adb5a6cf78c5b96cc6316dc1cedc7"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79ec007767b9b56860e0372085f8504db5d06bd6a327a335449508bbee9648fa"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ad622bf7756d5a497d5b6836e7fc3752e2dd6f4c648e24b1803f6048596f701"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e59bca908d9ca0de3dc8684f21ebf9a690fe47b6be93236eb40b99af28b6ea6"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1da8f11a3dd397f0a32c76165cf0c4eb95b31013a94f6ecc0b280c05c91b59"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452aff037287acb1d70a804ffd022b21fa2bb7c46bee884dbc864cc9024128a0"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8da4bf6d54ceed70e8861f833f83ce0814a2b72102e890cbdfe4b34764cdd66e"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:41c991beebf175faf352fb940bf2af9ad1fb77fd25f38d9142053914947cdbf6"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a52a1f3a5af7ba1c9ace055b659189f6c669cf3657095b50f9602af3a3ba0fe5"}, + {file = "msgpack-1.1.0-cp311-cp311-win32.whl", hash = "sha256:58638690ebd0a06427c5fe1a227bb6b8b9fdc2bd07701bec13c2335c82131a88"}, + {file = "msgpack-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd2906780f25c8ed5d7b323379f6138524ba793428db5d0e9d226d3fa6aa1788"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b"}, + {file = "msgpack-1.1.0-cp312-cp312-win32.whl", hash = "sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b"}, + {file = "msgpack-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:071603e2f0771c45ad9bc65719291c568d4edf120b44eb36324dcb02a13bfddf"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0f92a83b84e7c0749e3f12821949d79485971f087604178026085f60ce109330"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1964df7b81285d00a84da4e70cb1383f2e665e0f1f2a7027e683956d04b734"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59caf6a4ed0d164055ccff8fe31eddc0ebc07cf7326a2aaa0dbf7a4001cd823e"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0907e1a7119b337971a689153665764adc34e89175f9a34793307d9def08e6ca"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65553c9b6da8166e819a6aa90ad15288599b340f91d18f60b2061f402b9a4915"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a946a8992941fea80ed4beae6bff74ffd7ee129a90b4dd5cf9c476a30e9708d"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4b51405e36e075193bc051315dbf29168d6141ae2500ba8cd80a522964e31434"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4c01941fd2ff87c2a934ee6055bda4ed353a7846b8d4f341c428109e9fcde8c"}, + {file = "msgpack-1.1.0-cp313-cp313-win32.whl", hash = "sha256:7c9a35ce2c2573bada929e0b7b3576de647b0defbd25f5139dcdaba0ae35a4cc"}, + {file = "msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c40ffa9a15d74e05ba1fe2681ea33b9caffd886675412612d93ab17b58ea2fec"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1ba6136e650898082d9d5a5217d5906d1e138024f836ff48691784bbe1adf96"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0856a2b7e8dcb874be44fea031d22e5b3a19121be92a1e098f46068a11b0870"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:471e27a5787a2e3f974ba023f9e265a8c7cfd373632247deb225617e3100a3c7"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:646afc8102935a388ffc3914b336d22d1c2d6209c773f3eb5dd4d6d3b6f8c1cb"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13599f8829cfbe0158f6456374e9eea9f44eee08076291771d8ae93eda56607f"}, + {file = "msgpack-1.1.0-cp38-cp38-win32.whl", hash = "sha256:8a84efb768fb968381e525eeeb3d92857e4985aacc39f3c47ffd00eb4509315b"}, + {file = "msgpack-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:879a7b7b0ad82481c52d3c7eb99bf6f0645dbdec5134a4bddbd16f3506947feb"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:53258eeb7a80fc46f62fd59c876957a2d0e15e6449a9e71842b6d24419d88ca1"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e7b853bbc44fb03fbdba34feb4bd414322180135e2cb5164f20ce1c9795ee48"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3e9b4936df53b970513eac1758f3882c88658a220b58dcc1e39606dccaaf01c"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46c34e99110762a76e3911fc923222472c9d681f1094096ac4102c18319e6468"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a706d1e74dd3dea05cb54580d9bd8b2880e9264856ce5068027eed09680aa74"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:534480ee5690ab3cbed89d4c8971a5c631b69a8c0883ecfea96c19118510c846"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8cf9e8c3a2153934a23ac160cc4cba0ec035f6867c8013cc6077a79823370346"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3180065ec2abbe13a4ad37688b61b99d7f9e012a535b930e0e683ad6bc30155b"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5a91481a3cc573ac8c0d9aace09345d989dc4a0202b7fcb312c88c26d4e71a8"}, + {file = "msgpack-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f80bc7d47f76089633763f952e67f8214cb7b3ee6bfa489b3cb6a84cfac114cd"}, + {file = "msgpack-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:4d1b7ff2d6146e16e8bd665ac726a89c74163ef8cd39fa8c1087d4e52d3a2325"}, + {file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"}, ] -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] -tests = ["pytest (>=4.6)"] - [[package]] name = "multidict" version = "6.0.5" @@ -3013,346 +2463,141 @@ files = [ {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, -] - -[[package]] -name = "oauthlib" -version = "3.2.2" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, - {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, -] - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - -[[package]] -name = "olefile" -version = "0.47" -description = "Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f"}, - {file = "olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c"}, -] - -[package.extras] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "onnxruntime" -version = "1.17.1" -description = "ONNX Runtime is a runtime accelerator for Machine Learning models" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, - {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, - {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebbcd2bc3a066cf54e6f18c75708eb4d309ef42be54606d22e5bdd78afc5b0d7"}, - {file = "onnxruntime-1.17.1-cp310-cp310-win32.whl", hash = "sha256:5e3716b5eec9092e29a8d17aab55e737480487deabfca7eac3cd3ed952b6ada9"}, - {file = "onnxruntime-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:fbb98cced6782ae1bb799cc74ddcbbeeae8819f3ad1d942a74d88e72b6511337"}, - {file = "onnxruntime-1.17.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:36fd6f87a1ecad87e9c652e42407a50fb305374f9a31d71293eb231caae18784"}, - {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99a8bddeb538edabc524d468edb60ad4722cff8a49d66f4e280c39eace70500b"}, - {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd7fddb4311deb5a7d3390cd8e9b3912d4d963efbe4dfe075edbaf18d01c024e"}, - {file = "onnxruntime-1.17.1-cp311-cp311-win32.whl", hash = "sha256:606a7cbfb6680202b0e4f1890881041ffc3ac6e41760a25763bd9fe146f0b335"}, - {file = "onnxruntime-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:53e4e06c0a541696ebdf96085fd9390304b7b04b748a19e02cf3b35c869a1e76"}, - {file = "onnxruntime-1.17.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:40f08e378e0f85929712a2b2c9b9a9cc400a90c8a8ca741d1d92c00abec60843"}, - {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac79da6d3e1bb4590f1dad4bb3c2979d7228555f92bb39820889af8b8e6bd472"}, - {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae9ba47dc099004e3781f2d0814ad710a13c868c739ab086fc697524061695ea"}, - {file = "onnxruntime-1.17.1-cp312-cp312-win32.whl", hash = "sha256:2dff1a24354220ac30e4a4ce2fb1df38cb1ea59f7dac2c116238d63fe7f4c5ff"}, - {file = "onnxruntime-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:6226a5201ab8cafb15e12e72ff2a4fc8f50654e8fa5737c6f0bd57c5ff66827e"}, - {file = "onnxruntime-1.17.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cd0c07c0d1dfb8629e820b05fda5739e4835b3b82faf43753d2998edf2cf00aa"}, - {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:617ebdf49184efa1ba6e4467e602fbfa029ed52c92f13ce3c9f417d303006381"}, - {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dae9071e3facdf2920769dceee03b71c684b6439021defa45b830d05e148924"}, - {file = "onnxruntime-1.17.1-cp38-cp38-win32.whl", hash = "sha256:835d38fa1064841679433b1aa8138b5e1218ddf0cfa7a3ae0d056d8fd9cec713"}, - {file = "onnxruntime-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:96621e0c555c2453bf607606d08af3f70fbf6f315230c28ddea91754e17ad4e6"}, - {file = "onnxruntime-1.17.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:7a9539935fb2d78ebf2cf2693cad02d9930b0fb23cdd5cf37a7df813e977674d"}, - {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45c6a384e9d9a29c78afff62032a46a993c477b280247a7e335df09372aedbe9"}, - {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e19f966450f16863a1d6182a685ca33ae04d7772a76132303852d05b95411ea"}, - {file = "onnxruntime-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e2ae712d64a42aac29ed7a40a426cb1e624a08cfe9273dcfe681614aa65b07dc"}, - {file = "onnxruntime-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7e9f7fb049825cdddf4a923cfc7c649d84d63c0134315f8e0aa9e0c3004672c"}, -] - -[package.dependencies] -coloredlogs = "*" -flatbuffers = "*" -numpy = ">=1.21.6" -packaging = "*" -protobuf = "*" -sympy = "*" - -[[package]] -name = "openai" -version = "1.61.0" -description = "The official Python library for the openai API" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "openai-1.61.0-py3-none-any.whl", hash = "sha256:e8c512c0743accbdbe77f3429a1490d862f8352045de8dc81969301eb4a4f666"}, - {file = "openai-1.61.0.tar.gz", hash = "sha256:216f325a24ed8578e929b0f1b3fb2052165f3b04b0461818adaa51aa29c71f8a"}, -] - -[package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -jiter = ">=0.4.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -tqdm = ">4" -typing-extensions = ">=4.11,<5" - -[package.extras] -datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -realtime = ["websockets (>=13,<15)"] - -[[package]] -name = "opentelemetry-api" -version = "1.23.0" -description = "OpenTelemetry Python API" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_api-1.23.0-py3-none-any.whl", hash = "sha256:cc03ea4025353048aadb9c64919099663664672ea1c6be6ddd8fee8e4cd5e774"}, - {file = "opentelemetry_api-1.23.0.tar.gz", hash = "sha256:14a766548c8dd2eb4dfc349739eb4c3893712a0daa996e5dbf945f9da665da9d"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<7.0" - -[[package]] -name = "opentelemetry-exporter-otlp-proto-common" -version = "1.23.0" -description = "OpenTelemetry Protobuf encoding" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_exporter_otlp_proto_common-1.23.0-py3-none-any.whl", hash = "sha256:2a9e7e9d5a8b026b572684b6b24dcdefcaa58613d5ce3d644130b0c373c056c1"}, - {file = "opentelemetry_exporter_otlp_proto_common-1.23.0.tar.gz", hash = "sha256:35e4ea909e7a0b24235bd0aaf17fba49676527feb1823b46565ff246d5a1ab18"}, -] - -[package.dependencies] -opentelemetry-proto = "1.23.0" - -[[package]] -name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.23.0" -description = "OpenTelemetry Collector Protobuf over gRPC Exporter" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0-py3-none-any.whl", hash = "sha256:40f9e3e7761eb34f2a1001f4543028783ac26e2db27e420d5374f2cca0182dad"}, - {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0.tar.gz", hash = "sha256:aa1a012eea5342bfef51fcf3f7f22601dcb0f0984a07ffe6025b2fbb6d91a2a9"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -googleapis-common-protos = ">=1.52,<2.0" -grpcio = ">=1.0.0,<2.0.0" -opentelemetry-api = ">=1.15,<2.0" -opentelemetry-exporter-otlp-proto-common = "1.23.0" -opentelemetry-proto = "1.23.0" -opentelemetry-sdk = ">=1.23.0,<1.24.0" - -[package.extras] -test = ["pytest-grpc"] - -[[package]] -name = "opentelemetry-instrumentation" -version = "0.44b0" -description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_instrumentation-0.44b0-py3-none-any.whl", hash = "sha256:79560f386425176bcc60c59190064597096114c4a8e5154f1cb281bb4e47d2fc"}, - {file = "opentelemetry_instrumentation-0.44b0.tar.gz", hash = "sha256:8213d02d8c0987b9b26386ae3e091e0477d6331673123df736479322e1a50b48"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.4,<2.0" -setuptools = ">=16.0" -wrapt = ">=1.0.0,<2.0.0" - -[[package]] -name = "opentelemetry-instrumentation-asgi" -version = "0.44b0" -description = "ASGI instrumentation for OpenTelemetry" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_instrumentation_asgi-0.44b0-py3-none-any.whl", hash = "sha256:0d95c84a8991008c8a8ac35e15d43cc7768a5bb46f95f129e802ad2990d7c366"}, - {file = "opentelemetry_instrumentation_asgi-0.44b0.tar.gz", hash = "sha256:72d4d28ec7ccd551eac11edc5ae8cac3586c0a228467d6a95fad7b6d4edd597a"}, -] - -[package.dependencies] -asgiref = ">=3.0,<4.0" -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.44b0" -opentelemetry-semantic-conventions = "0.44b0" -opentelemetry-util-http = "0.44b0" - -[package.extras] -instruments = ["asgiref (>=3.0,<4.0)"] -test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-utils (==0.44b0)"] - -[[package]] -name = "opentelemetry-instrumentation-fastapi" -version = "0.44b0" -description = "OpenTelemetry FastAPI Instrumentation" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_instrumentation_fastapi-0.44b0-py3-none-any.whl", hash = "sha256:4441482944bea6676816668d56deb94af990e8c6e9582c581047e5d84c91d3c9"}, - {file = "opentelemetry_instrumentation_fastapi-0.44b0.tar.gz", hash = "sha256:67ed10b93ad9d35238ae0be73cf8acbbb65a4a61fb7444d0aee5b0c492e294db"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] -[package.dependencies] -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.44b0" -opentelemetry-instrumentation-asgi = "0.44b0" -opentelemetry-semantic-conventions = "0.44b0" -opentelemetry-util-http = "0.44b0" - -[package.extras] -instruments = ["fastapi (>=0.58,<1.0)"] -test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils (==0.44b0)", "requests (>=2.23,<3.0)"] - [[package]] -name = "opentelemetry-proto" -version = "1.23.0" -description = "OpenTelemetry Python Proto" +name = "olefile" +version = "0.47" +description = "Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)" optional = false -python-versions = ">=3.8" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] files = [ - {file = "opentelemetry_proto-1.23.0-py3-none-any.whl", hash = "sha256:4c017deca052cb287a6003b7c989ed8b47af65baeb5d57ebf93dde0793f78509"}, - {file = "opentelemetry_proto-1.23.0.tar.gz", hash = "sha256:e6aaf8b7ace8d021942d546161401b83eed90f9f2cc6f13275008cea730e4651"}, + {file = "olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f"}, + {file = "olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c"}, ] -[package.dependencies] -protobuf = ">=3.19,<5.0" +[package.extras] +tests = ["pytest", "pytest-cov"] [[package]] -name = "opentelemetry-sdk" -version = "1.23.0" -description = "OpenTelemetry Python SDK" +name = "openai" +version = "1.61.0" +description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "opentelemetry_sdk-1.23.0-py3-none-any.whl", hash = "sha256:a93c96990ac0f07c6d679e2f1015864ff7a4f5587122dd5af968034436efb1fd"}, - {file = "opentelemetry_sdk-1.23.0.tar.gz", hash = "sha256:9ddf60195837b59e72fd2033d6a47e2b59a0f74f0ec37d89387d89e3da8cab7f"}, + {file = "openai-1.61.0-py3-none-any.whl", hash = "sha256:e8c512c0743accbdbe77f3429a1490d862f8352045de8dc81969301eb4a4f666"}, + {file = "openai-1.61.0.tar.gz", hash = "sha256:216f325a24ed8578e929b0f1b3fb2052165f3b04b0461818adaa51aa29c71f8a"}, ] [package.dependencies] -opentelemetry-api = "1.23.0" -opentelemetry-semantic-conventions = "0.44b0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.44b0" -description = "OpenTelemetry Semantic Conventions" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_semantic_conventions-0.44b0-py3-none-any.whl", hash = "sha256:7c434546c9cbd797ab980cc88bf9ff3f4a5a28f941117cad21694e43d5d92019"}, - {file = "opentelemetry_semantic_conventions-0.44b0.tar.gz", hash = "sha256:2e997cb28cd4ca81a25a9a43365f593d0c2b76be0685015349a89abdf1aa4ffa"}, -] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.11,<5" -[[package]] -name = "opentelemetry-util-http" -version = "0.44b0" -description = "Web util for OpenTelemetry" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "opentelemetry_util_http-0.44b0-py3-none-any.whl", hash = "sha256:ff018ab6a2fa349537ff21adcef99a294248b599be53843c44f367aef6bccea5"}, - {file = "opentelemetry_util_http-0.44b0.tar.gz", hash = "sha256:75896dffcbbeb5df5429ad4526e22307fc041a27114e0c5bfd90bb219381e68f"}, -] +[package.extras] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +realtime = ["websockets (>=13,<15)"] [[package]] name = "orjson" -version = "3.9.15" +version = "3.10.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "orjson-3.9.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fbbeb3c9b2edb5fd044b2a070f127a0ac456ffd079cb82746fc84af01ef021a4"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b66bcc5670e8a6b78f0313bcb74774c8291f6f8aeef10fe70e910b8040f3ab75"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2973474811db7b35c30248d1129c64fd2bdf40d57d84beed2a9a379a6f57d0ab"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fe41b6f72f52d3da4db524c8653e46243c8c92df826ab5ffaece2dba9cccd58"}, - {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4228aace81781cc9d05a3ec3a6d2673a1ad0d8725b4e915f1089803e9efd2b99"}, - {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f7b65bfaf69493c73423ce9db66cfe9138b2f9ef62897486417a8fcb0a92bfe"}, - {file = "orjson-3.9.15-cp310-none-win32.whl", hash = "sha256:2d99e3c4c13a7b0fb3792cc04c2829c9db07838fb6973e578b85c1745e7d0ce7"}, - {file = "orjson-3.9.15-cp310-none-win_amd64.whl", hash = "sha256:b725da33e6e58e4a5d27958568484aa766e825e93aa20c26c91168be58e08cbb"}, - {file = "orjson-3.9.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c8e8fe01e435005d4421f183038fc70ca85d2c1e490f51fb972db92af6e047c2"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87f1097acb569dde17f246faa268759a71a2cb8c96dd392cd25c668b104cad2f"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff0f9913d82e1d1fadbd976424c316fbc4d9c525c81d047bbdd16bd27dd98cfc"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8055ec598605b0077e29652ccfe9372247474375e0e3f5775c91d9434e12d6b1"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6768a327ea1ba44c9114dba5fdda4a214bdb70129065cd0807eb5f010bfcbb5"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12365576039b1a5a47df01aadb353b68223da413e2e7f98c02403061aad34bde"}, - {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:71c6b009d431b3839d7c14c3af86788b3cfac41e969e3e1c22f8a6ea13139404"}, - {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e18668f1bd39e69b7fed19fa7cd1cd110a121ec25439328b5c89934e6d30d357"}, - {file = "orjson-3.9.15-cp311-none-win32.whl", hash = "sha256:62482873e0289cf7313461009bf62ac8b2e54bc6f00c6fabcde785709231a5d7"}, - {file = "orjson-3.9.15-cp311-none-win_amd64.whl", hash = "sha256:b3d336ed75d17c7b1af233a6561cf421dee41d9204aa3cfcc6c9c65cd5bb69a8"}, - {file = "orjson-3.9.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:82425dd5c7bd3adfe4e94c78e27e2fa02971750c2b7ffba648b0f5d5cc016a73"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c51378d4a8255b2e7c1e5cc430644f0939539deddfa77f6fac7b56a9784160a"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ae4e06be04dc00618247c4ae3f7c3e561d5bc19ab6941427f6d3722a0875ef7"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcef128f970bb63ecf9a65f7beafd9b55e3aaf0efc271a4154050fc15cdb386e"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b72758f3ffc36ca566ba98a8e7f4f373b6c17c646ff8ad9b21ad10c29186f00d"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c57bc7b946cf2efa67ac55766e41764b66d40cbd9489041e637c1304400494"}, - {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:946c3a1ef25338e78107fba746f299f926db408d34553b4754e90a7de1d44068"}, - {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2f256d03957075fcb5923410058982aea85455d035607486ccb847f095442bda"}, - {file = "orjson-3.9.15-cp312-none-win_amd64.whl", hash = "sha256:5bb399e1b49db120653a31463b4a7b27cf2fbfe60469546baf681d1b39f4edf2"}, - {file = "orjson-3.9.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b17f0f14a9c0ba55ff6279a922d1932e24b13fc218a3e968ecdbf791b3682b25"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f6cbd8e6e446fb7e4ed5bac4661a29e43f38aeecbf60c4b900b825a353276a1"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76bc6356d07c1d9f4b782813094d0caf1703b729d876ab6a676f3aaa9a47e37c"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdfa97090e2d6f73dced247a2f2d8004ac6449df6568f30e7fa1a045767c69a6"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7413070a3e927e4207d00bd65f42d1b780fb0d32d7b1d951f6dc6ade318e1b5a"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cf1596680ac1f01839dba32d496136bdd5d8ffb858c280fa82bbfeb173bdd40"}, - {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:809d653c155e2cc4fd39ad69c08fdff7f4016c355ae4b88905219d3579e31eb7"}, - {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:920fa5a0c5175ab14b9c78f6f820b75804fb4984423ee4c4f1e6d748f8b22bc1"}, - {file = "orjson-3.9.15-cp38-none-win32.whl", hash = "sha256:2b5c0f532905e60cf22a511120e3719b85d9c25d0e1c2a8abb20c4dede3b05a5"}, - {file = "orjson-3.9.15-cp38-none-win_amd64.whl", hash = "sha256:67384f588f7f8daf040114337d34a5188346e3fae6c38b6a19a2fe8c663a2f9b"}, - {file = "orjson-3.9.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6fc2fe4647927070df3d93f561d7e588a38865ea0040027662e3e541d592811e"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34cbcd216e7af5270f2ffa63a963346845eb71e174ea530867b7443892d77180"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f541587f5c558abd93cb0de491ce99a9ef8d1ae29dd6ab4dbb5a13281ae04cbd"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92255879280ef9c3c0bcb327c5a1b8ed694c290d61a6a532458264f887f052cb"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a1f57fb601c426635fcae9ddbe90dfc1ed42245eb4c75e4960440cac667262"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede0bde16cc6e9b96633df1631fbcd66491d1063667f260a4f2386a098393790"}, - {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e88b97ef13910e5f87bcbc4dd7979a7de9ba8702b54d3204ac587e83639c0c2b"}, - {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57d5d8cf9c27f7ef6bc56a5925c7fbc76b61288ab674eb352c26ac780caa5b10"}, - {file = "orjson-3.9.15-cp39-none-win32.whl", hash = "sha256:001f4eb0ecd8e9ebd295722d0cbedf0748680fb9998d3993abaed2f40587257a"}, - {file = "orjson-3.9.15-cp39-none-win_amd64.whl", hash = "sha256:ea0b183a5fe6b2b45f3b854b0d19c4e932d6f5934ae1f723b07cf9560edd4ec7"}, - {file = "orjson-3.9.15.tar.gz", hash = "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061"}, + {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e"}, + {file = "orjson-3.10.15-cp310-cp310-win32.whl", hash = "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab"}, + {file = "orjson-3.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806"}, + {file = "orjson-3.10.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c"}, + {file = "orjson-3.10.15-cp311-cp311-win32.whl", hash = "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e"}, + {file = "orjson-3.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e"}, + {file = "orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a"}, + {file = "orjson-3.10.15-cp312-cp312-win32.whl", hash = "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665"}, + {file = "orjson-3.10.15-cp312-cp312-win_amd64.whl", hash = "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa"}, + {file = "orjson-3.10.15-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825"}, + {file = "orjson-3.10.15-cp313-cp313-win32.whl", hash = "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890"}, + {file = "orjson-3.10.15-cp313-cp313-win_amd64.whl", hash = "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf"}, + {file = "orjson-3.10.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528"}, + {file = "orjson-3.10.15-cp38-cp38-win32.whl", hash = "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60"}, + {file = "orjson-3.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1"}, + {file = "orjson-3.10.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428"}, + {file = "orjson-3.10.15-cp39-cp39-win32.whl", hash = "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507"}, + {file = "orjson-3.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd"}, + {file = "orjson-3.10.15.tar.gz", hash = "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e"}, ] [[package]] @@ -3425,87 +2670,90 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "10.2.0" +version = "11.1.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, - {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, - {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, - {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, - {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, - {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, - {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, - {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, - {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, - {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, - {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, - {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, - {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, - {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, - {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, - {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, - {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, - {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, + {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, + {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, + {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, + {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, + {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, + {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, + {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, + {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, + {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, + {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, + {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, + {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, + {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, + {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, + {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, + {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, + {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, + {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, + {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, + {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] typing = ["typing-extensions"] xmp = ["defusedxml"] @@ -3525,30 +2773,6 @@ files = [ docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -[[package]] -name = "posthog" -version = "3.5.0" -description = "Integrate PostHog into any python application." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, - {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, -] - -[package.dependencies] -backoff = ">=1.10.0" -monotonic = ">=1.5" -python-dateutil = ">2.1" -requests = ">=2.7,<3.0" -six = ">=1.5" - -[package.extras] -dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] -sentry = ["django", "sentry-sdk"] -test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] - [[package]] name = "prometheus-client" version = "0.20.0" @@ -3579,27 +2803,6 @@ files = [ [package.dependencies] wcwidth = "*" -[[package]] -name = "protobuf" -version = "4.25.3" -description = "" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, - {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, - {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, - {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, - {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, - {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, - {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, - {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, - {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, -] - [[package]] name = "psutil" version = "5.9.8" @@ -3642,54 +2845,6 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] -[[package]] -name = "pulsar-client" -version = "3.4.0" -description = "Apache Pulsar Python client library" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pulsar_client-3.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ebf99db5244ff69479283b25621b070492acc4bb643d162d86b90387cb6fdb2a"}, - {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6cb5d8e1482a8aea758633be23717e0c4bb7dc53784e37915c0048c0382f134"}, - {file = "pulsar_client-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a7592e42c76034e9a8d64d42dd5bab361425f869de562e9ccad698e19cd88"}, - {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5963090a78a5644ba25f41da3a6d49ea3f00c972b095baff365916dc246426a"}, - {file = "pulsar_client-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:419cdcf577f755e3f31bf264300d9ba158325edb2ee9cee555d81ba1909c094e"}, - {file = "pulsar_client-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:4c93c35ee97307dae153e748b33dcd3d4f06da34bca373321aa2df73f1535705"}, - {file = "pulsar_client-3.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:11952fb022ee72debf53b169f4482f9dc5c890be0149ae98779864b3a21f1bd3"}, - {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8743c320aa96798d20cafa98ea97a68c4295fc4872c23acd5e012fd36cb06ba"}, - {file = "pulsar_client-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33571de99cd898349f17978ba62e2b839ea0275fb7067f31bf5f6ebfeae0987d"}, - {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a60c03c3e70f018538e7cd3fa84d95e283b610272b744166dbc48960a809fa07"}, - {file = "pulsar_client-3.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c47041267b5843ffec54352d842156c279945f3e976d7025ffa89875ff76390"}, - {file = "pulsar_client-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:49fe4ab04004b476c87ab3ad22fe87346fca564a3e3ca9c0ac58fee45a895d81"}, - {file = "pulsar_client-3.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:1e077a4839be3ead3de3f05b4c244269dca2df07f47cea0b90544c7e9dc1642f"}, - {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f202b84e1f683d64672dd1971114600ae2e5c3735587286ff9bfb431385f08e8"}, - {file = "pulsar_client-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c606c04f357341042fa6c75477de7d2204f7ae50aa29c2f74b24e54c85f47f96"}, - {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c67b25ede3a578f5a7dc30230e52609ef38191f74b47e5cbdbc98c42df556927"}, - {file = "pulsar_client-3.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b7f8211cc9460cdf4d06e4e1cb878689d2aa4a7e4027bd2a2f1419a79ade16a6"}, - {file = "pulsar_client-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:c5399e9780d6951c69808c0b6175311a966af82fb08addf6e741ae37b1bee7ef"}, - {file = "pulsar_client-3.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:a2d6c850b60106dc915d3476a490fba547c6748a5f742b68abd30d1a35355b82"}, - {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a52ea8294a9f30eb6f0a2db5dc16e3aad7ff2284f818c48ad3a6b601723be02b"}, - {file = "pulsar_client-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eeeede40108be12222e009285c971e5b8f6433d9f0f8ef934d6a131585921c4"}, - {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9409066c600f2b6f220552c5dfe08aeeabcf07fe0e76367aa5816b2e87a5cf72"}, - {file = "pulsar_client-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:58e2f886e6dab43e66c3ce990fe96209e55ab46350506829a637b77b74125fb9"}, - {file = "pulsar_client-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:b57dfa5063b0d9dc7664896c55605eac90753e35e80db5a959d3be2be0ab0d48"}, - {file = "pulsar_client-3.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:7704c664aa2c801af4c2d3a58e9d8ffaeef12ce8a0f71712e9187f9a96da856f"}, - {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0364db563e27442053bdbb8655e7ffb420f491690bc2c78da5a58bd35c658ad"}, - {file = "pulsar_client-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3e34de19e0744d8aa3538cb2172076bccd0761b3e94ebadb7bd59765ae3d1ed"}, - {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dc8be41dec8cb052fb1837550f495e9b73a8b3cf85e07157904ec84832758a65"}, - {file = "pulsar_client-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b49d669bed15b7edb9c936704310d57808f1d01c511b94d866f54fe8ffe1752d"}, - {file = "pulsar_client-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:88c93e5fbfc349f3967e931f7a908d15fd4fd725ebdd842423ac9cd961fe293f"}, -] - -[package.dependencies] -certifi = "*" - -[package.extras] -all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (>=1.9.2)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] -avro = ["fastavro (>=1.9.2)"] -functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] - [[package]] name = "pure-eval" version = "0.2.2" @@ -3705,33 +2860,6 @@ files = [ [package.extras] tests = ["pytest"] -[[package]] -name = "pyasn1" -version = "0.5.1" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["main"] -files = [ - {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, - {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, -] - -[[package]] -name = "pyasn1-modules" -version = "0.3.0" -description = "A collection of ASN.1-based protocols modules" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["main"] -files = [ - {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, - {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, -] - -[package.dependencies] -pyasn1 = ">=0.4.6,<0.6.0" - [[package]] name = "pycparser" version = "2.21" @@ -3746,111 +2874,133 @@ files = [ [[package]] name = "pydantic" -version = "2.6.4" +version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, - {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.16.3" -typing-extensions = ">=4.6.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.16.3" -description = "" +version = "2.27.2" +description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, - {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, - {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, - {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, - {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, - {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, - {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, - {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, - {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, - {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, - {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, - {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, - {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, - {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, ] [package.dependencies] @@ -3951,45 +3101,6 @@ docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] full = ["Pillow", "PyCryptodome"] image = ["Pillow"] -[[package]] -name = "pypika" -version = "0.48.9" -description = "A SQL query builder API for Python" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, -] - -[[package]] -name = "pyproject-hooks" -version = "1.0.0" -description = "Wrappers to call pyproject.toml-based build backend hooks." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "pyproject_hooks-1.0.0-py3-none-any.whl", hash = "sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8"}, - {file = "pyproject_hooks-1.0.0.tar.gz", hash = "sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"}, -] - -[package.dependencies] -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - -[[package]] -name = "pyreadline3" -version = "3.4.1" -description = "A python implementation of GNU readline." -optional = false -python-versions = "*" -groups = ["main"] -markers = "sys_platform == \"win32\"" -files = [ - {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, - {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, -] - [[package]] name = "python-dateutil" version = "2.8.2" @@ -4333,50 +3444,6 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -[[package]] -name = "qtconsole" -version = "5.5.1" -description = "Jupyter Qt console" -optional = false -python-versions = ">= 3.8" -groups = ["main"] -files = [ - {file = "qtconsole-5.5.1-py3-none-any.whl", hash = "sha256:8c75fa3e9b4ed884880ff7cea90a1b67451219279ec33deaee1d59e3df1a5d2b"}, - {file = "qtconsole-5.5.1.tar.gz", hash = "sha256:a0e806c6951db9490628e4df80caec9669b65149c7ba40f9bf033c025a5b56bc"}, -] - -[package.dependencies] -ipykernel = ">=4.1" -jupyter-client = ">=4.1" -jupyter-core = "*" -packaging = "*" -pygments = "*" -pyzmq = ">=17.1" -qtpy = ">=2.4.0" -traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" - -[package.extras] -doc = ["Sphinx (>=1.3)"] -test = ["flaky", "pytest", "pytest-qt"] - -[[package]] -name = "qtpy" -version = "2.4.1" -description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "QtPy-2.4.1-py3-none-any.whl", hash = "sha256:1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b"}, - {file = "QtPy-2.4.1.tar.gz", hash = "sha256:a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987"}, -] - -[package.dependencies] -packaging = "*" - -[package.extras] -test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] - [[package]] name = "rapidfuzz" version = "3.6.1" @@ -4622,23 +3689,19 @@ socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] -name = "requests-oauthlib" -version = "1.4.0" -description = "OAuthlib authentication support for Requests." +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] files = [ - {file = "requests-oauthlib-1.4.0.tar.gz", hash = "sha256:acee623221e4a39abcbb919312c8ff04bd44e7e417087fb4bd5e2a2f53d5e79a"}, - {file = "requests_oauthlib-1.4.0-py2.py3-none-any.whl", hash = "sha256:7a3130d94a17520169e38db6c8d75f2c974643788465ecc2e4b36d288bf13033"}, + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, ] [package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] +requests = ">=2.0.1,<3.0.0" [[package]] name = "rfc3339-validator" @@ -4776,21 +3839,6 @@ files = [ {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, ] -[[package]] -name = "rsa" -version = "4.9" -description = "Pure-Python RSA implementation" -optional = false -python-versions = ">=3.6,<4" -groups = ["main"] -files = [ - {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, - {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, -] - -[package.dependencies] -pyasn1 = ">=0.1.3" - [[package]] name = "send2trash" version = "1.8.2" @@ -4808,23 +3856,6 @@ nativelib = ["pyobjc-framework-Cocoa", "pywin32"] objc = ["pyobjc-framework-Cocoa"] win32 = ["pywin32"] -[[package]] -name = "setuptools" -version = "69.2.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, - {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - [[package]] name = "six" version = "1.16.0" @@ -4969,39 +4000,6 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] -[[package]] -name = "starlette" -version = "0.36.3" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, - {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] - -[[package]] -name = "sympy" -version = "1.12" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, - {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, -] - -[package.dependencies] -mpmath = ">=0.19" - [[package]] name = "tenacity" version = "8.2.3" @@ -5040,151 +4038,71 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] -name = "tinycss2" -version = "1.2.1" -description = "A tiny CSS parser" +name = "tiktoken" +version = "0.8.0" +description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, + {file = "tiktoken-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e"}, + {file = "tiktoken-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21"}, + {file = "tiktoken-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e13f37bc4ef2d012731e93e0fef21dc3b7aea5bb9009618de9a4026844e560"}, + {file = "tiktoken-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f13d13c981511331eac0d01a59b5df7c0d4060a8be1e378672822213da51e0a2"}, + {file = "tiktoken-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6b2ddbc79a22621ce8b1166afa9f9a888a664a579350dc7c09346a3b5de837d9"}, + {file = "tiktoken-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d8c2d0e5ba6453a290b86cd65fc51fedf247e1ba170191715b049dac1f628005"}, + {file = "tiktoken-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1"}, + {file = "tiktoken-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a"}, + {file = "tiktoken-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5637e425ce1fc49cf716d88df3092048359a4b3bbb7da762840426e937ada06d"}, + {file = "tiktoken-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47"}, + {file = "tiktoken-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419"}, + {file = "tiktoken-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:326624128590def898775b722ccc327e90b073714227175ea8febbc920ac0a99"}, + {file = "tiktoken-0.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:881839cfeae051b3628d9823b2e56b5cc93a9e2efb435f4cf15f17dc45f21586"}, + {file = "tiktoken-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fe9399bdc3f29d428f16a2f86c3c8ec20be3eac5f53693ce4980371c3245729b"}, + {file = "tiktoken-0.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a58deb7075d5b69237a3ff4bb51a726670419db6ea62bdcd8bd80c78497d7ab"}, + {file = "tiktoken-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2908c0d043a7d03ebd80347266b0e58440bdef5564f84f4d29fb235b5df3b04"}, + {file = "tiktoken-0.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:294440d21a2a51e12d4238e68a5972095534fe9878be57d905c476017bff99fc"}, + {file = "tiktoken-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:d8f3192733ac4d77977432947d563d7e1b310b96497acd3c196c9bddb36ed9db"}, + {file = "tiktoken-0.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:02be1666096aff7da6cbd7cdaa8e7917bfed3467cd64b38b1f112e96d3b06a24"}, + {file = "tiktoken-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94ff53c5c74b535b2cbf431d907fc13c678bbd009ee633a2aca269a04389f9a"}, + {file = "tiktoken-0.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b231f5e8982c245ee3065cd84a4712d64692348bc609d84467c57b4b72dcbc5"}, + {file = "tiktoken-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4177faa809bd55f699e88c96d9bb4635d22e3f59d635ba6fd9ffedf7150b9953"}, + {file = "tiktoken-0.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5376b6f8dc4753cd81ead935c5f518fa0fbe7e133d9e25f648d8c4dabdd4bad7"}, + {file = "tiktoken-0.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:18228d624807d66c87acd8f25fc135665617cab220671eb65b50f5d70fa51f69"}, + {file = "tiktoken-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e17807445f0cf1f25771c9d86496bd8b5c376f7419912519699f3cc4dc5c12e"}, + {file = "tiktoken-0.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:886f80bd339578bbdba6ed6d0567a0d5c6cfe198d9e587ba6c447654c65b8edc"}, + {file = "tiktoken-0.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6adc8323016d7758d6de7313527f755b0fc6c72985b7d9291be5d96d73ecd1e1"}, + {file = "tiktoken-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b591fb2b30d6a72121a80be24ec7a0e9eb51c5500ddc7e4c2496516dd5e3816b"}, + {file = "tiktoken-0.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:845287b9798e476b4d762c3ebda5102be87ca26e5d2c9854002825d60cdb815d"}, + {file = "tiktoken-0.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:1473cfe584252dc3fa62adceb5b1c763c1874e04511b197da4e6de51d6ce5a02"}, + {file = "tiktoken-0.8.0.tar.gz", hash = "sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2"}, ] [package.dependencies] -webencodings = ">=0.4" +regex = ">=2022.1.18" +requests = ">=2.26.0" [package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] +blobfile = ["blobfile (>=2)"] [[package]] -name = "tokenizers" -version = "0.15.2" -description = "" +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, - {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, - {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9b9b070fdad06e347563b88c278995735292ded1132f8657084989a4c84a6d5"}, - {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea621a7eef4b70e1f7a4e84dd989ae3f0eeb50fc8690254eacc08acb623e82f1"}, - {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf7fd9a5141634fa3aa8d6b7be362e6ae1b4cda60da81388fa533e0b552c98fd"}, - {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f2a832cd0825295f7179eaf173381dc45230f9227ec4b44378322d900447c9"}, - {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b9ec69247a23747669ec4b0ca10f8e3dfb3545d550258129bd62291aabe8605"}, - {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b6a4c78da863ff26dbd5ad9a8ecc33d8a8d97b535172601cf00aee9d7ce9ce"}, - {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5ab2a4d21dcf76af60e05af8063138849eb1d6553a0d059f6534357bce8ba364"}, - {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a47acfac7e511f6bbfcf2d3fb8c26979c780a91e06fb5b9a43831b2c0153d024"}, - {file = "tokenizers-0.15.2-cp310-none-win32.whl", hash = "sha256:064ff87bb6acdbd693666de9a4b692add41308a2c0ec0770d6385737117215f2"}, - {file = "tokenizers-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3b919afe4df7eb6ac7cafd2bd14fb507d3f408db7a68c43117f579c984a73843"}, - {file = "tokenizers-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:89cd1cb93e4b12ff39bb2d626ad77e35209de9309a71e4d3d4672667b4b256e7"}, - {file = "tokenizers-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfed5c64e5be23d7ee0f0e98081a25c2a46b0b77ce99a4f0605b1ec43dd481fa"}, - {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a907d76dcfda37023ba203ab4ceeb21bc5683436ebefbd895a0841fd52f6f6f2"}, - {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ea60479de6fc7b8ae756b4b097572372d7e4032e2521c1bbf3d90c90a99ff0"}, - {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:48e2b9335be2bc0171df9281385c2ed06a15f5cf121c44094338306ab7b33f2c"}, - {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:112a1dd436d2cc06e6ffdc0b06d55ac019a35a63afd26475205cb4b1bf0bfbff"}, - {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4620cca5c2817177ee8706f860364cc3a8845bc1e291aaf661fb899e5d1c45b0"}, - {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccd73a82751c523b3fc31ff8194702e4af4db21dc20e55b30ecc2079c5d43cb7"}, - {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:107089f135b4ae7817affe6264f8c7a5c5b4fd9a90f9439ed495f54fcea56fb4"}, - {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0ff110ecc57b7aa4a594396525a3451ad70988e517237fe91c540997c4e50e29"}, - {file = "tokenizers-0.15.2-cp311-none-win32.whl", hash = "sha256:6d76f00f5c32da36c61f41c58346a4fa7f0a61be02f4301fd30ad59834977cc3"}, - {file = "tokenizers-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:cc90102ed17271cf0a1262babe5939e0134b3890345d11a19c3145184b706055"}, - {file = "tokenizers-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f86593c18d2e6248e72fb91c77d413a815153b8ea4e31f7cd443bdf28e467670"}, - {file = "tokenizers-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0774bccc6608eca23eb9d620196687c8b2360624619623cf4ba9dc9bd53e8b51"}, - {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0222c5b7c9b26c0b4822a82f6a7011de0a9d3060e1da176f66274b70f846b98"}, - {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3835738be1de66624fff2f4f6f6684775da4e9c00bde053be7564cbf3545cc66"}, - {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0143e7d9dcd811855c1ce1ab9bf5d96d29bf5e528fd6c7824d0465741e8c10fd"}, - {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db35825f6d54215f6b6009a7ff3eedee0848c99a6271c870d2826fbbedf31a38"}, - {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f5e64b0389a2be47091d8cc53c87859783b837ea1a06edd9d8e04004df55a5c"}, - {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e0480c452217edd35eca56fafe2029fb4d368b7c0475f8dfa3c5c9c400a7456"}, - {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a33ab881c8fe70474980577e033d0bc9a27b7ab8272896e500708b212995d834"}, - {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a308a607ca9de2c64c1b9ba79ec9a403969715a1b8ba5f998a676826f1a7039d"}, - {file = "tokenizers-0.15.2-cp312-none-win32.whl", hash = "sha256:b8fcfa81bcb9447df582c5bc96a031e6df4da2a774b8080d4f02c0c16b42be0b"}, - {file = "tokenizers-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:38d7ab43c6825abfc0b661d95f39c7f8af2449364f01d331f3b51c94dcff7221"}, - {file = "tokenizers-0.15.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:38bfb0204ff3246ca4d5e726e8cc8403bfc931090151e6eede54d0e0cf162ef0"}, - {file = "tokenizers-0.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c861d35e8286a53e06e9e28d030b5a05bcbf5ac9d7229e561e53c352a85b1fc"}, - {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:936bf3842db5b2048eaa53dade907b1160f318e7c90c74bfab86f1e47720bdd6"}, - {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:620beacc3373277700d0e27718aa8b25f7b383eb8001fba94ee00aeea1459d89"}, - {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2735ecbbf37e52db4ea970e539fd2d450d213517b77745114f92867f3fc246eb"}, - {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:473c83c5e2359bb81b0b6fde870b41b2764fcdd36d997485e07e72cc3a62264a"}, - {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968fa1fb3c27398b28a4eca1cbd1e19355c4d3a6007f7398d48826bbe3a0f728"}, - {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:865c60ae6eaebdde7da66191ee9b7db52e542ed8ee9d2c653b6d190a9351b980"}, - {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7c0d8b52664ab2d4a8d6686eb5effc68b78608a9008f086a122a7b2996befbab"}, - {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f33dfbdec3784093a9aebb3680d1f91336c56d86cc70ddf88708251da1fe9064"}, - {file = "tokenizers-0.15.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d44ba80988ff9424e33e0a49445072ac7029d8c0e1601ad25a0ca5f41ed0c1d6"}, - {file = "tokenizers-0.15.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:dce74266919b892f82b1b86025a613956ea0ea62a4843d4c4237be2c5498ed3a"}, - {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ef06b9707baeb98b316577acb04f4852239d856b93e9ec3a299622f6084e4be"}, - {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73e2e74bbb07910da0d37c326869f34113137b23eadad3fc00856e6b3d9930c"}, - {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eeb12daf02a59e29f578a865f55d87cd103ce62bd8a3a5874f8fdeaa82e336b"}, - {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ba9f6895af58487ca4f54e8a664a322f16c26bbb442effd01087eba391a719e"}, - {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccec77aa7150e38eec6878a493bf8c263ff1fa8a62404e16c6203c64c1f16a26"}, - {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f40604f5042ff210ba82743dda2b6aa3e55aa12df4e9f2378ee01a17e2855e"}, - {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5645938a42d78c4885086767c70923abad047163d809c16da75d6b290cb30bbe"}, - {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05a77cbfebe28a61ab5c3891f9939cc24798b63fa236d84e5f29f3a85a200c00"}, - {file = "tokenizers-0.15.2-cp37-none-win32.whl", hash = "sha256:361abdc068e8afe9c5b818769a48624687fb6aaed49636ee39bec4e95e1a215b"}, - {file = "tokenizers-0.15.2-cp37-none-win_amd64.whl", hash = "sha256:7ef789f83eb0f9baeb4d09a86cd639c0a5518528f9992f38b28e819df397eb06"}, - {file = "tokenizers-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4fe1f74a902bee74a3b25aff180fbfbf4f8b444ab37c4d496af7afd13a784ed2"}, - {file = "tokenizers-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4b89038a684f40a6b15d6b09f49650ac64d951ad0f2a3ea9169687bbf2a8ba"}, - {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d05a1b06f986d41aed5f2de464c003004b2df8aaf66f2b7628254bcbfb72a438"}, - {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508711a108684111ec8af89d3a9e9e08755247eda27d0ba5e3c50e9da1600f6d"}, - {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:daa348f02d15160cb35439098ac96e3a53bacf35885072611cd9e5be7d333daa"}, - {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494fdbe5932d3416de2a85fc2470b797e6f3226c12845cadf054dd906afd0442"}, - {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2d60f5246f4da9373f75ff18d64c69cbf60c3bca597290cea01059c336d2470"}, - {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93268e788825f52de4c7bdcb6ebc1fcd4a5442c02e730faa9b6b08f23ead0e24"}, - {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fc7083ab404019fc9acafe78662c192673c1e696bd598d16dc005bd663a5cf9"}, - {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e39b41e5531d6b2122a77532dbea60e171ef87a3820b5a3888daa847df4153"}, - {file = "tokenizers-0.15.2-cp38-none-win32.whl", hash = "sha256:06cd0487b1cbfabefb2cc52fbd6b1f8d4c37799bd6c6e1641281adaa6b2504a7"}, - {file = "tokenizers-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:5179c271aa5de9c71712e31cb5a79e436ecd0d7532a408fa42a8dbfa4bc23fd9"}, - {file = "tokenizers-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82f8652a74cc107052328b87ea8b34291c0f55b96d8fb261b3880216a9f9e48e"}, - {file = "tokenizers-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02458bee6f5f3139f1ebbb6d042b283af712c0981f5bc50edf771d6b762d5e4f"}, - {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a09cd26cca2e1c349f91aa665309ddb48d71636370749414fbf67bc83c5343"}, - {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158be8ea8554e5ed69acc1ce3fbb23a06060bd4bbb09029431ad6b9a466a7121"}, - {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddba9a2b0c8c81633eca0bb2e1aa5b3a15362b1277f1ae64176d0f6eba78ab1"}, - {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ef5dd1d39797044642dbe53eb2bc56435308432e9c7907728da74c69ee2adca"}, - {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:454c203164e07a860dbeb3b1f4a733be52b0edbb4dd2e5bd75023ffa8b49403a"}, - {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cf6b7f1d4dc59af960e6ffdc4faffe6460bbfa8dce27a58bf75755ffdb2526d"}, - {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2ef09bbc16519f6c25d0c7fc0c6a33a6f62923e263c9d7cca4e58b8c61572afb"}, - {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9a2ebdd2ad4ec7a68e7615086e633857c85e2f18025bd05d2a4399e6c5f7169"}, - {file = "tokenizers-0.15.2-cp39-none-win32.whl", hash = "sha256:918fbb0eab96fe08e72a8c2b5461e9cce95585d82a58688e7f01c2bd546c79d0"}, - {file = "tokenizers-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:524e60da0135e106b254bd71f0659be9f89d83f006ea9093ce4d1fab498c6d0d"}, - {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9b648a58281c4672212fab04e60648fde574877d0139cd4b4f93fe28ca8944"}, - {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7c7d18b733be6bbca8a55084027f7be428c947ddf871c500ee603e375013ffba"}, - {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:13ca3611de8d9ddfbc4dc39ef54ab1d2d4aaa114ac8727dfdc6a6ec4be017378"}, - {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:237d1bf3361cf2e6463e6c140628e6406766e8b27274f5fcc62c747ae3c6f094"}, - {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67a0fe1e49e60c664915e9fb6b0cb19bac082ab1f309188230e4b2920230edb3"}, - {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e022fe65e99230b8fd89ebdfea138c24421f91c1a4f4781a8f5016fd5cdfb4d"}, - {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d857be2df69763362ac699f8b251a8cd3fac9d21893de129bc788f8baaef2693"}, - {file = "tokenizers-0.15.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:708bb3e4283177236309e698da5fcd0879ce8fd37457d7c266d16b550bcbbd18"}, - {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c35e09e9899b72a76e762f9854e8750213f67567787d45f37ce06daf57ca78"}, - {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1257f4394be0d3b00de8c9e840ca5601d0a4a8438361ce9c2b05c7d25f6057b"}, - {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02272fe48280e0293a04245ca5d919b2c94a48b408b55e858feae9618138aeda"}, - {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dc3ad9ebc76eabe8b1d7c04d38be884b8f9d60c0cdc09b0aa4e3bcf746de0388"}, - {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:32e16bdeffa7c4f46bf2152172ca511808b952701d13e7c18833c0b73cb5c23f"}, - {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fb16ba563d59003028b678d2361a27f7e4ae0ab29c7a80690efa20d829c81fdb"}, - {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2277c36d2d6cdb7876c274547921a42425b6810d38354327dd65a8009acf870c"}, - {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cf75d32e8d250781940d07f7eece253f2fe9ecdb1dc7ba6e3833fa17b82fcbc"}, - {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b3b31884dc8e9b21508bb76da80ebf7308fdb947a17affce815665d5c4d028"}, - {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10122d8d8e30afb43bb1fe21a3619f62c3e2574bff2699cf8af8b0b6c5dc4a3"}, - {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d88b96ff0fe8e91f6ef01ba50b0d71db5017fa4e3b1d99681cec89a85faf7bf7"}, - {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:37aaec5a52e959892870a7c47cef80c53797c0db9149d458460f4f31e2fb250e"}, - {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2ea752f2b0fe96eb6e2f3adbbf4d72aaa1272079b0dfa1145507bd6a5d537e6"}, - {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b19a808d8799fda23504a5cd31d2f58e6f52f140380082b352f877017d6342b"}, - {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c86e5e068ac8b19204419ed8ca90f9d25db20578f5881e337d203b314f4104"}, - {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de19c4dc503c612847edf833c82e9f73cd79926a384af9d801dcf93f110cea4e"}, - {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea09acd2fe3324174063d61ad620dec3bcf042b495515f27f638270a7d466e8b"}, - {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cf27fd43472e07b57cf420eee1e814549203d56de00b5af8659cb99885472f1f"}, - {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7ca22bd897537a0080521445d91a58886c8c04084a6a19e6c78c586e0cfa92a5"}, - {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, ] [package.dependencies] -huggingface_hub = ">=0.16.4,<1.0" +webencodings = ">=0.4" [package.extras] -dev = ["tokenizers[testing]"] -docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] -testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] [[package]] name = "tomli" @@ -5222,21 +4140,22 @@ files = [ [[package]] name = "tqdm" -version = "4.66.2" +version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -5257,28 +4176,6 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] -[[package]] -name = "typer" -version = "0.9.0" -description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"}, - {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"}, -] - -[package.dependencies] -click = ">=7.1.1,<9.0.0" -typing-extensions = ">=3.7.4.3" - -[package.extras] -all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] -dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] -doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] -test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] - [[package]] name = "types-python-dateutil" version = "2.9.0.20240316" @@ -5438,167 +4335,6 @@ brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotl secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] -[[package]] -name = "uvicorn" -version = "0.28.1" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "uvicorn-0.28.1-py3-none-any.whl", hash = "sha256:5162f6d652f545be91b1feeaee8180774af143965ca9dc8a47ff1dc6bafa4ad5"}, - {file = "uvicorn-0.28.1.tar.gz", hash = "sha256:08103e79d546b6cf20f67c7e5e434d2cf500a6e29b28773e407250c54fc4fa3c"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "uvloop" -version = "0.19.0" -description = "Fast implementation of asyncio event loop on top of libuv" -optional = false -python-versions = ">=3.8.0" -groups = ["main"] -markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\"" -files = [ - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, - {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, -] - -[package.extras] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] - -[[package]] -name = "watchfiles" -version = "0.21.0" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, - {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, - {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, - {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, - {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, - {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, - {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, - {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, - {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, - {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, - {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, - {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, - {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, - {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, - {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, - {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, - {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, - {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, - {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, - {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, - {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, - {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, - {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, - {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, - {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, - {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, - {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, - {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, - {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, - {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, - {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, - {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, - {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - [[package]] name = "wcwidth" version = "0.2.13" @@ -5656,88 +4392,6 @@ docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] -[[package]] -name = "websockets" -version = "12.0" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, - {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, - {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, - {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, - {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, - {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, - {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, - {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, - {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, - {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, - {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, - {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, - {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, - {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, - {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, - {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, - {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, - {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, - {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, - {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, - {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, - {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, - {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, - {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, - {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, -] - [[package]] name = "widgetsnbextension" version = "4.0.10" @@ -5947,22 +4601,119 @@ idna = ">=2.0" multidict = ">=4.0" [[package]] -name = "zipp" -version = "3.18.1" -description = "Backport of pathlib-compatible object wrapper for zip files" +name = "zstandard" +version = "0.23.0" +description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, + {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e"}, + {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0"}, + {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c"}, + {file = "zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813"}, + {file = "zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4"}, + {file = "zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e"}, + {file = "zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca"}, + {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78"}, + {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473"}, + {file = "zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160"}, + {file = "zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0"}, + {file = "zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094"}, + {file = "zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373"}, + {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90"}, + {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35"}, + {file = "zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d"}, + {file = "zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b"}, + {file = "zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9"}, + {file = "zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed"}, + {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057"}, + {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33"}, + {file = "zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd"}, + {file = "zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b"}, + {file = "zstandard-0.23.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc"}, + {file = "zstandard-0.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152"}, + {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b"}, + {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e"}, + {file = "zstandard-0.23.0-cp38-cp38-win32.whl", hash = "sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9"}, + {file = "zstandard-0.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f"}, + {file = "zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb"}, + {file = "zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58"}, + {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2"}, + {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5"}, + {file = "zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274"}, + {file = "zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58"}, + {file = "zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09"}, ] +[package.dependencies] +cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""} + [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.1" python-versions = ">3.10,<3.13" -content-hash = "436a7b88018348f66ca44cc039cf535952552b5a80b538277ddf6a8d009a4a83" +content-hash = "4ad22e5adb6657daa872ce272fb2fe818a131087321cbc4ff09b51ad4a5f85b9" diff --git a/pyproject.toml b/pyproject.toml index e52cf8c..afeda3b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,19 +8,21 @@ packages = [{include = "formulallm"}] [tool.poetry.dependencies] python = ">3.10,<3.13" -langchain = "0.1.8" -langsmith = "0.1.5" -langchain_community = "0.0.28" +langchain = "0.3.17" +langsmith = "0.3.5" +langchain_deepseek = "0.1.0" +langchain_openai = "0.3.3" +langgraph = "0.2.69" pythonnet = "^3.0.3" -tqdm = "4.66.2" -jupyter = "1.0.0" -pillow = "10.2.0" +tqdm = "4.67.1" +jupyter = "1.1.1" +pillow = "11.1.0" ipython = "8.21.0" pymupdf = "^1.23.26" -chromadb = "^0.4.24" unstructured = "^0.16.17" python-pptx = "^0.6.23" python-docx = "^1.1.0" +python-dotenv = "^1.0.1" openai = "^1.61.0" pypdf2 = "^3.0.1" From b26dd45c091386baa987794b0ed1d841f534a337 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:17:02 -0500 Subject: [PATCH 07/20] Update agent in formulallm --- formulallm/agents/__init__.py | 2 +- formulallm/agents/formula_agent.py | 90 ++++++++++++++++++++---------- formulallm/agents/formula_tools.py | 44 --------------- formulallm/agents/prompts.py | 19 +++++++ formulallm/utils/extraction.py | 20 +++++++ 5 files changed, 100 insertions(+), 75 deletions(-) delete mode 100644 formulallm/agents/formula_tools.py diff --git a/formulallm/agents/__init__.py b/formulallm/agents/__init__.py index a082590..aba59ce 100644 --- a/formulallm/agents/__init__.py +++ b/formulallm/agents/__init__.py @@ -1 +1 @@ -from .formula_agent import FormulaAgent \ No newline at end of file +from .formula_agent import FormulaLLMAgent \ No newline at end of file diff --git a/formulallm/agents/formula_agent.py b/formulallm/agents/formula_agent.py index cee9057..7cf4bd1 100644 --- a/formulallm/agents/formula_agent.py +++ b/formulallm/agents/formula_agent.py @@ -1,42 +1,72 @@ import os +from typing import List, Annotated, TypedDict +from typing_extensions import TypedDict +from dotenv import load_dotenv -from langchain_community.chat_models import ChatOpenAI -from langchain.agents.agent import AgentExecutor -from langchain.agents.openai_functions_agent.base import OpenAIFunctionsAgent -from langchain.schema.messages import SystemMessage +from langchain.agents import AgentExecutor, create_react_agent from langchain.memory import ConversationBufferMemory +from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder +from langchain_core.messages import HumanMessage, SystemMessage +from langchain_deepseek import ChatDeepSeek +from langchain_openai import ChatOpenAI +from langgraph.graph import StateGraph, START, END +from langgraph.graph.message import add_messages -from .formula_tools import FormulaCodeLLM -from .prompts import FIX_CODE_PREFIX, QUERY_PROMPT +from formulallm.agents.prompts import * -class FormulaAgent: - def __init__(self, model="gpt-3.5-turbo-0125", temperature=0.0): - if not os.environ["OPENAI_API_KEY"]: - raise ValueError("Environment variable OPENAI_API_KEY is not set.") +class State(TypedDict): + # Messages have the type "list". The `add_messages` function + # in the annotation defines how this state key should be updated + # (in this case, it appends messages to the list, rather than overwriting them) + messages: Annotated[list, add_messages] + +class FormulaLLMAgent: + def __init__(self, model="deepseek-coder", temperature=0.0): + load_dotenv() - self.llm = ChatOpenAI(temperature=temperature, model=model) + if "deepseek" in model: + if not os.getenv("DEEPSEEK_API_KEY"): + raise ValueError("DEEPSEEK_API_KEY not found in .env file or environment variables") + self.llm = ChatDeepSeek(temperature=temperature, model=model) + else: + if not os.getenv("OPENAI_API_KEY"): + raise ValueError("OPENAI_API_KEY not found in .env file or environment variables") + self.llm = ChatOpenAI(temperature=temperature, model=model) - system_message = SystemMessage(content=FIX_CODE_PREFIX) - _prompt = OpenAIFunctionsAgent.create_prompt(system_message=system_message) + def run(self, prompt: str,files: List[str]) -> None: + print("Starting conversation with the agent. Type 'exit' to end the session.") - memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) + def chatbot(state: State): + return {"messages": [self.llm.invoke(state["messages"])]} - tools = [FormulaCodeLLM(name="formulallm", description="Formula llm", llm=self.llm)] + graph_builder = StateGraph(State) + graph_builder.add_node("chatbot", chatbot) + graph_builder.add_edge(START, "chatbot") + graph_builder.add_edge("chatbot", END) + graph = graph_builder.compile() - agent = OpenAIFunctionsAgent( - llm=self.llm, - prompt=_prompt, - tools=tools, - memory=memory - ) + def stream_graph_updates(user_input: str): + for event in graph.stream({"messages": [ + {"role": "user", "content": user_input}, + {"role": "system", "content": ",".join(files)} + ]}): + for value in event.values(): + print("Assistant:", value["messages"][-1].content) - self.agent_executor = AgentExecutor.from_agent_and_tools( - agent=agent, - tools=tools, - verbose=True, - ) + print("Getting back results from initial prompt...") + stream_graph_updates(prompt) - def run(self, code, prompt): - prompts = QUERY_PROMPT.format(code=code, prompt=prompt) - prompts.encode('unicode_escape') - self.agent_executor.run(prompts) \ No newline at end of file + while True: + try: + user_input = input("User: ") + if user_input.lower() in ["quit", "exit", "q"]: + print("Goodbye!") + break + print("Start reasoning and generating code again...") + stream_graph_updates(user_input) + except: + # fallback if input() is not available + user_input = "What do you know about LangGraph?" + print("User: " + user_input) + stream_graph_updates(user_input) + break \ No newline at end of file diff --git a/formulallm/agents/formula_tools.py b/formulallm/agents/formula_tools.py deleted file mode 100644 index 2734856..0000000 --- a/formulallm/agents/formula_tools.py +++ /dev/null @@ -1,44 +0,0 @@ -from typing import Any - -from langchain.chat_models.base import BaseChatModel -from langchain.tools.base import BaseTool -from .prompts import ( - QUERY_PROMPT, - OUTPUT_RETURN, - FORMULA_CODE_LLM_DESC -) -from langchain.chains import LLMChain -from langchain.prompts import PromptTemplate -from langchain.tools import BaseTool - -class FormulaCodeLLM(BaseTool): - name = "FormulaCodeLLM" - description = FORMULA_CODE_LLM_DESC - llm: BaseChatModel - - def _run(self, arg, **kwargs) -> Any: - prompt = kwargs["prompt"] - code = kwargs["code"] - output = kwargs["output"] - - explain_template = QUERY_PROMPT - - prompt_template = PromptTemplate( - input_variables=["prompt", "code", "output"], - template=explain_template, - ) - - code_understander_chain = LLMChain( - llm=self.llm, prompt=prompt_template, output_key="explanation" - ) - - out = code_understander_chain(kwargs) - - return_output = OUTPUT_RETURN.format(explanation=out['explanation']) - - return return_output - - async def _arun( - self, - ): - raise NotImplementedError("custom_search does not support async") \ No newline at end of file diff --git a/formulallm/agents/prompts.py b/formulallm/agents/prompts.py index 6c87186..9c0b2dc 100644 --- a/formulallm/agents/prompts.py +++ b/formulallm/agents/prompts.py @@ -5,12 +5,31 @@ END OF SYSTEM MESSAGE""" +WRITE_FORMULA_CODE_PREFIX = """ \ +SYSTEM MESSAGE: + +You are a computer scientist and you are learning the FORMULA modeling language. + +You will be provided the assembly of C programs and you will model the code in FORMULA DSL. + +END OF SYSTEM MESSAGE""" + QUERY_PROMPT = """ \ {prompt} {code} """ +QUERY_PROMPT_WITH_FILES = """ \ +{prompt} + +{file1} + +{file2} + +{file3} +""" + OUTPUT_RETURN = """ \ {explanation} """ diff --git a/formulallm/utils/extraction.py b/formulallm/utils/extraction.py index a4230ae..76afaa3 100644 --- a/formulallm/utils/extraction.py +++ b/formulallm/utils/extraction.py @@ -1,4 +1,5 @@ import zipfile, fitz, os +from PyPDF2 import PdfReader def extract_images_docx(docx_file: str, output_path: str): z = zipfile.ZipFile(docx_file) @@ -46,3 +47,22 @@ def extract_pdf_drawings(pdf_file: str, output_path: str): pm = outpage.get_pixmap() file_name = os.path.basename(pdf_file) pm.save(output_path + r'pdfs/' + file_name + r'.png') + +def pdf2text(pdf_file_path: str): + text_formula_doc = [] + reader = PdfReader(pdf_file_path) + for page in reader.pages: + text_formula_doc.append(page.extract_text()) + return "".join(text_formula_doc) + +def file2text(file_path): + try: + with open(file_path, 'r', encoding='utf-8') as file: + text = file.read() + return text + except FileNotFoundError: + print(f"Error: The file {file_path} was not found.") + return None + except Exception as e: + print(f"Error reading file {file_path}: {e}") + return None From 788df980c35fe90bdc87e5aa634d52ccf950f756 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:18:19 -0500 Subject: [PATCH 08/20] Update untar.ipynb with interactive LLM --- examples/untar.ipynb | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/examples/untar.ipynb b/examples/untar.ipynb index a43a650..a866784 100644 --- a/examples/untar.ipynb +++ b/examples/untar.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,26 @@ "metadata": {}, "outputs": [], "source": [ - "code = f.load(\"./data/parser/GeneratedTar.4ml\")\n" + "from formulallm.agents import FormulaLLMAgent\n", + "from formulallm.utils.extraction import pdf2text, file2text\n", + "\n", + "agent = FormulaLLMAgent(model=\"gpt-4o\")\n", + "text_code_in_c = file2text(\"./data/parser/untar1.c\")\n", + "text_parser_dsl = file2text(\"./data/parser/ParserDSL.4ml\")\n", + "text_formula_doc = pdf2text(\"./data/parser/formula.pdf\")\n", + "text_prompt = file2text(\"./data/parser/prompt.txt\")\n", + "\n", + "files = [text_code_in_c, text_parser_dsl, text_formula_doc]\n", + "agent.run(text_prompt, files)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "code = f.load(\"./data/parser/GeneratedTar.4ml\")" ] }, { @@ -89,7 +108,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.16" + "version": "3.12.4" } }, "nbformat": 4, From c219458410cd65598ae3cef7737abf5dafbcc3e2 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:18:47 -0500 Subject: [PATCH 09/20] Add prompt.txt --- examples/data/parser/prompt.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 examples/data/parser/prompt.txt diff --git a/examples/data/parser/prompt.txt b/examples/data/parser/prompt.txt new file mode 100644 index 0000000..3e94a84 --- /dev/null +++ b/examples/data/parser/prompt.txt @@ -0,0 +1,6 @@ +1. Understand the C code in untar1.c, FORMULA documentation and ParserDSL.4ml. +2. Model untar1.c in FORMULA by extending the `GenericDataParser` domain in ParserDSL.4ml. +3. Do not change the type definition in `GenericDataParser` domain such as Status and IntermediateResult. +4. Use strJoin() in FORMULA to concatenate strings. +5. Model `skipEntry` as IntermediateResult in FORMULA and reflect how its value affects the parsing. +6. Model how `skipEntry` is computed from other IntermediateResults or the current read. \ No newline at end of file From 580fd3a1ffd8b158ea2007fd15b189d661462591 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:19:38 -0500 Subject: [PATCH 10/20] Remove outputs --- examples/agents.ipynb | 56 ++---------- examples/formula.ipynb | 185 +++++---------------------------------- examples/pipelines.ipynb | 8 +- 3 files changed, 31 insertions(+), 218 deletions(-) diff --git a/examples/agents.ipynb b/examples/agents.ipynb index 58dd9b8..c99452a 100644 --- a/examples/agents.ipynb +++ b/examples/agents.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "050d5d96-2ed2-4bf8-9691-b80d4b81d6e6", "metadata": {}, "outputs": [], @@ -23,64 +23,20 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "744121f0-a9a6-4ecc-a8d6-42be5857fb62", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(Compiled) MappingExample.4ml\n", - "0.29s.\n" - ] - } - ], + "outputs": [], "source": [ "code = load(\".\\data\\MappingExample.4ml\")" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "187342d8-56fe-4039-a8b1-d3ffe61af6ee", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mThis formula model defines a domain called Mapping, which consists of three types of entities: Component, Processor, and Mapping. \n", - "\n", - "- Component: Represents a component with an id (Integer) and utilization (Real).\n", - "- Processor: Represents a processor with an id (Integer).\n", - "- Mapping: Represents the mapping of a Component to a Processor.\n", - "\n", - "The model also includes two constraints:\n", - "1. `invalidUtilization`: This constraint specifies that the utilization of a Component must be greater than 0.\n", - "2. `badMapping`: This constraint checks if the total utilization of components mapped to a processor exceeds 100.\n", - "\n", - "The `conforms` statement ensures that there are no violations of the `badMapping` and `invalidUtilization` constraints in the model.\n", - "\n", - "The partial model `pm` of Mapping specifies the creation of two components (c1 and c2) with ids 0 and 1 respectively, a processor p1 with id 0, and maps both components to processor p1.\n", - "\n", - "Now, let's analyze why this formula model is broken and how it can be fixed:\n", - "\n", - "1. The `badMapping` constraint is checking if the total utilization of components mapped to a processor exceeds 100, but the sum is calculated incorrectly. The correct sum should be the sum of utilizations of components mapped to the processor, not the sum of all component utilizations. This can be fixed by updating the sum calculation in the `badMapping` constraint.\n", - "\n", - "2. The `conforms` statement is used to ensure that there are no violations of constraints, but it is missing the actual constraints to be checked. It should include `no badMapping` and `no invalidUtilization` to enforce the constraints properly.\n", - "\n", - "3. The partial model `pm` is incomplete as it does not specify the values of x and y for components c1 and c2 respectively. These values should be provided to create valid instances of components.\n", - "\n", - "By addressing these issues, the formula model can be fixed and accurately represent the constraints and entities in the Mapping domain.\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n" - ] - } - ], + "outputs": [], "source": [ "prompt = \"Can you tell me what this formula model is doing?\"\n", "fa.run(code, prompt)" @@ -103,7 +59,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/examples/formula.ipynb b/examples/formula.ipynb index f0df0ec..0018f8d 100644 --- a/examples/formula.ipynb +++ b/examples/formula.ipynb @@ -12,59 +12,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "05407cdc-c896-4a22-a825-8c087939823b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['__builtins__',\n", - " '__cached__',\n", - " '__doc__',\n", - " '__file__',\n", - " '__loader__',\n", - " '__name__',\n", - " '__package__',\n", - " '__path__',\n", - " '__spec__',\n", - " 'apply',\n", - " 'confhelp',\n", - " 'core',\n", - " 'delete',\n", - " 'details',\n", - " 'downgrade',\n", - " 'exit',\n", - " 'extract',\n", - " 'formula_program',\n", - " 'generate',\n", - " 'help',\n", - " 'interactive',\n", - " 'list',\n", - " 'load',\n", - " 'p',\n", - " 'proof',\n", - " 'query',\n", - " 'reload',\n", - " 'render',\n", - " 'save',\n", - " 'set',\n", - " 'solve',\n", - " 'stats',\n", - " 'truth',\n", - " 'tunload',\n", - " 'types',\n", - " 'unload',\n", - " 'verbose',\n", - " 'wait',\n", - " 'watch']" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# List of available methods \n", "dir(f)" @@ -72,155 +23,61 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "d3aa64f7-1dde-4a1b-a433-85f643179709", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "apply (ap) - Start an apply task. Use: apply transformstep\n", - "confhelp (ch) - Provides help about module configurations and settings\n", - "core (cr) - Prints reduced rule set for domains / transforms. Use: core module_name\n", - "del (d) - Deletes a variable. Use: del var.\n", - "det (dt) - Prints details about the compiled module with the given name. Use: det modname\n", - "downgrade (dg) - Attempts to downgrade a (partial) model to Formula V1. Use: downgrade module_name\n", - "exit (x) - Exits the interface loop.\n", - "extract (ex) - Extract and install a result. Use: extract (app_id | solv_id n) output_name [render_class render_dll]\n", - "generate (gn) - Generate C# data model. Use: generate modname\n", - "help (h) - Prints this message.\n", - "interactive (int) - use: interactive [on | off], will stop interactive prompting (useful for automated tests)\n", - "list (ls) - Lists environment objects. Use: ls [vars | progs | tasks]\n", - "load (l) - Loads and compiles a file that is not yet loaded. Use: load filename\n", - "print (p) - Prints the installed program with the given name. Use: print progname\n", - "proof (pr) - Enumerate proofs that a ground term is derivable under a model/apply. Use: proof task_id [term]\n", - "query (qr) - Start a query task. Use: query model goals\n", - "reload (rl) - Reloads an installed program and all dependent programs. Use: reload [prog | *]\n", - "render (r) - Tries to render the module. Use: render modname\n", - "save (sv) - Saves the module modname into file.\n", - "set (s) - Sets a variable. Use: set var term.\n", - "solve (sl) - Start a solve task. Use: solve partial_model max_sols goals\n", - "stats (st) - Prints task statistics. Use: stats task_id [top_k_rule]\n", - "truth (tr) - Test if a ground term is derivable under a model/apply. Use: truth task_id [term]\n", - "tunload (tul) - Unloads a task. Use: tunload [id | *]\n", - "types (typ) - Prints inferred variable types. Use: types modname\n", - "unload (ul) - Unloads an installed program and all dependent programs. Use: unload [prog | *]\n", - "verbose (v) - Changes verbosity. Use: verbose (on | off)\n", - "wait (w) - Changes waiting behavior. Use: wait (on | off) to block until task completes\n", - "watch (wch) - Use: watch [off | on | prompt] to control watch behavior\n", - "0.00s.\n" - ] - } - ], + "outputs": [], "source": [ "f.help()" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "e6b8403b-562b-40ab-8f70-2caa531a1f47", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(Compiled) MappingExample.4ml\n", - "0.29s.\n" - ] - } - ], + "outputs": [], "source": [ "code = f.load(\"./data/MappingExample.4ml\")" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "ade37b0d-f9f3-40df-a480-2ec4fe2cfda0", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Parsing text took: 0\n", - "Visiting text took: 0\n", - "Started solve task with Id 0.\n", - "0.12s.\n" - ] - } - ], + "outputs": [], "source": [ "f.solve(\"pm\",\"1\",\"Mapping.conforms\")" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "4c578f47-d949-47db-91e2-d1194ede9f57", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Environment variables\n", - "\n", - "Programs in file root\n", - " +-- /\n", - " +-- C:\n", - " +-- Users\n", - " +-- sajtt\n", - " +-- git\n", - " +-- FormulaLLMPY\n", - " +-- examples\n", - " +-- data [1 file(s)]\n", - " | MappingExample.4ml\n", - "\n", - "Programs in env root\n", - " +-- /\n", - "\n", - "All tasks\n", - " Id | Kind | Status | Result | Started | Duration \n", - "----|-------|--------|--------|-------------------|----------\n", - " 0 | Solve | Done | true | 3/26/2024 5:31 PM | 0.09s \n", - "0.02s.\n" - ] - } - ], + "outputs": [], "source": [ "f.list()" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "234360f9-cd39-4768-8a42-72888a1f437e", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Solution number 0\n", - "Processor(0)\n", - "Component(0, 1/4)\n", - "Component(1, 1/4)\n", - "Mapping(Component(0, 1/4), Processor(0))\n", - "Mapping(Component(1, 1/4), Processor(0))\n", - "\n", - "\n", - "0.00s.\n" - ] - } - ], + "outputs": [], "source": [ "f.extract(\"0\",\"0\",\"0\")" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aef08dc4-816d-4774-8a03-fca25aa5a80d", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -239,7 +96,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/examples/pipelines.ipynb b/examples/pipelines.ipynb index ef5c950..51f25a6 100644 --- a/examples/pipelines.ipynb +++ b/examples/pipelines.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ "metadata": {}, "outputs": [], "source": [ - "file = r'/path/to/file.pdf'\n", + "file = r'./data/parser/formula.pdf'\n", "question = \"Can you summarize what is in the file given the following context?\"\n", "oqap.load_document(file)\n", "res = oqap.run(question)\n", @@ -128,7 +128,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.10.16" } }, "nbformat": 4, From bfea2725b408ad4dc4990d067fdac68851fb4773 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:28:14 -0500 Subject: [PATCH 11/20] Update README --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cbd8735..49e402f 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ $ (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Co ### Create conda environment ```bash -$ conda create -n fpy python=3.10 +$ conda create -n fpy python=3.12 $ conda activate fpy $ poetry install ``` @@ -34,8 +34,9 @@ $ dotnet tool install --global VUISIS.Formula. ``` ### Set OpenAI Env +Create a .env file in the root directory and set the environment variable OPENAI_API_KEY. ``` -Set the environment variable OPENAI_API_KEY if using agents module and GPT before running. +OPENAI_API_KEY= ``` ### Install Ollama For Local LLM From 7f255a4e5f702411475e9723c52728052a8a138e Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:41:53 -0500 Subject: [PATCH 12/20] Add notebook --- poetry.lock | 61 ++++++++++++++++++++++++++++++++++---------------- pyproject.toml | 1 + 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4b7da63..e951b4e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1591,36 +1591,38 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.1.5" +version = "4.3.5" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "jupyterlab-4.1.5-py3-none-any.whl", hash = "sha256:3bc843382a25e1ab7bc31d9e39295a9f0463626692b7995597709c0ab236ab2c"}, - {file = "jupyterlab-4.1.5.tar.gz", hash = "sha256:c9ad75290cb10bfaff3624bf3fbb852319b4cce4c456613f8ebbaa98d03524db"}, + {file = "jupyterlab-4.3.5-py3-none-any.whl", hash = "sha256:571bbdee20e4c5321ab5195bc41cf92a75a5cff886be5e57ce78dfa37a5e9fdb"}, + {file = "jupyterlab-4.3.5.tar.gz", hash = "sha256:c779bf72ced007d7d29d5bcef128e7fdda96ea69299e19b04a43635a7d641f9d"}, ] [package.dependencies] async-lru = ">=1.0.0" httpx = ">=0.25.0" -ipykernel = "*" +ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" jupyter-core = "*" jupyter-lsp = ">=2.0.0" jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.19.0,<3" +jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} +setuptools = ">=40.8.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.2.0)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.2.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.1)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post6)", "matplotlib (==3.8.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.0)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] [[package]] name = "jupyterlab-pygments" @@ -1636,14 +1638,14 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.25.4" +version = "2.27.3" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "jupyterlab_server-2.25.4-py3-none-any.whl", hash = "sha256:eb645ecc8f9b24bac5decc7803b6d5363250e16ec5af814e516bc2c54dd88081"}, - {file = "jupyterlab_server-2.25.4.tar.gz", hash = "sha256:2098198e1e82e0db982440f9b5136175d73bea2cd42a6480aa6fd502cb23c4f9"}, + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, ] [package.dependencies] @@ -2384,27 +2386,27 @@ twitter = ["twython"] [[package]] name = "notebook" -version = "7.1.2" +version = "7.3.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "notebook-7.1.2-py3-none-any.whl", hash = "sha256:fc6c24b9aef18d0cd57157c9c47e95833b9b0bdc599652639acf0bdb61dc7d5f"}, - {file = "notebook-7.1.2.tar.gz", hash = "sha256:efc2c80043909e0faa17fce9e9b37c059c03af0ec99a4d4db84cb21d9d2e936a"}, + {file = "notebook-7.3.2-py3-none-any.whl", hash = "sha256:e5f85fc59b69d3618d73cf27544418193ff8e8058d5bf61d315ce4f473556288"}, + {file = "notebook-7.3.2.tar.gz", hash = "sha256:705e83a1785f45b383bf3ee13cb76680b92d24f56fb0c7d2136fe1d850cd3ca8"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.1.1,<4.2" -jupyterlab-server = ">=2.22.1,<3" +jupyterlab = ">=4.3.4,<4.4" +jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" [package.extras] dev = ["hatch", "pre-commit"] docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -3856,6 +3858,27 @@ nativelib = ["pyobjc-framework-Cocoa", "pywin32"] objc = ["pyobjc-framework-Cocoa"] win32 = ["pywin32"] +[[package]] +name = "setuptools" +version = "75.8.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, + {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] + [[package]] name = "six" version = "1.16.0" @@ -4716,4 +4739,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.1" python-versions = ">3.10,<3.13" -content-hash = "4ad22e5adb6657daa872ce272fb2fe818a131087321cbc4ff09b51ad4a5f85b9" +content-hash = "65a1d3d3eead608e913cc6a06c35c1dcb3b18e68edd21c3ce81f169a70a781a2" diff --git a/pyproject.toml b/pyproject.toml index afeda3b..2e74a57 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ langgraph = "0.2.69" pythonnet = "^3.0.3" tqdm = "4.67.1" jupyter = "1.1.1" +notebook="7.3.2" pillow = "11.1.0" ipython = "8.21.0" pymupdf = "^1.23.26" From e20ab968bfbfa5d0edd66515a70e5777ea0f58e8 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:42:44 -0500 Subject: [PATCH 13/20] Comment out pipelines module --- formulallm/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/formulallm/__init__.py b/formulallm/__init__.py index c8c6362..f319254 100644 --- a/formulallm/__init__.py +++ b/formulallm/__init__.py @@ -1,4 +1,4 @@ from . import agents -from . import pipelines +# from . import pipelines from . import formula from . import utils \ No newline at end of file From b42aabdaee9e96828366a5748c03ba4aeccfcdb0 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 01:45:57 -0500 Subject: [PATCH 14/20] Add .sample.env --- .sample.env | 1 + 1 file changed, 1 insertion(+) create mode 100644 .sample.env diff --git a/.sample.env b/.sample.env new file mode 100644 index 0000000..c2f5364 --- /dev/null +++ b/.sample.env @@ -0,0 +1 @@ +OPENAI_API_KEY=sk-123456 \ No newline at end of file From 9ef4a94d45019263ee50fe435eb04721f37ec0de Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 12:24:35 -0500 Subject: [PATCH 15/20] Update notebook with markdown notes --- examples/untar.ipynb | 66 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/examples/untar.ipynb b/examples/untar.ipynb index a866784..dafbbc7 100644 --- a/examples/untar.ipynb +++ b/examples/untar.ipynb @@ -1,5 +1,12 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import and set up FORMULA executor in Jupyter notebook" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -19,12 +26,10 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "code = f.load(\"./data/parser/TinyDemoParser.4ml\")" + "Import `ParserDSL.4ml` source file and `GenericDataParser` domain that provides a generic DSL for parsing data and will be extended to model a concrete parser in FORMULA language." ] }, { @@ -33,7 +38,7 @@ "metadata": {}, "outputs": [], "source": [ - "f.details(\"TinyDemoParser\")\n" + "code = f.load(\"./data/parser/ParserDSL.4ml\")" ] }, { @@ -42,7 +47,18 @@ "metadata": {}, "outputs": [], "source": [ - "f.query(\"m\", \"isDone\")" + "f.details(\"GenericDataParser\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the following 4 files and feed them to the LLM:\n", + "1. A buggy C program `untar1.c` from ClamAV\n", + "2. A generic DSL for data parsing in `ParserDSL.4ml`\n", + "3. FORMULA documentation `formula.pdf`\n", + "4. A prompt with specific instructions in `prompt.txt` for the agent to model a Tar parser in FORMULA language." ] }, { @@ -53,17 +69,38 @@ "source": [ "from formulallm.agents import FormulaLLMAgent\n", "from formulallm.utils.extraction import pdf2text, file2text\n", - "\n", - "agent = FormulaLLMAgent(model=\"gpt-4o\")\n", "text_code_in_c = file2text(\"./data/parser/untar1.c\")\n", "text_parser_dsl = file2text(\"./data/parser/ParserDSL.4ml\")\n", "text_formula_doc = pdf2text(\"./data/parser/formula.pdf\")\n", "text_prompt = file2text(\"./data/parser/prompt.txt\")\n", - "\n", + "print(text_prompt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Interactively run the agent to model a Tar parser in FORMULA language until the next user input is `q` or `quit`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agent = FormulaLLMAgent(model=\"gpt-4o\")\n", "files = [text_code_in_c, text_parser_dsl, text_formula_doc]\n", "agent.run(text_prompt, files)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Improve the generated parser DSL in FORMULA and load it into FORMULA executor." + ] + }, { "cell_type": "code", "execution_count": null, @@ -73,13 +110,20 @@ "code = f.load(\"./data/parser/GeneratedTar.4ml\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Execute a malicious input model to prove that the parser will get stuck in an infinite loop and never finish." + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "f.query(\"wrongModel\", \"isDone\")" + "f.query(\"maliciousInput\", \"parsingDone\")" ] }, { @@ -108,7 +152,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.12.8" } }, "nbformat": 4, From a00808189df1e6cdb330e211a99ad0ca7fde0c37 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 12:25:17 -0500 Subject: [PATCH 16/20] Minor changes in naming --- examples/data/parser/GeneratedTar.4ml | 4 ++-- examples/data/parser/ParserDSL.4ml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/data/parser/GeneratedTar.4ml b/examples/data/parser/GeneratedTar.4ml index cdf7010..d070b4c 100644 --- a/examples/data/parser/GeneratedTar.4ml +++ b/examples/data/parser/GeneratedTar.4ml @@ -98,7 +98,7 @@ domain TarParser extends GenericDataParser at "ParserDSL.4ml" { } -model wrongModel of TarParser { +model maliciousInput of TarParser { inputData is InputData("tarfile", "data", 1024). initState is State(inputData, INIT, 0, 0). Byte(inputData,1,0). @@ -1127,7 +1127,7 @@ Byte(inputData,1,1022). Byte(inputData,1,1023). } -model rightModel of TarParser { +model goodInput of TarParser { inputData is InputData("tarfile", "data", 1024). initState is State(inputData, INIT, 0, 0). Byte(inputData,1,0). diff --git a/examples/data/parser/ParserDSL.4ml b/examples/data/parser/ParserDSL.4ml index a9e412f..25a9a29 100644 --- a/examples/data/parser/ParserDSL.4ml +++ b/examples/data/parser/ParserDSL.4ml @@ -33,7 +33,7 @@ domain GenericDataParser { State(inputData, _, pos, offset), offset + pos >= length. - isDone :- State(_, DONE, _, _). + parsingDone :- State(_, DONE, _, _). State(initData, INIT, 0, 0) :- initData is InputData(_,_,_). From fa5fc1cce08b56f4b0f2f214d9e5556bd2f2cdc4 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 12:29:42 -0500 Subject: [PATCH 17/20] Update README.md --- README.md | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 49e402f..296aabf 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,21 @@ # FORMULA LLM - LLM Explanation and Repair ### Requirements + ``` -python = 3.10 +python = 3.12 dotnet 6.0 poetry ``` ### Python dependencies + ``` Dependencies are listed in pyproject.toml under [tool.poetry.dependencies] ``` -### Install poetry +### Install poetry + ```bash // Linux, macOS, and Windows (WSL) $ curl -sSL https://install.python-poetry.org | python3 - @@ -22,6 +25,7 @@ $ (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Co ``` ### Create conda environment + ```bash $ conda create -n fpy python=3.12 $ conda activate fpy @@ -29,29 +33,21 @@ $ poetry install ``` ### Install Formula + ```bash $ dotnet tool install --global VUISIS.Formula. ``` -### Set OpenAI Env +### Set OpenAI Env + Create a .env file in the root directory and set the environment variable OPENAI_API_KEY. + ``` OPENAI_API_KEY= ``` -### Install Ollama For Local LLM -```bash -// Download Ollama for your platform here https://ollama.com/download if using pipelines module. - -// Pull the LLM models -$ ollama pull mistral -$ ollama pull bakllava - -// Run the Ollama server exe or by command -$ ollama serve -``` - ### Run Jupyter Notebook + ```bash $ jupyter notebook -``` \ No newline at end of file +``` From 76a4f18ad0448a488ec2910f560913876c18b087 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 16:15:02 -0500 Subject: [PATCH 18/20] Minor fixes on naming and data --- examples/data/parser/GeneratedTar.4ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/data/parser/GeneratedTar.4ml b/examples/data/parser/GeneratedTar.4ml index d070b4c..ac6e3f3 100644 --- a/examples/data/parser/GeneratedTar.4ml +++ b/examples/data/parser/GeneratedTar.4ml @@ -257,7 +257,7 @@ Byte(inputData,1,152). Byte(inputData,1,153). Byte(inputData,1,154). Byte(inputData,1,155). -Byte(inputData,-100,156). +Byte(inputData,-1000,156). Byte(inputData,1,157). Byte(inputData,1,158). Byte(inputData,1,159). @@ -1127,7 +1127,7 @@ Byte(inputData,1,1022). Byte(inputData,1,1023). } -model goodInput of TarParser { +model correctInput of TarParser { inputData is InputData("tarfile", "data", 1024). initState is State(inputData, INIT, 0, 0). Byte(inputData,1,0). From c55136c6848d359ae9d230b200a6d6f1b47576e7 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Wed, 5 Feb 2025 16:15:40 -0500 Subject: [PATCH 19/20] Add outputs to untar.ipynb --- examples/untar.ipynb | 345 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 327 insertions(+), 18 deletions(-) diff --git a/examples/untar.ipynb b/examples/untar.ipynb index dafbbc7..42f4432 100644 --- a/examples/untar.ipynb +++ b/examples/untar.ipynb @@ -18,9 +18,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "apply (ap) - Start an apply task. Use: apply transformstep\n", + "confhelp (ch) - Provides help about module configurations and settings\n", + "core (cr) - Prints reduced rule set for domains / transforms. Use: core module_name\n", + "del (d) - Deletes a variable. Use: del var.\n", + "det (dt) - Prints details about the compiled module with the given name. Use: det modname\n", + "downgrade (dg) - Attempts to downgrade a (partial) model to Formula V1. Use: downgrade module_name\n", + "exit (x) - Exits the interface loop.\n", + "extract (ex) - Extract and install a result. Use: extract (app_id | solv_id n) output_name [render_class render_dll]\n", + "generate (gn) - Generate C# data model. Use: generate modname\n", + "help (h) - Prints this message.\n", + "interactive (int) - use: interactive [on | off], will stop interactive prompting (useful for automated tests)\n", + "list (ls) - Lists environment objects. Use: ls [vars | progs | tasks]\n", + "load (l) - Loads and compiles a file that is not yet loaded. Use: load filename\n", + "print (p) - Prints the installed program with the given name. Use: print progname\n", + "proof (pr) - Enumerate proofs that a ground term is derivable under a model/apply. Use: proof task_id [term]\n", + "query (qr) - Start a query task. Use: query model goals\n", + "reload (rl) - Reloads an installed program and all dependent programs. Use: reload [prog | *]\n", + "render (r) - Tries to render the module. Use: render modname\n", + "save (sv) - Saves the module modname into file.\n", + "set (s) - Sets a variable. Use: set var term.\n", + "solve (sl) - Start a solve task. Use: solve partial_model max_sols goals\n", + "stats (st) - Prints task statistics. Use: stats task_id [top_k_rule]\n", + "truth (tr) - Test if a ground term is derivable under a model/apply. Use: truth task_id [term]\n", + "tunload (tul) - Unloads a task. Use: tunload [id | *]\n", + "types (typ) - Prints inferred variable types. Use: types modname\n", + "unload (ul) - Unloads an installed program and all dependent programs. Use: unload [prog | *]\n", + "verbose (v) - Changes verbosity. Use: verbose (on | off)\n", + "wait (w) - Changes waiting behavior. Use: wait (on | off) to block until task completes\n", + "watch (wch) - Use: watch [off | on | prompt] to control watch behavior\n", + "0.00s.\n" + ] + } + ], "source": [ "f.help()" ] @@ -34,18 +71,135 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(Compiled) ParserDSL.4ml\n", + "0.27s.\n" + ] + } + ], "source": [ "code = f.load(\"./data/parser/ParserDSL.4ml\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reduced form\n", + "domain GenericDataParser\n", + "{\n", + " Status ::= { INIT, READ, UPDATE, TERMINATE, DONE }.\n", + " Byte ::= new (input: InputData, val: Integer, pos: Integer).\n", + " InputData ::= new (name: String, data: String, length: Integer).\n", + " State ::= new (inputData: InputData, status: Status, curPos: Integer, offset: Integer).\n", + " Transition ::= new (from: State, to: State).\n", + " IntermediateResult ::= new (name: String, context: State, derivedResult: String + Integer + { NULL }).\n", + " NextOffset ::= new (context: State, offset: Integer).\n", + " NextPos ::= new (context: State, pos: Integer).\n", + " OverRead ::= new (context: State).\n", + " CanReadMore ::= new (context: State).\n", + " ContinueCondition ::= new (context: State).\n", + "\n", + " OverRead(State(inputData, UPDATE, pos, offset))\n", + " :-\n", + " OverRead(State(inputData, READ, pos, offset)).\n", + "\n", + " OverRead(state)\n", + " :-\n", + " state is State(InputData(_, _, length), _, pos, offset), pos + offset >= length.\n", + "\n", + " CanReadMore(State(inputData, UPDATE, pos, offset))\n", + " :-\n", + " CanReadMore(State(inputData, READ, pos, offset)).\n", + "\n", + " CanReadMore(state)\n", + " :-\n", + " state is State(InputData(_, _, length), _, pos, offset), pos + offset < length.\n", + "\n", + " ContinueCondition(State(inputData, UPDATE, pos, offset))\n", + " :-\n", + " ContinueCondition(State(inputData, READ, pos, offset)).\n", + "\n", + " State(inputData, DONE, pos, offset)\n", + " :-\n", + " inputData is InputData(name, data, length), State(inputData, _, pos, offset), offset + pos >= length.\n", + "\n", + " parsingDone\n", + " :-\n", + " State(_, DONE, _, _).\n", + "\n", + " State(initData, INIT, 0, 0)\n", + " :-\n", + " initData is InputData(_, _, _).\n", + "\n", + " State(inputData, READ, newPos, newOffset),\n", + " Transition(oldState, State(inputData, READ, newPos, newOffset))\n", + " :-\n", + " oldState is State(inputData, _, pos, offset), NextPos(oldState, newPos), NextOffset(oldState, newOffset), ContinueCondition(oldState).\n", + " conforms Byte(inputData, val, pos), inputData is InputData(_, data, length), pos >= 0, pos < length.\n", + "}\n", + "\n", + "Symbol table\n", + " Space | Name | Arity | Kind \n", + "-------------------|--------------------|-------|-------\n", + " | Boolean | 0 | unn \n", + " | Byte | 3 | con \n", + " | CanReadMore | 1 | con \n", + " | ContinueCondition | 1 | con \n", + " | DONE | 0 | ncnst \n", + " | FALSE | 0 | ncnst \n", + " | INIT | 0 | ncnst \n", + " | InputData | 3 | con \n", + " | Integer | 0 | unn \n", + " | IntermediateResult | 3 | con \n", + " | NULL | 0 | ncnst \n", + " | Natural | 0 | unn \n", + " | NegInteger | 0 | unn \n", + " | NextOffset | 2 | con \n", + " | NextPos | 2 | con \n", + " | OverRead | 1 | con \n", + " | PosInteger | 0 | unn \n", + " | READ | 0 | ncnst \n", + " | Real | 0 | unn \n", + " | State | 4 | con \n", + " | Status | 0 | unn \n", + " | String | 0 | unn \n", + " | TERMINATE | 0 | ncnst \n", + " | TRUE | 0 | ncnst \n", + " | Transition | 2 | con \n", + " | UPDATE | 0 | ncnst \n", + " GenericDataParser | Any | 0 | unn \n", + " GenericDataParser | Constant | 0 | unn \n", + " GenericDataParser | Data | 0 | unn \n", + " GenericDataParser | conforms | 0 | dcnst \n", + " GenericDataParser | notFunctional | 0 | dcnst \n", + " GenericDataParser | notInjective | 0 | dcnst \n", + " GenericDataParser | notInvTotal | 0 | dcnst \n", + " GenericDataParser | notRelational | 0 | dcnst \n", + " GenericDataParser | notTotal | 0 | dcnst \n", + " GenericDataParser | parsingDone | 0 | dcnst \n", + " GenericDataParser | ~conforms0 | 0 | dcnst \n", + "\n", + "Type constants: #Boolean #Byte #Byte[0] #Byte[1] #Byte[2] #CanReadMore #CanReadMore[0] #ContinueCondition #ContinueCondition[0] #InputData #InputData[0] #InputData[1] #InputData[2] #Integer #IntermediateResult #IntermediateResult[0] #IntermediateResult[1] #IntermediateResult[2] #Natural #NegInteger #NextOffset #NextOffset[0] #NextOffset[1] #NextPos #NextPos[0] #NextPos[1] #OverRead #OverRead[0] #PosInteger #Real #State #State[0] #State[1] #State[2] #State[3] #Status #String #Transition #Transition[0] #Transition[1] GenericDataParser.#Any GenericDataParser.#Constant GenericDataParser.#Data\n", + "Symbolic constants: \n", + "Rationals: 0 \n", + "Strings: \n", + "Variables: data initData inputData length name newOffset newPos offset oldState pos state val \n", + "0.02s.\n" + ] + } + ], "source": [ "f.details(\"GenericDataParser\")\n" ] @@ -63,9 +217,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1. Understand the C code in untar1.c, FORMULA documentation and ParserDSL.4ml. \n", + "2. Model untar1.c in FORMULA by extending the `GenericDataParser` domain in ParserDSL.4ml. \n", + "3. Do not change the type definition in `GenericDataParser` domain such as Status and IntermediateResult.\n", + "4. Use strJoin() in FORMULA to concatenate strings.\n", + "5. Model `skipEntry` as IntermediateResult in FORMULA and reflect how its value affects the parsing.\n", + "6. Model how `skipEntry` is computed from other IntermediateResults or the current read.\n" + ] + } + ], "source": [ "from formulallm.agents import FormulaLLMAgent\n", "from formulallm.utils.extraction import pdf2text, file2text\n", @@ -80,14 +247,98 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Interactively run the agent to model a Tar parser in FORMULA language until the next user input is `q` or `quit`." + "Interactively and iteratively run the LLM agent to model a Tar parser in FORMULA language with additional user input until the next user input is `q` or `quit`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting conversation with the agent. Type 'exit' to end the session.\n", + "Getting back results from initial prompt...\n", + "Assistant: To model the `untar1.c` code in FORMULA by extending the `GenericDataParser` domain in `ParserDSL.4ml`, we need to focus on the key aspects of the C code that are relevant to parsing and how they can be represented in FORMULA. Here's a step-by-step approach to achieve this:\n", + "\n", + "1. **Understand the C Code**: The `untar1.c` code is responsible for reading and extracting files from a tar archive. It reads blocks of data, checks for file types, and handles different cases like directories, symbolic links, and special files. The `skipEntry` variable is used to determine whether a particular entry should be skipped based on its type or if there are errors in reading the size.\n", + "\n", + "2. **Identify Key Elements for FORMULA**:\n", + " - **Status**: Represents the state of the parsing process (e.g., INIT, READ, UPDATE, DONE).\n", + " - **IntermediateResult**: Represents intermediate parsing results, such as `skipEntry`.\n", + " - **String Operations**: Use `strJoin()` for string concatenation.\n", + "\n", + "3. **Model `skipEntry` as an IntermediateResult**:\n", + " - `skipEntry` is computed based on the type of the entry and the validity of the size. It affects whether the entry is processed or skipped.\n", + "\n", + "4. **Extend `GenericDataParser` Domain**:\n", + " - Define `IntermediateResult` for `skipEntry`.\n", + " - Use `strJoin()` for constructing file paths or messages.\n", + "\n", + "Here's how you can model this in FORMULA:\n", + "\n", + "```formula\n", + "domain TarParser extends GenericDataParser {\n", + " // Define IntermediateResult for skipEntry\n", + " IntermediateResult ::= new (name: String, context: State, derivedResult: Boolean).\n", + "\n", + " // Define how skipEntry is computed\n", + " SkipEntryCondition ::= new (context: State, typeFlag: String, sizeValid: Boolean).\n", + "\n", + " // Rule to determine skipEntry based on type and size\n", + " IntermediateResult(\"skipEntry\", state, skip) :-\n", + " state is State(inputData, READ, pos, offset),\n", + " SkipEntryCondition(state, typeFlag, sizeValid),\n", + " (typeFlag in {\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"K\", \"L\", \"N\", \"A\", \"E\", \"I\", \"g\", \"x\", \"X\"}; not(sizeValid)),\n", + " skip = TRUE.\n", + "\n", + " // Rule to determine valid size\n", + " ValidSize ::= new (context: State, size: Integer).\n", + " ValidSize(state, size) :- size >= 0.\n", + "\n", + " // Rule to compute SkipEntryCondition\n", + " SkipEntryCondition(state, typeFlag, sizeValid) :-\n", + " state is State(inputData, READ, pos, offset),\n", + " Byte(inputData, typeFlag, pos + 156), // Assuming typeFlag is at position 156\n", + " Byte(inputData, sizeStr, pos + 124), // Assuming size is at position 124\n", + " size = octal(sizeStr),\n", + " ValidSize(state, size),\n", + " sizeValid = TRUE.\n", + "\n", + " // Use strJoin for constructing file paths\n", + " FilePath ::= new (context: State, path: String).\n", + " FilePath(state, path) :-\n", + " state is State(inputData, READ, pos, offset),\n", + " strJoin(\"/tmp/\", strJoin(\"tar\", toString(files)), path).\n", + "}\n", + "```\n", + "\n", + "### Explanation:\n", + "- **IntermediateResult**: `skipEntry` is modeled as an `IntermediateResult` that is derived based on the type of the entry and the validity of the size.\n", + "- **SkipEntryCondition**: This is a helper to determine if an entry should be skipped based on its type and size validity.\n", + "- **ValidSize**: A simple rule to check if the size is valid (non-negative).\n", + "- **strJoin**: Used to construct file paths, similar to how `snprintf` is used in C.\n", + "\n", + "This FORMULA model captures the essence of the `untar1.c` logic related to parsing and skipping entries, while adhering to the constraints and types defined in the `GenericDataParser` domain.\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "User: exit\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Goodbye!\n" + ] + } + ], "source": [ "agent = FormulaLLMAgent(model=\"gpt-4o\")\n", "files = [text_code_in_c, text_parser_dsl, text_formula_doc]\n", @@ -103,9 +354,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(Compiled) GeneratedTar.4ml\n", + "(Compiled) ParserDSL.4ml\n", + "1.02s.\n" + ] + } + ], "source": [ "code = f.load(\"./data/parser/GeneratedTar.4ml\")" ] @@ -114,26 +375,74 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Execute a malicious input model to prove that the parser will get stuck in an infinite loop and never finish." + "Execute a malicious input model to show that the evaluation of `parsingDone` returns false when the parser gets stuck in an infinite loop and will never reach the end of the input." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing text took: 1\n", + "Visiting text took: 0\n", + "Started query task with Id 0.\n", + "0.47s.\n" + ] + } + ], "source": [ "f.query(\"maliciousInput\", \"parsingDone\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Environment variables\n", + "\n", + "Programs in file root\n", + " +-- /\n", + " +-- Users\n", + " +-- qishenzhang\n", + " +-- projects\n", + " +-- FormulaLLMPY\n", + " +-- examples\n", + " +-- data\n", + " +-- parser [2 file(s)]\n", + " | GeneratedTar.4ml\n", + " | ParserDSL.4ml\n", + "\n", + "Programs in env root\n", + " +-- /\n", + "\n", + "All tasks\n", + " Id | Kind | Status | Result | Started | Duration \n", + "----|-------|--------|--------|------------------|----------\n", + " 0 | Query | Done | false | 2/5/2025 4:10 PM | 0.33s \n", + "0.00s.\n" + ] + } + ], "source": [ "f.list()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 4d7d1f41f1fd6924006d975f0fe762351c9b6ae0 Mon Sep 17 00:00:00 2001 From: Qishen Zhang Date: Thu, 6 Feb 2025 13:36:39 -0500 Subject: [PATCH 20/20] Minor change on prompt --- examples/data/parser/prompt.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/data/parser/prompt.txt b/examples/data/parser/prompt.txt index 3e94a84..141eb5b 100644 --- a/examples/data/parser/prompt.txt +++ b/examples/data/parser/prompt.txt @@ -1,4 +1,4 @@ -1. Understand the C code in untar1.c, FORMULA documentation and ParserDSL.4ml. +1. Understand the C code in untar1.c, formula.pdf and ParserDSL.4ml. 2. Model untar1.c in FORMULA by extending the `GenericDataParser` domain in ParserDSL.4ml. 3. Do not change the type definition in `GenericDataParser` domain such as Status and IntermediateResult. 4. Use strJoin() in FORMULA to concatenate strings.