#
tokens: 49377/50000 10/808 files (page 18/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 18 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .venv
│   ├── __pycache__
│   │   └── hello.cpython-312.pyc
│   ├── bin
│   │   ├── activate
│   │   ├── activate.csh
│   │   ├── activate.fish
│   │   ├── Activate.ps1
│   │   ├── flask
│   │   ├── normalizer
│   │   ├── pip
│   │   ├── pip3
│   │   ├── pip3.12
│   │   ├── python
│   │   ├── python3
│   │   └── python3.12
│   ├── hello.py
│   ├── lib
│   │   └── python3.12
│   │       └── site-packages
│   │           ├── beautifulsoup4-4.12.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   ├── AUTHORS
│   │           │   │   └── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── blinker
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _utilities.cpython-312.pyc
│   │           │   │   └── base.cpython-312.pyc
│   │           │   ├── _utilities.py
│   │           │   ├── base.py
│   │           │   └── py.typed
│   │           ├── blinker-1.8.2.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── bs4
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── css.cpython-312.pyc
│   │           │   │   ├── dammit.cpython-312.pyc
│   │           │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   ├── element.cpython-312.pyc
│   │           │   │   └── formatter.cpython-312.pyc
│   │           │   ├── builder
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _html5lib.cpython-312.pyc
│   │           │   │   │   ├── _htmlparser.cpython-312.pyc
│   │           │   │   │   └── _lxml.cpython-312.pyc
│   │           │   │   ├── _html5lib.py
│   │           │   │   ├── _htmlparser.py
│   │           │   │   └── _lxml.py
│   │           │   ├── css.py
│   │           │   ├── dammit.py
│   │           │   ├── diagnose.py
│   │           │   ├── element.py
│   │           │   ├── formatter.py
│   │           │   └── tests
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── test_builder_registry.cpython-312.pyc
│   │           │       │   ├── test_builder.cpython-312.pyc
│   │           │       │   ├── test_css.cpython-312.pyc
│   │           │       │   ├── test_dammit.cpython-312.pyc
│   │           │       │   ├── test_docs.cpython-312.pyc
│   │           │       │   ├── test_element.cpython-312.pyc
│   │           │       │   ├── test_formatter.cpython-312.pyc
│   │           │       │   ├── test_fuzz.cpython-312.pyc
│   │           │       │   ├── test_html5lib.cpython-312.pyc
│   │           │       │   ├── test_htmlparser.cpython-312.pyc
│   │           │       │   ├── test_lxml.cpython-312.pyc
│   │           │       │   ├── test_navigablestring.cpython-312.pyc
│   │           │       │   ├── test_pageelement.cpython-312.pyc
│   │           │       │   ├── test_soup.cpython-312.pyc
│   │           │       │   ├── test_tag.cpython-312.pyc
│   │           │       │   └── test_tree.cpython-312.pyc
│   │           │       ├── fuzz
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│   │           │       │   ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│   │           │       │   └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│   │           │       ├── test_builder_registry.py
│   │           │       ├── test_builder.py
│   │           │       ├── test_css.py
│   │           │       ├── test_dammit.py
│   │           │       ├── test_docs.py
│   │           │       ├── test_element.py
│   │           │       ├── test_formatter.py
│   │           │       ├── test_fuzz.py
│   │           │       ├── test_html5lib.py
│   │           │       ├── test_htmlparser.py
│   │           │       ├── test_lxml.py
│   │           │       ├── test_navigablestring.py
│   │           │       ├── test_pageelement.py
│   │           │       ├── test_soup.py
│   │           │       ├── test_tag.py
│   │           │       └── test_tree.py
│   │           ├── certifi
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── core.cpython-312.pyc
│   │           │   ├── cacert.pem
│   │           │   ├── core.py
│   │           │   └── py.typed
│   │           ├── certifi-2024.8.30.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── charset_normalizer
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── cd.cpython-312.pyc
│   │           │   │   ├── constant.cpython-312.pyc
│   │           │   │   ├── legacy.cpython-312.pyc
│   │           │   │   ├── md.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── version.cpython-312.pyc
│   │           │   ├── api.py
│   │           │   ├── cd.py
│   │           │   ├── cli
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __main__.py
│   │           │   │   └── __pycache__
│   │           │   │       ├── __init__.cpython-312.pyc
│   │           │   │       └── __main__.cpython-312.pyc
│   │           │   ├── constant.py
│   │           │   ├── legacy.py
│   │           │   ├── md__mypyc.cpython-312-darwin.so
│   │           │   ├── md.cpython-312-darwin.so
│   │           │   ├── md.py
│   │           │   ├── models.py
│   │           │   ├── py.typed
│   │           │   ├── utils.py
│   │           │   └── version.py
│   │           ├── charset_normalizer-3.4.0.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── click
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _compat.cpython-312.pyc
│   │           │   │   ├── _termui_impl.cpython-312.pyc
│   │           │   │   ├── _textwrap.cpython-312.pyc
│   │           │   │   ├── _winconsole.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── decorators.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formatting.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── shell_completion.cpython-312.pyc
│   │           │   │   ├── termui.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── types.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── _compat.py
│   │           │   ├── _termui_impl.py
│   │           │   ├── _textwrap.py
│   │           │   ├── _winconsole.py
│   │           │   ├── core.py
│   │           │   ├── decorators.py
│   │           │   ├── exceptions.py
│   │           │   ├── formatting.py
│   │           │   ├── globals.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── shell_completion.py
│   │           │   ├── termui.py
│   │           │   ├── testing.py
│   │           │   ├── types.py
│   │           │   └── utils.py
│   │           ├── click-8.1.7.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.rst
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── fake_useragent
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── errors.cpython-312.pyc
│   │           │   │   ├── fake.cpython-312.pyc
│   │           │   │   ├── log.cpython-312.pyc
│   │           │   │   ├── settings.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── data
│   │           │   │   └── browsers.json
│   │           │   ├── errors.py
│   │           │   ├── fake.py
│   │           │   ├── log.py
│   │           │   ├── settings.py
│   │           │   └── utils.py
│   │           ├── fake_useragent-1.5.1.dist-info
│   │           │   ├── AUTHORS
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── flask
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── app.cpython-312.pyc
│   │           │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   ├── cli.cpython-312.pyc
│   │           │   │   ├── config.cpython-312.pyc
│   │           │   │   ├── ctx.cpython-312.pyc
│   │           │   │   ├── debughelpers.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── helpers.cpython-312.pyc
│   │           │   │   ├── logging.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── signals.cpython-312.pyc
│   │           │   │   ├── templating.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── typing.cpython-312.pyc
│   │           │   │   ├── views.cpython-312.pyc
│   │           │   │   └── wrappers.cpython-312.pyc
│   │           │   ├── app.py
│   │           │   ├── blueprints.py
│   │           │   ├── cli.py
│   │           │   ├── config.py
│   │           │   ├── ctx.py
│   │           │   ├── debughelpers.py
│   │           │   ├── globals.py
│   │           │   ├── helpers.py
│   │           │   ├── json
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── provider.cpython-312.pyc
│   │           │   │   │   └── tag.cpython-312.pyc
│   │           │   │   ├── provider.py
│   │           │   │   └── tag.py
│   │           │   ├── logging.py
│   │           │   ├── py.typed
│   │           │   ├── sansio
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── app.cpython-312.pyc
│   │           │   │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   │   └── scaffold.cpython-312.pyc
│   │           │   │   ├── app.py
│   │           │   │   ├── blueprints.py
│   │           │   │   ├── README.md
│   │           │   │   └── scaffold.py
│   │           │   ├── sessions.py
│   │           │   ├── signals.py
│   │           │   ├── templating.py
│   │           │   ├── testing.py
│   │           │   ├── typing.py
│   │           │   ├── views.py
│   │           │   └── wrappers.py
│   │           ├── flask-3.0.3.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── idna
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── codec.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   ├── intranges.cpython-312.pyc
│   │           │   │   ├── package_data.cpython-312.pyc
│   │           │   │   └── uts46data.cpython-312.pyc
│   │           │   ├── codec.py
│   │           │   ├── compat.py
│   │           │   ├── core.py
│   │           │   ├── idnadata.py
│   │           │   ├── intranges.py
│   │           │   ├── package_data.py
│   │           │   ├── py.typed
│   │           │   └── uts46data.py
│   │           ├── idna-3.10.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── itsdangerous
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _json.cpython-312.pyc
│   │           │   │   ├── encoding.cpython-312.pyc
│   │           │   │   ├── exc.cpython-312.pyc
│   │           │   │   ├── serializer.cpython-312.pyc
│   │           │   │   ├── signer.cpython-312.pyc
│   │           │   │   ├── timed.cpython-312.pyc
│   │           │   │   └── url_safe.cpython-312.pyc
│   │           │   ├── _json.py
│   │           │   ├── encoding.py
│   │           │   ├── exc.py
│   │           │   ├── py.typed
│   │           │   ├── serializer.py
│   │           │   ├── signer.py
│   │           │   ├── timed.py
│   │           │   └── url_safe.py
│   │           ├── itsdangerous-2.2.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── jinja2
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _identifier.cpython-312.pyc
│   │           │   │   ├── async_utils.cpython-312.pyc
│   │           │   │   ├── bccache.cpython-312.pyc
│   │           │   │   ├── compiler.cpython-312.pyc
│   │           │   │   ├── constants.cpython-312.pyc
│   │           │   │   ├── debug.cpython-312.pyc
│   │           │   │   ├── defaults.cpython-312.pyc
│   │           │   │   ├── environment.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── ext.cpython-312.pyc
│   │           │   │   ├── filters.cpython-312.pyc
│   │           │   │   ├── idtracking.cpython-312.pyc
│   │           │   │   ├── lexer.cpython-312.pyc
│   │           │   │   ├── loaders.cpython-312.pyc
│   │           │   │   ├── meta.cpython-312.pyc
│   │           │   │   ├── nativetypes.cpython-312.pyc
│   │           │   │   ├── nodes.cpython-312.pyc
│   │           │   │   ├── optimizer.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── runtime.cpython-312.pyc
│   │           │   │   ├── sandbox.cpython-312.pyc
│   │           │   │   ├── tests.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── visitor.cpython-312.pyc
│   │           │   ├── _identifier.py
│   │           │   ├── async_utils.py
│   │           │   ├── bccache.py
│   │           │   ├── compiler.py
│   │           │   ├── constants.py
│   │           │   ├── debug.py
│   │           │   ├── defaults.py
│   │           │   ├── environment.py
│   │           │   ├── exceptions.py
│   │           │   ├── ext.py
│   │           │   ├── filters.py
│   │           │   ├── idtracking.py
│   │           │   ├── lexer.py
│   │           │   ├── loaders.py
│   │           │   ├── meta.py
│   │           │   ├── nativetypes.py
│   │           │   ├── nodes.py
│   │           │   ├── optimizer.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── runtime.py
│   │           │   ├── sandbox.py
│   │           │   ├── tests.py
│   │           │   ├── utils.py
│   │           │   └── visitor.py
│   │           ├── jinja2-3.1.4.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── lxml
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _elementpath.cpython-312.pyc
│   │           │   │   ├── builder.cpython-312.pyc
│   │           │   │   ├── cssselect.cpython-312.pyc
│   │           │   │   ├── doctestcompare.cpython-312.pyc
│   │           │   │   ├── ElementInclude.cpython-312.pyc
│   │           │   │   ├── pyclasslookup.cpython-312.pyc
│   │           │   │   ├── sax.cpython-312.pyc
│   │           │   │   └── usedoctest.cpython-312.pyc
│   │           │   ├── _elementpath.cpython-312-darwin.so
│   │           │   ├── _elementpath.py
│   │           │   ├── apihelpers.pxi
│   │           │   ├── builder.cpython-312-darwin.so
│   │           │   ├── builder.py
│   │           │   ├── classlookup.pxi
│   │           │   ├── cleanup.pxi
│   │           │   ├── cssselect.py
│   │           │   ├── debug.pxi
│   │           │   ├── docloader.pxi
│   │           │   ├── doctestcompare.py
│   │           │   ├── dtd.pxi
│   │           │   ├── ElementInclude.py
│   │           │   ├── etree_api.h
│   │           │   ├── etree.cpython-312-darwin.so
│   │           │   ├── etree.h
│   │           │   ├── etree.pyx
│   │           │   ├── extensions.pxi
│   │           │   ├── html
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _diffcommand.cpython-312.pyc
│   │           │   │   │   ├── _html5builder.cpython-312.pyc
│   │           │   │   │   ├── _setmixin.cpython-312.pyc
│   │           │   │   │   ├── builder.cpython-312.pyc
│   │           │   │   │   ├── clean.cpython-312.pyc
│   │           │   │   │   ├── defs.cpython-312.pyc
│   │           │   │   │   ├── diff.cpython-312.pyc
│   │           │   │   │   ├── ElementSoup.cpython-312.pyc
│   │           │   │   │   ├── formfill.cpython-312.pyc
│   │           │   │   │   ├── html5parser.cpython-312.pyc
│   │           │   │   │   ├── soupparser.cpython-312.pyc
│   │           │   │   │   └── usedoctest.cpython-312.pyc
│   │           │   │   ├── _diffcommand.py
│   │           │   │   ├── _html5builder.py
│   │           │   │   ├── _setmixin.py
│   │           │   │   ├── builder.py
│   │           │   │   ├── clean.py
│   │           │   │   ├── defs.py
│   │           │   │   ├── diff.cpython-312-darwin.so
│   │           │   │   ├── diff.py
│   │           │   │   ├── ElementSoup.py
│   │           │   │   ├── formfill.py
│   │           │   │   ├── html5parser.py
│   │           │   │   ├── soupparser.py
│   │           │   │   └── usedoctest.py
│   │           │   ├── includes
│   │           │   │   ├── __init__.pxd
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   ├── c14n.pxd
│   │           │   │   ├── config.pxd
│   │           │   │   ├── dtdvalid.pxd
│   │           │   │   ├── etree_defs.h
│   │           │   │   ├── etreepublic.pxd
│   │           │   │   ├── extlibs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── libcharset.h
│   │           │   │   │   ├── localcharset.h
│   │           │   │   │   ├── zconf.h
│   │           │   │   │   └── zlib.h
│   │           │   │   ├── htmlparser.pxd
│   │           │   │   ├── libexslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── exslt.h
│   │           │   │   │   ├── exsltconfig.h
│   │           │   │   │   └── exsltexports.h
│   │           │   │   ├── libxml
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── c14n.h
│   │           │   │   │   ├── catalog.h
│   │           │   │   │   ├── chvalid.h
│   │           │   │   │   ├── debugXML.h
│   │           │   │   │   ├── dict.h
│   │           │   │   │   ├── encoding.h
│   │           │   │   │   ├── entities.h
│   │           │   │   │   ├── globals.h
│   │           │   │   │   ├── hash.h
│   │           │   │   │   ├── HTMLparser.h
│   │           │   │   │   ├── HTMLtree.h
│   │           │   │   │   ├── list.h
│   │           │   │   │   ├── nanoftp.h
│   │           │   │   │   ├── nanohttp.h
│   │           │   │   │   ├── parser.h
│   │           │   │   │   ├── parserInternals.h
│   │           │   │   │   ├── relaxng.h
│   │           │   │   │   ├── SAX.h
│   │           │   │   │   ├── SAX2.h
│   │           │   │   │   ├── schemasInternals.h
│   │           │   │   │   ├── schematron.h
│   │           │   │   │   ├── threads.h
│   │           │   │   │   ├── tree.h
│   │           │   │   │   ├── uri.h
│   │           │   │   │   ├── valid.h
│   │           │   │   │   ├── xinclude.h
│   │           │   │   │   ├── xlink.h
│   │           │   │   │   ├── xmlautomata.h
│   │           │   │   │   ├── xmlerror.h
│   │           │   │   │   ├── xmlexports.h
│   │           │   │   │   ├── xmlIO.h
│   │           │   │   │   ├── xmlmemory.h
│   │           │   │   │   ├── xmlmodule.h
│   │           │   │   │   ├── xmlreader.h
│   │           │   │   │   ├── xmlregexp.h
│   │           │   │   │   ├── xmlsave.h
│   │           │   │   │   ├── xmlschemas.h
│   │           │   │   │   ├── xmlschemastypes.h
│   │           │   │   │   ├── xmlstring.h
│   │           │   │   │   ├── xmlunicode.h
│   │           │   │   │   ├── xmlversion.h
│   │           │   │   │   ├── xmlwriter.h
│   │           │   │   │   ├── xpath.h
│   │           │   │   │   ├── xpathInternals.h
│   │           │   │   │   └── xpointer.h
│   │           │   │   ├── libxslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── attributes.h
│   │           │   │   │   ├── documents.h
│   │           │   │   │   ├── extensions.h
│   │           │   │   │   ├── extra.h
│   │           │   │   │   ├── functions.h
│   │           │   │   │   ├── imports.h
│   │           │   │   │   ├── keys.h
│   │           │   │   │   ├── namespaces.h
│   │           │   │   │   ├── numbersInternals.h
│   │           │   │   │   ├── pattern.h
│   │           │   │   │   ├── preproc.h
│   │           │   │   │   ├── security.h
│   │           │   │   │   ├── templates.h
│   │           │   │   │   ├── transform.h
│   │           │   │   │   ├── variables.h
│   │           │   │   │   ├── xslt.h
│   │           │   │   │   ├── xsltconfig.h
│   │           │   │   │   ├── xsltexports.h
│   │           │   │   │   ├── xsltInternals.h
│   │           │   │   │   ├── xsltlocale.h
│   │           │   │   │   └── xsltutils.h
│   │           │   │   ├── lxml-version.h
│   │           │   │   ├── relaxng.pxd
│   │           │   │   ├── schematron.pxd
│   │           │   │   ├── tree.pxd
│   │           │   │   ├── uri.pxd
│   │           │   │   ├── xinclude.pxd
│   │           │   │   ├── xmlerror.pxd
│   │           │   │   ├── xmlparser.pxd
│   │           │   │   ├── xmlschema.pxd
│   │           │   │   ├── xpath.pxd
│   │           │   │   └── xslt.pxd
│   │           │   ├── isoschematron
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   └── resources
│   │           │   │       ├── rng
│   │           │   │       │   └── iso-schematron.rng
│   │           │   │       └── xsl
│   │           │   │           ├── iso-schematron-xslt1
│   │           │   │           │   ├── iso_abstract_expand.xsl
│   │           │   │           │   ├── iso_dsdl_include.xsl
│   │           │   │           │   ├── iso_schematron_message.xsl
│   │           │   │           │   ├── iso_schematron_skeleton_for_xslt1.xsl
│   │           │   │           │   ├── iso_svrl_for_xslt1.xsl
│   │           │   │           │   └── readme.txt
│   │           │   │           ├── RNG2Schtrn.xsl
│   │           │   │           └── XSD2Schtrn.xsl
│   │           │   ├── iterparse.pxi
│   │           │   ├── lxml.etree_api.h
│   │           │   ├── lxml.etree.h
│   │           │   ├── nsclasses.pxi
│   │           │   ├── objectify.cpython-312-darwin.so
│   │           │   ├── objectify.pyx
│   │           │   ├── objectpath.pxi
│   │           │   ├── parser.pxi
│   │           │   ├── parsertarget.pxi
│   │           │   ├── proxy.pxi
│   │           │   ├── public-api.pxi
│   │           │   ├── pyclasslookup.py
│   │           │   ├── readonlytree.pxi
│   │           │   ├── relaxng.pxi
│   │           │   ├── sax.cpython-312-darwin.so
│   │           │   ├── sax.py
│   │           │   ├── saxparser.pxi
│   │           │   ├── schematron.pxi
│   │           │   ├── serializer.pxi
│   │           │   ├── usedoctest.py
│   │           │   ├── xinclude.pxi
│   │           │   ├── xmlerror.pxi
│   │           │   ├── xmlid.pxi
│   │           │   ├── xmlschema.pxi
│   │           │   ├── xpath.pxi
│   │           │   ├── xslt.pxi
│   │           │   └── xsltext.pxi
│   │           ├── lxml-5.3.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── LICENSES.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── markupsafe
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   └── _native.cpython-312.pyc
│   │           │   ├── _native.py
│   │           │   ├── _speedups.c
│   │           │   ├── _speedups.cpython-312-darwin.so
│   │           │   ├── _speedups.pyi
│   │           │   └── py.typed
│   │           ├── MarkupSafe-3.0.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── pip
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pip-runner__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── __pip-runner__.cpython-312.pyc
│   │           │   ├── _internal
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── build_env.cpython-312.pyc
│   │           │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   ├── pyproject.cpython-312.pyc
│   │           │   │   │   ├── self_outdated_check.cpython-312.pyc
│   │           │   │   │   └── wheel_builder.cpython-312.pyc
│   │           │   │   ├── build_env.py
│   │           │   │   ├── cache.py
│   │           │   │   ├── cli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── autocompletion.cpython-312.pyc
│   │           │   │   │   │   ├── base_command.cpython-312.pyc
│   │           │   │   │   │   ├── cmdoptions.cpython-312.pyc
│   │           │   │   │   │   ├── command_context.cpython-312.pyc
│   │           │   │   │   │   ├── index_command.cpython-312.pyc
│   │           │   │   │   │   ├── main_parser.cpython-312.pyc
│   │           │   │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   │   ├── parser.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bars.cpython-312.pyc
│   │           │   │   │   │   ├── req_command.cpython-312.pyc
│   │           │   │   │   │   ├── spinners.cpython-312.pyc
│   │           │   │   │   │   └── status_codes.cpython-312.pyc
│   │           │   │   │   ├── autocompletion.py
│   │           │   │   │   ├── base_command.py
│   │           │   │   │   ├── cmdoptions.py
│   │           │   │   │   ├── command_context.py
│   │           │   │   │   ├── index_command.py
│   │           │   │   │   ├── main_parser.py
│   │           │   │   │   ├── main.py
│   │           │   │   │   ├── parser.py
│   │           │   │   │   ├── progress_bars.py
│   │           │   │   │   ├── req_command.py
│   │           │   │   │   ├── spinners.py
│   │           │   │   │   └── status_codes.py
│   │           │   │   ├── commands
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── completion.cpython-312.pyc
│   │           │   │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   │   ├── debug.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   ├── hash.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── inspect.cpython-312.pyc
│   │           │   │   │   │   ├── install.cpython-312.pyc
│   │           │   │   │   │   ├── list.cpython-312.pyc
│   │           │   │   │   │   ├── search.cpython-312.pyc
│   │           │   │   │   │   ├── show.cpython-312.pyc
│   │           │   │   │   │   ├── uninstall.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── completion.py
│   │           │   │   │   ├── configuration.py
│   │           │   │   │   ├── debug.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── hash.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── inspect.py
│   │           │   │   │   ├── install.py
│   │           │   │   │   ├── list.py
│   │           │   │   │   ├── search.py
│   │           │   │   │   ├── show.py
│   │           │   │   │   ├── uninstall.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── configuration.py
│   │           │   │   ├── distributions
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   ├── installed.cpython-312.pyc
│   │           │   │   │   │   ├── sdist.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── installed.py
│   │           │   │   │   ├── sdist.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── index
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── collector.cpython-312.pyc
│   │           │   │   │   │   ├── package_finder.cpython-312.pyc
│   │           │   │   │   │   └── sources.cpython-312.pyc
│   │           │   │   │   ├── collector.py
│   │           │   │   │   ├── package_finder.py
│   │           │   │   │   └── sources.py
│   │           │   │   ├── locations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _distutils.cpython-312.pyc
│   │           │   │   │   │   ├── _sysconfig.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── _distutils.py
│   │           │   │   │   ├── _sysconfig.py
│   │           │   │   │   └── base.py
│   │           │   │   ├── main.py
│   │           │   │   ├── metadata
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _json.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   └── pkg_resources.cpython-312.pyc
│   │           │   │   │   ├── _json.py
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── importlib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   │   ├── _dists.cpython-312.pyc
│   │           │   │   │   │   │   └── _envs.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.py
│   │           │   │   │   │   ├── _dists.py
│   │           │   │   │   │   └── _envs.py
│   │           │   │   │   └── pkg_resources.py
│   │           │   │   ├── models
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── candidate.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url.cpython-312.pyc
│   │           │   │   │   │   ├── format_control.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── installation_report.cpython-312.pyc
│   │           │   │   │   │   ├── link.cpython-312.pyc
│   │           │   │   │   │   ├── scheme.cpython-312.pyc
│   │           │   │   │   │   ├── search_scope.cpython-312.pyc
│   │           │   │   │   │   ├── selection_prefs.cpython-312.pyc
│   │           │   │   │   │   ├── target_python.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── candidate.py
│   │           │   │   │   ├── direct_url.py
│   │           │   │   │   ├── format_control.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── installation_report.py
│   │           │   │   │   ├── link.py
│   │           │   │   │   ├── scheme.py
│   │           │   │   │   ├── search_scope.py
│   │           │   │   │   ├── selection_prefs.py
│   │           │   │   │   ├── target_python.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── network
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── lazy_wheel.cpython-312.pyc
│   │           │   │   │   │   ├── session.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── xmlrpc.cpython-312.pyc
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── lazy_wheel.py
│   │           │   │   │   ├── session.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── xmlrpc.py
│   │           │   │   ├── operations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   └── prepare.cpython-312.pyc
│   │           │   │   │   ├── build
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── build_tracker.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_legacy.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── build_tracker.py
│   │           │   │   │   │   ├── metadata_editable.py
│   │           │   │   │   │   ├── metadata_legacy.py
│   │           │   │   │   │   ├── metadata.py
│   │           │   │   │   │   ├── wheel_editable.py
│   │           │   │   │   │   ├── wheel_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── install
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── editable_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── editable_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   └── prepare.py
│   │           │   │   ├── pyproject.py
│   │           │   │   ├── req
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── constructors.cpython-312.pyc
│   │           │   │   │   │   ├── req_file.cpython-312.pyc
│   │           │   │   │   │   ├── req_install.cpython-312.pyc
│   │           │   │   │   │   ├── req_set.cpython-312.pyc
│   │           │   │   │   │   └── req_uninstall.cpython-312.pyc
│   │           │   │   │   ├── constructors.py
│   │           │   │   │   ├── req_file.py
│   │           │   │   │   ├── req_install.py
│   │           │   │   │   ├── req_set.py
│   │           │   │   │   └── req_uninstall.py
│   │           │   │   ├── resolution
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── legacy
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── resolver.cpython-312.pyc
│   │           │   │   │   │   └── resolver.py
│   │           │   │   │   └── resolvelib
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── base.cpython-312.pyc
│   │           │   │   │       │   ├── candidates.cpython-312.pyc
│   │           │   │   │       │   ├── factory.cpython-312.pyc
│   │           │   │   │       │   ├── found_candidates.cpython-312.pyc
│   │           │   │   │       │   ├── provider.cpython-312.pyc
│   │           │   │   │       │   ├── reporter.cpython-312.pyc
│   │           │   │   │       │   ├── requirements.cpython-312.pyc
│   │           │   │   │       │   └── resolver.cpython-312.pyc
│   │           │   │   │       ├── base.py
│   │           │   │   │       ├── candidates.py
│   │           │   │   │       ├── factory.py
│   │           │   │   │       ├── found_candidates.py
│   │           │   │   │       ├── provider.py
│   │           │   │   │       ├── reporter.py
│   │           │   │   │       ├── requirements.py
│   │           │   │   │       └── resolver.py
│   │           │   │   ├── self_outdated_check.py
│   │           │   │   ├── utils
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _jaraco_text.cpython-312.pyc
│   │           │   │   │   │   ├── _log.cpython-312.pyc
│   │           │   │   │   │   ├── appdirs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── compatibility_tags.cpython-312.pyc
│   │           │   │   │   │   ├── datetime.cpython-312.pyc
│   │           │   │   │   │   ├── deprecation.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url_helpers.cpython-312.pyc
│   │           │   │   │   │   ├── egg_link.cpython-312.pyc
│   │           │   │   │   │   ├── encoding.cpython-312.pyc
│   │           │   │   │   │   ├── entrypoints.cpython-312.pyc
│   │           │   │   │   │   ├── filesystem.cpython-312.pyc
│   │           │   │   │   │   ├── filetypes.cpython-312.pyc
│   │           │   │   │   │   ├── glibc.cpython-312.pyc
│   │           │   │   │   │   ├── hashes.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── misc.cpython-312.pyc
│   │           │   │   │   │   ├── packaging.cpython-312.pyc
│   │           │   │   │   │   ├── retry.cpython-312.pyc
│   │           │   │   │   │   ├── setuptools_build.cpython-312.pyc
│   │           │   │   │   │   ├── subprocess.cpython-312.pyc
│   │           │   │   │   │   ├── temp_dir.cpython-312.pyc
│   │           │   │   │   │   ├── unpacking.cpython-312.pyc
│   │           │   │   │   │   ├── urls.cpython-312.pyc
│   │           │   │   │   │   ├── virtualenv.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── _jaraco_text.py
│   │           │   │   │   ├── _log.py
│   │           │   │   │   ├── appdirs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── compatibility_tags.py
│   │           │   │   │   ├── datetime.py
│   │           │   │   │   ├── deprecation.py
│   │           │   │   │   ├── direct_url_helpers.py
│   │           │   │   │   ├── egg_link.py
│   │           │   │   │   ├── encoding.py
│   │           │   │   │   ├── entrypoints.py
│   │           │   │   │   ├── filesystem.py
│   │           │   │   │   ├── filetypes.py
│   │           │   │   │   ├── glibc.py
│   │           │   │   │   ├── hashes.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── misc.py
│   │           │   │   │   ├── packaging.py
│   │           │   │   │   ├── retry.py
│   │           │   │   │   ├── setuptools_build.py
│   │           │   │   │   ├── subprocess.py
│   │           │   │   │   ├── temp_dir.py
│   │           │   │   │   ├── unpacking.py
│   │           │   │   │   ├── urls.py
│   │           │   │   │   ├── virtualenv.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── vcs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── bazaar.cpython-312.pyc
│   │           │   │   │   │   ├── git.cpython-312.pyc
│   │           │   │   │   │   ├── mercurial.cpython-312.pyc
│   │           │   │   │   │   ├── subversion.cpython-312.pyc
│   │           │   │   │   │   └── versioncontrol.cpython-312.pyc
│   │           │   │   │   ├── bazaar.py
│   │           │   │   │   ├── git.py
│   │           │   │   │   ├── mercurial.py
│   │           │   │   │   ├── subversion.py
│   │           │   │   │   └── versioncontrol.py
│   │           │   │   └── wheel_builder.py
│   │           │   ├── _vendor
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   └── typing_extensions.cpython-312.pyc
│   │           │   │   ├── cachecontrol
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _cmd.cpython-312.pyc
│   │           │   │   │   │   ├── adapter.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── controller.cpython-312.pyc
│   │           │   │   │   │   ├── filewrapper.cpython-312.pyc
│   │           │   │   │   │   ├── heuristics.cpython-312.pyc
│   │           │   │   │   │   ├── serialize.cpython-312.pyc
│   │           │   │   │   │   └── wrapper.cpython-312.pyc
│   │           │   │   │   ├── _cmd.py
│   │           │   │   │   ├── adapter.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── caches
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── file_cache.cpython-312.pyc
│   │           │   │   │   │   │   └── redis_cache.cpython-312.pyc
│   │           │   │   │   │   ├── file_cache.py
│   │           │   │   │   │   └── redis_cache.py
│   │           │   │   │   ├── controller.py
│   │           │   │   │   ├── filewrapper.py
│   │           │   │   │   ├── heuristics.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── serialize.py
│   │           │   │   │   └── wrapper.py
│   │           │   │   ├── certifi
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── core.cpython-312.pyc
│   │           │   │   │   ├── cacert.pem
│   │           │   │   │   ├── core.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── distlib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── database.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── locators.cpython-312.pyc
│   │           │   │   │   │   ├── manifest.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── resources.cpython-312.pyc
│   │           │   │   │   │   ├── scripts.cpython-312.pyc
│   │           │   │   │   │   ├── util.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── database.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── locators.py
│   │           │   │   │   ├── manifest.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── resources.py
│   │           │   │   │   ├── scripts.py
│   │           │   │   │   ├── t32.exe
│   │           │   │   │   ├── t64-arm.exe
│   │           │   │   │   ├── t64.exe
│   │           │   │   │   ├── util.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   ├── w32.exe
│   │           │   │   │   ├── w64-arm.exe
│   │           │   │   │   ├── w64.exe
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── distro
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── distro.cpython-312.pyc
│   │           │   │   │   ├── distro.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── idna
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── codec.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── core.cpython-312.pyc
│   │           │   │   │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   │   │   ├── intranges.cpython-312.pyc
│   │           │   │   │   │   ├── package_data.cpython-312.pyc
│   │           │   │   │   │   └── uts46data.cpython-312.pyc
│   │           │   │   │   ├── codec.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── core.py
│   │           │   │   │   ├── idnadata.py
│   │           │   │   │   ├── intranges.py
│   │           │   │   │   ├── package_data.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   └── uts46data.py
│   │           │   │   ├── msgpack
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── ext.cpython-312.pyc
│   │           │   │   │   │   └── fallback.cpython-312.pyc
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── ext.py
│   │           │   │   │   └── fallback.py
│   │           │   │   ├── packaging
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _elffile.cpython-312.pyc
│   │           │   │   │   │   ├── _manylinux.cpython-312.pyc
│   │           │   │   │   │   ├── _musllinux.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _structures.cpython-312.pyc
│   │           │   │   │   │   ├── _tokenizer.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── requirements.cpython-312.pyc
│   │           │   │   │   │   ├── specifiers.cpython-312.pyc
│   │           │   │   │   │   ├── tags.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── version.cpython-312.pyc
│   │           │   │   │   ├── _elffile.py
│   │           │   │   │   ├── _manylinux.py
│   │           │   │   │   ├── _musllinux.py
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _structures.py
│   │           │   │   │   ├── _tokenizer.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── requirements.py
│   │           │   │   │   ├── specifiers.py
│   │           │   │   │   ├── tags.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── version.py
│   │           │   │   ├── pkg_resources
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   └── __pycache__
│   │           │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   ├── platformdirs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── android.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── macos.cpython-312.pyc
│   │           │   │   │   │   ├── unix.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── windows.cpython-312.pyc
│   │           │   │   │   ├── android.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── macos.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── unix.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   └── windows.py
│   │           │   │   ├── pygments
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── cmdline.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── filter.cpython-312.pyc
│   │           │   │   │   │   ├── formatter.cpython-312.pyc
│   │           │   │   │   │   ├── lexer.cpython-312.pyc
│   │           │   │   │   │   ├── modeline.cpython-312.pyc
│   │           │   │   │   │   ├── plugin.cpython-312.pyc
│   │           │   │   │   │   ├── regexopt.cpython-312.pyc
│   │           │   │   │   │   ├── scanner.cpython-312.pyc
│   │           │   │   │   │   ├── sphinxext.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── token.cpython-312.pyc
│   │           │   │   │   │   ├── unistring.cpython-312.pyc
│   │           │   │   │   │   └── util.cpython-312.pyc
│   │           │   │   │   ├── cmdline.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── filter.py
│   │           │   │   │   ├── filters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   └── __pycache__
│   │           │   │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   │   ├── formatter.py
│   │           │   │   │   ├── formatters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   ├── bbcode.cpython-312.pyc
│   │           │   │   │   │   │   ├── groff.cpython-312.pyc
│   │           │   │   │   │   │   ├── html.cpython-312.pyc
│   │           │   │   │   │   │   ├── img.cpython-312.pyc
│   │           │   │   │   │   │   ├── irc.cpython-312.pyc
│   │           │   │   │   │   │   ├── latex.cpython-312.pyc
│   │           │   │   │   │   │   ├── other.cpython-312.pyc
│   │           │   │   │   │   │   ├── pangomarkup.cpython-312.pyc
│   │           │   │   │   │   │   ├── rtf.cpython-312.pyc
│   │           │   │   │   │   │   ├── svg.cpython-312.pyc
│   │           │   │   │   │   │   ├── terminal.cpython-312.pyc
│   │           │   │   │   │   │   └── terminal256.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   ├── bbcode.py
│   │           │   │   │   │   ├── groff.py
│   │           │   │   │   │   ├── html.py
│   │           │   │   │   │   ├── img.py
│   │           │   │   │   │   ├── irc.py
│   │           │   │   │   │   ├── latex.py
│   │           │   │   │   │   ├── other.py
│   │           │   │   │   │   ├── pangomarkup.py
│   │           │   │   │   │   ├── rtf.py
│   │           │   │   │   │   ├── svg.py
│   │           │   │   │   │   ├── terminal.py
│   │           │   │   │   │   └── terminal256.py
│   │           │   │   │   ├── lexer.py
│   │           │   │   │   ├── lexers
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   └── python.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   └── python.py
│   │           │   │   │   ├── modeline.py
│   │           │   │   │   ├── plugin.py
│   │           │   │   │   ├── regexopt.py
│   │           │   │   │   ├── scanner.py
│   │           │   │   │   ├── sphinxext.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styles
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── _mapping.cpython-312.pyc
│   │           │   │   │   │   └── _mapping.py
│   │           │   │   │   ├── token.py
│   │           │   │   │   ├── unistring.py
│   │           │   │   │   └── util.py
│   │           │   │   ├── pyproject_hooks
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   └── _impl.cpython-312.pyc
│   │           │   │   │   ├── _compat.py
│   │           │   │   │   ├── _impl.py
│   │           │   │   │   └── _in_process
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   └── _in_process.cpython-312.pyc
│   │           │   │   │       └── _in_process.py
│   │           │   │   ├── requests
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __version__.cpython-312.pyc
│   │           │   │   │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   │   │   ├── adapters.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── certs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── cookies.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── hooks.cpython-312.pyc
│   │           │   │   │   │   ├── models.cpython-312.pyc
│   │           │   │   │   │   ├── packages.cpython-312.pyc
│   │           │   │   │   │   ├── sessions.cpython-312.pyc
│   │           │   │   │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   │   │   ├── structures.cpython-312.pyc
│   │           │   │   │   │   └── utils.cpython-312.pyc
│   │           │   │   │   ├── __version__.py
│   │           │   │   │   ├── _internal_utils.py
│   │           │   │   │   ├── adapters.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── certs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── cookies.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── hooks.py
│   │           │   │   │   ├── models.py
│   │           │   │   │   ├── packages.py
│   │           │   │   │   ├── sessions.py
│   │           │   │   │   ├── status_codes.py
│   │           │   │   │   ├── structures.py
│   │           │   │   │   └── utils.py
│   │           │   │   ├── resolvelib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── providers.cpython-312.pyc
│   │           │   │   │   │   ├── reporters.cpython-312.pyc
│   │           │   │   │   │   ├── resolvers.cpython-312.pyc
│   │           │   │   │   │   └── structs.cpython-312.pyc
│   │           │   │   │   ├── compat
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── collections_abc.cpython-312.pyc
│   │           │   │   │   │   └── collections_abc.py
│   │           │   │   │   ├── providers.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── reporters.py
│   │           │   │   │   ├── resolvers.py
│   │           │   │   │   └── structs.py
│   │           │   │   ├── rich
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── _cell_widths.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_codes.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_replace.cpython-312.pyc
│   │           │   │   │   │   ├── _export_format.cpython-312.pyc
│   │           │   │   │   │   ├── _extension.cpython-312.pyc
│   │           │   │   │   │   ├── _fileno.cpython-312.pyc
│   │           │   │   │   │   ├── _inspect.cpython-312.pyc
│   │           │   │   │   │   ├── _log_render.cpython-312.pyc
│   │           │   │   │   │   ├── _loop.cpython-312.pyc
│   │           │   │   │   │   ├── _null_file.cpython-312.pyc
│   │           │   │   │   │   ├── _palettes.cpython-312.pyc
│   │           │   │   │   │   ├── _pick.cpython-312.pyc
│   │           │   │   │   │   ├── _ratio.cpython-312.pyc
│   │           │   │   │   │   ├── _spinners.cpython-312.pyc
│   │           │   │   │   │   ├── _stack.cpython-312.pyc
│   │           │   │   │   │   ├── _timer.cpython-312.pyc
│   │           │   │   │   │   ├── _win32_console.cpython-312.pyc
│   │           │   │   │   │   ├── _windows_renderer.cpython-312.pyc
│   │           │   │   │   │   ├── _windows.cpython-312.pyc
│   │           │   │   │   │   ├── _wrap.cpython-312.pyc
│   │           │   │   │   │   ├── abc.cpython-312.pyc
│   │           │   │   │   │   ├── align.cpython-312.pyc
│   │           │   │   │   │   ├── ansi.cpython-312.pyc
│   │           │   │   │   │   ├── bar.cpython-312.pyc
│   │           │   │   │   │   ├── box.cpython-312.pyc
│   │           │   │   │   │   ├── cells.cpython-312.pyc
│   │           │   │   │   │   ├── color_triplet.cpython-312.pyc
│   │           │   │   │   │   ├── color.cpython-312.pyc
│   │           │   │   │   │   ├── columns.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── constrain.cpython-312.pyc
│   │           │   │   │   │   ├── containers.cpython-312.pyc
│   │           │   │   │   │   ├── control.cpython-312.pyc
│   │           │   │   │   │   ├── default_styles.cpython-312.pyc
│   │           │   │   │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   │   │   ├── emoji.cpython-312.pyc
│   │           │   │   │   │   ├── errors.cpython-312.pyc
│   │           │   │   │   │   ├── file_proxy.cpython-312.pyc
│   │           │   │   │   │   ├── filesize.cpython-312.pyc
│   │           │   │   │   │   ├── highlighter.cpython-312.pyc
│   │           │   │   │   │   ├── json.cpython-312.pyc
│   │           │   │   │   │   ├── jupyter.cpython-312.pyc
│   │           │   │   │   │   ├── layout.cpython-312.pyc
│   │           │   │   │   │   ├── live_render.cpython-312.pyc
│   │           │   │   │   │   ├── live.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── markup.cpython-312.pyc
│   │           │   │   │   │   ├── measure.cpython-312.pyc
│   │           │   │   │   │   ├── padding.cpython-312.pyc
│   │           │   │   │   │   ├── pager.cpython-312.pyc
│   │           │   │   │   │   ├── palette.cpython-312.pyc
│   │           │   │   │   │   ├── panel.cpython-312.pyc
│   │           │   │   │   │   ├── pretty.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bar.cpython-312.pyc
│   │           │   │   │   │   ├── progress.cpython-312.pyc
│   │           │   │   │   │   ├── prompt.cpython-312.pyc
│   │           │   │   │   │   ├── protocol.cpython-312.pyc
│   │           │   │   │   │   ├── region.cpython-312.pyc
│   │           │   │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   │   ├── rule.cpython-312.pyc
│   │           │   │   │   │   ├── scope.cpython-312.pyc
│   │           │   │   │   │   ├── screen.cpython-312.pyc
│   │           │   │   │   │   ├── segment.cpython-312.pyc
│   │           │   │   │   │   ├── spinner.cpython-312.pyc
│   │           │   │   │   │   ├── status.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── styled.cpython-312.pyc
│   │           │   │   │   │   ├── syntax.cpython-312.pyc
│   │           │   │   │   │   ├── table.cpython-312.pyc
│   │           │   │   │   │   ├── terminal_theme.cpython-312.pyc
│   │           │   │   │   │   ├── text.cpython-312.pyc
│   │           │   │   │   │   ├── theme.cpython-312.pyc
│   │           │   │   │   │   ├── themes.cpython-312.pyc
│   │           │   │   │   │   ├── traceback.cpython-312.pyc
│   │           │   │   │   │   └── tree.cpython-312.pyc
│   │           │   │   │   ├── _cell_widths.py
│   │           │   │   │   ├── _emoji_codes.py
│   │           │   │   │   ├── _emoji_replace.py
│   │           │   │   │   ├── _export_format.py
│   │           │   │   │   ├── _extension.py
│   │           │   │   │   ├── _fileno.py
│   │           │   │   │   ├── _inspect.py
│   │           │   │   │   ├── _log_render.py
│   │           │   │   │   ├── _loop.py
│   │           │   │   │   ├── _null_file.py
│   │           │   │   │   ├── _palettes.py
│   │           │   │   │   ├── _pick.py
│   │           │   │   │   ├── _ratio.py
│   │           │   │   │   ├── _spinners.py
│   │           │   │   │   ├── _stack.py
│   │           │   │   │   ├── _timer.py
│   │           │   │   │   ├── _win32_console.py
│   │           │   │   │   ├── _windows_renderer.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   ├── _wrap.py
│   │           │   │   │   ├── abc.py
│   │           │   │   │   ├── align.py
│   │           │   │   │   ├── ansi.py
│   │           │   │   │   ├── bar.py
│   │           │   │   │   ├── box.py
│   │           │   │   │   ├── cells.py
│   │           │   │   │   ├── color_triplet.py
│   │           │   │   │   ├── color.py
│   │           │   │   │   ├── columns.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── constrain.py
│   │           │   │   │   ├── containers.py
│   │           │   │   │   ├── control.py
│   │           │   │   │   ├── default_styles.py
│   │           │   │   │   ├── diagnose.py
│   │           │   │   │   ├── emoji.py
│   │           │   │   │   ├── errors.py
│   │           │   │   │   ├── file_proxy.py
│   │           │   │   │   ├── filesize.py
│   │           │   │   │   ├── highlighter.py
│   │           │   │   │   ├── json.py
│   │           │   │   │   ├── jupyter.py
│   │           │   │   │   ├── layout.py
│   │           │   │   │   ├── live_render.py
│   │           │   │   │   ├── live.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── markup.py
│   │           │   │   │   ├── measure.py
│   │           │   │   │   ├── padding.py
│   │           │   │   │   ├── pager.py
│   │           │   │   │   ├── palette.py
│   │           │   │   │   ├── panel.py
│   │           │   │   │   ├── pretty.py
│   │           │   │   │   ├── progress_bar.py
│   │           │   │   │   ├── progress.py
│   │           │   │   │   ├── prompt.py
│   │           │   │   │   ├── protocol.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── region.py
│   │           │   │   │   ├── repr.py
│   │           │   │   │   ├── rule.py
│   │           │   │   │   ├── scope.py
│   │           │   │   │   ├── screen.py
│   │           │   │   │   ├── segment.py
│   │           │   │   │   ├── spinner.py
│   │           │   │   │   ├── status.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styled.py
│   │           │   │   │   ├── syntax.py
│   │           │   │   │   ├── table.py
│   │           │   │   │   ├── terminal_theme.py
│   │           │   │   │   ├── text.py
│   │           │   │   │   ├── theme.py
│   │           │   │   │   ├── themes.py
│   │           │   │   │   ├── traceback.py
│   │           │   │   │   └── tree.py
│   │           │   │   ├── tomli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _re.cpython-312.pyc
│   │           │   │   │   │   └── _types.cpython-312.pyc
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _re.py
│   │           │   │   │   ├── _types.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── truststore
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _api.cpython-312.pyc
│   │           │   │   │   │   ├── _macos.cpython-312.pyc
│   │           │   │   │   │   ├── _openssl.cpython-312.pyc
│   │           │   │   │   │   ├── _ssl_constants.cpython-312.pyc
│   │           │   │   │   │   └── _windows.cpython-312.pyc
│   │           │   │   │   ├── _api.py
│   │           │   │   │   ├── _macos.py
│   │           │   │   │   ├── _openssl.py
│   │           │   │   │   ├── _ssl_constants.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── typing_extensions.py
│   │           │   │   ├── urllib3
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _collections.cpython-312.pyc
│   │           │   │   │   │   ├── _version.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── fields.cpython-312.pyc
│   │           │   │   │   │   ├── filepost.cpython-312.pyc
│   │           │   │   │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── _collections.py
│   │           │   │   │   ├── _version.py
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── connectionpool.py
│   │           │   │   │   ├── contrib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _appengine_environ.cpython-312.pyc
│   │           │   │   │   │   │   ├── appengine.cpython-312.pyc
│   │           │   │   │   │   │   ├── ntlmpool.cpython-312.pyc
│   │           │   │   │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   │   │   ├── securetransport.cpython-312.pyc
│   │           │   │   │   │   │   └── socks.cpython-312.pyc
│   │           │   │   │   │   ├── _appengine_environ.py
│   │           │   │   │   │   ├── _securetransport
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── bindings.cpython-312.pyc
│   │           │   │   │   │   │   │   └── low_level.cpython-312.pyc
│   │           │   │   │   │   │   ├── bindings.py
│   │           │   │   │   │   │   └── low_level.py
│   │           │   │   │   │   ├── appengine.py
│   │           │   │   │   │   ├── ntlmpool.py
│   │           │   │   │   │   ├── pyopenssl.py
│   │           │   │   │   │   ├── securetransport.py
│   │           │   │   │   │   └── socks.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── fields.py
│   │           │   │   │   ├── filepost.py
│   │           │   │   │   ├── packages
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── six.cpython-312.pyc
│   │           │   │   │   │   ├── backports
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── makefile.cpython-312.pyc
│   │           │   │   │   │   │   │   └── weakref_finalize.cpython-312.pyc
│   │           │   │   │   │   │   ├── makefile.py
│   │           │   │   │   │   │   └── weakref_finalize.py
│   │           │   │   │   │   └── six.py
│   │           │   │   │   ├── poolmanager.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   ├── response.py
│   │           │   │   │   └── util
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── connection.cpython-312.pyc
│   │           │   │   │       │   ├── proxy.cpython-312.pyc
│   │           │   │   │       │   ├── queue.cpython-312.pyc
│   │           │   │   │       │   ├── request.cpython-312.pyc
│   │           │   │   │       │   ├── response.cpython-312.pyc
│   │           │   │   │       │   ├── retry.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │   │   │       │   ├── ssltransport.cpython-312.pyc
│   │           │   │   │       │   ├── timeout.cpython-312.pyc
│   │           │   │   │       │   ├── url.cpython-312.pyc
│   │           │   │   │       │   └── wait.cpython-312.pyc
│   │           │   │   │       ├── connection.py
│   │           │   │   │       ├── proxy.py
│   │           │   │   │       ├── queue.py
│   │           │   │   │       ├── request.py
│   │           │   │   │       ├── response.py
│   │           │   │   │       ├── retry.py
│   │           │   │   │       ├── ssl_.py
│   │           │   │   │       ├── ssl_match_hostname.py
│   │           │   │   │       ├── ssltransport.py
│   │           │   │   │       ├── timeout.py
│   │           │   │   │       ├── url.py
│   │           │   │   │       └── wait.py
│   │           │   │   └── vendor.txt
│   │           │   └── py.typed
│   │           ├── pip-24.2.dist-info
│   │           │   ├── AUTHORS.txt
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── requests
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __version__.cpython-312.pyc
│   │           │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   ├── adapters.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── auth.cpython-312.pyc
│   │           │   │   ├── certs.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── cookies.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── help.cpython-312.pyc
│   │           │   │   ├── hooks.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── packages.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   ├── structures.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── __version__.py
│   │           │   ├── _internal_utils.py
│   │           │   ├── adapters.py
│   │           │   ├── api.py
│   │           │   ├── auth.py
│   │           │   ├── certs.py
│   │           │   ├── compat.py
│   │           │   ├── cookies.py
│   │           │   ├── exceptions.py
│   │           │   ├── help.py
│   │           │   ├── hooks.py
│   │           │   ├── models.py
│   │           │   ├── packages.py
│   │           │   ├── sessions.py
│   │           │   ├── status_codes.py
│   │           │   ├── structures.py
│   │           │   └── utils.py
│   │           ├── requests-2.32.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── soupsieve
│   │           │   ├── __init__.py
│   │           │   ├── __meta__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __meta__.cpython-312.pyc
│   │           │   │   ├── css_match.cpython-312.pyc
│   │           │   │   ├── css_parser.cpython-312.pyc
│   │           │   │   ├── css_types.cpython-312.pyc
│   │           │   │   ├── pretty.cpython-312.pyc
│   │           │   │   └── util.cpython-312.pyc
│   │           │   ├── css_match.py
│   │           │   ├── css_parser.py
│   │           │   ├── css_types.py
│   │           │   ├── pretty.py
│   │           │   ├── py.typed
│   │           │   └── util.py
│   │           ├── soupsieve-2.6.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── urllib3
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _base_connection.cpython-312.pyc
│   │           │   │   ├── _collections.cpython-312.pyc
│   │           │   │   ├── _request_methods.cpython-312.pyc
│   │           │   │   ├── _version.cpython-312.pyc
│   │           │   │   ├── connection.cpython-312.pyc
│   │           │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── fields.cpython-312.pyc
│   │           │   │   ├── filepost.cpython-312.pyc
│   │           │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   └── response.cpython-312.pyc
│   │           │   ├── _base_connection.py
│   │           │   ├── _collections.py
│   │           │   ├── _request_methods.py
│   │           │   ├── _version.py
│   │           │   ├── connection.py
│   │           │   ├── connectionpool.py
│   │           │   ├── contrib
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   └── socks.cpython-312.pyc
│   │           │   │   ├── emscripten
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── fetch.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── emscripten_fetch_worker.js
│   │           │   │   │   ├── fetch.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   └── response.py
│   │           │   │   ├── pyopenssl.py
│   │           │   │   └── socks.py
│   │           │   ├── exceptions.py
│   │           │   ├── fields.py
│   │           │   ├── filepost.py
│   │           │   ├── http2
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   └── probe.cpython-312.pyc
│   │           │   │   ├── connection.py
│   │           │   │   └── probe.py
│   │           │   ├── poolmanager.py
│   │           │   ├── py.typed
│   │           │   ├── response.py
│   │           │   └── util
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── connection.cpython-312.pyc
│   │           │       │   ├── proxy.cpython-312.pyc
│   │           │       │   ├── request.cpython-312.pyc
│   │           │       │   ├── response.cpython-312.pyc
│   │           │       │   ├── retry.cpython-312.pyc
│   │           │       │   ├── ssl_.cpython-312.pyc
│   │           │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │       │   ├── ssltransport.cpython-312.pyc
│   │           │       │   ├── timeout.cpython-312.pyc
│   │           │       │   ├── url.cpython-312.pyc
│   │           │       │   ├── util.cpython-312.pyc
│   │           │       │   └── wait.cpython-312.pyc
│   │           │       ├── connection.py
│   │           │       ├── proxy.py
│   │           │       ├── request.py
│   │           │       ├── response.py
│   │           │       ├── retry.py
│   │           │       ├── ssl_.py
│   │           │       ├── ssl_match_hostname.py
│   │           │       ├── ssltransport.py
│   │           │       ├── timeout.py
│   │           │       ├── url.py
│   │           │       ├── util.py
│   │           │       └── wait.py
│   │           ├── urllib3-2.2.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── useragent
│   │           │   ├── __init__.py
│   │           │   ├── __init__.pyc
│   │           │   ├── __pycache__
│   │           │   │   └── __init__.cpython-312.pyc
│   │           │   ├── resources
│   │           │   │   └── user_agent_data.json
│   │           │   └── test
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   └── __init__.cpython-312.pyc
│   │           │       ├── test_additional_os.json
│   │           │       ├── test_browser.json
│   │           │       ├── test_device.json
│   │           │       ├── test_firefox.json
│   │           │       ├── test_os.json
│   │           │       └── test_pgts_browser.json
│   │           ├── useragent-0.1.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── werkzeug
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _internal.cpython-312.pyc
│   │           │   │   ├── _reloader.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formparser.cpython-312.pyc
│   │           │   │   ├── http.cpython-312.pyc
│   │           │   │   ├── local.cpython-312.pyc
│   │           │   │   ├── security.cpython-312.pyc
│   │           │   │   ├── serving.cpython-312.pyc
│   │           │   │   ├── test.cpython-312.pyc
│   │           │   │   ├── testapp.cpython-312.pyc
│   │           │   │   ├── urls.cpython-312.pyc
│   │           │   │   ├── user_agent.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── wsgi.cpython-312.pyc
│   │           │   ├── _internal.py
│   │           │   ├── _reloader.py
│   │           │   ├── datastructures
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── accept.cpython-312.pyc
│   │           │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   ├── cache_control.cpython-312.pyc
│   │           │   │   │   ├── csp.cpython-312.pyc
│   │           │   │   │   ├── etag.cpython-312.pyc
│   │           │   │   │   ├── file_storage.cpython-312.pyc
│   │           │   │   │   ├── headers.cpython-312.pyc
│   │           │   │   │   ├── mixins.cpython-312.pyc
│   │           │   │   │   ├── range.cpython-312.pyc
│   │           │   │   │   └── structures.cpython-312.pyc
│   │           │   │   ├── accept.py
│   │           │   │   ├── accept.pyi
│   │           │   │   ├── auth.py
│   │           │   │   ├── cache_control.py
│   │           │   │   ├── cache_control.pyi
│   │           │   │   ├── csp.py
│   │           │   │   ├── csp.pyi
│   │           │   │   ├── etag.py
│   │           │   │   ├── etag.pyi
│   │           │   │   ├── file_storage.py
│   │           │   │   ├── file_storage.pyi
│   │           │   │   ├── headers.py
│   │           │   │   ├── headers.pyi
│   │           │   │   ├── mixins.py
│   │           │   │   ├── mixins.pyi
│   │           │   │   ├── range.py
│   │           │   │   ├── range.pyi
│   │           │   │   ├── structures.py
│   │           │   │   └── structures.pyi
│   │           │   ├── debug
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   └── tbtools.cpython-312.pyc
│   │           │   │   ├── console.py
│   │           │   │   ├── repr.py
│   │           │   │   ├── shared
│   │           │   │   │   ├── console.png
│   │           │   │   │   ├── debugger.js
│   │           │   │   │   ├── ICON_LICENSE.md
│   │           │   │   │   ├── less.png
│   │           │   │   │   ├── more.png
│   │           │   │   │   └── style.css
│   │           │   │   └── tbtools.py
│   │           │   ├── exceptions.py
│   │           │   ├── formparser.py
│   │           │   ├── http.py
│   │           │   ├── local.py
│   │           │   ├── middleware
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── dispatcher.cpython-312.pyc
│   │           │   │   │   ├── http_proxy.cpython-312.pyc
│   │           │   │   │   ├── lint.cpython-312.pyc
│   │           │   │   │   ├── profiler.cpython-312.pyc
│   │           │   │   │   ├── proxy_fix.cpython-312.pyc
│   │           │   │   │   └── shared_data.cpython-312.pyc
│   │           │   │   ├── dispatcher.py
│   │           │   │   ├── http_proxy.py
│   │           │   │   ├── lint.py
│   │           │   │   ├── profiler.py
│   │           │   │   ├── proxy_fix.py
│   │           │   │   └── shared_data.py
│   │           │   ├── py.typed
│   │           │   ├── routing
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── converters.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── map.cpython-312.pyc
│   │           │   │   │   ├── matcher.cpython-312.pyc
│   │           │   │   │   └── rules.cpython-312.pyc
│   │           │   │   ├── converters.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── map.py
│   │           │   │   ├── matcher.py
│   │           │   │   └── rules.py
│   │           │   ├── sansio
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── http.cpython-312.pyc
│   │           │   │   │   ├── multipart.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   ├── response.cpython-312.pyc
│   │           │   │   │   └── utils.cpython-312.pyc
│   │           │   │   ├── http.py
│   │           │   │   ├── multipart.py
│   │           │   │   ├── request.py
│   │           │   │   ├── response.py
│   │           │   │   └── utils.py
│   │           │   ├── security.py
│   │           │   ├── serving.py
│   │           │   ├── test.py
│   │           │   ├── testapp.py
│   │           │   ├── urls.py
│   │           │   ├── user_agent.py
│   │           │   ├── utils.py
│   │           │   ├── wrappers
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   └── response.cpython-312.pyc
│   │           │   │   ├── request.py
│   │           │   │   └── response.py
│   │           │   └── wsgi.py
│   │           └── werkzeug-3.0.4.dist-info
│   │               ├── INSTALLER
│   │               ├── LICENSE.txt
│   │               ├── METADATA
│   │               ├── RECORD
│   │               └── WHEEL
│   ├── pyvenv.cfg
│   ├── static
│   │   └── styles.css
│   ├── templates
│   │   └── index.html
│   └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
    ├── text1.txt
    └── text2.txt
```

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py:
--------------------------------------------------------------------------------

```python
  1 | import errno
  2 | import select
  3 | import sys
  4 | from functools import partial
  5 | 
  6 | try:
  7 |     from time import monotonic
  8 | except ImportError:
  9 |     from time import time as monotonic
 10 | 
 11 | __all__ = ["NoWayToWaitForSocketError", "wait_for_read", "wait_for_write"]
 12 | 
 13 | 
 14 | class NoWayToWaitForSocketError(Exception):
 15 |     pass
 16 | 
 17 | 
 18 | # How should we wait on sockets?
 19 | #
 20 | # There are two types of APIs you can use for waiting on sockets: the fancy
 21 | # modern stateful APIs like epoll/kqueue, and the older stateless APIs like
 22 | # select/poll. The stateful APIs are more efficient when you have a lots of
 23 | # sockets to keep track of, because you can set them up once and then use them
 24 | # lots of times. But we only ever want to wait on a single socket at a time
 25 | # and don't want to keep track of state, so the stateless APIs are actually
 26 | # more efficient. So we want to use select() or poll().
 27 | #
 28 | # Now, how do we choose between select() and poll()? On traditional Unixes,
 29 | # select() has a strange calling convention that makes it slow, or fail
 30 | # altogether, for high-numbered file descriptors. The point of poll() is to fix
 31 | # that, so on Unixes, we prefer poll().
 32 | #
 33 | # On Windows, there is no poll() (or at least Python doesn't provide a wrapper
 34 | # for it), but that's OK, because on Windows, select() doesn't have this
 35 | # strange calling convention; plain select() works fine.
 36 | #
 37 | # So: on Windows we use select(), and everywhere else we use poll(). We also
 38 | # fall back to select() in case poll() is somehow broken or missing.
 39 | 
 40 | if sys.version_info >= (3, 5):
 41 |     # Modern Python, that retries syscalls by default
 42 |     def _retry_on_intr(fn, timeout):
 43 |         return fn(timeout)
 44 | 
 45 | else:
 46 |     # Old and broken Pythons.
 47 |     def _retry_on_intr(fn, timeout):
 48 |         if timeout is None:
 49 |             deadline = float("inf")
 50 |         else:
 51 |             deadline = monotonic() + timeout
 52 | 
 53 |         while True:
 54 |             try:
 55 |                 return fn(timeout)
 56 |             # OSError for 3 <= pyver < 3.5, select.error for pyver <= 2.7
 57 |             except (OSError, select.error) as e:
 58 |                 # 'e.args[0]' incantation works for both OSError and select.error
 59 |                 if e.args[0] != errno.EINTR:
 60 |                     raise
 61 |                 else:
 62 |                     timeout = deadline - monotonic()
 63 |                     if timeout < 0:
 64 |                         timeout = 0
 65 |                     if timeout == float("inf"):
 66 |                         timeout = None
 67 |                     continue
 68 | 
 69 | 
 70 | def select_wait_for_socket(sock, read=False, write=False, timeout=None):
 71 |     if not read and not write:
 72 |         raise RuntimeError("must specify at least one of read=True, write=True")
 73 |     rcheck = []
 74 |     wcheck = []
 75 |     if read:
 76 |         rcheck.append(sock)
 77 |     if write:
 78 |         wcheck.append(sock)
 79 |     # When doing a non-blocking connect, most systems signal success by
 80 |     # marking the socket writable. Windows, though, signals success by marked
 81 |     # it as "exceptional". We paper over the difference by checking the write
 82 |     # sockets for both conditions. (The stdlib selectors module does the same
 83 |     # thing.)
 84 |     fn = partial(select.select, rcheck, wcheck, wcheck)
 85 |     rready, wready, xready = _retry_on_intr(fn, timeout)
 86 |     return bool(rready or wready or xready)
 87 | 
 88 | 
 89 | def poll_wait_for_socket(sock, read=False, write=False, timeout=None):
 90 |     if not read and not write:
 91 |         raise RuntimeError("must specify at least one of read=True, write=True")
 92 |     mask = 0
 93 |     if read:
 94 |         mask |= select.POLLIN
 95 |     if write:
 96 |         mask |= select.POLLOUT
 97 |     poll_obj = select.poll()
 98 |     poll_obj.register(sock, mask)
 99 | 
100 |     # For some reason, poll() takes timeout in milliseconds
101 |     def do_poll(t):
102 |         if t is not None:
103 |             t *= 1000
104 |         return poll_obj.poll(t)
105 | 
106 |     return bool(_retry_on_intr(do_poll, timeout))
107 | 
108 | 
109 | def null_wait_for_socket(*args, **kwargs):
110 |     raise NoWayToWaitForSocketError("no select-equivalent available")
111 | 
112 | 
113 | def _have_working_poll():
114 |     # Apparently some systems have a select.poll that fails as soon as you try
115 |     # to use it, either due to strange configuration or broken monkeypatching
116 |     # from libraries like eventlet/greenlet.
117 |     try:
118 |         poll_obj = select.poll()
119 |         _retry_on_intr(poll_obj.poll, 0)
120 |     except (AttributeError, OSError):
121 |         return False
122 |     else:
123 |         return True
124 | 
125 | 
126 | def wait_for_socket(*args, **kwargs):
127 |     # We delay choosing which implementation to use until the first time we're
128 |     # called. We could do it at import time, but then we might make the wrong
129 |     # decision if someone goes wild with monkeypatching select.poll after
130 |     # we're imported.
131 |     global wait_for_socket
132 |     if _have_working_poll():
133 |         wait_for_socket = poll_wait_for_socket
134 |     elif hasattr(select, "select"):
135 |         wait_for_socket = select_wait_for_socket
136 |     else:  # Platform-specific: Appengine.
137 |         wait_for_socket = null_wait_for_socket
138 |     return wait_for_socket(*args, **kwargs)
139 | 
140 | 
141 | def wait_for_read(sock, timeout=None):
142 |     """Waits for reading to be available on a given socket.
143 |     Returns True if the socket is readable, or False if the timeout expired.
144 |     """
145 |     return wait_for_socket(sock, read=True, timeout=timeout)
146 | 
147 | 
148 | def wait_for_write(sock, timeout=None):
149 |     """Waits for writing to be available on a given socket.
150 |     Returns True if the socket is readable, or False if the timeout expired.
151 |     """
152 |     return wait_for_socket(sock, write=True, timeout=timeout)
153 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py:
--------------------------------------------------------------------------------

```python
  1 | # SPDX-FileCopyrightText: 2015 Eric Larson
  2 | #
  3 | # SPDX-License-Identifier: Apache-2.0
  4 | from __future__ import annotations
  5 | 
  6 | import hashlib
  7 | import os
  8 | from textwrap import dedent
  9 | from typing import IO, TYPE_CHECKING, Union
 10 | from pathlib import Path
 11 | 
 12 | from pip._vendor.cachecontrol.cache import BaseCache, SeparateBodyBaseCache
 13 | from pip._vendor.cachecontrol.controller import CacheController
 14 | 
 15 | if TYPE_CHECKING:
 16 |     from datetime import datetime
 17 | 
 18 |     from filelock import BaseFileLock
 19 | 
 20 | 
 21 | def _secure_open_write(filename: str, fmode: int) -> IO[bytes]:
 22 |     # We only want to write to this file, so open it in write only mode
 23 |     flags = os.O_WRONLY
 24 | 
 25 |     # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only
 26 |     #  will open *new* files.
 27 |     # We specify this because we want to ensure that the mode we pass is the
 28 |     # mode of the file.
 29 |     flags |= os.O_CREAT | os.O_EXCL
 30 | 
 31 |     # Do not follow symlinks to prevent someone from making a symlink that
 32 |     # we follow and insecurely open a cache file.
 33 |     if hasattr(os, "O_NOFOLLOW"):
 34 |         flags |= os.O_NOFOLLOW
 35 | 
 36 |     # On Windows we'll mark this file as binary
 37 |     if hasattr(os, "O_BINARY"):
 38 |         flags |= os.O_BINARY
 39 | 
 40 |     # Before we open our file, we want to delete any existing file that is
 41 |     # there
 42 |     try:
 43 |         os.remove(filename)
 44 |     except OSError:
 45 |         # The file must not exist already, so we can just skip ahead to opening
 46 |         pass
 47 | 
 48 |     # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a
 49 |     # race condition happens between the os.remove and this line, that an
 50 |     # error will be raised. Because we utilize a lockfile this should only
 51 |     # happen if someone is attempting to attack us.
 52 |     fd = os.open(filename, flags, fmode)
 53 |     try:
 54 |         return os.fdopen(fd, "wb")
 55 | 
 56 |     except:
 57 |         # An error occurred wrapping our FD in a file object
 58 |         os.close(fd)
 59 |         raise
 60 | 
 61 | 
 62 | class _FileCacheMixin:
 63 |     """Shared implementation for both FileCache variants."""
 64 | 
 65 |     def __init__(
 66 |         self,
 67 |         directory: str | Path,
 68 |         forever: bool = False,
 69 |         filemode: int = 0o0600,
 70 |         dirmode: int = 0o0700,
 71 |         lock_class: type[BaseFileLock] | None = None,
 72 |     ) -> None:
 73 |         try:
 74 |             if lock_class is None:
 75 |                 from filelock import FileLock
 76 | 
 77 |                 lock_class = FileLock
 78 |         except ImportError:
 79 |             notice = dedent(
 80 |                 """
 81 |             NOTE: In order to use the FileCache you must have
 82 |             filelock installed. You can install it via pip:
 83 |               pip install cachecontrol[filecache]
 84 |             """
 85 |             )
 86 |             raise ImportError(notice)
 87 | 
 88 |         self.directory = directory
 89 |         self.forever = forever
 90 |         self.filemode = filemode
 91 |         self.dirmode = dirmode
 92 |         self.lock_class = lock_class
 93 | 
 94 |     @staticmethod
 95 |     def encode(x: str) -> str:
 96 |         return hashlib.sha224(x.encode()).hexdigest()
 97 | 
 98 |     def _fn(self, name: str) -> str:
 99 |         # NOTE: This method should not change as some may depend on it.
100 |         #       See: https://github.com/ionrock/cachecontrol/issues/63
101 |         hashed = self.encode(name)
102 |         parts = list(hashed[:5]) + [hashed]
103 |         return os.path.join(self.directory, *parts)
104 | 
105 |     def get(self, key: str) -> bytes | None:
106 |         name = self._fn(key)
107 |         try:
108 |             with open(name, "rb") as fh:
109 |                 return fh.read()
110 | 
111 |         except FileNotFoundError:
112 |             return None
113 | 
114 |     def set(
115 |         self, key: str, value: bytes, expires: int | datetime | None = None
116 |     ) -> None:
117 |         name = self._fn(key)
118 |         self._write(name, value)
119 | 
120 |     def _write(self, path: str, data: bytes) -> None:
121 |         """
122 |         Safely write the data to the given path.
123 |         """
124 |         # Make sure the directory exists
125 |         try:
126 |             os.makedirs(os.path.dirname(path), self.dirmode)
127 |         except OSError:
128 |             pass
129 | 
130 |         with self.lock_class(path + ".lock"):
131 |             # Write our actual file
132 |             with _secure_open_write(path, self.filemode) as fh:
133 |                 fh.write(data)
134 | 
135 |     def _delete(self, key: str, suffix: str) -> None:
136 |         name = self._fn(key) + suffix
137 |         if not self.forever:
138 |             try:
139 |                 os.remove(name)
140 |             except FileNotFoundError:
141 |                 pass
142 | 
143 | 
144 | class FileCache(_FileCacheMixin, BaseCache):
145 |     """
146 |     Traditional FileCache: body is stored in memory, so not suitable for large
147 |     downloads.
148 |     """
149 | 
150 |     def delete(self, key: str) -> None:
151 |         self._delete(key, "")
152 | 
153 | 
154 | class SeparateBodyFileCache(_FileCacheMixin, SeparateBodyBaseCache):
155 |     """
156 |     Memory-efficient FileCache: body is stored in a separate file, reducing
157 |     peak memory usage.
158 |     """
159 | 
160 |     def get_body(self, key: str) -> IO[bytes] | None:
161 |         name = self._fn(key) + ".body"
162 |         try:
163 |             return open(name, "rb")
164 |         except FileNotFoundError:
165 |             return None
166 | 
167 |     def set_body(self, key: str, body: bytes) -> None:
168 |         name = self._fn(key) + ".body"
169 |         self._write(name, body)
170 | 
171 |     def delete(self, key: str) -> None:
172 |         self._delete(key, "")
173 |         self._delete(key, ".body")
174 | 
175 | 
176 | def url_to_file_path(url: str, filecache: FileCache) -> str:
177 |     """Return the file cache path based on the URL.
178 | 
179 |     This does not ensure the file exists!
180 |     """
181 |     key = CacheController.cache_url(url)
182 |     return filecache._fn(key)
183 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py:
--------------------------------------------------------------------------------

```python
  1 | import sys
  2 | from fractions import Fraction
  3 | from math import ceil
  4 | from typing import cast, List, Optional, Sequence
  5 | 
  6 | if sys.version_info >= (3, 8):
  7 |     from typing import Protocol
  8 | else:
  9 |     from pip._vendor.typing_extensions import Protocol  # pragma: no cover
 10 | 
 11 | 
 12 | class Edge(Protocol):
 13 |     """Any object that defines an edge (such as Layout)."""
 14 | 
 15 |     size: Optional[int] = None
 16 |     ratio: int = 1
 17 |     minimum_size: int = 1
 18 | 
 19 | 
 20 | def ratio_resolve(total: int, edges: Sequence[Edge]) -> List[int]:
 21 |     """Divide total space to satisfy size, ratio, and minimum_size, constraints.
 22 | 
 23 |     The returned list of integers should add up to total in most cases, unless it is
 24 |     impossible to satisfy all the constraints. For instance, if there are two edges
 25 |     with a minimum size of 20 each and `total` is 30 then the returned list will be
 26 |     greater than total. In practice, this would mean that a Layout object would
 27 |     clip the rows that would overflow the screen height.
 28 | 
 29 |     Args:
 30 |         total (int): Total number of characters.
 31 |         edges (List[Edge]): Edges within total space.
 32 | 
 33 |     Returns:
 34 |         List[int]: Number of characters for each edge.
 35 |     """
 36 |     # Size of edge or None for yet to be determined
 37 |     sizes = [(edge.size or None) for edge in edges]
 38 | 
 39 |     _Fraction = Fraction
 40 | 
 41 |     # While any edges haven't been calculated
 42 |     while None in sizes:
 43 |         # Get flexible edges and index to map these back on to sizes list
 44 |         flexible_edges = [
 45 |             (index, edge)
 46 |             for index, (size, edge) in enumerate(zip(sizes, edges))
 47 |             if size is None
 48 |         ]
 49 |         # Remaining space in total
 50 |         remaining = total - sum(size or 0 for size in sizes)
 51 |         if remaining <= 0:
 52 |             # No room for flexible edges
 53 |             return [
 54 |                 ((edge.minimum_size or 1) if size is None else size)
 55 |                 for size, edge in zip(sizes, edges)
 56 |             ]
 57 |         # Calculate number of characters in a ratio portion
 58 |         portion = _Fraction(
 59 |             remaining, sum((edge.ratio or 1) for _, edge in flexible_edges)
 60 |         )
 61 | 
 62 |         # If any edges will be less than their minimum, replace size with the minimum
 63 |         for index, edge in flexible_edges:
 64 |             if portion * edge.ratio <= edge.minimum_size:
 65 |                 sizes[index] = edge.minimum_size
 66 |                 # New fixed size will invalidate calculations, so we need to repeat the process
 67 |                 break
 68 |         else:
 69 |             # Distribute flexible space and compensate for rounding error
 70 |             # Since edge sizes can only be integers we need to add the remainder
 71 |             # to the following line
 72 |             remainder = _Fraction(0)
 73 |             for index, edge in flexible_edges:
 74 |                 size, remainder = divmod(portion * edge.ratio + remainder, 1)
 75 |                 sizes[index] = size
 76 |             break
 77 |     # Sizes now contains integers only
 78 |     return cast(List[int], sizes)
 79 | 
 80 | 
 81 | def ratio_reduce(
 82 |     total: int, ratios: List[int], maximums: List[int], values: List[int]
 83 | ) -> List[int]:
 84 |     """Divide an integer total in to parts based on ratios.
 85 | 
 86 |     Args:
 87 |         total (int): The total to divide.
 88 |         ratios (List[int]): A list of integer ratios.
 89 |         maximums (List[int]): List of maximums values for each slot.
 90 |         values (List[int]): List of values
 91 | 
 92 |     Returns:
 93 |         List[int]: A list of integers guaranteed to sum to total.
 94 |     """
 95 |     ratios = [ratio if _max else 0 for ratio, _max in zip(ratios, maximums)]
 96 |     total_ratio = sum(ratios)
 97 |     if not total_ratio:
 98 |         return values[:]
 99 |     total_remaining = total
100 |     result: List[int] = []
101 |     append = result.append
102 |     for ratio, maximum, value in zip(ratios, maximums, values):
103 |         if ratio and total_ratio > 0:
104 |             distributed = min(maximum, round(ratio * total_remaining / total_ratio))
105 |             append(value - distributed)
106 |             total_remaining -= distributed
107 |             total_ratio -= ratio
108 |         else:
109 |             append(value)
110 |     return result
111 | 
112 | 
113 | def ratio_distribute(
114 |     total: int, ratios: List[int], minimums: Optional[List[int]] = None
115 | ) -> List[int]:
116 |     """Distribute an integer total in to parts based on ratios.
117 | 
118 |     Args:
119 |         total (int): The total to divide.
120 |         ratios (List[int]): A list of integer ratios.
121 |         minimums (List[int]): List of minimum values for each slot.
122 | 
123 |     Returns:
124 |         List[int]: A list of integers guaranteed to sum to total.
125 |     """
126 |     if minimums:
127 |         ratios = [ratio if _min else 0 for ratio, _min in zip(ratios, minimums)]
128 |     total_ratio = sum(ratios)
129 |     assert total_ratio > 0, "Sum of ratios must be > 0"
130 | 
131 |     total_remaining = total
132 |     distributed_total: List[int] = []
133 |     append = distributed_total.append
134 |     if minimums is None:
135 |         _minimums = [0] * len(ratios)
136 |     else:
137 |         _minimums = minimums
138 |     for ratio, minimum in zip(ratios, _minimums):
139 |         if total_ratio > 0:
140 |             distributed = max(minimum, ceil(ratio * total_remaining / total_ratio))
141 |         else:
142 |             distributed = total_remaining
143 |         append(distributed)
144 |         total_ratio -= ratio
145 |         total_remaining -= distributed
146 |     return distributed_total
147 | 
148 | 
149 | if __name__ == "__main__":
150 |     from dataclasses import dataclass
151 | 
152 |     @dataclass
153 |     class E:
154 |         size: Optional[int] = None
155 |         ratio: int = 1
156 |         minimum_size: int = 1
157 | 
158 |     resolved = ratio_resolve(110, [E(None, 1, 1), E(None, 1, 1), E(None, 1, 1)])
159 |     print(sum(resolved))
160 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py:
--------------------------------------------------------------------------------

```python
  1 | from itertools import zip_longest
  2 | from typing import (
  3 |     TYPE_CHECKING,
  4 |     Iterable,
  5 |     Iterator,
  6 |     List,
  7 |     Optional,
  8 |     TypeVar,
  9 |     Union,
 10 |     overload,
 11 | )
 12 | 
 13 | if TYPE_CHECKING:
 14 |     from .console import (
 15 |         Console,
 16 |         ConsoleOptions,
 17 |         JustifyMethod,
 18 |         OverflowMethod,
 19 |         RenderResult,
 20 |         RenderableType,
 21 |     )
 22 |     from .text import Text
 23 | 
 24 | from .cells import cell_len
 25 | from .measure import Measurement
 26 | 
 27 | T = TypeVar("T")
 28 | 
 29 | 
 30 | class Renderables:
 31 |     """A list subclass which renders its contents to the console."""
 32 | 
 33 |     def __init__(
 34 |         self, renderables: Optional[Iterable["RenderableType"]] = None
 35 |     ) -> None:
 36 |         self._renderables: List["RenderableType"] = (
 37 |             list(renderables) if renderables is not None else []
 38 |         )
 39 | 
 40 |     def __rich_console__(
 41 |         self, console: "Console", options: "ConsoleOptions"
 42 |     ) -> "RenderResult":
 43 |         """Console render method to insert line-breaks."""
 44 |         yield from self._renderables
 45 | 
 46 |     def __rich_measure__(
 47 |         self, console: "Console", options: "ConsoleOptions"
 48 |     ) -> "Measurement":
 49 |         dimensions = [
 50 |             Measurement.get(console, options, renderable)
 51 |             for renderable in self._renderables
 52 |         ]
 53 |         if not dimensions:
 54 |             return Measurement(1, 1)
 55 |         _min = max(dimension.minimum for dimension in dimensions)
 56 |         _max = max(dimension.maximum for dimension in dimensions)
 57 |         return Measurement(_min, _max)
 58 | 
 59 |     def append(self, renderable: "RenderableType") -> None:
 60 |         self._renderables.append(renderable)
 61 | 
 62 |     def __iter__(self) -> Iterable["RenderableType"]:
 63 |         return iter(self._renderables)
 64 | 
 65 | 
 66 | class Lines:
 67 |     """A list subclass which can render to the console."""
 68 | 
 69 |     def __init__(self, lines: Iterable["Text"] = ()) -> None:
 70 |         self._lines: List["Text"] = list(lines)
 71 | 
 72 |     def __repr__(self) -> str:
 73 |         return f"Lines({self._lines!r})"
 74 | 
 75 |     def __iter__(self) -> Iterator["Text"]:
 76 |         return iter(self._lines)
 77 | 
 78 |     @overload
 79 |     def __getitem__(self, index: int) -> "Text":
 80 |         ...
 81 | 
 82 |     @overload
 83 |     def __getitem__(self, index: slice) -> List["Text"]:
 84 |         ...
 85 | 
 86 |     def __getitem__(self, index: Union[slice, int]) -> Union["Text", List["Text"]]:
 87 |         return self._lines[index]
 88 | 
 89 |     def __setitem__(self, index: int, value: "Text") -> "Lines":
 90 |         self._lines[index] = value
 91 |         return self
 92 | 
 93 |     def __len__(self) -> int:
 94 |         return self._lines.__len__()
 95 | 
 96 |     def __rich_console__(
 97 |         self, console: "Console", options: "ConsoleOptions"
 98 |     ) -> "RenderResult":
 99 |         """Console render method to insert line-breaks."""
100 |         yield from self._lines
101 | 
102 |     def append(self, line: "Text") -> None:
103 |         self._lines.append(line)
104 | 
105 |     def extend(self, lines: Iterable["Text"]) -> None:
106 |         self._lines.extend(lines)
107 | 
108 |     def pop(self, index: int = -1) -> "Text":
109 |         return self._lines.pop(index)
110 | 
111 |     def justify(
112 |         self,
113 |         console: "Console",
114 |         width: int,
115 |         justify: "JustifyMethod" = "left",
116 |         overflow: "OverflowMethod" = "fold",
117 |     ) -> None:
118 |         """Justify and overflow text to a given width.
119 | 
120 |         Args:
121 |             console (Console): Console instance.
122 |             width (int): Number of cells available per line.
123 |             justify (str, optional): Default justify method for text: "left", "center", "full" or "right". Defaults to "left".
124 |             overflow (str, optional): Default overflow for text: "crop", "fold", or "ellipsis". Defaults to "fold".
125 | 
126 |         """
127 |         from .text import Text
128 | 
129 |         if justify == "left":
130 |             for line in self._lines:
131 |                 line.truncate(width, overflow=overflow, pad=True)
132 |         elif justify == "center":
133 |             for line in self._lines:
134 |                 line.rstrip()
135 |                 line.truncate(width, overflow=overflow)
136 |                 line.pad_left((width - cell_len(line.plain)) // 2)
137 |                 line.pad_right(width - cell_len(line.plain))
138 |         elif justify == "right":
139 |             for line in self._lines:
140 |                 line.rstrip()
141 |                 line.truncate(width, overflow=overflow)
142 |                 line.pad_left(width - cell_len(line.plain))
143 |         elif justify == "full":
144 |             for line_index, line in enumerate(self._lines):
145 |                 if line_index == len(self._lines) - 1:
146 |                     break
147 |                 words = line.split(" ")
148 |                 words_size = sum(cell_len(word.plain) for word in words)
149 |                 num_spaces = len(words) - 1
150 |                 spaces = [1 for _ in range(num_spaces)]
151 |                 index = 0
152 |                 if spaces:
153 |                     while words_size + num_spaces < width:
154 |                         spaces[len(spaces) - index - 1] += 1
155 |                         num_spaces += 1
156 |                         index = (index + 1) % len(spaces)
157 |                 tokens: List[Text] = []
158 |                 for index, (word, next_word) in enumerate(
159 |                     zip_longest(words, words[1:])
160 |                 ):
161 |                     tokens.append(word)
162 |                     if index < len(spaces):
163 |                         style = word.get_style_at_offset(console, -1)
164 |                         next_style = next_word.get_style_at_offset(console, 0)
165 |                         space_style = style if style == next_style else line.style
166 |                         tokens.append(Text(" " * spaces[index], style=space_style))
167 |                 self[line_index] = Text("").join(tokens)
168 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/_internal.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import logging
  4 | import re
  5 | import sys
  6 | import typing as t
  7 | from datetime import datetime
  8 | from datetime import timezone
  9 | 
 10 | if t.TYPE_CHECKING:
 11 |     from _typeshed.wsgi import WSGIEnvironment
 12 | 
 13 |     from .wrappers.request import Request
 14 | 
 15 | _logger: logging.Logger | None = None
 16 | 
 17 | 
 18 | class _Missing:
 19 |     def __repr__(self) -> str:
 20 |         return "no value"
 21 | 
 22 |     def __reduce__(self) -> str:
 23 |         return "_missing"
 24 | 
 25 | 
 26 | _missing = _Missing()
 27 | 
 28 | 
 29 | def _wsgi_decoding_dance(s: str) -> str:
 30 |     return s.encode("latin1").decode(errors="replace")
 31 | 
 32 | 
 33 | def _wsgi_encoding_dance(s: str) -> str:
 34 |     return s.encode().decode("latin1")
 35 | 
 36 | 
 37 | def _get_environ(obj: WSGIEnvironment | Request) -> WSGIEnvironment:
 38 |     env = getattr(obj, "environ", obj)
 39 |     assert isinstance(
 40 |         env, dict
 41 |     ), f"{type(obj).__name__!r} is not a WSGI environment (has to be a dict)"
 42 |     return env
 43 | 
 44 | 
 45 | def _has_level_handler(logger: logging.Logger) -> bool:
 46 |     """Check if there is a handler in the logging chain that will handle
 47 |     the given logger's effective level.
 48 |     """
 49 |     level = logger.getEffectiveLevel()
 50 |     current = logger
 51 | 
 52 |     while current:
 53 |         if any(handler.level <= level for handler in current.handlers):
 54 |             return True
 55 | 
 56 |         if not current.propagate:
 57 |             break
 58 | 
 59 |         current = current.parent  # type: ignore
 60 | 
 61 |     return False
 62 | 
 63 | 
 64 | class _ColorStreamHandler(logging.StreamHandler):  # type: ignore[type-arg]
 65 |     """On Windows, wrap stream with Colorama for ANSI style support."""
 66 | 
 67 |     def __init__(self) -> None:
 68 |         try:
 69 |             import colorama
 70 |         except ImportError:
 71 |             stream = None
 72 |         else:
 73 |             stream = colorama.AnsiToWin32(sys.stderr)
 74 | 
 75 |         super().__init__(stream)
 76 | 
 77 | 
 78 | def _log(type: str, message: str, *args: t.Any, **kwargs: t.Any) -> None:
 79 |     """Log a message to the 'werkzeug' logger.
 80 | 
 81 |     The logger is created the first time it is needed. If there is no
 82 |     level set, it is set to :data:`logging.INFO`. If there is no handler
 83 |     for the logger's effective level, a :class:`logging.StreamHandler`
 84 |     is added.
 85 |     """
 86 |     global _logger
 87 | 
 88 |     if _logger is None:
 89 |         _logger = logging.getLogger("werkzeug")
 90 | 
 91 |         if _logger.level == logging.NOTSET:
 92 |             _logger.setLevel(logging.INFO)
 93 | 
 94 |         if not _has_level_handler(_logger):
 95 |             _logger.addHandler(_ColorStreamHandler())
 96 | 
 97 |     getattr(_logger, type)(message.rstrip(), *args, **kwargs)
 98 | 
 99 | 
100 | @t.overload
101 | def _dt_as_utc(dt: None) -> None: ...
102 | 
103 | 
104 | @t.overload
105 | def _dt_as_utc(dt: datetime) -> datetime: ...
106 | 
107 | 
108 | def _dt_as_utc(dt: datetime | None) -> datetime | None:
109 |     if dt is None:
110 |         return dt
111 | 
112 |     if dt.tzinfo is None:
113 |         return dt.replace(tzinfo=timezone.utc)
114 |     elif dt.tzinfo != timezone.utc:
115 |         return dt.astimezone(timezone.utc)
116 | 
117 |     return dt
118 | 
119 | 
120 | _TAccessorValue = t.TypeVar("_TAccessorValue")
121 | 
122 | 
123 | class _DictAccessorProperty(t.Generic[_TAccessorValue]):
124 |     """Baseclass for `environ_property` and `header_property`."""
125 | 
126 |     read_only = False
127 | 
128 |     def __init__(
129 |         self,
130 |         name: str,
131 |         default: _TAccessorValue | None = None,
132 |         load_func: t.Callable[[str], _TAccessorValue] | None = None,
133 |         dump_func: t.Callable[[_TAccessorValue], str] | None = None,
134 |         read_only: bool | None = None,
135 |         doc: str | None = None,
136 |     ) -> None:
137 |         self.name = name
138 |         self.default = default
139 |         self.load_func = load_func
140 |         self.dump_func = dump_func
141 |         if read_only is not None:
142 |             self.read_only = read_only
143 |         self.__doc__ = doc
144 | 
145 |     def lookup(self, instance: t.Any) -> t.MutableMapping[str, t.Any]:
146 |         raise NotImplementedError
147 | 
148 |     @t.overload
149 |     def __get__(
150 |         self, instance: None, owner: type
151 |     ) -> _DictAccessorProperty[_TAccessorValue]: ...
152 | 
153 |     @t.overload
154 |     def __get__(self, instance: t.Any, owner: type) -> _TAccessorValue: ...
155 | 
156 |     def __get__(
157 |         self, instance: t.Any | None, owner: type
158 |     ) -> _TAccessorValue | _DictAccessorProperty[_TAccessorValue]:
159 |         if instance is None:
160 |             return self
161 | 
162 |         storage = self.lookup(instance)
163 | 
164 |         if self.name not in storage:
165 |             return self.default  # type: ignore
166 | 
167 |         value = storage[self.name]
168 | 
169 |         if self.load_func is not None:
170 |             try:
171 |                 return self.load_func(value)
172 |             except (ValueError, TypeError):
173 |                 return self.default  # type: ignore
174 | 
175 |         return value  # type: ignore
176 | 
177 |     def __set__(self, instance: t.Any, value: _TAccessorValue) -> None:
178 |         if self.read_only:
179 |             raise AttributeError("read only property")
180 | 
181 |         if self.dump_func is not None:
182 |             self.lookup(instance)[self.name] = self.dump_func(value)
183 |         else:
184 |             self.lookup(instance)[self.name] = value
185 | 
186 |     def __delete__(self, instance: t.Any) -> None:
187 |         if self.read_only:
188 |             raise AttributeError("read only property")
189 | 
190 |         self.lookup(instance).pop(self.name, None)
191 | 
192 |     def __repr__(self) -> str:
193 |         return f"<{type(self).__name__} {self.name}>"
194 | 
195 | 
196 | _plain_int_re = re.compile(r"-?\d+", re.ASCII)
197 | 
198 | 
199 | def _plain_int(value: str) -> int:
200 |     """Parse an int only if it is only ASCII digits and ``-``.
201 | 
202 |     This disallows ``+``, ``_``, and non-ASCII digits, which are accepted by ``int`` but
203 |     are not allowed in HTTP header values.
204 | 
205 |     Any leading or trailing whitespace is stripped
206 |     """
207 |     value = value.strip()
208 |     if _plain_int_re.fullmatch(value) is None:
209 |         raise ValueError
210 | 
211 |     return int(value)
212 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/middleware/profiler.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | Application Profiler
  3 | ====================
  4 | 
  5 | This module provides a middleware that profiles each request with the
  6 | :mod:`cProfile` module. This can help identify bottlenecks in your code
  7 | that may be slowing down your application.
  8 | 
  9 | .. autoclass:: ProfilerMiddleware
 10 | 
 11 | :copyright: 2007 Pallets
 12 | :license: BSD-3-Clause
 13 | """
 14 | 
 15 | from __future__ import annotations
 16 | 
 17 | import os.path
 18 | import sys
 19 | import time
 20 | import typing as t
 21 | from pstats import Stats
 22 | 
 23 | try:
 24 |     from cProfile import Profile
 25 | except ImportError:
 26 |     from profile import Profile  # type: ignore
 27 | 
 28 | if t.TYPE_CHECKING:
 29 |     from _typeshed.wsgi import StartResponse
 30 |     from _typeshed.wsgi import WSGIApplication
 31 |     from _typeshed.wsgi import WSGIEnvironment
 32 | 
 33 | 
 34 | class ProfilerMiddleware:
 35 |     """Wrap a WSGI application and profile the execution of each
 36 |     request. Responses are buffered so that timings are more exact.
 37 | 
 38 |     If ``stream`` is given, :class:`pstats.Stats` are written to it
 39 |     after each request. If ``profile_dir`` is given, :mod:`cProfile`
 40 |     data files are saved to that directory, one file per request.
 41 | 
 42 |     The filename can be customized by passing ``filename_format``. If
 43 |     it is a string, it will be formatted using :meth:`str.format` with
 44 |     the following fields available:
 45 | 
 46 |     -   ``{method}`` - The request method; GET, POST, etc.
 47 |     -   ``{path}`` - The request path or 'root' should one not exist.
 48 |     -   ``{elapsed}`` - The elapsed time of the request in milliseconds.
 49 |     -   ``{time}`` - The time of the request.
 50 | 
 51 |     If it is a callable, it will be called with the WSGI ``environ`` and
 52 |     be expected to return a filename string. The ``environ`` dictionary
 53 |     will also have the ``"werkzeug.profiler"`` key populated with a
 54 |     dictionary containing the following fields (more may be added in the
 55 |     future):
 56 |     -   ``{elapsed}`` - The elapsed time of the request in milliseconds.
 57 |     -   ``{time}`` - The time of the request.
 58 | 
 59 |     :param app: The WSGI application to wrap.
 60 |     :param stream: Write stats to this stream. Disable with ``None``.
 61 |     :param sort_by: A tuple of columns to sort stats by. See
 62 |         :meth:`pstats.Stats.sort_stats`.
 63 |     :param restrictions: A tuple of restrictions to filter stats by. See
 64 |         :meth:`pstats.Stats.print_stats`.
 65 |     :param profile_dir: Save profile data files to this directory.
 66 |     :param filename_format: Format string for profile data file names,
 67 |         or a callable returning a name. See explanation above.
 68 | 
 69 |     .. code-block:: python
 70 | 
 71 |         from werkzeug.middleware.profiler import ProfilerMiddleware
 72 |         app = ProfilerMiddleware(app)
 73 | 
 74 |     .. versionchanged:: 3.0
 75 |         Added the ``"werkzeug.profiler"`` key to the ``filename_format(environ)``
 76 |         parameter with the  ``elapsed`` and ``time`` fields.
 77 | 
 78 |     .. versionchanged:: 0.15
 79 |         Stats are written even if ``profile_dir`` is given, and can be
 80 |         disable by passing ``stream=None``.
 81 | 
 82 |     .. versionadded:: 0.15
 83 |         Added ``filename_format``.
 84 | 
 85 |     .. versionadded:: 0.9
 86 |         Added ``restrictions`` and ``profile_dir``.
 87 |     """
 88 | 
 89 |     def __init__(
 90 |         self,
 91 |         app: WSGIApplication,
 92 |         stream: t.IO[str] | None = sys.stdout,
 93 |         sort_by: t.Iterable[str] = ("time", "calls"),
 94 |         restrictions: t.Iterable[str | int | float] = (),
 95 |         profile_dir: str | None = None,
 96 |         filename_format: str = "{method}.{path}.{elapsed:.0f}ms.{time:.0f}.prof",
 97 |     ) -> None:
 98 |         self._app = app
 99 |         self._stream = stream
100 |         self._sort_by = sort_by
101 |         self._restrictions = restrictions
102 |         self._profile_dir = profile_dir
103 |         self._filename_format = filename_format
104 | 
105 |     def __call__(
106 |         self, environ: WSGIEnvironment, start_response: StartResponse
107 |     ) -> t.Iterable[bytes]:
108 |         response_body: list[bytes] = []
109 | 
110 |         def catching_start_response(status, headers, exc_info=None):  # type: ignore
111 |             start_response(status, headers, exc_info)
112 |             return response_body.append
113 | 
114 |         def runapp() -> None:
115 |             app_iter = self._app(
116 |                 environ, t.cast("StartResponse", catching_start_response)
117 |             )
118 |             response_body.extend(app_iter)
119 | 
120 |             if hasattr(app_iter, "close"):
121 |                 app_iter.close()
122 | 
123 |         profile = Profile()
124 |         start = time.time()
125 |         profile.runcall(runapp)
126 |         body = b"".join(response_body)
127 |         elapsed = time.time() - start
128 | 
129 |         if self._profile_dir is not None:
130 |             if callable(self._filename_format):
131 |                 environ["werkzeug.profiler"] = {
132 |                     "elapsed": elapsed * 1000.0,
133 |                     "time": time.time(),
134 |                 }
135 |                 filename = self._filename_format(environ)
136 |             else:
137 |                 filename = self._filename_format.format(
138 |                     method=environ["REQUEST_METHOD"],
139 |                     path=environ["PATH_INFO"].strip("/").replace("/", ".") or "root",
140 |                     elapsed=elapsed * 1000.0,
141 |                     time=time.time(),
142 |                 )
143 |             filename = os.path.join(self._profile_dir, filename)
144 |             profile.dump_stats(filename)
145 | 
146 |         if self._stream is not None:
147 |             stats = Stats(profile, stream=self._stream)
148 |             stats.sort_stats(*self._sort_by)
149 |             print("-" * 80, file=self._stream)
150 |             path_info = environ.get("PATH_INFO", "")
151 |             print(f"PATH: {path_info!r}", file=self._stream)
152 |             stats.print_stats(*self._restrictions)
153 |             print(f"{'-' * 80}\n", file=self._stream)
154 | 
155 |         return [body]
156 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py:
--------------------------------------------------------------------------------

```python
  1 | """macOS."""
  2 | 
  3 | from __future__ import annotations
  4 | 
  5 | import os.path
  6 | import sys
  7 | 
  8 | from .api import PlatformDirsABC
  9 | 
 10 | 
 11 | class MacOS(PlatformDirsABC):
 12 |     """
 13 |     Platform directories for the macOS operating system.
 14 | 
 15 |     Follows the guidance from
 16 |     `Apple documentation <https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/MacOSXDirectories/MacOSXDirectories.html>`_.
 17 |     Makes use of the `appname <platformdirs.api.PlatformDirsABC.appname>`,
 18 |     `version <platformdirs.api.PlatformDirsABC.version>`,
 19 |     `ensure_exists <platformdirs.api.PlatformDirsABC.ensure_exists>`.
 20 | 
 21 |     """
 22 | 
 23 |     @property
 24 |     def user_data_dir(self) -> str:
 25 |         """:return: data directory tied to the user, e.g. ``~/Library/Application Support/$appname/$version``"""
 26 |         return self._append_app_name_and_version(os.path.expanduser("~/Library/Application Support"))  # noqa: PTH111
 27 | 
 28 |     @property
 29 |     def site_data_dir(self) -> str:
 30 |         """
 31 |         :return: data directory shared by users, e.g. ``/Library/Application Support/$appname/$version``.
 32 |           If we're using a Python binary managed by `Homebrew <https://brew.sh>`_, the directory
 33 |           will be under the Homebrew prefix, e.g. ``/opt/homebrew/share/$appname/$version``.
 34 |           If `multipath <platformdirs.api.PlatformDirsABC.multipath>` is enabled, and we're in Homebrew,
 35 |           the response is a multi-path string separated by ":", e.g.
 36 |           ``/opt/homebrew/share/$appname/$version:/Library/Application Support/$appname/$version``
 37 |         """
 38 |         is_homebrew = sys.prefix.startswith("/opt/homebrew")
 39 |         path_list = [self._append_app_name_and_version("/opt/homebrew/share")] if is_homebrew else []
 40 |         path_list.append(self._append_app_name_and_version("/Library/Application Support"))
 41 |         if self.multipath:
 42 |             return os.pathsep.join(path_list)
 43 |         return path_list[0]
 44 | 
 45 |     @property
 46 |     def user_config_dir(self) -> str:
 47 |         """:return: config directory tied to the user, same as `user_data_dir`"""
 48 |         return self.user_data_dir
 49 | 
 50 |     @property
 51 |     def site_config_dir(self) -> str:
 52 |         """:return: config directory shared by the users, same as `site_data_dir`"""
 53 |         return self.site_data_dir
 54 | 
 55 |     @property
 56 |     def user_cache_dir(self) -> str:
 57 |         """:return: cache directory tied to the user, e.g. ``~/Library/Caches/$appname/$version``"""
 58 |         return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches"))  # noqa: PTH111
 59 | 
 60 |     @property
 61 |     def site_cache_dir(self) -> str:
 62 |         """
 63 |         :return: cache directory shared by users, e.g. ``/Library/Caches/$appname/$version``.
 64 |           If we're using a Python binary managed by `Homebrew <https://brew.sh>`_, the directory
 65 |           will be under the Homebrew prefix, e.g. ``/opt/homebrew/var/cache/$appname/$version``.
 66 |           If `multipath <platformdirs.api.PlatformDirsABC.multipath>` is enabled, and we're in Homebrew,
 67 |           the response is a multi-path string separated by ":", e.g.
 68 |           ``/opt/homebrew/var/cache/$appname/$version:/Library/Caches/$appname/$version``
 69 |         """
 70 |         is_homebrew = sys.prefix.startswith("/opt/homebrew")
 71 |         path_list = [self._append_app_name_and_version("/opt/homebrew/var/cache")] if is_homebrew else []
 72 |         path_list.append(self._append_app_name_and_version("/Library/Caches"))
 73 |         if self.multipath:
 74 |             return os.pathsep.join(path_list)
 75 |         return path_list[0]
 76 | 
 77 |     @property
 78 |     def user_state_dir(self) -> str:
 79 |         """:return: state directory tied to the user, same as `user_data_dir`"""
 80 |         return self.user_data_dir
 81 | 
 82 |     @property
 83 |     def user_log_dir(self) -> str:
 84 |         """:return: log directory tied to the user, e.g. ``~/Library/Logs/$appname/$version``"""
 85 |         return self._append_app_name_and_version(os.path.expanduser("~/Library/Logs"))  # noqa: PTH111
 86 | 
 87 |     @property
 88 |     def user_documents_dir(self) -> str:
 89 |         """:return: documents directory tied to the user, e.g. ``~/Documents``"""
 90 |         return os.path.expanduser("~/Documents")  # noqa: PTH111
 91 | 
 92 |     @property
 93 |     def user_downloads_dir(self) -> str:
 94 |         """:return: downloads directory tied to the user, e.g. ``~/Downloads``"""
 95 |         return os.path.expanduser("~/Downloads")  # noqa: PTH111
 96 | 
 97 |     @property
 98 |     def user_pictures_dir(self) -> str:
 99 |         """:return: pictures directory tied to the user, e.g. ``~/Pictures``"""
100 |         return os.path.expanduser("~/Pictures")  # noqa: PTH111
101 | 
102 |     @property
103 |     def user_videos_dir(self) -> str:
104 |         """:return: videos directory tied to the user, e.g. ``~/Movies``"""
105 |         return os.path.expanduser("~/Movies")  # noqa: PTH111
106 | 
107 |     @property
108 |     def user_music_dir(self) -> str:
109 |         """:return: music directory tied to the user, e.g. ``~/Music``"""
110 |         return os.path.expanduser("~/Music")  # noqa: PTH111
111 | 
112 |     @property
113 |     def user_desktop_dir(self) -> str:
114 |         """:return: desktop directory tied to the user, e.g. ``~/Desktop``"""
115 |         return os.path.expanduser("~/Desktop")  # noqa: PTH111
116 | 
117 |     @property
118 |     def user_runtime_dir(self) -> str:
119 |         """:return: runtime directory tied to the user, e.g. ``~/Library/Caches/TemporaryItems/$appname/$version``"""
120 |         return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches/TemporaryItems"))  # noqa: PTH111
121 | 
122 |     @property
123 |     def site_runtime_dir(self) -> str:
124 |         """:return: runtime directory shared by users, same as `user_runtime_dir`"""
125 |         return self.user_runtime_dir
126 | 
127 | 
128 | __all__ = [
129 |     "MacOS",
130 | ]
131 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/flask/json/__init__.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import json as _json
  4 | import typing as t
  5 | 
  6 | from ..globals import current_app
  7 | from .provider import _default
  8 | 
  9 | if t.TYPE_CHECKING:  # pragma: no cover
 10 |     from ..wrappers import Response
 11 | 
 12 | 
 13 | def dumps(obj: t.Any, **kwargs: t.Any) -> str:
 14 |     """Serialize data as JSON.
 15 | 
 16 |     If :data:`~flask.current_app` is available, it will use its
 17 |     :meth:`app.json.dumps() <flask.json.provider.JSONProvider.dumps>`
 18 |     method, otherwise it will use :func:`json.dumps`.
 19 | 
 20 |     :param obj: The data to serialize.
 21 |     :param kwargs: Arguments passed to the ``dumps`` implementation.
 22 | 
 23 |     .. versionchanged:: 2.3
 24 |         The ``app`` parameter was removed.
 25 | 
 26 |     .. versionchanged:: 2.2
 27 |         Calls ``current_app.json.dumps``, allowing an app to override
 28 |         the behavior.
 29 | 
 30 |     .. versionchanged:: 2.0.2
 31 |         :class:`decimal.Decimal` is supported by converting to a string.
 32 | 
 33 |     .. versionchanged:: 2.0
 34 |         ``encoding`` will be removed in Flask 2.1.
 35 | 
 36 |     .. versionchanged:: 1.0.3
 37 |         ``app`` can be passed directly, rather than requiring an app
 38 |         context for configuration.
 39 |     """
 40 |     if current_app:
 41 |         return current_app.json.dumps(obj, **kwargs)
 42 | 
 43 |     kwargs.setdefault("default", _default)
 44 |     return _json.dumps(obj, **kwargs)
 45 | 
 46 | 
 47 | def dump(obj: t.Any, fp: t.IO[str], **kwargs: t.Any) -> None:
 48 |     """Serialize data as JSON and write to a file.
 49 | 
 50 |     If :data:`~flask.current_app` is available, it will use its
 51 |     :meth:`app.json.dump() <flask.json.provider.JSONProvider.dump>`
 52 |     method, otherwise it will use :func:`json.dump`.
 53 | 
 54 |     :param obj: The data to serialize.
 55 |     :param fp: A file opened for writing text. Should use the UTF-8
 56 |         encoding to be valid JSON.
 57 |     :param kwargs: Arguments passed to the ``dump`` implementation.
 58 | 
 59 |     .. versionchanged:: 2.3
 60 |         The ``app`` parameter was removed.
 61 | 
 62 |     .. versionchanged:: 2.2
 63 |         Calls ``current_app.json.dump``, allowing an app to override
 64 |         the behavior.
 65 | 
 66 |     .. versionchanged:: 2.0
 67 |         Writing to a binary file, and the ``encoding`` argument, will be
 68 |         removed in Flask 2.1.
 69 |     """
 70 |     if current_app:
 71 |         current_app.json.dump(obj, fp, **kwargs)
 72 |     else:
 73 |         kwargs.setdefault("default", _default)
 74 |         _json.dump(obj, fp, **kwargs)
 75 | 
 76 | 
 77 | def loads(s: str | bytes, **kwargs: t.Any) -> t.Any:
 78 |     """Deserialize data as JSON.
 79 | 
 80 |     If :data:`~flask.current_app` is available, it will use its
 81 |     :meth:`app.json.loads() <flask.json.provider.JSONProvider.loads>`
 82 |     method, otherwise it will use :func:`json.loads`.
 83 | 
 84 |     :param s: Text or UTF-8 bytes.
 85 |     :param kwargs: Arguments passed to the ``loads`` implementation.
 86 | 
 87 |     .. versionchanged:: 2.3
 88 |         The ``app`` parameter was removed.
 89 | 
 90 |     .. versionchanged:: 2.2
 91 |         Calls ``current_app.json.loads``, allowing an app to override
 92 |         the behavior.
 93 | 
 94 |     .. versionchanged:: 2.0
 95 |         ``encoding`` will be removed in Flask 2.1. The data must be a
 96 |         string or UTF-8 bytes.
 97 | 
 98 |     .. versionchanged:: 1.0.3
 99 |         ``app`` can be passed directly, rather than requiring an app
100 |         context for configuration.
101 |     """
102 |     if current_app:
103 |         return current_app.json.loads(s, **kwargs)
104 | 
105 |     return _json.loads(s, **kwargs)
106 | 
107 | 
108 | def load(fp: t.IO[t.AnyStr], **kwargs: t.Any) -> t.Any:
109 |     """Deserialize data as JSON read from a file.
110 | 
111 |     If :data:`~flask.current_app` is available, it will use its
112 |     :meth:`app.json.load() <flask.json.provider.JSONProvider.load>`
113 |     method, otherwise it will use :func:`json.load`.
114 | 
115 |     :param fp: A file opened for reading text or UTF-8 bytes.
116 |     :param kwargs: Arguments passed to the ``load`` implementation.
117 | 
118 |     .. versionchanged:: 2.3
119 |         The ``app`` parameter was removed.
120 | 
121 |     .. versionchanged:: 2.2
122 |         Calls ``current_app.json.load``, allowing an app to override
123 |         the behavior.
124 | 
125 |     .. versionchanged:: 2.2
126 |         The ``app`` parameter will be removed in Flask 2.3.
127 | 
128 |     .. versionchanged:: 2.0
129 |         ``encoding`` will be removed in Flask 2.1. The file must be text
130 |         mode, or binary mode with UTF-8 bytes.
131 |     """
132 |     if current_app:
133 |         return current_app.json.load(fp, **kwargs)
134 | 
135 |     return _json.load(fp, **kwargs)
136 | 
137 | 
138 | def jsonify(*args: t.Any, **kwargs: t.Any) -> Response:
139 |     """Serialize the given arguments as JSON, and return a
140 |     :class:`~flask.Response` object with the ``application/json``
141 |     mimetype. A dict or list returned from a view will be converted to a
142 |     JSON response automatically without needing to call this.
143 | 
144 |     This requires an active request or application context, and calls
145 |     :meth:`app.json.response() <flask.json.provider.JSONProvider.response>`.
146 | 
147 |     In debug mode, the output is formatted with indentation to make it
148 |     easier to read. This may also be controlled by the provider.
149 | 
150 |     Either positional or keyword arguments can be given, not both.
151 |     If no arguments are given, ``None`` is serialized.
152 | 
153 |     :param args: A single value to serialize, or multiple values to
154 |         treat as a list to serialize.
155 |     :param kwargs: Treat as a dict to serialize.
156 | 
157 |     .. versionchanged:: 2.2
158 |         Calls ``current_app.json.response``, allowing an app to override
159 |         the behavior.
160 | 
161 |     .. versionchanged:: 2.0.2
162 |         :class:`decimal.Decimal` is supported by converting to a string.
163 | 
164 |     .. versionchanged:: 0.11
165 |         Added support for serializing top-level arrays. This was a
166 |         security risk in ancient browsers. See :ref:`security-json`.
167 | 
168 |     .. versionadded:: 0.2
169 |     """
170 |     return current_app.json.response(*args, **kwargs)  # type: ignore[return-value]
171 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/commands/search.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | import shutil
  3 | import sys
  4 | import textwrap
  5 | import xmlrpc.client
  6 | from collections import OrderedDict
  7 | from optparse import Values
  8 | from typing import TYPE_CHECKING, Dict, List, Optional, TypedDict
  9 | 
 10 | from pip._vendor.packaging.version import parse as parse_version
 11 | 
 12 | from pip._internal.cli.base_command import Command
 13 | from pip._internal.cli.req_command import SessionCommandMixin
 14 | from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
 15 | from pip._internal.exceptions import CommandError
 16 | from pip._internal.metadata import get_default_environment
 17 | from pip._internal.models.index import PyPI
 18 | from pip._internal.network.xmlrpc import PipXmlrpcTransport
 19 | from pip._internal.utils.logging import indent_log
 20 | from pip._internal.utils.misc import write_output
 21 | 
 22 | if TYPE_CHECKING:
 23 | 
 24 |     class TransformedHit(TypedDict):
 25 |         name: str
 26 |         summary: str
 27 |         versions: List[str]
 28 | 
 29 | 
 30 | logger = logging.getLogger(__name__)
 31 | 
 32 | 
 33 | class SearchCommand(Command, SessionCommandMixin):
 34 |     """Search for PyPI packages whose name or summary contains <query>."""
 35 | 
 36 |     usage = """
 37 |       %prog [options] <query>"""
 38 |     ignore_require_venv = True
 39 | 
 40 |     def add_options(self) -> None:
 41 |         self.cmd_opts.add_option(
 42 |             "-i",
 43 |             "--index",
 44 |             dest="index",
 45 |             metavar="URL",
 46 |             default=PyPI.pypi_url,
 47 |             help="Base URL of Python Package Index (default %default)",
 48 |         )
 49 | 
 50 |         self.parser.insert_option_group(0, self.cmd_opts)
 51 | 
 52 |     def run(self, options: Values, args: List[str]) -> int:
 53 |         if not args:
 54 |             raise CommandError("Missing required argument (search query).")
 55 |         query = args
 56 |         pypi_hits = self.search(query, options)
 57 |         hits = transform_hits(pypi_hits)
 58 | 
 59 |         terminal_width = None
 60 |         if sys.stdout.isatty():
 61 |             terminal_width = shutil.get_terminal_size()[0]
 62 | 
 63 |         print_results(hits, terminal_width=terminal_width)
 64 |         if pypi_hits:
 65 |             return SUCCESS
 66 |         return NO_MATCHES_FOUND
 67 | 
 68 |     def search(self, query: List[str], options: Values) -> List[Dict[str, str]]:
 69 |         index_url = options.index
 70 | 
 71 |         session = self.get_default_session(options)
 72 | 
 73 |         transport = PipXmlrpcTransport(index_url, session)
 74 |         pypi = xmlrpc.client.ServerProxy(index_url, transport)
 75 |         try:
 76 |             hits = pypi.search({"name": query, "summary": query}, "or")
 77 |         except xmlrpc.client.Fault as fault:
 78 |             message = (
 79 |                 f"XMLRPC request failed [code: {fault.faultCode}]\n{fault.faultString}"
 80 |             )
 81 |             raise CommandError(message)
 82 |         assert isinstance(hits, list)
 83 |         return hits
 84 | 
 85 | 
 86 | def transform_hits(hits: List[Dict[str, str]]) -> List["TransformedHit"]:
 87 |     """
 88 |     The list from pypi is really a list of versions. We want a list of
 89 |     packages with the list of versions stored inline. This converts the
 90 |     list from pypi into one we can use.
 91 |     """
 92 |     packages: Dict[str, "TransformedHit"] = OrderedDict()
 93 |     for hit in hits:
 94 |         name = hit["name"]
 95 |         summary = hit["summary"]
 96 |         version = hit["version"]
 97 | 
 98 |         if name not in packages.keys():
 99 |             packages[name] = {
100 |                 "name": name,
101 |                 "summary": summary,
102 |                 "versions": [version],
103 |             }
104 |         else:
105 |             packages[name]["versions"].append(version)
106 | 
107 |             # if this is the highest version, replace summary and score
108 |             if version == highest_version(packages[name]["versions"]):
109 |                 packages[name]["summary"] = summary
110 | 
111 |     return list(packages.values())
112 | 
113 | 
114 | def print_dist_installation_info(name: str, latest: str) -> None:
115 |     env = get_default_environment()
116 |     dist = env.get_distribution(name)
117 |     if dist is not None:
118 |         with indent_log():
119 |             if dist.version == latest:
120 |                 write_output("INSTALLED: %s (latest)", dist.version)
121 |             else:
122 |                 write_output("INSTALLED: %s", dist.version)
123 |                 if parse_version(latest).pre:
124 |                     write_output(
125 |                         "LATEST:    %s (pre-release; install"
126 |                         " with `pip install --pre`)",
127 |                         latest,
128 |                     )
129 |                 else:
130 |                     write_output("LATEST:    %s", latest)
131 | 
132 | 
133 | def print_results(
134 |     hits: List["TransformedHit"],
135 |     name_column_width: Optional[int] = None,
136 |     terminal_width: Optional[int] = None,
137 | ) -> None:
138 |     if not hits:
139 |         return
140 |     if name_column_width is None:
141 |         name_column_width = (
142 |             max(
143 |                 [
144 |                     len(hit["name"]) + len(highest_version(hit.get("versions", ["-"])))
145 |                     for hit in hits
146 |                 ]
147 |             )
148 |             + 4
149 |         )
150 | 
151 |     for hit in hits:
152 |         name = hit["name"]
153 |         summary = hit["summary"] or ""
154 |         latest = highest_version(hit.get("versions", ["-"]))
155 |         if terminal_width is not None:
156 |             target_width = terminal_width - name_column_width - 5
157 |             if target_width > 10:
158 |                 # wrap and indent summary to fit terminal
159 |                 summary_lines = textwrap.wrap(summary, target_width)
160 |                 summary = ("\n" + " " * (name_column_width + 3)).join(summary_lines)
161 | 
162 |         name_latest = f"{name} ({latest})"
163 |         line = f"{name_latest:{name_column_width}} - {summary}"
164 |         try:
165 |             write_output(line)
166 |             print_dist_installation_info(name, latest)
167 |         except UnicodeEncodeError:
168 |             pass
169 | 
170 | 
171 | def highest_version(versions: List[str]) -> str:
172 |     return max(versions, key=parse_version)
173 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py:
--------------------------------------------------------------------------------

```python
  1 | from collections import namedtuple
  2 | import datetime
  3 | import struct
  4 | 
  5 | 
  6 | class ExtType(namedtuple("ExtType", "code data")):
  7 |     """ExtType represents ext type in msgpack."""
  8 | 
  9 |     def __new__(cls, code, data):
 10 |         if not isinstance(code, int):
 11 |             raise TypeError("code must be int")
 12 |         if not isinstance(data, bytes):
 13 |             raise TypeError("data must be bytes")
 14 |         if not 0 <= code <= 127:
 15 |             raise ValueError("code must be 0~127")
 16 |         return super().__new__(cls, code, data)
 17 | 
 18 | 
 19 | class Timestamp:
 20 |     """Timestamp represents the Timestamp extension type in msgpack.
 21 | 
 22 |     When built with Cython, msgpack uses C methods to pack and unpack `Timestamp`.
 23 |     When using pure-Python msgpack, :func:`to_bytes` and :func:`from_bytes` are used to pack and
 24 |     unpack `Timestamp`.
 25 | 
 26 |     This class is immutable: Do not override seconds and nanoseconds.
 27 |     """
 28 | 
 29 |     __slots__ = ["seconds", "nanoseconds"]
 30 | 
 31 |     def __init__(self, seconds, nanoseconds=0):
 32 |         """Initialize a Timestamp object.
 33 | 
 34 |         :param int seconds:
 35 |             Number of seconds since the UNIX epoch (00:00:00 UTC Jan 1 1970, minus leap seconds).
 36 |             May be negative.
 37 | 
 38 |         :param int nanoseconds:
 39 |             Number of nanoseconds to add to `seconds` to get fractional time.
 40 |             Maximum is 999_999_999.  Default is 0.
 41 | 
 42 |         Note: Negative times (before the UNIX epoch) are represented as neg. seconds + pos. ns.
 43 |         """
 44 |         if not isinstance(seconds, int):
 45 |             raise TypeError("seconds must be an integer")
 46 |         if not isinstance(nanoseconds, int):
 47 |             raise TypeError("nanoseconds must be an integer")
 48 |         if not (0 <= nanoseconds < 10**9):
 49 |             raise ValueError("nanoseconds must be a non-negative integer less than 999999999.")
 50 |         self.seconds = seconds
 51 |         self.nanoseconds = nanoseconds
 52 | 
 53 |     def __repr__(self):
 54 |         """String representation of Timestamp."""
 55 |         return f"Timestamp(seconds={self.seconds}, nanoseconds={self.nanoseconds})"
 56 | 
 57 |     def __eq__(self, other):
 58 |         """Check for equality with another Timestamp object"""
 59 |         if type(other) is self.__class__:
 60 |             return self.seconds == other.seconds and self.nanoseconds == other.nanoseconds
 61 |         return False
 62 | 
 63 |     def __ne__(self, other):
 64 |         """not-equals method (see :func:`__eq__()`)"""
 65 |         return not self.__eq__(other)
 66 | 
 67 |     def __hash__(self):
 68 |         return hash((self.seconds, self.nanoseconds))
 69 | 
 70 |     @staticmethod
 71 |     def from_bytes(b):
 72 |         """Unpack bytes into a `Timestamp` object.
 73 | 
 74 |         Used for pure-Python msgpack unpacking.
 75 | 
 76 |         :param b: Payload from msgpack ext message with code -1
 77 |         :type b: bytes
 78 | 
 79 |         :returns: Timestamp object unpacked from msgpack ext payload
 80 |         :rtype: Timestamp
 81 |         """
 82 |         if len(b) == 4:
 83 |             seconds = struct.unpack("!L", b)[0]
 84 |             nanoseconds = 0
 85 |         elif len(b) == 8:
 86 |             data64 = struct.unpack("!Q", b)[0]
 87 |             seconds = data64 & 0x00000003FFFFFFFF
 88 |             nanoseconds = data64 >> 34
 89 |         elif len(b) == 12:
 90 |             nanoseconds, seconds = struct.unpack("!Iq", b)
 91 |         else:
 92 |             raise ValueError(
 93 |                 "Timestamp type can only be created from 32, 64, or 96-bit byte objects"
 94 |             )
 95 |         return Timestamp(seconds, nanoseconds)
 96 | 
 97 |     def to_bytes(self):
 98 |         """Pack this Timestamp object into bytes.
 99 | 
100 |         Used for pure-Python msgpack packing.
101 | 
102 |         :returns data: Payload for EXT message with code -1 (timestamp type)
103 |         :rtype: bytes
104 |         """
105 |         if (self.seconds >> 34) == 0:  # seconds is non-negative and fits in 34 bits
106 |             data64 = self.nanoseconds << 34 | self.seconds
107 |             if data64 & 0xFFFFFFFF00000000 == 0:
108 |                 # nanoseconds is zero and seconds < 2**32, so timestamp 32
109 |                 data = struct.pack("!L", data64)
110 |             else:
111 |                 # timestamp 64
112 |                 data = struct.pack("!Q", data64)
113 |         else:
114 |             # timestamp 96
115 |             data = struct.pack("!Iq", self.nanoseconds, self.seconds)
116 |         return data
117 | 
118 |     @staticmethod
119 |     def from_unix(unix_sec):
120 |         """Create a Timestamp from posix timestamp in seconds.
121 | 
122 |         :param unix_float: Posix timestamp in seconds.
123 |         :type unix_float: int or float
124 |         """
125 |         seconds = int(unix_sec // 1)
126 |         nanoseconds = int((unix_sec % 1) * 10**9)
127 |         return Timestamp(seconds, nanoseconds)
128 | 
129 |     def to_unix(self):
130 |         """Get the timestamp as a floating-point value.
131 | 
132 |         :returns: posix timestamp
133 |         :rtype: float
134 |         """
135 |         return self.seconds + self.nanoseconds / 1e9
136 | 
137 |     @staticmethod
138 |     def from_unix_nano(unix_ns):
139 |         """Create a Timestamp from posix timestamp in nanoseconds.
140 | 
141 |         :param int unix_ns: Posix timestamp in nanoseconds.
142 |         :rtype: Timestamp
143 |         """
144 |         return Timestamp(*divmod(unix_ns, 10**9))
145 | 
146 |     def to_unix_nano(self):
147 |         """Get the timestamp as a unixtime in nanoseconds.
148 | 
149 |         :returns: posix timestamp in nanoseconds
150 |         :rtype: int
151 |         """
152 |         return self.seconds * 10**9 + self.nanoseconds
153 | 
154 |     def to_datetime(self):
155 |         """Get the timestamp as a UTC datetime.
156 | 
157 |         :rtype: `datetime.datetime`
158 |         """
159 |         utc = datetime.timezone.utc
160 |         return datetime.datetime.fromtimestamp(0, utc) + datetime.timedelta(seconds=self.to_unix())
161 | 
162 |     @staticmethod
163 |     def from_datetime(dt):
164 |         """Create a Timestamp from datetime with tzinfo.
165 | 
166 |         :rtype: Timestamp
167 |         """
168 |         return Timestamp.from_unix(dt.timestamp())
169 | 
```
Page 18/168FirstPrevNextLast