#
tokens: 49517/50000 3/808 files (page 59/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 59 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

--------------------------------------------------------------------------------
/search_results.json:
--------------------------------------------------------------------------------

```json
  1 | [
  2 |   {
  3 |     "name": "test.py",
  4 |     "path": "/Users/user/Documents/myproject/.venv/test.py",
  5 |     "size": 144,
  6 |     "created": "2025-02-27 13:27:09"
  7 |   },
  8 |   {
  9 |     "name": "testing.py",
 10 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/flask/testing.py",
 11 |     "size": 10163,
 12 |     "created": "2025-02-27 13:35:44"
 13 |   },
 14 |   {
 15 |     "name": "testing.cpython-312.pyc",
 16 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/flask/__pycache__/testing.cpython-312.pyc",
 17 |     "size": 13700,
 18 |     "created": "2025-02-27 13:35:52"
 19 |   },
 20 |   {
 21 |     "name": "test_firefox.json",
 22 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/useragent/test/test_firefox.json",
 23 |     "size": 44953,
 24 |     "created": "2025-02-27 13:35:49"
 25 |   },
 26 |   {
 27 |     "name": "test_os.json",
 28 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/useragent/test/test_os.json",
 29 |     "size": 11390,
 30 |     "created": "2025-02-27 13:35:50"
 31 |   },
 32 |   {
 33 |     "name": "test_device.json",
 34 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/useragent/test/test_device.json",
 35 |     "size": 1305,
 36 |     "created": "2025-02-27 13:35:49"
 37 |   },
 38 |   {
 39 |     "name": "test_pgts_browser.json",
 40 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/useragent/test/test_pgts_browser.json",
 41 |     "size": 2055934,
 42 |     "created": "2025-02-27 13:35:49"
 43 |   },
 44 |   {
 45 |     "name": "test_browser.json",
 46 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/useragent/test/test_browser.json",
 47 |     "size": 12257,
 48 |     "created": "2025-02-27 13:35:50"
 49 |   },
 50 |   {
 51 |     "name": "test_additional_os.json",
 52 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/useragent/test/test_additional_os.json",
 53 |     "size": 4376,
 54 |     "created": "2025-02-27 13:35:49"
 55 |   },
 56 |   {
 57 |     "name": "tests.py",
 58 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/jinja2/tests.py",
 59 |     "size": 5926,
 60 |     "created": "2025-02-27 13:35:44"
 61 |   },
 62 |   {
 63 |     "name": "tests.cpython-312.pyc",
 64 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/jinja2/__pycache__/tests.cpython-312.pyc",
 65 |     "size": 9048,
 66 |     "created": "2025-02-27 13:35:50"
 67 |   },
 68 |   {
 69 |     "name": "test.py",
 70 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/werkzeug/test.py",
 71 |     "size": 52782,
 72 |     "created": "2025-02-27 13:35:45"
 73 |   },
 74 |   {
 75 |     "name": "testapp.py",
 76 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/werkzeug/testapp.py",
 77 |     "size": 6332,
 78 |     "created": "2025-02-27 13:35:45"
 79 |   },
 80 |   {
 81 |     "name": "testapp.cpython-312.pyc",
 82 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/werkzeug/__pycache__/testapp.cpython-312.pyc",
 83 |     "size": 8889,
 84 |     "created": "2025-02-27 13:35:54"
 85 |   },
 86 |   {
 87 |     "name": "test.cpython-312.pyc",
 88 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/werkzeug/__pycache__/test.cpython-312.pyc",
 89 |     "size": 59898,
 90 |     "created": "2025-02-27 13:35:53"
 91 |   },
 92 |   {
 93 |     "name": "test_tree.py",
 94 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_tree.py",
 95 |     "size": 48129,
 96 |     "created": "2025-02-27 13:35:49"
 97 |   },
 98 |   {
 99 |     "name": "test_soup.py",
100 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_soup.py",
101 |     "size": 19877,
102 |     "created": "2025-02-27 13:35:49"
103 |   },
104 |   {
105 |     "name": "test_lxml.py",
106 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_lxml.py",
107 |     "size": 7635,
108 |     "created": "2025-02-27 13:35:50"
109 |   },
110 |   {
111 |     "name": "test_dammit.py",
112 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_dammit.py",
113 |     "size": 15451,
114 |     "created": "2025-02-27 13:35:49"
115 |   },
116 |   {
117 |     "name": "test_docs.py",
118 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_docs.py",
119 |     "size": 1127,
120 |     "created": "2025-02-27 13:35:50"
121 |   },
122 |   {
123 |     "name": "test_navigablestring.py",
124 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_navigablestring.py",
125 |     "size": 5081,
126 |     "created": "2025-02-27 13:35:49"
127 |   },
128 |   {
129 |     "name": "test_element.py",
130 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_element.py",
131 |     "size": 2377,
132 |     "created": "2025-02-27 13:35:50"
133 |   },
134 |   {
135 |     "name": "test_builder_registry.py",
136 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_builder_registry.py",
137 |     "size": 5114,
138 |     "created": "2025-02-27 13:35:49"
139 |   },
140 |   {
141 |     "name": "test_builder.py",
142 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_builder.py",
143 |     "size": 1115,
144 |     "created": "2025-02-27 13:35:50"
145 |   },
146 |   {
147 |     "name": "test_formatter.py",
148 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_formatter.py",
149 |     "size": 4148,
150 |     "created": "2025-02-27 13:35:49"
151 |   },
152 |   {
153 |     "name": "test_tag.py",
154 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_tag.py",
155 |     "size": 9616,
156 |     "created": "2025-02-27 13:35:49"
157 |   },
158 |   {
159 |     "name": "test_pageelement.py",
160 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_pageelement.py",
161 |     "size": 14274,
162 |     "created": "2025-02-27 13:35:50"
163 |   },
164 |   {
165 |     "name": "test_css.py",
166 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_css.py",
167 |     "size": 17279,
168 |     "created": "2025-02-27 13:35:49"
169 |   },
170 |   {
171 |     "name": "test_fuzz.py",
172 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_fuzz.py",
173 |     "size": 6972,
174 |     "created": "2025-02-27 13:35:49"
175 |   },
176 |   {
177 |     "name": "test_html5lib.py",
178 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_html5lib.py",
179 |     "size": 8322,
180 |     "created": "2025-02-27 13:35:49"
181 |   },
182 |   {
183 |     "name": "test_htmlparser.py",
184 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/test_htmlparser.py",
185 |     "size": 6256,
186 |     "created": "2025-02-27 13:35:50"
187 |   },
188 |   {
189 |     "name": "test_tree.cpython-312.pyc",
190 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_tree.cpython-312.pyc",
191 |     "size": 82690,
192 |     "created": "2025-02-27 13:36:03"
193 |   },
194 |   {
195 |     "name": "test_navigablestring.cpython-312.pyc",
196 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_navigablestring.cpython-312.pyc",
197 |     "size": 7663,
198 |     "created": "2025-02-27 13:36:03"
199 |   },
200 |   {
201 |     "name": "test_builder.cpython-312.pyc",
202 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_builder.cpython-312.pyc",
203 |     "size": 1594,
204 |     "created": "2025-02-27 13:36:04"
205 |   },
206 |   {
207 |     "name": "test_pageelement.cpython-312.pyc",
208 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_pageelement.cpython-312.pyc",
209 |     "size": 20412,
210 |     "created": "2025-02-27 13:36:04"
211 |   },
212 |   {
213 |     "name": "test_css.cpython-312.pyc",
214 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_css.cpython-312.pyc",
215 |     "size": 28521,
216 |     "created": "2025-02-27 13:36:05"
217 |   },
218 |   {
219 |     "name": "test_html5lib.cpython-312.pyc",
220 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-312.pyc",
221 |     "size": 10873,
222 |     "created": "2025-02-27 13:36:04"
223 |   },
224 |   {
225 |     "name": "test_dammit.cpython-312.pyc",
226 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_dammit.cpython-312.pyc",
227 |     "size": 17247,
228 |     "created": "2025-02-27 13:36:04"
229 |   },
230 |   {
231 |     "name": "test_builder_registry.cpython-312.pyc",
232 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-312.pyc",
233 |     "size": 7531,
234 |     "created": "2025-02-27 13:36:05"
235 |   },
236 |   {
237 |     "name": "test_tag.cpython-312.pyc",
238 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_tag.cpython-312.pyc",
239 |     "size": 14092,
240 |     "created": "2025-02-27 13:36:05"
241 |   },
242 |   {
243 |     "name": "test_element.cpython-312.pyc",
244 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_element.cpython-312.pyc",
245 |     "size": 3637,
246 |     "created": "2025-02-27 13:36:04"
247 |   },
248 |   {
249 |     "name": "test_htmlparser.cpython-312.pyc",
250 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-312.pyc",
251 |     "size": 6721,
252 |     "created": "2025-02-27 13:36:03"
253 |   },
254 |   {
255 |     "name": "test_formatter.cpython-312.pyc",
256 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_formatter.cpython-312.pyc",
257 |     "size": 4695,
258 |     "created": "2025-02-27 13:36:05"
259 |   },
260 |   {
261 |     "name": "test_soup.cpython-312.pyc",
262 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_soup.cpython-312.pyc",
263 |     "size": 28802,
264 |     "created": "2025-02-27 13:36:04"
265 |   },
266 |   {
267 |     "name": "test_lxml.cpython-312.pyc",
268 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_lxml.cpython-312.pyc",
269 |     "size": 8329,
270 |     "created": "2025-02-27 13:36:04"
271 |   },
272 |   {
273 |     "name": "test_fuzz.cpython-312.pyc",
274 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_fuzz.cpython-312.pyc",
275 |     "size": 6761,
276 |     "created": "2025-02-27 13:36:05"
277 |   },
278 |   {
279 |     "name": "test_docs.cpython-312.pyc",
280 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/__pycache__/test_docs.cpython-312.pyc",
281 |     "size": 567,
282 |     "created": "2025-02-27 13:36:04"
283 |   },
284 |   {
285 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase",
286 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase",
287 |     "size": 35,
288 |     "created": "2025-02-27 13:36:04"
289 |   },
290 |   {
291 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase",
292 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase",
293 |     "size": 12,
294 |     "created": "2025-02-27 13:36:03"
295 |   },
296 |   {
297 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase",
298 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase",
299 |     "size": 19,
300 |     "created": "2025-02-27 13:36:04"
301 |   },
302 |   {
303 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase",
304 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase",
305 |     "size": 15347,
306 |     "created": "2025-02-27 13:36:04"
307 |   },
308 |   {
309 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase",
310 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase",
311 |     "size": 3546,
312 |     "created": "2025-02-27 13:36:04"
313 |   },
314 |   {
315 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase",
316 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase",
317 |     "size": 5,
318 |     "created": "2025-02-27 13:36:04"
319 |   },
320 |   {
321 |     "name": "crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase",
322 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase",
323 |     "size": 103,
324 |     "created": "2025-02-27 13:36:05"
325 |   },
326 |   {
327 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase",
328 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase",
329 |     "size": 10380,
330 |     "created": "2025-02-27 13:36:05"
331 |   },
332 |   {
333 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase",
334 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase",
335 |     "size": 23,
336 |     "created": "2025-02-27 13:36:05"
337 |   },
338 |   {
339 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase",
340 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase",
341 |     "size": 11502,
342 |     "created": "2025-02-27 13:36:04"
343 |   },
344 |   {
345 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase",
346 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase",
347 |     "size": 51495,
348 |     "created": "2025-02-27 13:36:05"
349 |   },
350 |   {
351 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase",
352 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase",
353 |     "size": 4317,
354 |     "created": "2025-02-27 13:36:05"
355 |   },
356 |   {
357 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase",
358 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase",
359 |     "size": 124,
360 |     "created": "2025-02-27 13:36:04"
361 |   },
362 |   {
363 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase",
364 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase",
365 |     "size": 30,
366 |     "created": "2025-02-27 13:36:05"
367 |   },
368 |   {
369 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase",
370 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase",
371 |     "size": 15,
372 |     "created": "2025-02-27 13:36:03"
373 |   },
374 |   {
375 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase",
376 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase",
377 |     "size": 47,
378 |     "created": "2025-02-27 13:36:04"
379 |   },
380 |   {
381 |     "name": "clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase",
382 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase",
383 |     "size": 19469,
384 |     "created": "2025-02-27 13:36:04"
385 |   },
386 |   {
387 |     "name": "crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase",
388 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/bs4/tests/fuzz/crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase",
389 |     "size": 2607,
390 |     "created": "2025-02-27 13:36:04"
391 |   },
392 |   {
393 |     "name": "testing.py",
394 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/click/testing.py",
395 |     "size": 16084,
396 |     "created": "2025-02-27 13:35:44"
397 |   },
398 |   {
399 |     "name": "testing.cpython-312.pyc",
400 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/click/__pycache__/testing.cpython-312.pyc",
401 |     "size": 24577,
402 |     "created": "2025-02-27 13:35:50"
403 |   },
404 |   {
405 |     "name": "doctestcompare.py",
406 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/lxml/doctestcompare.py",
407 |     "size": 17731,
408 |     "created": "2025-02-27 13:35:47"
409 |   },
410 |   {
411 |     "name": "usedoctest.py",
412 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/lxml/usedoctest.py",
413 |     "size": 230,
414 |     "created": "2025-02-27 13:35:47"
415 |   },
416 |   {
417 |     "name": "usedoctest.py",
418 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/lxml/html/usedoctest.py",
419 |     "size": 249,
420 |     "created": "2025-02-27 13:35:52"
421 |   },
422 |   {
423 |     "name": "usedoctest.cpython-312.pyc",
424 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/lxml/html/__pycache__/usedoctest.cpython-312.pyc",
425 |     "size": 506,
426 |     "created": "2025-02-27 13:36:08"
427 |   },
428 |   {
429 |     "name": "usedoctest.cpython-312.pyc",
430 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/lxml/__pycache__/usedoctest.cpython-312.pyc",
431 |     "size": 482,
432 |     "created": "2025-02-27 13:35:53"
433 |   },
434 |   {
435 |     "name": "doctestcompare.cpython-312.pyc",
436 |     "path": "/Users/user/Documents/myproject/.venv/lib/python3.12/site-packages/lxml/__pycache__/doctestcompare.cpython-312.pyc",
437 |     "size": 24296,
438 |     "created": "2025-02-27 13:35:53"
439 |   }
440 | ]
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py:
--------------------------------------------------------------------------------

```python
  1 | import contextlib
  2 | import ctypes
  3 | import platform
  4 | import ssl
  5 | import typing
  6 | from ctypes import (
  7 |     CDLL,
  8 |     POINTER,
  9 |     c_bool,
 10 |     c_char_p,
 11 |     c_int32,
 12 |     c_long,
 13 |     c_uint32,
 14 |     c_ulong,
 15 |     c_void_p,
 16 | )
 17 | from ctypes.util import find_library
 18 | 
 19 | from ._ssl_constants import _set_ssl_context_verify_mode
 20 | 
 21 | _mac_version = platform.mac_ver()[0]
 22 | _mac_version_info = tuple(map(int, _mac_version.split(".")))
 23 | if _mac_version_info < (10, 8):
 24 |     raise ImportError(
 25 |         f"Only OS X 10.8 and newer are supported, not {_mac_version_info[0]}.{_mac_version_info[1]}"
 26 |     )
 27 | 
 28 | 
 29 | def _load_cdll(name: str, macos10_16_path: str) -> CDLL:
 30 |     """Loads a CDLL by name, falling back to known path on 10.16+"""
 31 |     try:
 32 |         # Big Sur is technically 11 but we use 10.16 due to the Big Sur
 33 |         # beta being labeled as 10.16.
 34 |         path: str | None
 35 |         if _mac_version_info >= (10, 16):
 36 |             path = macos10_16_path
 37 |         else:
 38 |             path = find_library(name)
 39 |         if not path:
 40 |             raise OSError  # Caught and reraised as 'ImportError'
 41 |         return CDLL(path, use_errno=True)
 42 |     except OSError:
 43 |         raise ImportError(f"The library {name} failed to load") from None
 44 | 
 45 | 
 46 | Security = _load_cdll(
 47 |     "Security", "/System/Library/Frameworks/Security.framework/Security"
 48 | )
 49 | CoreFoundation = _load_cdll(
 50 |     "CoreFoundation",
 51 |     "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation",
 52 | )
 53 | 
 54 | Boolean = c_bool
 55 | CFIndex = c_long
 56 | CFStringEncoding = c_uint32
 57 | CFData = c_void_p
 58 | CFString = c_void_p
 59 | CFArray = c_void_p
 60 | CFMutableArray = c_void_p
 61 | CFError = c_void_p
 62 | CFType = c_void_p
 63 | CFTypeID = c_ulong
 64 | CFTypeRef = POINTER(CFType)
 65 | CFAllocatorRef = c_void_p
 66 | 
 67 | OSStatus = c_int32
 68 | 
 69 | CFErrorRef = POINTER(CFError)
 70 | CFDataRef = POINTER(CFData)
 71 | CFStringRef = POINTER(CFString)
 72 | CFArrayRef = POINTER(CFArray)
 73 | CFMutableArrayRef = POINTER(CFMutableArray)
 74 | CFArrayCallBacks = c_void_p
 75 | CFOptionFlags = c_uint32
 76 | 
 77 | SecCertificateRef = POINTER(c_void_p)
 78 | SecPolicyRef = POINTER(c_void_p)
 79 | SecTrustRef = POINTER(c_void_p)
 80 | SecTrustResultType = c_uint32
 81 | SecTrustOptionFlags = c_uint32
 82 | 
 83 | try:
 84 |     Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef]
 85 |     Security.SecCertificateCreateWithData.restype = SecCertificateRef
 86 | 
 87 |     Security.SecCertificateCopyData.argtypes = [SecCertificateRef]
 88 |     Security.SecCertificateCopyData.restype = CFDataRef
 89 | 
 90 |     Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p]
 91 |     Security.SecCopyErrorMessageString.restype = CFStringRef
 92 | 
 93 |     Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef]
 94 |     Security.SecTrustSetAnchorCertificates.restype = OSStatus
 95 | 
 96 |     Security.SecTrustSetAnchorCertificatesOnly.argtypes = [SecTrustRef, Boolean]
 97 |     Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus
 98 | 
 99 |     Security.SecPolicyCreateRevocation.argtypes = [CFOptionFlags]
100 |     Security.SecPolicyCreateRevocation.restype = SecPolicyRef
101 | 
102 |     Security.SecPolicyCreateSSL.argtypes = [Boolean, CFStringRef]
103 |     Security.SecPolicyCreateSSL.restype = SecPolicyRef
104 | 
105 |     Security.SecTrustCreateWithCertificates.argtypes = [
106 |         CFTypeRef,
107 |         CFTypeRef,
108 |         POINTER(SecTrustRef),
109 |     ]
110 |     Security.SecTrustCreateWithCertificates.restype = OSStatus
111 | 
112 |     Security.SecTrustGetTrustResult.argtypes = [
113 |         SecTrustRef,
114 |         POINTER(SecTrustResultType),
115 |     ]
116 |     Security.SecTrustGetTrustResult.restype = OSStatus
117 | 
118 |     Security.SecTrustRef = SecTrustRef  # type: ignore[attr-defined]
119 |     Security.SecTrustResultType = SecTrustResultType  # type: ignore[attr-defined]
120 |     Security.OSStatus = OSStatus  # type: ignore[attr-defined]
121 | 
122 |     kSecRevocationUseAnyAvailableMethod = 3
123 |     kSecRevocationRequirePositiveResponse = 8
124 | 
125 |     CoreFoundation.CFRelease.argtypes = [CFTypeRef]
126 |     CoreFoundation.CFRelease.restype = None
127 | 
128 |     CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef]
129 |     CoreFoundation.CFGetTypeID.restype = CFTypeID
130 | 
131 |     CoreFoundation.CFStringCreateWithCString.argtypes = [
132 |         CFAllocatorRef,
133 |         c_char_p,
134 |         CFStringEncoding,
135 |     ]
136 |     CoreFoundation.CFStringCreateWithCString.restype = CFStringRef
137 | 
138 |     CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding]
139 |     CoreFoundation.CFStringGetCStringPtr.restype = c_char_p
140 | 
141 |     CoreFoundation.CFStringGetCString.argtypes = [
142 |         CFStringRef,
143 |         c_char_p,
144 |         CFIndex,
145 |         CFStringEncoding,
146 |     ]
147 |     CoreFoundation.CFStringGetCString.restype = c_bool
148 | 
149 |     CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex]
150 |     CoreFoundation.CFDataCreate.restype = CFDataRef
151 | 
152 |     CoreFoundation.CFDataGetLength.argtypes = [CFDataRef]
153 |     CoreFoundation.CFDataGetLength.restype = CFIndex
154 | 
155 |     CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef]
156 |     CoreFoundation.CFDataGetBytePtr.restype = c_void_p
157 | 
158 |     CoreFoundation.CFArrayCreate.argtypes = [
159 |         CFAllocatorRef,
160 |         POINTER(CFTypeRef),
161 |         CFIndex,
162 |         CFArrayCallBacks,
163 |     ]
164 |     CoreFoundation.CFArrayCreate.restype = CFArrayRef
165 | 
166 |     CoreFoundation.CFArrayCreateMutable.argtypes = [
167 |         CFAllocatorRef,
168 |         CFIndex,
169 |         CFArrayCallBacks,
170 |     ]
171 |     CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef
172 | 
173 |     CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p]
174 |     CoreFoundation.CFArrayAppendValue.restype = None
175 | 
176 |     CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef]
177 |     CoreFoundation.CFArrayGetCount.restype = CFIndex
178 | 
179 |     CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex]
180 |     CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p
181 | 
182 |     CoreFoundation.CFErrorGetCode.argtypes = [CFErrorRef]
183 |     CoreFoundation.CFErrorGetCode.restype = CFIndex
184 | 
185 |     CoreFoundation.CFErrorCopyDescription.argtypes = [CFErrorRef]
186 |     CoreFoundation.CFErrorCopyDescription.restype = CFStringRef
187 | 
188 |     CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll(  # type: ignore[attr-defined]
189 |         CoreFoundation, "kCFAllocatorDefault"
190 |     )
191 |     CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll(  # type: ignore[attr-defined]
192 |         CoreFoundation, "kCFTypeArrayCallBacks"
193 |     )
194 | 
195 |     CoreFoundation.CFTypeRef = CFTypeRef  # type: ignore[attr-defined]
196 |     CoreFoundation.CFArrayRef = CFArrayRef  # type: ignore[attr-defined]
197 |     CoreFoundation.CFStringRef = CFStringRef  # type: ignore[attr-defined]
198 |     CoreFoundation.CFErrorRef = CFErrorRef  # type: ignore[attr-defined]
199 | 
200 | except AttributeError:
201 |     raise ImportError("Error initializing ctypes") from None
202 | 
203 | 
204 | def _handle_osstatus(result: OSStatus, _: typing.Any, args: typing.Any) -> typing.Any:
205 |     """
206 |     Raises an error if the OSStatus value is non-zero.
207 |     """
208 |     if int(result) == 0:
209 |         return args
210 | 
211 |     # Returns a CFString which we need to transform
212 |     # into a UTF-8 Python string.
213 |     error_message_cfstring = None
214 |     try:
215 |         error_message_cfstring = Security.SecCopyErrorMessageString(result, None)
216 | 
217 |         # First step is convert the CFString into a C string pointer.
218 |         # We try the fast no-copy way first.
219 |         error_message_cfstring_c_void_p = ctypes.cast(
220 |             error_message_cfstring, ctypes.POINTER(ctypes.c_void_p)
221 |         )
222 |         message = CoreFoundation.CFStringGetCStringPtr(
223 |             error_message_cfstring_c_void_p, CFConst.kCFStringEncodingUTF8
224 |         )
225 | 
226 |         # Quoting the Apple dev docs:
227 |         #
228 |         # "A pointer to a C string or NULL if the internal
229 |         # storage of theString does not allow this to be
230 |         # returned efficiently."
231 |         #
232 |         # So we need to get our hands dirty.
233 |         if message is None:
234 |             buffer = ctypes.create_string_buffer(1024)
235 |             result = CoreFoundation.CFStringGetCString(
236 |                 error_message_cfstring_c_void_p,
237 |                 buffer,
238 |                 1024,
239 |                 CFConst.kCFStringEncodingUTF8,
240 |             )
241 |             if not result:
242 |                 raise OSError("Error copying C string from CFStringRef")
243 |             message = buffer.value
244 | 
245 |     finally:
246 |         if error_message_cfstring is not None:
247 |             CoreFoundation.CFRelease(error_message_cfstring)
248 | 
249 |     # If no message can be found for this status we come
250 |     # up with a generic one that forwards the status code.
251 |     if message is None or message == "":
252 |         message = f"SecureTransport operation returned a non-zero OSStatus: {result}"
253 | 
254 |     raise ssl.SSLError(message)
255 | 
256 | 
257 | Security.SecTrustCreateWithCertificates.errcheck = _handle_osstatus  # type: ignore[assignment]
258 | Security.SecTrustSetAnchorCertificates.errcheck = _handle_osstatus  # type: ignore[assignment]
259 | Security.SecTrustSetAnchorCertificatesOnly.errcheck = _handle_osstatus  # type: ignore[assignment]
260 | Security.SecTrustGetTrustResult.errcheck = _handle_osstatus  # type: ignore[assignment]
261 | 
262 | 
263 | class CFConst:
264 |     """CoreFoundation constants"""
265 | 
266 |     kCFStringEncodingUTF8 = CFStringEncoding(0x08000100)
267 | 
268 |     errSecIncompleteCertRevocationCheck = -67635
269 |     errSecHostNameMismatch = -67602
270 |     errSecCertificateExpired = -67818
271 |     errSecNotTrusted = -67843
272 | 
273 | 
274 | def _bytes_to_cf_data_ref(value: bytes) -> CFDataRef:  # type: ignore[valid-type]
275 |     return CoreFoundation.CFDataCreate(  # type: ignore[no-any-return]
276 |         CoreFoundation.kCFAllocatorDefault, value, len(value)
277 |     )
278 | 
279 | 
280 | def _bytes_to_cf_string(value: bytes) -> CFString:
281 |     """
282 |     Given a Python binary data, create a CFString.
283 |     The string must be CFReleased by the caller.
284 |     """
285 |     c_str = ctypes.c_char_p(value)
286 |     cf_str = CoreFoundation.CFStringCreateWithCString(
287 |         CoreFoundation.kCFAllocatorDefault,
288 |         c_str,
289 |         CFConst.kCFStringEncodingUTF8,
290 |     )
291 |     return cf_str  # type: ignore[no-any-return]
292 | 
293 | 
294 | def _cf_string_ref_to_str(cf_string_ref: CFStringRef) -> str | None:  # type: ignore[valid-type]
295 |     """
296 |     Creates a Unicode string from a CFString object. Used entirely for error
297 |     reporting.
298 |     Yes, it annoys me quite a lot that this function is this complex.
299 |     """
300 | 
301 |     string = CoreFoundation.CFStringGetCStringPtr(
302 |         cf_string_ref, CFConst.kCFStringEncodingUTF8
303 |     )
304 |     if string is None:
305 |         buffer = ctypes.create_string_buffer(1024)
306 |         result = CoreFoundation.CFStringGetCString(
307 |             cf_string_ref, buffer, 1024, CFConst.kCFStringEncodingUTF8
308 |         )
309 |         if not result:
310 |             raise OSError("Error copying C string from CFStringRef")
311 |         string = buffer.value
312 |     if string is not None:
313 |         string = string.decode("utf-8")
314 |     return string  # type: ignore[no-any-return]
315 | 
316 | 
317 | def _der_certs_to_cf_cert_array(certs: list[bytes]) -> CFMutableArrayRef:  # type: ignore[valid-type]
318 |     """Builds a CFArray of SecCertificateRefs from a list of DER-encoded certificates.
319 |     Responsibility of the caller to call CoreFoundation.CFRelease on the CFArray.
320 |     """
321 |     cf_array = CoreFoundation.CFArrayCreateMutable(
322 |         CoreFoundation.kCFAllocatorDefault,
323 |         0,
324 |         ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks),
325 |     )
326 |     if not cf_array:
327 |         raise MemoryError("Unable to allocate memory!")
328 | 
329 |     for cert_data in certs:
330 |         cf_data = None
331 |         sec_cert_ref = None
332 |         try:
333 |             cf_data = _bytes_to_cf_data_ref(cert_data)
334 |             sec_cert_ref = Security.SecCertificateCreateWithData(
335 |                 CoreFoundation.kCFAllocatorDefault, cf_data
336 |             )
337 |             CoreFoundation.CFArrayAppendValue(cf_array, sec_cert_ref)
338 |         finally:
339 |             if cf_data:
340 |                 CoreFoundation.CFRelease(cf_data)
341 |             if sec_cert_ref:
342 |                 CoreFoundation.CFRelease(sec_cert_ref)
343 | 
344 |     return cf_array  # type: ignore[no-any-return]
345 | 
346 | 
347 | @contextlib.contextmanager
348 | def _configure_context(ctx: ssl.SSLContext) -> typing.Iterator[None]:
349 |     check_hostname = ctx.check_hostname
350 |     verify_mode = ctx.verify_mode
351 |     ctx.check_hostname = False
352 |     _set_ssl_context_verify_mode(ctx, ssl.CERT_NONE)
353 |     try:
354 |         yield
355 |     finally:
356 |         ctx.check_hostname = check_hostname
357 |         _set_ssl_context_verify_mode(ctx, verify_mode)
358 | 
359 | 
360 | def _verify_peercerts_impl(
361 |     ssl_context: ssl.SSLContext,
362 |     cert_chain: list[bytes],
363 |     server_hostname: str | None = None,
364 | ) -> None:
365 |     certs = None
366 |     policies = None
367 |     trust = None
368 |     cf_error = None
369 |     try:
370 |         if server_hostname is not None:
371 |             cf_str_hostname = None
372 |             try:
373 |                 cf_str_hostname = _bytes_to_cf_string(server_hostname.encode("ascii"))
374 |                 ssl_policy = Security.SecPolicyCreateSSL(True, cf_str_hostname)
375 |             finally:
376 |                 if cf_str_hostname:
377 |                     CoreFoundation.CFRelease(cf_str_hostname)
378 |         else:
379 |             ssl_policy = Security.SecPolicyCreateSSL(True, None)
380 | 
381 |         policies = ssl_policy
382 |         if ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_CHAIN:
383 |             # Add explicit policy requiring positive revocation checks
384 |             policies = CoreFoundation.CFArrayCreateMutable(
385 |                 CoreFoundation.kCFAllocatorDefault,
386 |                 0,
387 |                 ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks),
388 |             )
389 |             CoreFoundation.CFArrayAppendValue(policies, ssl_policy)
390 |             CoreFoundation.CFRelease(ssl_policy)
391 |             revocation_policy = Security.SecPolicyCreateRevocation(
392 |                 kSecRevocationUseAnyAvailableMethod
393 |                 | kSecRevocationRequirePositiveResponse
394 |             )
395 |             CoreFoundation.CFArrayAppendValue(policies, revocation_policy)
396 |             CoreFoundation.CFRelease(revocation_policy)
397 |         elif ssl_context.verify_flags & ssl.VERIFY_CRL_CHECK_LEAF:
398 |             raise NotImplementedError("VERIFY_CRL_CHECK_LEAF not implemented for macOS")
399 | 
400 |         certs = None
401 |         try:
402 |             certs = _der_certs_to_cf_cert_array(cert_chain)
403 | 
404 |             # Now that we have certificates loaded and a SecPolicy
405 |             # we can finally create a SecTrust object!
406 |             trust = Security.SecTrustRef()
407 |             Security.SecTrustCreateWithCertificates(
408 |                 certs, policies, ctypes.byref(trust)
409 |             )
410 | 
411 |         finally:
412 |             # The certs are now being held by SecTrust so we can
413 |             # release our handles for the array.
414 |             if certs:
415 |                 CoreFoundation.CFRelease(certs)
416 | 
417 |         # If there are additional trust anchors to load we need to transform
418 |         # the list of DER-encoded certificates into a CFArray.
419 |         ctx_ca_certs_der: list[bytes] | None = ssl_context.get_ca_certs(
420 |             binary_form=True
421 |         )
422 |         if ctx_ca_certs_der:
423 |             ctx_ca_certs = None
424 |             try:
425 |                 ctx_ca_certs = _der_certs_to_cf_cert_array(ctx_ca_certs_der)
426 |                 Security.SecTrustSetAnchorCertificates(trust, ctx_ca_certs)
427 |             finally:
428 |                 if ctx_ca_certs:
429 |                     CoreFoundation.CFRelease(ctx_ca_certs)
430 | 
431 |         # We always want system certificates.
432 |         Security.SecTrustSetAnchorCertificatesOnly(trust, False)
433 | 
434 |         cf_error = CoreFoundation.CFErrorRef()
435 |         sec_trust_eval_result = Security.SecTrustEvaluateWithError(
436 |             trust, ctypes.byref(cf_error)
437 |         )
438 |         # sec_trust_eval_result is a bool (0 or 1)
439 |         # where 1 means that the certs are trusted.
440 |         if sec_trust_eval_result == 1:
441 |             is_trusted = True
442 |         elif sec_trust_eval_result == 0:
443 |             is_trusted = False
444 |         else:
445 |             raise ssl.SSLError(
446 |                 f"Unknown result from Security.SecTrustEvaluateWithError: {sec_trust_eval_result!r}"
447 |             )
448 | 
449 |         cf_error_code = 0
450 |         if not is_trusted:
451 |             cf_error_code = CoreFoundation.CFErrorGetCode(cf_error)
452 | 
453 |             # If the error is a known failure that we're
454 |             # explicitly okay with from SSLContext configuration
455 |             # we can set is_trusted accordingly.
456 |             if ssl_context.verify_mode != ssl.CERT_REQUIRED and (
457 |                 cf_error_code == CFConst.errSecNotTrusted
458 |                 or cf_error_code == CFConst.errSecCertificateExpired
459 |             ):
460 |                 is_trusted = True
461 |             elif (
462 |                 not ssl_context.check_hostname
463 |                 and cf_error_code == CFConst.errSecHostNameMismatch
464 |             ):
465 |                 is_trusted = True
466 | 
467 |         # If we're still not trusted then we start to
468 |         # construct and raise the SSLCertVerificationError.
469 |         if not is_trusted:
470 |             cf_error_string_ref = None
471 |             try:
472 |                 cf_error_string_ref = CoreFoundation.CFErrorCopyDescription(cf_error)
473 | 
474 |                 # Can this ever return 'None' if there's a CFError?
475 |                 cf_error_message = (
476 |                     _cf_string_ref_to_str(cf_error_string_ref)
477 |                     or "Certificate verification failed"
478 |                 )
479 | 
480 |                 # TODO: Not sure if we need the SecTrustResultType for anything?
481 |                 # We only care whether or not it's a success or failure for now.
482 |                 sec_trust_result_type = Security.SecTrustResultType()
483 |                 Security.SecTrustGetTrustResult(
484 |                     trust, ctypes.byref(sec_trust_result_type)
485 |                 )
486 | 
487 |                 err = ssl.SSLCertVerificationError(cf_error_message)
488 |                 err.verify_message = cf_error_message
489 |                 err.verify_code = cf_error_code
490 |                 raise err
491 |             finally:
492 |                 if cf_error_string_ref:
493 |                     CoreFoundation.CFRelease(cf_error_string_ref)
494 | 
495 |     finally:
496 |         if policies:
497 |             CoreFoundation.CFRelease(policies)
498 |         if trust:
499 |             CoreFoundation.CFRelease(trust)
500 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | This module uses ctypes to bind a whole bunch of functions and constants from
  3 | SecureTransport. The goal here is to provide the low-level API to
  4 | SecureTransport. These are essentially the C-level functions and constants, and
  5 | they're pretty gross to work with.
  6 | 
  7 | This code is a bastardised version of the code found in Will Bond's oscrypto
  8 | library. An enormous debt is owed to him for blazing this trail for us. For
  9 | that reason, this code should be considered to be covered both by urllib3's
 10 | license and by oscrypto's:
 11 | 
 12 |     Copyright (c) 2015-2016 Will Bond <[email protected]>
 13 | 
 14 |     Permission is hereby granted, free of charge, to any person obtaining a
 15 |     copy of this software and associated documentation files (the "Software"),
 16 |     to deal in the Software without restriction, including without limitation
 17 |     the rights to use, copy, modify, merge, publish, distribute, sublicense,
 18 |     and/or sell copies of the Software, and to permit persons to whom the
 19 |     Software is furnished to do so, subject to the following conditions:
 20 | 
 21 |     The above copyright notice and this permission notice shall be included in
 22 |     all copies or substantial portions of the Software.
 23 | 
 24 |     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 25 |     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 26 |     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 27 |     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 28 |     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 29 |     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 30 |     DEALINGS IN THE SOFTWARE.
 31 | """
 32 | from __future__ import absolute_import
 33 | 
 34 | import platform
 35 | from ctypes import (
 36 |     CDLL,
 37 |     CFUNCTYPE,
 38 |     POINTER,
 39 |     c_bool,
 40 |     c_byte,
 41 |     c_char_p,
 42 |     c_int32,
 43 |     c_long,
 44 |     c_size_t,
 45 |     c_uint32,
 46 |     c_ulong,
 47 |     c_void_p,
 48 | )
 49 | from ctypes.util import find_library
 50 | 
 51 | from ...packages.six import raise_from
 52 | 
 53 | if platform.system() != "Darwin":
 54 |     raise ImportError("Only macOS is supported")
 55 | 
 56 | version = platform.mac_ver()[0]
 57 | version_info = tuple(map(int, version.split(".")))
 58 | if version_info < (10, 8):
 59 |     raise OSError(
 60 |         "Only OS X 10.8 and newer are supported, not %s.%s"
 61 |         % (version_info[0], version_info[1])
 62 |     )
 63 | 
 64 | 
 65 | def load_cdll(name, macos10_16_path):
 66 |     """Loads a CDLL by name, falling back to known path on 10.16+"""
 67 |     try:
 68 |         # Big Sur is technically 11 but we use 10.16 due to the Big Sur
 69 |         # beta being labeled as 10.16.
 70 |         if version_info >= (10, 16):
 71 |             path = macos10_16_path
 72 |         else:
 73 |             path = find_library(name)
 74 |         if not path:
 75 |             raise OSError  # Caught and reraised as 'ImportError'
 76 |         return CDLL(path, use_errno=True)
 77 |     except OSError:
 78 |         raise_from(ImportError("The library %s failed to load" % name), None)
 79 | 
 80 | 
 81 | Security = load_cdll(
 82 |     "Security", "/System/Library/Frameworks/Security.framework/Security"
 83 | )
 84 | CoreFoundation = load_cdll(
 85 |     "CoreFoundation",
 86 |     "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation",
 87 | )
 88 | 
 89 | 
 90 | Boolean = c_bool
 91 | CFIndex = c_long
 92 | CFStringEncoding = c_uint32
 93 | CFData = c_void_p
 94 | CFString = c_void_p
 95 | CFArray = c_void_p
 96 | CFMutableArray = c_void_p
 97 | CFDictionary = c_void_p
 98 | CFError = c_void_p
 99 | CFType = c_void_p
100 | CFTypeID = c_ulong
101 | 
102 | CFTypeRef = POINTER(CFType)
103 | CFAllocatorRef = c_void_p
104 | 
105 | OSStatus = c_int32
106 | 
107 | CFDataRef = POINTER(CFData)
108 | CFStringRef = POINTER(CFString)
109 | CFArrayRef = POINTER(CFArray)
110 | CFMutableArrayRef = POINTER(CFMutableArray)
111 | CFDictionaryRef = POINTER(CFDictionary)
112 | CFArrayCallBacks = c_void_p
113 | CFDictionaryKeyCallBacks = c_void_p
114 | CFDictionaryValueCallBacks = c_void_p
115 | 
116 | SecCertificateRef = POINTER(c_void_p)
117 | SecExternalFormat = c_uint32
118 | SecExternalItemType = c_uint32
119 | SecIdentityRef = POINTER(c_void_p)
120 | SecItemImportExportFlags = c_uint32
121 | SecItemImportExportKeyParameters = c_void_p
122 | SecKeychainRef = POINTER(c_void_p)
123 | SSLProtocol = c_uint32
124 | SSLCipherSuite = c_uint32
125 | SSLContextRef = POINTER(c_void_p)
126 | SecTrustRef = POINTER(c_void_p)
127 | SSLConnectionRef = c_uint32
128 | SecTrustResultType = c_uint32
129 | SecTrustOptionFlags = c_uint32
130 | SSLProtocolSide = c_uint32
131 | SSLConnectionType = c_uint32
132 | SSLSessionOption = c_uint32
133 | 
134 | 
135 | try:
136 |     Security.SecItemImport.argtypes = [
137 |         CFDataRef,
138 |         CFStringRef,
139 |         POINTER(SecExternalFormat),
140 |         POINTER(SecExternalItemType),
141 |         SecItemImportExportFlags,
142 |         POINTER(SecItemImportExportKeyParameters),
143 |         SecKeychainRef,
144 |         POINTER(CFArrayRef),
145 |     ]
146 |     Security.SecItemImport.restype = OSStatus
147 | 
148 |     Security.SecCertificateGetTypeID.argtypes = []
149 |     Security.SecCertificateGetTypeID.restype = CFTypeID
150 | 
151 |     Security.SecIdentityGetTypeID.argtypes = []
152 |     Security.SecIdentityGetTypeID.restype = CFTypeID
153 | 
154 |     Security.SecKeyGetTypeID.argtypes = []
155 |     Security.SecKeyGetTypeID.restype = CFTypeID
156 | 
157 |     Security.SecCertificateCreateWithData.argtypes = [CFAllocatorRef, CFDataRef]
158 |     Security.SecCertificateCreateWithData.restype = SecCertificateRef
159 | 
160 |     Security.SecCertificateCopyData.argtypes = [SecCertificateRef]
161 |     Security.SecCertificateCopyData.restype = CFDataRef
162 | 
163 |     Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p]
164 |     Security.SecCopyErrorMessageString.restype = CFStringRef
165 | 
166 |     Security.SecIdentityCreateWithCertificate.argtypes = [
167 |         CFTypeRef,
168 |         SecCertificateRef,
169 |         POINTER(SecIdentityRef),
170 |     ]
171 |     Security.SecIdentityCreateWithCertificate.restype = OSStatus
172 | 
173 |     Security.SecKeychainCreate.argtypes = [
174 |         c_char_p,
175 |         c_uint32,
176 |         c_void_p,
177 |         Boolean,
178 |         c_void_p,
179 |         POINTER(SecKeychainRef),
180 |     ]
181 |     Security.SecKeychainCreate.restype = OSStatus
182 | 
183 |     Security.SecKeychainDelete.argtypes = [SecKeychainRef]
184 |     Security.SecKeychainDelete.restype = OSStatus
185 | 
186 |     Security.SecPKCS12Import.argtypes = [
187 |         CFDataRef,
188 |         CFDictionaryRef,
189 |         POINTER(CFArrayRef),
190 |     ]
191 |     Security.SecPKCS12Import.restype = OSStatus
192 | 
193 |     SSLReadFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, c_void_p, POINTER(c_size_t))
194 |     SSLWriteFunc = CFUNCTYPE(
195 |         OSStatus, SSLConnectionRef, POINTER(c_byte), POINTER(c_size_t)
196 |     )
197 | 
198 |     Security.SSLSetIOFuncs.argtypes = [SSLContextRef, SSLReadFunc, SSLWriteFunc]
199 |     Security.SSLSetIOFuncs.restype = OSStatus
200 | 
201 |     Security.SSLSetPeerID.argtypes = [SSLContextRef, c_char_p, c_size_t]
202 |     Security.SSLSetPeerID.restype = OSStatus
203 | 
204 |     Security.SSLSetCertificate.argtypes = [SSLContextRef, CFArrayRef]
205 |     Security.SSLSetCertificate.restype = OSStatus
206 | 
207 |     Security.SSLSetCertificateAuthorities.argtypes = [SSLContextRef, CFTypeRef, Boolean]
208 |     Security.SSLSetCertificateAuthorities.restype = OSStatus
209 | 
210 |     Security.SSLSetConnection.argtypes = [SSLContextRef, SSLConnectionRef]
211 |     Security.SSLSetConnection.restype = OSStatus
212 | 
213 |     Security.SSLSetPeerDomainName.argtypes = [SSLContextRef, c_char_p, c_size_t]
214 |     Security.SSLSetPeerDomainName.restype = OSStatus
215 | 
216 |     Security.SSLHandshake.argtypes = [SSLContextRef]
217 |     Security.SSLHandshake.restype = OSStatus
218 | 
219 |     Security.SSLRead.argtypes = [SSLContextRef, c_char_p, c_size_t, POINTER(c_size_t)]
220 |     Security.SSLRead.restype = OSStatus
221 | 
222 |     Security.SSLWrite.argtypes = [SSLContextRef, c_char_p, c_size_t, POINTER(c_size_t)]
223 |     Security.SSLWrite.restype = OSStatus
224 | 
225 |     Security.SSLClose.argtypes = [SSLContextRef]
226 |     Security.SSLClose.restype = OSStatus
227 | 
228 |     Security.SSLGetNumberSupportedCiphers.argtypes = [SSLContextRef, POINTER(c_size_t)]
229 |     Security.SSLGetNumberSupportedCiphers.restype = OSStatus
230 | 
231 |     Security.SSLGetSupportedCiphers.argtypes = [
232 |         SSLContextRef,
233 |         POINTER(SSLCipherSuite),
234 |         POINTER(c_size_t),
235 |     ]
236 |     Security.SSLGetSupportedCiphers.restype = OSStatus
237 | 
238 |     Security.SSLSetEnabledCiphers.argtypes = [
239 |         SSLContextRef,
240 |         POINTER(SSLCipherSuite),
241 |         c_size_t,
242 |     ]
243 |     Security.SSLSetEnabledCiphers.restype = OSStatus
244 | 
245 |     Security.SSLGetNumberEnabledCiphers.argtype = [SSLContextRef, POINTER(c_size_t)]
246 |     Security.SSLGetNumberEnabledCiphers.restype = OSStatus
247 | 
248 |     Security.SSLGetEnabledCiphers.argtypes = [
249 |         SSLContextRef,
250 |         POINTER(SSLCipherSuite),
251 |         POINTER(c_size_t),
252 |     ]
253 |     Security.SSLGetEnabledCiphers.restype = OSStatus
254 | 
255 |     Security.SSLGetNegotiatedCipher.argtypes = [SSLContextRef, POINTER(SSLCipherSuite)]
256 |     Security.SSLGetNegotiatedCipher.restype = OSStatus
257 | 
258 |     Security.SSLGetNegotiatedProtocolVersion.argtypes = [
259 |         SSLContextRef,
260 |         POINTER(SSLProtocol),
261 |     ]
262 |     Security.SSLGetNegotiatedProtocolVersion.restype = OSStatus
263 | 
264 |     Security.SSLCopyPeerTrust.argtypes = [SSLContextRef, POINTER(SecTrustRef)]
265 |     Security.SSLCopyPeerTrust.restype = OSStatus
266 | 
267 |     Security.SecTrustSetAnchorCertificates.argtypes = [SecTrustRef, CFArrayRef]
268 |     Security.SecTrustSetAnchorCertificates.restype = OSStatus
269 | 
270 |     Security.SecTrustSetAnchorCertificatesOnly.argstypes = [SecTrustRef, Boolean]
271 |     Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus
272 | 
273 |     Security.SecTrustEvaluate.argtypes = [SecTrustRef, POINTER(SecTrustResultType)]
274 |     Security.SecTrustEvaluate.restype = OSStatus
275 | 
276 |     Security.SecTrustGetCertificateCount.argtypes = [SecTrustRef]
277 |     Security.SecTrustGetCertificateCount.restype = CFIndex
278 | 
279 |     Security.SecTrustGetCertificateAtIndex.argtypes = [SecTrustRef, CFIndex]
280 |     Security.SecTrustGetCertificateAtIndex.restype = SecCertificateRef
281 | 
282 |     Security.SSLCreateContext.argtypes = [
283 |         CFAllocatorRef,
284 |         SSLProtocolSide,
285 |         SSLConnectionType,
286 |     ]
287 |     Security.SSLCreateContext.restype = SSLContextRef
288 | 
289 |     Security.SSLSetSessionOption.argtypes = [SSLContextRef, SSLSessionOption, Boolean]
290 |     Security.SSLSetSessionOption.restype = OSStatus
291 | 
292 |     Security.SSLSetProtocolVersionMin.argtypes = [SSLContextRef, SSLProtocol]
293 |     Security.SSLSetProtocolVersionMin.restype = OSStatus
294 | 
295 |     Security.SSLSetProtocolVersionMax.argtypes = [SSLContextRef, SSLProtocol]
296 |     Security.SSLSetProtocolVersionMax.restype = OSStatus
297 | 
298 |     try:
299 |         Security.SSLSetALPNProtocols.argtypes = [SSLContextRef, CFArrayRef]
300 |         Security.SSLSetALPNProtocols.restype = OSStatus
301 |     except AttributeError:
302 |         # Supported only in 10.12+
303 |         pass
304 | 
305 |     Security.SecCopyErrorMessageString.argtypes = [OSStatus, c_void_p]
306 |     Security.SecCopyErrorMessageString.restype = CFStringRef
307 | 
308 |     Security.SSLReadFunc = SSLReadFunc
309 |     Security.SSLWriteFunc = SSLWriteFunc
310 |     Security.SSLContextRef = SSLContextRef
311 |     Security.SSLProtocol = SSLProtocol
312 |     Security.SSLCipherSuite = SSLCipherSuite
313 |     Security.SecIdentityRef = SecIdentityRef
314 |     Security.SecKeychainRef = SecKeychainRef
315 |     Security.SecTrustRef = SecTrustRef
316 |     Security.SecTrustResultType = SecTrustResultType
317 |     Security.SecExternalFormat = SecExternalFormat
318 |     Security.OSStatus = OSStatus
319 | 
320 |     Security.kSecImportExportPassphrase = CFStringRef.in_dll(
321 |         Security, "kSecImportExportPassphrase"
322 |     )
323 |     Security.kSecImportItemIdentity = CFStringRef.in_dll(
324 |         Security, "kSecImportItemIdentity"
325 |     )
326 | 
327 |     # CoreFoundation time!
328 |     CoreFoundation.CFRetain.argtypes = [CFTypeRef]
329 |     CoreFoundation.CFRetain.restype = CFTypeRef
330 | 
331 |     CoreFoundation.CFRelease.argtypes = [CFTypeRef]
332 |     CoreFoundation.CFRelease.restype = None
333 | 
334 |     CoreFoundation.CFGetTypeID.argtypes = [CFTypeRef]
335 |     CoreFoundation.CFGetTypeID.restype = CFTypeID
336 | 
337 |     CoreFoundation.CFStringCreateWithCString.argtypes = [
338 |         CFAllocatorRef,
339 |         c_char_p,
340 |         CFStringEncoding,
341 |     ]
342 |     CoreFoundation.CFStringCreateWithCString.restype = CFStringRef
343 | 
344 |     CoreFoundation.CFStringGetCStringPtr.argtypes = [CFStringRef, CFStringEncoding]
345 |     CoreFoundation.CFStringGetCStringPtr.restype = c_char_p
346 | 
347 |     CoreFoundation.CFStringGetCString.argtypes = [
348 |         CFStringRef,
349 |         c_char_p,
350 |         CFIndex,
351 |         CFStringEncoding,
352 |     ]
353 |     CoreFoundation.CFStringGetCString.restype = c_bool
354 | 
355 |     CoreFoundation.CFDataCreate.argtypes = [CFAllocatorRef, c_char_p, CFIndex]
356 |     CoreFoundation.CFDataCreate.restype = CFDataRef
357 | 
358 |     CoreFoundation.CFDataGetLength.argtypes = [CFDataRef]
359 |     CoreFoundation.CFDataGetLength.restype = CFIndex
360 | 
361 |     CoreFoundation.CFDataGetBytePtr.argtypes = [CFDataRef]
362 |     CoreFoundation.CFDataGetBytePtr.restype = c_void_p
363 | 
364 |     CoreFoundation.CFDictionaryCreate.argtypes = [
365 |         CFAllocatorRef,
366 |         POINTER(CFTypeRef),
367 |         POINTER(CFTypeRef),
368 |         CFIndex,
369 |         CFDictionaryKeyCallBacks,
370 |         CFDictionaryValueCallBacks,
371 |     ]
372 |     CoreFoundation.CFDictionaryCreate.restype = CFDictionaryRef
373 | 
374 |     CoreFoundation.CFDictionaryGetValue.argtypes = [CFDictionaryRef, CFTypeRef]
375 |     CoreFoundation.CFDictionaryGetValue.restype = CFTypeRef
376 | 
377 |     CoreFoundation.CFArrayCreate.argtypes = [
378 |         CFAllocatorRef,
379 |         POINTER(CFTypeRef),
380 |         CFIndex,
381 |         CFArrayCallBacks,
382 |     ]
383 |     CoreFoundation.CFArrayCreate.restype = CFArrayRef
384 | 
385 |     CoreFoundation.CFArrayCreateMutable.argtypes = [
386 |         CFAllocatorRef,
387 |         CFIndex,
388 |         CFArrayCallBacks,
389 |     ]
390 |     CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef
391 | 
392 |     CoreFoundation.CFArrayAppendValue.argtypes = [CFMutableArrayRef, c_void_p]
393 |     CoreFoundation.CFArrayAppendValue.restype = None
394 | 
395 |     CoreFoundation.CFArrayGetCount.argtypes = [CFArrayRef]
396 |     CoreFoundation.CFArrayGetCount.restype = CFIndex
397 | 
398 |     CoreFoundation.CFArrayGetValueAtIndex.argtypes = [CFArrayRef, CFIndex]
399 |     CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p
400 | 
401 |     CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll(
402 |         CoreFoundation, "kCFAllocatorDefault"
403 |     )
404 |     CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll(
405 |         CoreFoundation, "kCFTypeArrayCallBacks"
406 |     )
407 |     CoreFoundation.kCFTypeDictionaryKeyCallBacks = c_void_p.in_dll(
408 |         CoreFoundation, "kCFTypeDictionaryKeyCallBacks"
409 |     )
410 |     CoreFoundation.kCFTypeDictionaryValueCallBacks = c_void_p.in_dll(
411 |         CoreFoundation, "kCFTypeDictionaryValueCallBacks"
412 |     )
413 | 
414 |     CoreFoundation.CFTypeRef = CFTypeRef
415 |     CoreFoundation.CFArrayRef = CFArrayRef
416 |     CoreFoundation.CFStringRef = CFStringRef
417 |     CoreFoundation.CFDictionaryRef = CFDictionaryRef
418 | 
419 | except (AttributeError):
420 |     raise ImportError("Error initializing ctypes")
421 | 
422 | 
423 | class CFConst(object):
424 |     """
425 |     A class object that acts as essentially a namespace for CoreFoundation
426 |     constants.
427 |     """
428 | 
429 |     kCFStringEncodingUTF8 = CFStringEncoding(0x08000100)
430 | 
431 | 
432 | class SecurityConst(object):
433 |     """
434 |     A class object that acts as essentially a namespace for Security constants.
435 |     """
436 | 
437 |     kSSLSessionOptionBreakOnServerAuth = 0
438 | 
439 |     kSSLProtocol2 = 1
440 |     kSSLProtocol3 = 2
441 |     kTLSProtocol1 = 4
442 |     kTLSProtocol11 = 7
443 |     kTLSProtocol12 = 8
444 |     # SecureTransport does not support TLS 1.3 even if there's a constant for it
445 |     kTLSProtocol13 = 10
446 |     kTLSProtocolMaxSupported = 999
447 | 
448 |     kSSLClientSide = 1
449 |     kSSLStreamType = 0
450 | 
451 |     kSecFormatPEMSequence = 10
452 | 
453 |     kSecTrustResultInvalid = 0
454 |     kSecTrustResultProceed = 1
455 |     # This gap is present on purpose: this was kSecTrustResultConfirm, which
456 |     # is deprecated.
457 |     kSecTrustResultDeny = 3
458 |     kSecTrustResultUnspecified = 4
459 |     kSecTrustResultRecoverableTrustFailure = 5
460 |     kSecTrustResultFatalTrustFailure = 6
461 |     kSecTrustResultOtherError = 7
462 | 
463 |     errSSLProtocol = -9800
464 |     errSSLWouldBlock = -9803
465 |     errSSLClosedGraceful = -9805
466 |     errSSLClosedNoNotify = -9816
467 |     errSSLClosedAbort = -9806
468 | 
469 |     errSSLXCertChainInvalid = -9807
470 |     errSSLCrypto = -9809
471 |     errSSLInternal = -9810
472 |     errSSLCertExpired = -9814
473 |     errSSLCertNotYetValid = -9815
474 |     errSSLUnknownRootCert = -9812
475 |     errSSLNoRootCert = -9813
476 |     errSSLHostNameMismatch = -9843
477 |     errSSLPeerHandshakeFail = -9824
478 |     errSSLPeerUserCancelled = -9839
479 |     errSSLWeakPeerEphemeralDHKey = -9850
480 |     errSSLServerAuthCompleted = -9841
481 |     errSSLRecordOverflow = -9847
482 | 
483 |     errSecVerifyFailed = -67808
484 |     errSecNoTrustSettings = -25263
485 |     errSecItemNotFound = -25300
486 |     errSecInvalidTrustSettings = -25262
487 | 
488 |     # Cipher suites. We only pick the ones our default cipher string allows.
489 |     # Source: https://developer.apple.com/documentation/security/1550981-ssl_cipher_suite_values
490 |     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C
491 |     TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030
492 |     TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B
493 |     TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F
494 |     TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA9
495 |     TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA8
496 |     TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F
497 |     TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E
498 |     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024
499 |     TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028
500 |     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A
501 |     TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014
502 |     TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B
503 |     TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039
504 |     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023
505 |     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027
506 |     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009
507 |     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013
508 |     TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067
509 |     TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033
510 |     TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D
511 |     TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C
512 |     TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D
513 |     TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C
514 |     TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035
515 |     TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F
516 |     TLS_AES_128_GCM_SHA256 = 0x1301
517 |     TLS_AES_256_GCM_SHA384 = 0x1302
518 |     TLS_AES_128_CCM_8_SHA256 = 0x1305
519 |     TLS_AES_128_CCM_SHA256 = 0x1304
520 | 
```
Page 59/168FirstPrevNextLast