From fc476c74c50cb04a519a14611adb002965e30c55 Mon Sep 17 00:00:00 2001 From: Federico Poni Date: Mon, 1 Jul 2024 17:54:02 +0200 Subject: [PATCH] updated clean --- bin/Activate.ps1 | 247 - bin/activate | 70 - bin/activate.csh | 27 - bin/activate.fish | 69 - bin/markdown_py | 8 - bin/pip | 8 - bin/pip3 | 8 - bin/pip3.12 | 8 - bin/python | 1 - bin/python3 | 1 - bin/python3.12 | 1 - .../Jinja2-3.1.3.dist-info/INSTALLER | 1 - .../Jinja2-3.1.3.dist-info/LICENSE.rst | 28 - .../Jinja2-3.1.3.dist-info/METADATA | 105 - .../Jinja2-3.1.3.dist-info/RECORD | 59 - .../Jinja2-3.1.3.dist-info/REQUESTED | 0 .../Jinja2-3.1.3.dist-info/WHEEL | 5 - .../Jinja2-3.1.3.dist-info/entry_points.txt | 2 - .../Jinja2-3.1.3.dist-info/top_level.txt | 1 - .../Markdown-3.6.dist-info/INSTALLER | 1 - .../Markdown-3.6.dist-info/LICENSE.md | 30 - .../Markdown-3.6.dist-info/METADATA | 146 - .../Markdown-3.6.dist-info/RECORD | 75 - .../Markdown-3.6.dist-info/REQUESTED | 0 .../Markdown-3.6.dist-info/WHEEL | 5 - .../Markdown-3.6.dist-info/entry_points.txt | 22 - .../Markdown-3.6.dist-info/top_level.txt | 1 - .../MarkupSafe-2.1.5.dist-info/INSTALLER | 1 - .../MarkupSafe-2.1.5.dist-info/LICENSE.rst | 28 - .../MarkupSafe-2.1.5.dist-info/METADATA | 93 - .../MarkupSafe-2.1.5.dist-info/RECORD | 14 - .../MarkupSafe-2.1.5.dist-info/WHEEL | 5 - .../MarkupSafe-2.1.5.dist-info/top_level.txt | 1 - .../Wand-0.6.13.dist-info/INSTALLER | 1 - .../Wand-0.6.13.dist-info/LICENSE | 20 - .../Wand-0.6.13.dist-info/METADATA | 128 - .../Wand-0.6.13.dist-info/RECORD | 53 - .../Wand-0.6.13.dist-info/REQUESTED | 0 .../site-packages/Wand-0.6.13.dist-info/WHEEL | 6 - .../Wand-0.6.13.dist-info/top_level.txt | 1 - .../fpdf-1.7.2.dist-info/INSTALLER | 1 - .../fpdf-1.7.2.dist-info/METADATA | 27 - .../site-packages/fpdf-1.7.2.dist-info/RECORD | 22 - .../fpdf-1.7.2.dist-info/REQUESTED | 0 .../site-packages/fpdf-1.7.2.dist-info/WHEEL | 6 - .../fpdf-1.7.2.dist-info/top_level.txt | 1 - lib/python3.12/site-packages/fpdf/__init__.py | 16 - .../fpdf/__pycache__/__init__.cpython-312.pyc | Bin 757 -> 0 bytes .../fpdf/__pycache__/fonts.cpython-312.pyc | Bin 62930 -> 0 bytes .../fpdf/__pycache__/fpdf.cpython-312.pyc | Bin 96813 -> 0 bytes .../fpdf/__pycache__/html.cpython-312.pyc | Bin 23873 -> 0 bytes .../fpdf/__pycache__/php.cpython-312.pyc | Bin 2617 -> 0 bytes .../fpdf/__pycache__/py3k.cpython-312.pyc | Bin 2336 -> 0 bytes .../fpdf/__pycache__/template.cpython-312.pyc | Bin 13002 -> 0 bytes .../fpdf/__pycache__/ttfonts.cpython-312.pyc | Bin 40378 -> 0 bytes lib/python3.12/site-packages/fpdf/fonts.py | 156 - lib/python3.12/site-packages/fpdf/fpdf.py | 2000 --- lib/python3.12/site-packages/fpdf/html.py | 402 - lib/python3.12/site-packages/fpdf/php.py | 54 - lib/python3.12/site-packages/fpdf/py3k.py | 75 - lib/python3.12/site-packages/fpdf/template.py | 226 - lib/python3.12/site-packages/fpdf/ttfonts.py | 1067 -- .../site-packages/jinja2/__init__.py | 37 - .../__pycache__/__init__.cpython-312.pyc | Bin 1644 -> 0 bytes .../__pycache__/_identifier.cpython-312.pyc | Bin 2125 -> 0 bytes .../__pycache__/async_utils.cpython-312.pyc | Bin 4079 -> 0 bytes .../__pycache__/bccache.cpython-312.pyc | Bin 19330 -> 0 bytes .../__pycache__/compiler.cpython-312.pyc | Bin 102400 -> 0 bytes .../__pycache__/constants.cpython-312.pyc | Bin 1547 -> 0 bytes .../jinja2/__pycache__/debug.cpython-312.pyc | Bin 6572 -> 0 bytes .../__pycache__/defaults.cpython-312.pyc | Bin 1597 -> 0 bytes .../__pycache__/environment.cpython-312.pyc | Bin 76611 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 7711 -> 0 bytes .../jinja2/__pycache__/ext.cpython-312.pyc | Bin 41903 -> 0 bytes .../__pycache__/filters.cpython-312.pyc | Bin 70802 -> 0 bytes .../__pycache__/idtracking.cpython-312.pyc | Bin 19217 -> 0 bytes .../jinja2/__pycache__/lexer.cpython-312.pyc | Bin 32033 -> 0 bytes .../__pycache__/loaders.cpython-312.pyc | Bin 31115 -> 0 bytes .../jinja2/__pycache__/meta.cpython-312.pyc | Bin 5481 -> 0 bytes .../__pycache__/nativetypes.cpython-312.pyc | Bin 7002 -> 0 bytes .../jinja2/__pycache__/nodes.cpython-312.pyc | Bin 58259 -> 0 bytes .../__pycache__/optimizer.cpython-312.pyc | Bin 2680 -> 0 bytes .../jinja2/__pycache__/parser.cpython-312.pyc | Bin 60545 -> 0 bytes .../__pycache__/runtime.cpython-312.pyc | Bin 48440 -> 0 bytes .../__pycache__/sandbox.cpython-312.pyc | Bin 17771 -> 0 bytes .../jinja2/__pycache__/tests.cpython-312.pyc | Bin 9006 -> 0 bytes .../jinja2/__pycache__/utils.cpython-312.pyc | Bin 34444 -> 0 bytes .../__pycache__/visitor.cpython-312.pyc | Bin 5367 -> 0 bytes .../site-packages/jinja2/_identifier.py | 6 - .../site-packages/jinja2/async_utils.py | 84 - .../site-packages/jinja2/bccache.py | 406 - .../site-packages/jinja2/compiler.py | 1956 --- .../site-packages/jinja2/constants.py | 20 - lib/python3.12/site-packages/jinja2/debug.py | 191 - .../site-packages/jinja2/defaults.py | 48 - .../site-packages/jinja2/environment.py | 1667 --- .../site-packages/jinja2/exceptions.py | 166 - lib/python3.12/site-packages/jinja2/ext.py | 869 -- .../site-packages/jinja2/filters.py | 1854 --- .../site-packages/jinja2/idtracking.py | 318 - lib/python3.12/site-packages/jinja2/lexer.py | 866 -- .../site-packages/jinja2/loaders.py | 661 - lib/python3.12/site-packages/jinja2/meta.py | 111 - .../site-packages/jinja2/nativetypes.py | 130 - lib/python3.12/site-packages/jinja2/nodes.py | 1204 -- .../site-packages/jinja2/optimizer.py | 47 - lib/python3.12/site-packages/jinja2/parser.py | 1034 -- lib/python3.12/site-packages/jinja2/py.typed | 0 .../site-packages/jinja2/runtime.py | 1051 -- .../site-packages/jinja2/sandbox.py | 428 - lib/python3.12/site-packages/jinja2/tests.py | 255 - lib/python3.12/site-packages/jinja2/utils.py | 755 -- .../site-packages/jinja2/visitor.py | 92 - .../site-packages/markdown/__init__.py | 48 - .../site-packages/markdown/__main__.py | 151 - .../site-packages/markdown/__meta__.py | 51 - .../__pycache__/__init__.cpython-312.pyc | Bin 1174 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 5449 -> 0 bytes .../__pycache__/__meta__.cpython-312.pyc | Bin 1122 -> 0 bytes .../__pycache__/blockparser.cpython-312.pyc | Bin 6410 -> 0 bytes .../blockprocessors.cpython-312.pyc | Bin 30374 -> 0 bytes .../markdown/__pycache__/core.cpython-312.pyc | Bin 22413 -> 0 bytes .../__pycache__/htmlparser.cpython-312.pyc | Bin 16619 -> 0 bytes .../inlinepatterns.cpython-312.pyc | Bin 45275 -> 0 bytes .../postprocessors.cpython-312.pyc | Bin 6527 -> 0 bytes .../__pycache__/preprocessors.cpython-312.pyc | Bin 4014 -> 0 bytes .../__pycache__/serializers.cpython-312.pyc | Bin 6337 -> 0 bytes .../__pycache__/test_tools.cpython-312.pyc | Bin 10636 -> 0 bytes .../treeprocessors.cpython-312.pyc | Bin 20978 -> 0 bytes .../markdown/__pycache__/util.cpython-312.pyc | Bin 16075 -> 0 bytes .../site-packages/markdown/blockparser.py | 160 - .../site-packages/markdown/blockprocessors.py | 641 - lib/python3.12/site-packages/markdown/core.py | 503 - .../markdown/extensions/__init__.py | 145 - .../__pycache__/__init__.cpython-312.pyc | Bin 5253 -> 0 bytes .../__pycache__/abbr.cpython-312.pyc | Bin 5025 -> 0 bytes .../__pycache__/admonition.cpython-312.pyc | Bin 6897 -> 0 bytes .../__pycache__/attr_list.cpython-312.pyc | Bin 9258 -> 0 bytes .../__pycache__/codehilite.cpython-312.pyc | Bin 14637 -> 0 bytes .../__pycache__/def_list.cpython-312.pyc | Bin 5400 -> 0 bytes .../__pycache__/extra.cpython-312.pyc | Bin 2372 -> 0 bytes .../__pycache__/fenced_code.cpython-312.pyc | Bin 8786 -> 0 bytes .../__pycache__/footnotes.cpython-312.pyc | Bin 21624 -> 0 bytes .../__pycache__/legacy_attrs.cpython-312.pyc | Bin 3582 -> 0 bytes .../__pycache__/legacy_em.cpython-312.pyc | Bin 2510 -> 0 bytes .../__pycache__/md_in_html.cpython-312.pyc | Bin 18604 -> 0 bytes .../__pycache__/meta.cpython-312.pyc | Bin 3600 -> 0 bytes .../__pycache__/nl2br.cpython-312.pyc | Bin 1285 -> 0 bytes .../__pycache__/sane_lists.cpython-312.pyc | Bin 2895 -> 0 bytes .../__pycache__/smarty.cpython-312.pyc | Bin 8708 -> 0 bytes .../__pycache__/tables.cpython-312.pyc | Bin 10235 -> 0 bytes .../__pycache__/toc.cpython-312.pyc | Bin 22236 -> 0 bytes .../__pycache__/wikilinks.cpython-312.pyc | Bin 4796 -> 0 bytes .../site-packages/markdown/extensions/abbr.py | 94 - .../markdown/extensions/admonition.py | 183 - .../markdown/extensions/attr_list.py | 203 - .../markdown/extensions/codehilite.py | 347 - .../markdown/extensions/def_list.py | 119 - .../markdown/extensions/extra.py | 66 - .../markdown/extensions/fenced_code.py | 193 - .../markdown/extensions/footnotes.py | 418 - .../markdown/extensions/legacy_attrs.py | 71 - .../markdown/extensions/legacy_em.py | 52 - .../markdown/extensions/md_in_html.py | 376 - .../site-packages/markdown/extensions/meta.py | 86 - .../markdown/extensions/nl2br.py | 41 - .../markdown/extensions/sane_lists.py | 69 - .../markdown/extensions/smarty.py | 277 - .../markdown/extensions/tables.py | 248 - .../site-packages/markdown/extensions/toc.py | 488 - .../markdown/extensions/wikilinks.py | 97 - .../site-packages/markdown/htmlparser.py | 347 - .../site-packages/markdown/inlinepatterns.py | 989 -- .../site-packages/markdown/postprocessors.py | 143 - .../site-packages/markdown/preprocessors.py | 91 - .../site-packages/markdown/serializers.py | 194 - .../site-packages/markdown/test_tools.py | 224 - .../site-packages/markdown/treeprocessors.py | 476 - lib/python3.12/site-packages/markdown/util.py | 408 - .../site-packages/markupsafe/__init__.py | 332 - .../__pycache__/__init__.cpython-312.pyc | Bin 17433 -> 0 bytes .../__pycache__/_native.cpython-312.pyc | Bin 2536 -> 0 bytes .../site-packages/markupsafe/_native.py | 63 - .../site-packages/markupsafe/_speedups.c | 320 - .../_speedups.cpython-312-darwin.so | Bin 35208 -> 0 bytes .../site-packages/markupsafe/_speedups.pyi | 9 - .../site-packages/markupsafe/py.typed | 0 .../pip-24.0.dist-info/AUTHORS.txt | 760 -- .../pip-24.0.dist-info/INSTALLER | 1 - .../pip-24.0.dist-info/LICENSE.txt | 20 - .../site-packages/pip-24.0.dist-info/METADATA | 88 - .../site-packages/pip-24.0.dist-info/RECORD | 1024 -- .../pip-24.0.dist-info/REQUESTED | 0 .../site-packages/pip-24.0.dist-info/WHEEL | 5 - .../pip-24.0.dist-info/entry_points.txt | 4 - .../pip-24.0.dist-info/top_level.txt | 1 - lib/python3.12/site-packages/pip/__init__.py | 13 - lib/python3.12/site-packages/pip/__main__.py | 24 - .../site-packages/pip/__pip-runner__.py | 50 - .../pip/__pycache__/__init__.cpython-312.pyc | Bin 681 -> 0 bytes .../pip/__pycache__/__main__.cpython-312.pyc | Bin 837 -> 0 bytes .../__pip-runner__.cpython-312.pyc | Bin 2195 -> 0 bytes .../site-packages/pip/_internal/__init__.py | 18 - .../__pycache__/__init__.cpython-312.pyc | Bin 783 -> 0 bytes .../__pycache__/build_env.cpython-312.pyc | Bin 14287 -> 0 bytes .../__pycache__/cache.cpython-312.pyc | Bin 12656 -> 0 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 17653 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 33271 -> 0 bytes .../__pycache__/main.cpython-312.pyc | Bin 666 -> 0 bytes .../__pycache__/pyproject.cpython-312.pyc | Bin 4961 -> 0 bytes .../self_outdated_check.cpython-312.pyc | Bin 10548 -> 0 bytes .../__pycache__/wheel_builder.cpython-312.pyc | Bin 13621 -> 0 bytes .../site-packages/pip/_internal/build_env.py | 311 - .../site-packages/pip/_internal/cache.py | 290 - .../pip/_internal/cli/__init__.py | 4 - .../cli/__pycache__/__init__.cpython-312.pyc | Bin 274 -> 0 bytes .../autocompletion.cpython-312.pyc | Bin 8461 -> 0 bytes .../__pycache__/base_command.cpython-312.pyc | Bin 10445 -> 0 bytes .../__pycache__/cmdoptions.cpython-312.pyc | Bin 30370 -> 0 bytes .../command_context.cpython-312.pyc | Bin 1771 -> 0 bytes .../cli/__pycache__/main.cpython-312.pyc | Bin 2294 -> 0 bytes .../__pycache__/main_parser.cpython-312.pyc | Bin 4901 -> 0 bytes .../cli/__pycache__/parser.cpython-312.pyc | Bin 14998 -> 0 bytes .../__pycache__/progress_bars.cpython-312.pyc | Bin 2613 -> 0 bytes .../__pycache__/req_command.cpython-312.pyc | Bin 18833 -> 0 bytes .../cli/__pycache__/spinners.cpython-312.pyc | Bin 7830 -> 0 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 371 -> 0 bytes .../pip/_internal/cli/autocompletion.py | 172 - .../pip/_internal/cli/base_command.py | 236 - .../pip/_internal/cli/cmdoptions.py | 1074 -- .../pip/_internal/cli/command_context.py | 27 - .../site-packages/pip/_internal/cli/main.py | 79 - .../pip/_internal/cli/main_parser.py | 134 - .../site-packages/pip/_internal/cli/parser.py | 294 - .../pip/_internal/cli/progress_bars.py | 68 - .../pip/_internal/cli/req_command.py | 505 - .../pip/_internal/cli/spinners.py | 159 - .../pip/_internal/cli/status_codes.py | 6 - .../pip/_internal/commands/__init__.py | 132 - .../__pycache__/__init__.cpython-312.pyc | Bin 3998 -> 0 bytes .../__pycache__/cache.cpython-312.pyc | Bin 9707 -> 0 bytes .../__pycache__/check.cpython-312.pyc | Bin 2086 -> 0 bytes .../__pycache__/completion.cpython-312.pyc | Bin 5188 -> 0 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 13208 -> 0 bytes .../__pycache__/debug.cpython-312.pyc | Bin 10154 -> 0 bytes .../__pycache__/download.cpython-312.pyc | Bin 7582 -> 0 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 4352 -> 0 bytes .../commands/__pycache__/hash.cpython-312.pyc | Bin 2979 -> 0 bytes .../commands/__pycache__/help.cpython-312.pyc | Bin 1669 -> 0 bytes .../__pycache__/index.cpython-312.pyc | Bin 6716 -> 0 bytes .../__pycache__/inspect.cpython-312.pyc | Bin 3971 -> 0 bytes .../__pycache__/install.cpython-312.pyc | Bin 28901 -> 0 bytes .../commands/__pycache__/list.cpython-312.pyc | Bin 15396 -> 0 bytes .../__pycache__/search.cpython-312.pyc | Bin 7614 -> 0 bytes .../commands/__pycache__/show.cpython-312.pyc | Bin 9724 -> 0 bytes .../__pycache__/uninstall.cpython-312.pyc | Bin 4722 -> 0 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 8946 -> 0 bytes .../pip/_internal/commands/cache.py | 225 - .../pip/_internal/commands/check.py | 54 - .../pip/_internal/commands/completion.py | 130 - .../pip/_internal/commands/configuration.py | 280 - .../pip/_internal/commands/debug.py | 201 - .../pip/_internal/commands/download.py | 147 - .../pip/_internal/commands/freeze.py | 108 - .../pip/_internal/commands/hash.py | 59 - .../pip/_internal/commands/help.py | 41 - .../pip/_internal/commands/index.py | 139 - .../pip/_internal/commands/inspect.py | 92 - .../pip/_internal/commands/install.py | 774 -- .../pip/_internal/commands/list.py | 368 - .../pip/_internal/commands/search.py | 174 - .../pip/_internal/commands/show.py | 189 - .../pip/_internal/commands/uninstall.py | 113 - .../pip/_internal/commands/wheel.py | 183 - .../pip/_internal/configuration.py | 383 - .../pip/_internal/distributions/__init__.py | 21 - .../__pycache__/__init__.cpython-312.pyc | Bin 937 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 2858 -> 0 bytes .../__pycache__/installed.cpython-312.pyc | Bin 1693 -> 0 bytes .../__pycache__/sdist.cpython-312.pyc | Bin 8470 -> 0 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 2239 -> 0 bytes .../pip/_internal/distributions/base.py | 51 - .../pip/_internal/distributions/installed.py | 29 - .../pip/_internal/distributions/sdist.py | 156 - .../pip/_internal/distributions/wheel.py | 40 - .../site-packages/pip/_internal/exceptions.py | 728 -- .../pip/_internal/index/__init__.py | 2 - .../__pycache__/__init__.cpython-312.pyc | Bin 228 -> 0 bytes .../__pycache__/collector.cpython-312.pyc | Bin 21879 -> 0 bytes .../package_finder.cpython-312.pyc | Bin 40716 -> 0 bytes .../index/__pycache__/sources.cpython-312.pyc | Bin 12600 -> 0 bytes .../pip/_internal/index/collector.py | 507 - .../pip/_internal/index/package_finder.py | 1027 -- .../pip/_internal/index/sources.py | 285 - .../pip/_internal/locations/__init__.py | 467 - .../__pycache__/__init__.cpython-312.pyc | Bin 16772 -> 0 bytes .../__pycache__/_distutils.cpython-312.pyc | Bin 6844 -> 0 bytes .../__pycache__/_sysconfig.cpython-312.pyc | Bin 8007 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 3777 -> 0 bytes .../pip/_internal/locations/_distutils.py | 172 - .../pip/_internal/locations/_sysconfig.py | 213 - .../pip/_internal/locations/base.py | 81 - .../site-packages/pip/_internal/main.py | 12 - .../pip/_internal/metadata/__init__.py | 128 - .../__pycache__/__init__.cpython-312.pyc | Bin 5878 -> 0 bytes .../__pycache__/_json.cpython-312.pyc | Bin 2871 -> 0 bytes .../metadata/__pycache__/base.cpython-312.pyc | Bin 35708 -> 0 bytes .../__pycache__/pkg_resources.cpython-312.pyc | Bin 15783 -> 0 bytes .../pip/_internal/metadata/_json.py | 84 - .../pip/_internal/metadata/base.py | 702 - .../_internal/metadata/importlib/__init__.py | 6 - .../__pycache__/__init__.cpython-312.pyc | Bin 354 -> 0 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 3329 -> 0 bytes .../__pycache__/_dists.cpython-312.pyc | Bin 13421 -> 0 bytes .../__pycache__/_envs.cpython-312.pyc | Bin 11176 -> 0 bytes .../_internal/metadata/importlib/_compat.py | 55 - .../_internal/metadata/importlib/_dists.py | 227 - .../pip/_internal/metadata/importlib/_envs.py | 189 - .../pip/_internal/metadata/pkg_resources.py | 278 - .../pip/_internal/models/__init__.py | 2 - .../__pycache__/__init__.cpython-312.pyc | Bin 262 -> 0 bytes .../__pycache__/candidate.cpython-312.pyc | Bin 1901 -> 0 bytes .../__pycache__/direct_url.cpython-312.pyc | Bin 11192 -> 0 bytes .../format_control.cpython-312.pyc | Bin 4223 -> 0 bytes .../models/__pycache__/index.cpython-312.pyc | Bin 1690 -> 0 bytes .../installation_report.cpython-312.pyc | Bin 2265 -> 0 bytes .../models/__pycache__/link.cpython-312.pyc | Bin 25996 -> 0 bytes .../models/__pycache__/scheme.cpython-312.pyc | Bin 1165 -> 0 bytes .../__pycache__/search_scope.cpython-312.pyc | Bin 5084 -> 0 bytes .../selection_prefs.cpython-312.pyc | Bin 1847 -> 0 bytes .../__pycache__/target_python.cpython-312.pyc | Bin 4950 -> 0 bytes .../models/__pycache__/wheel.cpython-312.pyc | Bin 5776 -> 0 bytes .../pip/_internal/models/candidate.py | 30 - .../pip/_internal/models/direct_url.py | 235 - .../pip/_internal/models/format_control.py | 78 - .../pip/_internal/models/index.py | 28 - .../_internal/models/installation_report.py | 56 - .../pip/_internal/models/link.py | 579 - .../pip/_internal/models/scheme.py | 31 - .../pip/_internal/models/search_scope.py | 132 - .../pip/_internal/models/selection_prefs.py | 51 - .../pip/_internal/models/target_python.py | 122 - .../pip/_internal/models/wheel.py | 92 - .../pip/_internal/network/__init__.py | 2 - .../__pycache__/__init__.cpython-312.pyc | Bin 250 -> 0 bytes .../network/__pycache__/auth.cpython-312.pyc | Bin 21984 -> 0 bytes .../network/__pycache__/cache.cpython-312.pyc | Bin 6511 -> 0 bytes .../__pycache__/download.cpython-312.pyc | Bin 8543 -> 0 bytes .../__pycache__/lazy_wheel.cpython-312.pyc | Bin 11656 -> 0 bytes .../__pycache__/session.cpython-312.pyc | Bin 18770 -> 0 bytes .../network/__pycache__/utils.cpython-312.pyc | Bin 2249 -> 0 bytes .../__pycache__/xmlrpc.cpython-312.pyc | Bin 2940 -> 0 bytes .../pip/_internal/network/auth.py | 561 - .../pip/_internal/network/cache.py | 106 - .../pip/_internal/network/download.py | 186 - .../pip/_internal/network/lazy_wheel.py | 210 - .../pip/_internal/network/session.py | 520 - .../pip/_internal/network/utils.py | 96 - .../pip/_internal/network/xmlrpc.py | 62 - .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 193 -> 0 bytes .../__pycache__/check.cpython-312.pyc | Bin 7575 -> 0 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 10110 -> 0 bytes .../__pycache__/prepare.cpython-312.pyc | Bin 25699 -> 0 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 199 -> 0 bytes .../__pycache__/build_tracker.cpython-312.pyc | Bin 7810 -> 0 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 1876 -> 0 bytes .../metadata_editable.cpython-312.pyc | Bin 1910 -> 0 bytes .../metadata_legacy.cpython-312.pyc | Bin 3061 -> 0 bytes .../build/__pycache__/wheel.cpython-312.pyc | Bin 1677 -> 0 bytes .../wheel_editable.cpython-312.pyc | Bin 2018 -> 0 bytes .../__pycache__/wheel_legacy.cpython-312.pyc | Bin 3925 -> 0 bytes .../operations/build/build_tracker.py | 139 - .../_internal/operations/build/metadata.py | 39 - .../operations/build/metadata_editable.py | 41 - .../operations/build/metadata_legacy.py | 74 - .../pip/_internal/operations/build/wheel.py | 37 - .../operations/build/wheel_editable.py | 46 - .../operations/build/wheel_legacy.py | 102 - .../pip/_internal/operations/check.py | 187 - .../pip/_internal/operations/freeze.py | 255 - .../_internal/operations/install/__init__.py | 2 - .../__pycache__/__init__.cpython-312.pyc | Bin 262 -> 0 bytes .../editable_legacy.cpython-312.pyc | Bin 1813 -> 0 bytes .../install/__pycache__/wheel.cpython-312.pyc | Bin 33849 -> 0 bytes .../operations/install/editable_legacy.py | 46 - .../pip/_internal/operations/install/wheel.py | 734 -- .../pip/_internal/operations/prepare.py | 730 -- .../site-packages/pip/_internal/pyproject.py | 179 - .../pip/_internal/req/__init__.py | 92 - .../req/__pycache__/__init__.cpython-312.pyc | Bin 3737 -> 0 bytes .../__pycache__/constructors.cpython-312.pyc | Bin 21577 -> 0 bytes .../req/__pycache__/req_file.cpython-312.pyc | Bin 21448 -> 0 bytes .../__pycache__/req_install.cpython-312.pyc | Bin 38322 -> 0 bytes .../req/__pycache__/req_set.cpython-312.pyc | Bin 7208 -> 0 bytes .../__pycache__/req_uninstall.cpython-312.pyc | Bin 32965 -> 0 bytes .../pip/_internal/req/constructors.py | 576 - .../pip/_internal/req/req_file.py | 554 - .../pip/_internal/req/req_install.py | 923 -- .../pip/_internal/req/req_set.py | 119 - .../pip/_internal/req/req_uninstall.py | 649 - .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 193 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 1181 -> 0 bytes .../pip/_internal/resolution/base.py | 20 - .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 200 -> 0 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 22420 -> 0 bytes .../_internal/resolution/legacy/resolver.py | 598 - .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 204 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 8333 -> 0 bytes .../__pycache__/candidates.cpython-312.pyc | Bin 30373 -> 0 bytes .../__pycache__/factory.cpython-312.pyc | Bin 32097 -> 0 bytes .../found_candidates.cpython-312.pyc | Bin 6204 -> 0 bytes .../__pycache__/provider.cpython-312.pyc | Bin 10374 -> 0 bytes .../__pycache__/reporter.cpython-312.pyc | Bin 4931 -> 0 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 11409 -> 0 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 12339 -> 0 bytes .../_internal/resolution/resolvelib/base.py | 141 - .../resolution/resolvelib/candidates.py | 597 - .../resolution/resolvelib/factory.py | 812 -- .../resolution/resolvelib/found_candidates.py | 155 - .../resolution/resolvelib/provider.py | 255 - .../resolution/resolvelib/reporter.py | 80 - .../resolution/resolvelib/requirements.py | 166 - .../resolution/resolvelib/resolver.py | 317 - .../pip/_internal/self_outdated_check.py | 248 - .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 188 -> 0 bytes .../__pycache__/_jaraco_text.cpython-312.pyc | Bin 4529 -> 0 bytes .../utils/__pycache__/_log.cpython-312.pyc | Bin 1859 -> 0 bytes .../utils/__pycache__/appdirs.cpython-312.pyc | Bin 2403 -> 0 bytes .../utils/__pycache__/compat.cpython-312.pyc | Bin 2206 -> 0 bytes .../compatibility_tags.cpython-312.pyc | Bin 5554 -> 0 bytes .../__pycache__/datetime.cpython-312.pyc | Bin 677 -> 0 bytes .../__pycache__/deprecation.cpython-312.pyc | Bin 4179 -> 0 bytes .../direct_url_helpers.cpython-312.pyc | Bin 3546 -> 0 bytes .../__pycache__/egg_link.cpython-312.pyc | Bin 3219 -> 0 bytes .../__pycache__/encoding.cpython-312.pyc | Bin 2148 -> 0 bytes .../__pycache__/entrypoints.cpython-312.pyc | Bin 3986 -> 0 bytes .../__pycache__/filesystem.cpython-312.pyc | Bin 7448 -> 0 bytes .../__pycache__/filetypes.cpython-312.pyc | Bin 1157 -> 0 bytes .../utils/__pycache__/glibc.cpython-312.pyc | Bin 2335 -> 0 bytes .../utils/__pycache__/hashes.cpython-312.pyc | Bin 7547 -> 0 bytes .../utils/__pycache__/logging.cpython-312.pyc | Bin 13542 -> 0 bytes .../utils/__pycache__/misc.cpython-312.pyc | Bin 34114 -> 0 bytes .../utils/__pycache__/models.cpython-312.pyc | Bin 2705 -> 0 bytes .../__pycache__/packaging.cpython-312.pyc | Bin 2576 -> 0 bytes .../setuptools_build.cpython-312.pyc | Bin 4540 -> 0 bytes .../__pycache__/subprocess.cpython-312.pyc | Bin 8703 -> 0 bytes .../__pycache__/temp_dir.cpython-312.pyc | Bin 12049 -> 0 bytes .../__pycache__/unpacking.cpython-312.pyc | Bin 11099 -> 0 bytes .../utils/__pycache__/urls.cpython-312.pyc | Bin 2393 -> 0 bytes .../__pycache__/virtualenv.cpython-312.pyc | Bin 4473 -> 0 bytes .../utils/__pycache__/wheel.cpython-312.pyc | Bin 5919 -> 0 bytes .../pip/_internal/utils/_jaraco_text.py | 109 - .../site-packages/pip/_internal/utils/_log.py | 38 - .../pip/_internal/utils/appdirs.py | 52 - .../pip/_internal/utils/compat.py | 63 - .../pip/_internal/utils/compatibility_tags.py | 165 - .../pip/_internal/utils/datetime.py | 11 - .../pip/_internal/utils/deprecation.py | 120 - .../pip/_internal/utils/direct_url_helpers.py | 87 - .../pip/_internal/utils/egg_link.py | 80 - .../pip/_internal/utils/encoding.py | 36 - .../pip/_internal/utils/entrypoints.py | 84 - .../pip/_internal/utils/filesystem.py | 153 - .../pip/_internal/utils/filetypes.py | 27 - .../pip/_internal/utils/glibc.py | 88 - .../pip/_internal/utils/hashes.py | 151 - .../pip/_internal/utils/logging.py | 348 - .../site-packages/pip/_internal/utils/misc.py | 783 -- .../pip/_internal/utils/models.py | 39 - .../pip/_internal/utils/packaging.py | 57 - .../pip/_internal/utils/setuptools_build.py | 146 - .../pip/_internal/utils/subprocess.py | 260 - .../pip/_internal/utils/temp_dir.py | 296 - .../pip/_internal/utils/unpacking.py | 257 - .../site-packages/pip/_internal/utils/urls.py | 62 - .../pip/_internal/utils/virtualenv.py | 104 - .../pip/_internal/utils/wheel.py | 134 - .../pip/_internal/vcs/__init__.py | 15 - .../vcs/__pycache__/__init__.cpython-312.pyc | Bin 527 -> 0 bytes .../vcs/__pycache__/bazaar.cpython-312.pyc | Bin 5019 -> 0 bytes .../vcs/__pycache__/git.cpython-312.pyc | Bin 18983 -> 0 bytes .../vcs/__pycache__/mercurial.cpython-312.pyc | Bin 7608 -> 0 bytes .../__pycache__/subversion.cpython-312.pyc | Bin 12474 -> 0 bytes .../versioncontrol.cpython-312.pyc | Bin 29006 -> 0 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 112 - .../site-packages/pip/_internal/vcs/git.py | 526 - .../pip/_internal/vcs/mercurial.py | 163 - .../pip/_internal/vcs/subversion.py | 324 - .../pip/_internal/vcs/versioncontrol.py | 705 - .../pip/_internal/wheel_builder.py | 354 - .../site-packages/pip/_vendor/__init__.py | 121 - .../__pycache__/__init__.cpython-312.pyc | Bin 4689 -> 0 bytes .../_vendor/__pycache__/six.cpython-312.pyc | Bin 41266 -> 0 bytes .../typing_extensions.cpython-312.pyc | Bin 122034 -> 0 bytes .../pip/_vendor/cachecontrol/__init__.py | 28 - .../__pycache__/__init__.cpython-312.pyc | Bin 899 -> 0 bytes .../__pycache__/_cmd.cpython-312.pyc | Bin 2643 -> 0 bytes .../__pycache__/adapter.cpython-312.pyc | Bin 6458 -> 0 bytes .../__pycache__/cache.cpython-312.pyc | Bin 3806 -> 0 bytes .../__pycache__/controller.cpython-312.pyc | Bin 16140 -> 0 bytes .../__pycache__/filewrapper.cpython-312.pyc | Bin 4344 -> 0 bytes .../__pycache__/heuristics.cpython-312.pyc | Bin 6688 -> 0 bytes .../__pycache__/serialize.cpython-312.pyc | Bin 6402 -> 0 bytes .../__pycache__/wrapper.cpython-312.pyc | Bin 1671 -> 0 bytes .../pip/_vendor/cachecontrol/_cmd.py | 70 - .../pip/_vendor/cachecontrol/adapter.py | 161 - .../pip/_vendor/cachecontrol/cache.py | 74 - .../_vendor/cachecontrol/caches/__init__.py | 8 - .../__pycache__/__init__.cpython-312.pyc | Bin 432 -> 0 bytes .../__pycache__/file_cache.cpython-312.pyc | Bin 7707 -> 0 bytes .../__pycache__/redis_cache.cpython-312.pyc | Bin 2735 -> 0 bytes .../_vendor/cachecontrol/caches/file_cache.py | 181 - .../cachecontrol/caches/redis_cache.py | 48 - .../pip/_vendor/cachecontrol/controller.py | 494 - .../pip/_vendor/cachecontrol/filewrapper.py | 119 - .../pip/_vendor/cachecontrol/heuristics.py | 154 - .../pip/_vendor/cachecontrol/py.typed | 0 .../pip/_vendor/cachecontrol/serialize.py | 206 - .../pip/_vendor/cachecontrol/wrapper.py | 43 - .../pip/_vendor/certifi/__init__.py | 4 - .../pip/_vendor/certifi/__main__.py | 12 - .../__pycache__/__init__.cpython-312.pyc | Bin 315 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 642 -> 0 bytes .../certifi/__pycache__/core.cpython-312.pyc | Bin 2846 -> 0 bytes .../pip/_vendor/certifi/cacert.pem | 4635 ------- .../site-packages/pip/_vendor/certifi/core.py | 108 - .../pip/_vendor/certifi/py.typed | 0 .../pip/_vendor/chardet/__init__.py | 115 - .../__pycache__/__init__.cpython-312.pyc | Bin 4565 -> 0 bytes .../__pycache__/big5freq.cpython-312.pyc | Bin 27196 -> 0 bytes .../__pycache__/big5prober.cpython-312.pyc | Bin 1384 -> 0 bytes .../chardistribution.cpython-312.pyc | Bin 9635 -> 0 bytes .../charsetgroupprober.cpython-312.pyc | Bin 4119 -> 0 bytes .../__pycache__/charsetprober.cpython-312.pyc | Bin 5015 -> 0 bytes .../codingstatemachine.cpython-312.pyc | Bin 3875 -> 0 bytes .../codingstatemachinedict.cpython-312.pyc | Bin 786 -> 0 bytes .../__pycache__/cp949prober.cpython-312.pyc | Bin 1393 -> 0 bytes .../chardet/__pycache__/enums.cpython-312.pyc | Bin 2993 -> 0 bytes .../__pycache__/escprober.cpython-312.pyc | Bin 4563 -> 0 bytes .../chardet/__pycache__/escsm.cpython-312.pyc | Bin 15307 -> 0 bytes .../__pycache__/eucjpprober.cpython-312.pyc | Bin 4371 -> 0 bytes .../__pycache__/euckrfreq.cpython-312.pyc | Bin 12079 -> 0 bytes .../__pycache__/euckrprober.cpython-312.pyc | Bin 1387 -> 0 bytes .../__pycache__/euctwfreq.cpython-312.pyc | Bin 27201 -> 0 bytes .../__pycache__/euctwprober.cpython-312.pyc | Bin 1387 -> 0 bytes .../__pycache__/gb2312freq.cpython-312.pyc | Bin 19123 -> 0 bytes .../__pycache__/gb2312prober.cpython-312.pyc | Bin 1400 -> 0 bytes .../__pycache__/hebrewprober.cpython-312.pyc | Bin 5807 -> 0 bytes .../__pycache__/jisfreq.cpython-312.pyc | Bin 22152 -> 0 bytes .../__pycache__/johabfreq.cpython-312.pyc | Bin 83000 -> 0 bytes .../__pycache__/johabprober.cpython-312.pyc | Bin 1391 -> 0 bytes .../__pycache__/jpcntx.cpython-312.pyc | Bin 39546 -> 0 bytes .../langbulgarianmodel.cpython-312.pyc | Bin 83119 -> 0 bytes .../langgreekmodel.cpython-312.pyc | Bin 76985 -> 0 bytes .../langhebrewmodel.cpython-312.pyc | Bin 77496 -> 0 bytes .../langhungarianmodel.cpython-312.pyc | Bin 83073 -> 0 bytes .../langrussianmodel.cpython-312.pyc | Bin 105248 -> 0 bytes .../__pycache__/langthaimodel.cpython-312.pyc | Bin 77674 -> 0 bytes .../langturkishmodel.cpython-312.pyc | Bin 77513 -> 0 bytes .../__pycache__/latin1prober.cpython-312.pyc | Bin 6999 -> 0 bytes .../macromanprober.cpython-312.pyc | Bin 7179 -> 0 bytes .../mbcharsetprober.cpython-312.pyc | Bin 3891 -> 0 bytes .../mbcsgroupprober.cpython-312.pyc | Bin 1585 -> 0 bytes .../__pycache__/mbcssm.cpython-312.pyc | Bin 38642 -> 0 bytes .../__pycache__/resultdict.cpython-312.pyc | Bin 629 -> 0 bytes .../sbcharsetprober.cpython-312.pyc | Bin 6384 -> 0 bytes .../sbcsgroupprober.cpython-312.pyc | Bin 2354 -> 0 bytes .../__pycache__/sjisprober.cpython-312.pyc | Bin 4483 -> 0 bytes .../universaldetector.cpython-312.pyc | Bin 12263 -> 0 bytes .../__pycache__/utf1632prober.cpython-312.pyc | Bin 9976 -> 0 bytes .../__pycache__/utf8prober.cpython-312.pyc | Bin 3172 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 485 -> 0 bytes .../pip/_vendor/chardet/big5freq.py | 386 - .../pip/_vendor/chardet/big5prober.py | 47 - .../pip/_vendor/chardet/chardistribution.py | 261 - .../pip/_vendor/chardet/charsetgroupprober.py | 106 - .../pip/_vendor/chardet/charsetprober.py | 147 - .../pip/_vendor/chardet/cli/__init__.py | 0 .../cli/__pycache__/__init__.cpython-312.pyc | Bin 192 -> 0 bytes .../__pycache__/chardetect.cpython-312.pyc | Bin 4009 -> 0 bytes .../pip/_vendor/chardet/cli/chardetect.py | 112 - .../pip/_vendor/chardet/codingstatemachine.py | 90 - .../_vendor/chardet/codingstatemachinedict.py | 19 - .../pip/_vendor/chardet/cp949prober.py | 49 - .../pip/_vendor/chardet/enums.py | 85 - .../pip/_vendor/chardet/escprober.py | 102 - .../pip/_vendor/chardet/escsm.py | 261 - .../pip/_vendor/chardet/eucjpprober.py | 102 - .../pip/_vendor/chardet/euckrfreq.py | 196 - .../pip/_vendor/chardet/euckrprober.py | 47 - .../pip/_vendor/chardet/euctwfreq.py | 388 - .../pip/_vendor/chardet/euctwprober.py | 47 - .../pip/_vendor/chardet/gb2312freq.py | 284 - .../pip/_vendor/chardet/gb2312prober.py | 47 - .../pip/_vendor/chardet/hebrewprober.py | 316 - .../pip/_vendor/chardet/jisfreq.py | 325 - .../pip/_vendor/chardet/johabfreq.py | 2382 ---- .../pip/_vendor/chardet/johabprober.py | 47 - .../pip/_vendor/chardet/jpcntx.py | 238 - .../pip/_vendor/chardet/langbulgarianmodel.py | 4649 ------- .../pip/_vendor/chardet/langgreekmodel.py | 4397 ------- .../pip/_vendor/chardet/langhebrewmodel.py | 4380 ------- .../pip/_vendor/chardet/langhungarianmodel.py | 4649 ------- .../pip/_vendor/chardet/langrussianmodel.py | 5725 -------- .../pip/_vendor/chardet/langthaimodel.py | 4380 ------- .../pip/_vendor/chardet/langturkishmodel.py | 4380 ------- .../pip/_vendor/chardet/latin1prober.py | 147 - .../pip/_vendor/chardet/macromanprober.py | 162 - .../pip/_vendor/chardet/mbcharsetprober.py | 95 - .../pip/_vendor/chardet/mbcsgroupprober.py | 57 - .../pip/_vendor/chardet/mbcssm.py | 661 - .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 197 -> 0 bytes .../__pycache__/languages.cpython-312.pyc | Bin 9752 -> 0 bytes .../pip/_vendor/chardet/metadata/languages.py | 352 - .../pip/_vendor/chardet/py.typed | 0 .../pip/_vendor/chardet/resultdict.py | 16 - .../pip/_vendor/chardet/sbcharsetprober.py | 162 - .../pip/_vendor/chardet/sbcsgroupprober.py | 88 - .../pip/_vendor/chardet/sjisprober.py | 105 - .../pip/_vendor/chardet/universaldetector.py | 362 - .../pip/_vendor/chardet/utf1632prober.py | 225 - .../pip/_vendor/chardet/utf8prober.py | 82 - .../pip/_vendor/chardet/version.py | 9 - .../pip/_vendor/colorama/__init__.py | 7 - .../__pycache__/__init__.cpython-312.pyc | Bin 489 -> 0 bytes .../colorama/__pycache__/ansi.cpython-312.pyc | Bin 3947 -> 0 bytes .../__pycache__/ansitowin32.cpython-312.pyc | Bin 16418 -> 0 bytes .../__pycache__/initialise.cpython-312.pyc | Bin 3547 -> 0 bytes .../__pycache__/win32.cpython-312.pyc | Bin 8123 -> 0 bytes .../__pycache__/winterm.cpython-312.pyc | Bin 9085 -> 0 bytes .../pip/_vendor/colorama/ansi.py | 102 - .../pip/_vendor/colorama/ansitowin32.py | 277 - .../pip/_vendor/colorama/initialise.py | 121 - .../pip/_vendor/colorama/tests/__init__.py | 1 - .../__pycache__/__init__.cpython-312.pyc | Bin 195 -> 0 bytes .../__pycache__/ansi_test.cpython-312.pyc | Bin 5464 -> 0 bytes .../ansitowin32_test.cpython-312.pyc | Bin 18100 -> 0 bytes .../initialise_test.cpython-312.pyc | Bin 11745 -> 0 bytes .../__pycache__/isatty_test.cpython-312.pyc | Bin 4901 -> 0 bytes .../tests/__pycache__/utils.cpython-312.pyc | Bin 2485 -> 0 bytes .../__pycache__/winterm_test.cpython-312.pyc | Bin 6609 -> 0 bytes .../pip/_vendor/colorama/tests/ansi_test.py | 76 - .../colorama/tests/ansitowin32_test.py | 294 - .../_vendor/colorama/tests/initialise_test.py | 189 - .../pip/_vendor/colorama/tests/isatty_test.py | 57 - .../pip/_vendor/colorama/tests/utils.py | 49 - .../_vendor/colorama/tests/winterm_test.py | 131 - .../pip/_vendor/colorama/win32.py | 180 - .../pip/_vendor/colorama/winterm.py | 195 - .../pip/_vendor/distlib/__init__.py | 33 - .../__pycache__/__init__.cpython-312.pyc | Bin 1266 -> 0 bytes .../__pycache__/compat.cpython-312.pyc | Bin 45599 -> 0 bytes .../__pycache__/database.cpython-312.pyc | Bin 66024 -> 0 bytes .../distlib/__pycache__/index.cpython-312.pyc | Bin 24363 -> 0 bytes .../__pycache__/locators.cpython-312.pyc | Bin 60152 -> 0 bytes .../__pycache__/manifest.cpython-312.pyc | Bin 15113 -> 0 bytes .../__pycache__/markers.cpython-312.pyc | Bin 7676 -> 0 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 41790 -> 0 bytes .../__pycache__/resources.cpython-312.pyc | Bin 17322 -> 0 bytes .../__pycache__/scripts.cpython-312.pyc | Bin 19577 -> 0 bytes .../distlib/__pycache__/util.cpython-312.pyc | Bin 88213 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 30360 -> 0 bytes .../distlib/__pycache__/wheel.cpython-312.pyc | Bin 51856 -> 0 bytes .../pip/_vendor/distlib/compat.py | 1138 -- .../pip/_vendor/distlib/database.py | 1359 -- .../pip/_vendor/distlib/index.py | 508 - .../pip/_vendor/distlib/locators.py | 1303 -- .../pip/_vendor/distlib/manifest.py | 384 - .../pip/_vendor/distlib/markers.py | 167 - .../pip/_vendor/distlib/metadata.py | 1068 -- .../pip/_vendor/distlib/resources.py | 358 - .../pip/_vendor/distlib/scripts.py | 452 - .../site-packages/pip/_vendor/distlib/t32.exe | Bin 97792 -> 0 bytes .../pip/_vendor/distlib/t64-arm.exe | Bin 182784 -> 0 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 108032 -> 0 bytes .../site-packages/pip/_vendor/distlib/util.py | 2025 --- .../pip/_vendor/distlib/version.py | 751 -- .../site-packages/pip/_vendor/distlib/w32.exe | Bin 91648 -> 0 bytes .../pip/_vendor/distlib/w64-arm.exe | Bin 168448 -> 0 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 101888 -> 0 bytes .../pip/_vendor/distlib/wheel.py | 1099 -- .../pip/_vendor/distro/__init__.py | 54 - .../pip/_vendor/distro/__main__.py | 4 - .../__pycache__/__init__.cpython-312.pyc | Bin 957 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 289 -> 0 bytes .../distro/__pycache__/distro.cpython-312.pyc | Bin 53749 -> 0 bytes .../pip/_vendor/distro/distro.py | 1399 -- .../site-packages/pip/_vendor/distro/py.typed | 0 .../pip/_vendor/idna/__init__.py | 44 - .../idna/__pycache__/__init__.cpython-312.pyc | Bin 878 -> 0 bytes .../idna/__pycache__/codec.cpython-312.pyc | Bin 4630 -> 0 bytes .../idna/__pycache__/compat.cpython-312.pyc | Bin 884 -> 0 bytes .../idna/__pycache__/core.cpython-312.pyc | Bin 16279 -> 0 bytes .../idna/__pycache__/idnadata.cpython-312.pyc | Bin 38379 -> 0 bytes .../__pycache__/intranges.cpython-312.pyc | Bin 2635 -> 0 bytes .../__pycache__/package_data.cpython-312.pyc | Bin 213 -> 0 bytes .../__pycache__/uts46data.cpython-312.pyc | Bin 158867 -> 0 bytes .../site-packages/pip/_vendor/idna/codec.py | 112 - .../site-packages/pip/_vendor/idna/compat.py | 13 - .../site-packages/pip/_vendor/idna/core.py | 400 - .../pip/_vendor/idna/idnadata.py | 2151 --- .../pip/_vendor/idna/intranges.py | 54 - .../pip/_vendor/idna/package_data.py | 2 - .../site-packages/pip/_vendor/idna/py.typed | 0 .../pip/_vendor/idna/uts46data.py | 8600 ------------ .../pip/_vendor/msgpack/__init__.py | 57 - .../__pycache__/__init__.cpython-312.pyc | Bin 1828 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 2022 -> 0 bytes .../msgpack/__pycache__/ext.cpython-312.pyc | Bin 8665 -> 0 bytes .../__pycache__/fallback.cpython-312.pyc | Bin 43559 -> 0 bytes .../pip/_vendor/msgpack/exceptions.py | 48 - .../site-packages/pip/_vendor/msgpack/ext.py | 193 - .../pip/_vendor/msgpack/fallback.py | 1010 -- .../pip/_vendor/packaging/__about__.py | 26 - .../pip/_vendor/packaging/__init__.py | 25 - .../__pycache__/__about__.cpython-312.pyc | Bin 627 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 463 -> 0 bytes .../__pycache__/_manylinux.cpython-312.pyc | Bin 12070 -> 0 bytes .../__pycache__/_musllinux.cpython-312.pyc | Bin 6904 -> 0 bytes .../__pycache__/_structures.cpython-312.pyc | Bin 3238 -> 0 bytes .../__pycache__/markers.cpython-312.pyc | Bin 14046 -> 0 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 6943 -> 0 bytes .../__pycache__/specifiers.cpython-312.pyc | Bin 31244 -> 0 bytes .../__pycache__/tags.cpython-312.pyc | Bin 18953 -> 0 bytes .../__pycache__/utils.cpython-312.pyc | Bin 5865 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 19936 -> 0 bytes .../pip/_vendor/packaging/_manylinux.py | 301 - .../pip/_vendor/packaging/_musllinux.py | 136 - .../pip/_vendor/packaging/_structures.py | 61 - .../pip/_vendor/packaging/markers.py | 304 - .../pip/_vendor/packaging/py.typed | 0 .../pip/_vendor/packaging/requirements.py | 146 - .../pip/_vendor/packaging/specifiers.py | 802 -- .../pip/_vendor/packaging/tags.py | 487 - .../pip/_vendor/packaging/utils.py | 136 - .../pip/_vendor/packaging/version.py | 504 - .../pip/_vendor/pkg_resources/__init__.py | 3361 ----- .../__pycache__/__init__.cpython-312.pyc | Bin 146471 -> 0 bytes .../pip/_vendor/platformdirs/__init__.py | 566 - .../pip/_vendor/platformdirs/__main__.py | 53 - .../__pycache__/__init__.cpython-312.pyc | Bin 18026 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 1943 -> 0 bytes .../__pycache__/android.cpython-312.pyc | Bin 9441 -> 0 bytes .../__pycache__/api.cpython-312.pyc | Bin 9669 -> 0 bytes .../__pycache__/macos.cpython-312.pyc | Bin 5634 -> 0 bytes .../__pycache__/unix.cpython-312.pyc | Bin 12438 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 308 -> 0 bytes .../__pycache__/windows.cpython-312.pyc | Bin 12996 -> 0 bytes .../pip/_vendor/platformdirs/android.py | 210 - .../pip/_vendor/platformdirs/api.py | 223 - .../pip/_vendor/platformdirs/macos.py | 91 - .../pip/_vendor/platformdirs/py.typed | 0 .../pip/_vendor/platformdirs/unix.py | 223 - .../pip/_vendor/platformdirs/version.py | 4 - .../pip/_vendor/platformdirs/windows.py | 255 - .../pip/_vendor/pygments/__init__.py | 82 - .../pip/_vendor/pygments/__main__.py | 17 - .../__pycache__/__init__.cpython-312.pyc | Bin 3486 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 732 -> 0 bytes .../__pycache__/cmdline.cpython-312.pyc | Bin 26603 -> 0 bytes .../__pycache__/console.cpython-312.pyc | Bin 2624 -> 0 bytes .../__pycache__/filter.cpython-312.pyc | Bin 3230 -> 0 bytes .../__pycache__/formatter.cpython-312.pyc | Bin 4567 -> 0 bytes .../__pycache__/lexer.cpython-312.pyc | Bin 38298 -> 0 bytes .../__pycache__/modeline.cpython-312.pyc | Bin 1566 -> 0 bytes .../__pycache__/plugin.cpython-312.pyc | Bin 3394 -> 0 bytes .../__pycache__/regexopt.cpython-312.pyc | Bin 4079 -> 0 bytes .../__pycache__/scanner.cpython-312.pyc | Bin 4754 -> 0 bytes .../__pycache__/sphinxext.cpython-312.pyc | Bin 11044 -> 0 bytes .../__pycache__/style.cpython-312.pyc | Bin 6670 -> 0 bytes .../__pycache__/token.cpython-312.pyc | Bin 8140 -> 0 bytes .../__pycache__/unistring.cpython-312.pyc | Bin 32986 -> 0 bytes .../pygments/__pycache__/util.cpython-312.pyc | Bin 13979 -> 0 bytes .../pip/_vendor/pygments/cmdline.py | 668 - .../pip/_vendor/pygments/console.py | 70 - .../pip/_vendor/pygments/filter.py | 71 - .../pip/_vendor/pygments/filters/__init__.py | 940 -- .../__pycache__/__init__.cpython-312.pyc | Bin 37934 -> 0 bytes .../pip/_vendor/pygments/formatter.py | 124 - .../_vendor/pygments/formatters/__init__.py | 158 - .../__pycache__/__init__.cpython-312.pyc | Bin 6924 -> 0 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 4213 -> 0 bytes .../__pycache__/bbcode.cpython-312.pyc | Bin 4192 -> 0 bytes .../__pycache__/groff.cpython-312.pyc | Bin 7262 -> 0 bytes .../__pycache__/html.cpython-312.pyc | Bin 40570 -> 0 bytes .../__pycache__/img.cpython-312.pyc | Bin 27041 -> 0 bytes .../__pycache__/irc.cpython-312.pyc | Bin 6063 -> 0 bytes .../__pycache__/latex.cpython-312.pyc | Bin 19952 -> 0 bytes .../__pycache__/other.cpython-312.pyc | Bin 6882 -> 0 bytes .../__pycache__/pangomarkup.cpython-312.pyc | Bin 2928 -> 0 bytes .../__pycache__/rtf.cpython-312.pyc | Bin 6124 -> 0 bytes .../__pycache__/svg.cpython-312.pyc | Bin 9064 -> 0 bytes .../__pycache__/terminal.cpython-312.pyc | Bin 5827 -> 0 bytes .../__pycache__/terminal256.cpython-312.pyc | Bin 15155 -> 0 bytes .../_vendor/pygments/formatters/_mapping.py | 23 - .../pip/_vendor/pygments/formatters/bbcode.py | 108 - .../pip/_vendor/pygments/formatters/groff.py | 170 - .../pip/_vendor/pygments/formatters/html.py | 989 -- .../pip/_vendor/pygments/formatters/img.py | 645 - .../pip/_vendor/pygments/formatters/irc.py | 154 - .../pip/_vendor/pygments/formatters/latex.py | 521 - .../pip/_vendor/pygments/formatters/other.py | 161 - .../pygments/formatters/pangomarkup.py | 83 - .../pip/_vendor/pygments/formatters/rtf.py | 146 - .../pip/_vendor/pygments/formatters/svg.py | 188 - .../_vendor/pygments/formatters/terminal.py | 127 - .../pygments/formatters/terminal256.py | 338 - .../pip/_vendor/pygments/lexer.py | 943 -- .../pip/_vendor/pygments/lexers/__init__.py | 362 - .../__pycache__/__init__.cpython-312.pyc | Bin 14650 -> 0 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 64402 -> 0 bytes .../lexers/__pycache__/python.cpython-312.pyc | Bin 42637 -> 0 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 559 - .../pip/_vendor/pygments/lexers/python.py | 1198 -- .../pip/_vendor/pygments/modeline.py | 43 - .../pip/_vendor/pygments/plugin.py | 88 - .../pip/_vendor/pygments/regexopt.py | 91 - .../pip/_vendor/pygments/scanner.py | 104 - .../pip/_vendor/pygments/sphinxext.py | 217 - .../pip/_vendor/pygments/style.py | 197 - .../pip/_vendor/pygments/styles/__init__.py | 103 - .../__pycache__/__init__.cpython-312.pyc | Bin 4446 -> 0 bytes .../pip/_vendor/pygments/token.py | 213 - .../pip/_vendor/pygments/unistring.py | 153 - .../pip/_vendor/pygments/util.py | 330 - .../pip/_vendor/pyparsing/__init__.py | 322 - .../__pycache__/__init__.cpython-312.pyc | Bin 7909 -> 0 bytes .../__pycache__/actions.cpython-312.pyc | Bin 8393 -> 0 bytes .../__pycache__/common.cpython-312.pyc | Bin 13412 -> 0 bytes .../__pycache__/core.cpython-312.pyc | Bin 267706 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 12992 -> 0 bytes .../__pycache__/helpers.cpython-312.pyc | Bin 48499 -> 0 bytes .../__pycache__/results.cpython-312.pyc | Bin 34108 -> 0 bytes .../__pycache__/testing.cpython-312.pyc | Bin 17186 -> 0 bytes .../__pycache__/unicode.cpython-312.pyc | Bin 13182 -> 0 bytes .../__pycache__/util.cpython-312.pyc | Bin 14902 -> 0 bytes .../pip/_vendor/pyparsing/actions.py | 217 - .../pip/_vendor/pyparsing/common.py | 432 - .../pip/_vendor/pyparsing/core.py | 6115 --------- .../pip/_vendor/pyparsing/diagram/__init__.py | 656 - .../__pycache__/__init__.cpython-312.pyc | Bin 26811 -> 0 bytes .../pip/_vendor/pyparsing/exceptions.py | 299 - .../pip/_vendor/pyparsing/helpers.py | 1100 -- .../pip/_vendor/pyparsing/py.typed | 0 .../pip/_vendor/pyparsing/results.py | 796 -- .../pip/_vendor/pyparsing/testing.py | 331 - .../pip/_vendor/pyparsing/unicode.py | 361 - .../pip/_vendor/pyparsing/util.py | 284 - .../pip/_vendor/pyproject_hooks/__init__.py | 23 - .../__pycache__/__init__.cpython-312.pyc | Bin 611 -> 0 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 372 -> 0 bytes .../__pycache__/_impl.cpython-312.pyc | Bin 14723 -> 0 bytes .../pip/_vendor/pyproject_hooks/_compat.py | 8 - .../pip/_vendor/pyproject_hooks/_impl.py | 330 - .../pyproject_hooks/_in_process/__init__.py | 18 - .../__pycache__/__init__.cpython-312.pyc | Bin 1078 -> 0 bytes .../__pycache__/_in_process.cpython-312.pyc | Bin 14395 -> 0 bytes .../_in_process/_in_process.py | 353 - .../pip/_vendor/requests/__init__.py | 182 - .../__pycache__/__init__.cpython-312.pyc | Bin 5444 -> 0 bytes .../__pycache__/__version__.cpython-312.pyc | Bin 582 -> 0 bytes .../_internal_utils.cpython-312.pyc | Bin 2019 -> 0 bytes .../__pycache__/adapters.cpython-312.pyc | Bin 21278 -> 0 bytes .../requests/__pycache__/api.cpython-312.pyc | Bin 7202 -> 0 bytes .../requests/__pycache__/auth.cpython-312.pyc | Bin 13921 -> 0 bytes .../__pycache__/certs.cpython-312.pyc | Bin 920 -> 0 bytes .../__pycache__/compat.cpython-312.pyc | Bin 1505 -> 0 bytes .../__pycache__/cookies.cpython-312.pyc | Bin 25244 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 7045 -> 0 bytes .../requests/__pycache__/help.cpython-312.pyc | Bin 4310 -> 0 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 1050 -> 0 bytes .../__pycache__/models.cpython-312.pyc | Bin 35446 -> 0 bytes .../__pycache__/packages.cpython-312.pyc | Bin 770 -> 0 bytes .../__pycache__/sessions.cpython-312.pyc | Bin 27755 -> 0 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 5957 -> 0 bytes .../__pycache__/structures.cpython-312.pyc | Bin 5615 -> 0 bytes .../__pycache__/utils.cpython-312.pyc | Bin 36267 -> 0 bytes .../pip/_vendor/requests/__version__.py | 14 - .../pip/_vendor/requests/_internal_utils.py | 50 - .../pip/_vendor/requests/adapters.py | 538 - .../site-packages/pip/_vendor/requests/api.py | 157 - .../pip/_vendor/requests/auth.py | 315 - .../pip/_vendor/requests/certs.py | 24 - .../pip/_vendor/requests/compat.py | 67 - .../pip/_vendor/requests/cookies.py | 561 - .../pip/_vendor/requests/exceptions.py | 141 - .../pip/_vendor/requests/help.py | 131 - .../pip/_vendor/requests/hooks.py | 33 - .../pip/_vendor/requests/models.py | 1034 -- .../pip/_vendor/requests/packages.py | 16 - .../pip/_vendor/requests/sessions.py | 833 -- .../pip/_vendor/requests/status_codes.py | 128 - .../pip/_vendor/requests/structures.py | 99 - .../pip/_vendor/requests/utils.py | 1094 -- .../pip/_vendor/resolvelib/__init__.py | 26 - .../__pycache__/__init__.cpython-312.pyc | Bin 632 -> 0 bytes .../__pycache__/providers.cpython-312.pyc | Bin 6849 -> 0 bytes .../__pycache__/reporters.cpython-312.pyc | Bin 2652 -> 0 bytes .../__pycache__/resolvers.cpython-312.pyc | Bin 25895 -> 0 bytes .../__pycache__/structs.cpython-312.pyc | Bin 10504 -> 0 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 198 -> 0 bytes .../collections_abc.cpython-312.pyc | Bin 418 -> 0 bytes .../resolvelib/compat/collections_abc.py | 6 - .../pip/_vendor/resolvelib/providers.py | 133 - .../pip/_vendor/resolvelib/py.typed | 0 .../pip/_vendor/resolvelib/reporters.py | 43 - .../pip/_vendor/resolvelib/resolvers.py | 547 - .../pip/_vendor/resolvelib/structs.py | 170 - .../pip/_vendor/rich/__init__.py | 177 - .../pip/_vendor/rich/__main__.py | 274 - .../rich/__pycache__/__init__.cpython-312.pyc | Bin 7013 -> 0 bytes .../rich/__pycache__/__main__.cpython-312.pyc | Bin 10302 -> 0 bytes .../__pycache__/_cell_widths.cpython-312.pyc | Bin 7819 -> 0 bytes .../__pycache__/_emoji_codes.cpython-312.pyc | Bin 205974 -> 0 bytes .../_emoji_replace.cpython-312.pyc | Bin 1727 -> 0 bytes .../_export_format.cpython-312.pyc | Bin 2319 -> 0 bytes .../__pycache__/_extension.cpython-312.pyc | Bin 535 -> 0 bytes .../rich/__pycache__/_fileno.cpython-312.pyc | Bin 853 -> 0 bytes .../rich/__pycache__/_inspect.cpython-312.pyc | Bin 12075 -> 0 bytes .../__pycache__/_log_render.cpython-312.pyc | Bin 4145 -> 0 bytes .../rich/__pycache__/_loop.cpython-312.pyc | Bin 1883 -> 0 bytes .../__pycache__/_null_file.cpython-312.pyc | Bin 3618 -> 0 bytes .../__pycache__/_palettes.cpython-312.pyc | Bin 5158 -> 0 bytes .../rich/__pycache__/_pick.cpython-312.pyc | Bin 722 -> 0 bytes .../rich/__pycache__/_ratio.cpython-312.pyc | Bin 6575 -> 0 bytes .../__pycache__/_spinners.cpython-312.pyc | Bin 13177 -> 0 bytes .../rich/__pycache__/_stack.cpython-312.pyc | Bin 963 -> 0 bytes .../rich/__pycache__/_timer.cpython-312.pyc | Bin 863 -> 0 bytes .../_win32_console.cpython-312.pyc | Bin 28965 -> 0 bytes .../rich/__pycache__/_windows.cpython-312.pyc | Bin 2488 -> 0 bytes .../_windows_renderer.cpython-312.pyc | Bin 3571 -> 0 bytes .../rich/__pycache__/_wrap.cpython-312.pyc | Bin 2358 -> 0 bytes .../rich/__pycache__/abc.cpython-312.pyc | Bin 1606 -> 0 bytes .../rich/__pycache__/align.cpython-312.pyc | Bin 12320 -> 0 bytes .../rich/__pycache__/ansi.cpython-312.pyc | Bin 9104 -> 0 bytes .../rich/__pycache__/bar.cpython-312.pyc | Bin 4270 -> 0 bytes .../rich/__pycache__/box.cpython-312.pyc | Bin 11856 -> 0 bytes .../rich/__pycache__/cells.cpython-312.pyc | Bin 5616 -> 0 bytes .../rich/__pycache__/color.cpython-312.pyc | Bin 26523 -> 0 bytes .../__pycache__/color_triplet.cpython-312.pyc | Bin 1699 -> 0 bytes .../rich/__pycache__/columns.cpython-312.pyc | Bin 8585 -> 0 bytes .../rich/__pycache__/console.cpython-312.pyc | Bin 113782 -> 0 bytes .../__pycache__/constrain.cpython-312.pyc | Bin 2256 -> 0 bytes .../__pycache__/containers.cpython-312.pyc | Bin 9224 -> 0 bytes .../rich/__pycache__/control.cpython-312.pyc | Bin 10927 -> 0 bytes .../default_styles.cpython-312.pyc | Bin 10371 -> 0 bytes .../rich/__pycache__/diagnose.cpython-312.pyc | Bin 1485 -> 0 bytes .../rich/__pycache__/emoji.cpython-312.pyc | Bin 4207 -> 0 bytes .../rich/__pycache__/errors.cpython-312.pyc | Bin 1843 -> 0 bytes .../__pycache__/file_proxy.cpython-312.pyc | Bin 3575 -> 0 bytes .../rich/__pycache__/filesize.cpython-312.pyc | Bin 3080 -> 0 bytes .../__pycache__/highlighter.cpython-312.pyc | Bin 9896 -> 0 bytes .../rich/__pycache__/json.cpython-312.pyc | Bin 6033 -> 0 bytes .../rich/__pycache__/jupyter.cpython-312.pyc | Bin 5207 -> 0 bytes .../rich/__pycache__/layout.cpython-312.pyc | Bin 20218 -> 0 bytes .../rich/__pycache__/live.cpython-312.pyc | Bin 19138 -> 0 bytes .../__pycache__/live_render.cpython-312.pyc | Bin 4892 -> 0 bytes .../rich/__pycache__/logging.cpython-312.pyc | Bin 13546 -> 0 bytes .../rich/__pycache__/markup.cpython-312.pyc | Bin 9296 -> 0 bytes .../rich/__pycache__/measure.cpython-312.pyc | Bin 6374 -> 0 bytes .../rich/__pycache__/padding.cpython-312.pyc | Bin 7132 -> 0 bytes .../rich/__pycache__/pager.cpython-312.pyc | Bin 1818 -> 0 bytes .../rich/__pycache__/palette.cpython-312.pyc | Bin 5312 -> 0 bytes .../rich/__pycache__/panel.cpython-312.pyc | Bin 12095 -> 0 bytes .../rich/__pycache__/pretty.cpython-312.pyc | Bin 40040 -> 0 bytes .../rich/__pycache__/progress.cpython-312.pyc | Bin 75073 -> 0 bytes .../__pycache__/progress_bar.cpython-312.pyc | Bin 10387 -> 0 bytes .../rich/__pycache__/prompt.cpython-312.pyc | Bin 14776 -> 0 bytes .../rich/__pycache__/protocol.cpython-312.pyc | Bin 1790 -> 0 bytes .../rich/__pycache__/region.cpython-312.pyc | Bin 565 -> 0 bytes .../rich/__pycache__/repr.cpython-312.pyc | Bin 6624 -> 0 bytes .../rich/__pycache__/rule.cpython-312.pyc | Bin 6566 -> 0 bytes .../rich/__pycache__/scope.cpython-312.pyc | Bin 3828 -> 0 bytes .../rich/__pycache__/screen.cpython-312.pyc | Bin 2482 -> 0 bytes .../rich/__pycache__/segment.cpython-312.pyc | Bin 28159 -> 0 bytes .../rich/__pycache__/spinner.cpython-312.pyc | Bin 6062 -> 0 bytes .../rich/__pycache__/status.cpython-312.pyc | Bin 6066 -> 0 bytes .../rich/__pycache__/style.cpython-312.pyc | Bin 33512 -> 0 bytes .../rich/__pycache__/styled.cpython-312.pyc | Bin 2137 -> 0 bytes .../rich/__pycache__/syntax.cpython-312.pyc | Bin 39608 -> 0 bytes .../rich/__pycache__/table.cpython-312.pyc | Bin 43582 -> 0 bytes .../terminal_theme.cpython-312.pyc | Bin 3346 -> 0 bytes .../rich/__pycache__/text.cpython-312.pyc | Bin 58947 -> 0 bytes .../rich/__pycache__/theme.cpython-312.pyc | Bin 6338 -> 0 bytes .../rich/__pycache__/themes.cpython-312.pyc | Bin 312 -> 0 bytes .../__pycache__/traceback.cpython-312.pyc | Bin 31542 -> 0 bytes .../rich/__pycache__/tree.cpython-312.pyc | Bin 11437 -> 0 bytes .../pip/_vendor/rich/_cell_widths.py | 451 - .../pip/_vendor/rich/_emoji_codes.py | 3610 ----- .../pip/_vendor/rich/_emoji_replace.py | 32 - .../pip/_vendor/rich/_export_format.py | 76 - .../pip/_vendor/rich/_extension.py | 10 - .../site-packages/pip/_vendor/rich/_fileno.py | 24 - .../pip/_vendor/rich/_inspect.py | 270 - .../pip/_vendor/rich/_log_render.py | 94 - .../site-packages/pip/_vendor/rich/_loop.py | 43 - .../pip/_vendor/rich/_null_file.py | 69 - .../pip/_vendor/rich/_palettes.py | 309 - .../site-packages/pip/_vendor/rich/_pick.py | 17 - .../site-packages/pip/_vendor/rich/_ratio.py | 160 - .../pip/_vendor/rich/_spinners.py | 482 - .../site-packages/pip/_vendor/rich/_stack.py | 16 - .../site-packages/pip/_vendor/rich/_timer.py | 19 - .../pip/_vendor/rich/_win32_console.py | 662 - .../pip/_vendor/rich/_windows.py | 72 - .../pip/_vendor/rich/_windows_renderer.py | 56 - .../site-packages/pip/_vendor/rich/_wrap.py | 56 - .../site-packages/pip/_vendor/rich/abc.py | 33 - .../site-packages/pip/_vendor/rich/align.py | 311 - .../site-packages/pip/_vendor/rich/ansi.py | 240 - .../site-packages/pip/_vendor/rich/bar.py | 94 - .../site-packages/pip/_vendor/rich/box.py | 517 - .../site-packages/pip/_vendor/rich/cells.py | 154 - .../site-packages/pip/_vendor/rich/color.py | 622 - .../pip/_vendor/rich/color_triplet.py | 38 - .../site-packages/pip/_vendor/rich/columns.py | 187 - .../site-packages/pip/_vendor/rich/console.py | 2633 ---- .../pip/_vendor/rich/constrain.py | 37 - .../pip/_vendor/rich/containers.py | 167 - .../site-packages/pip/_vendor/rich/control.py | 225 - .../pip/_vendor/rich/default_styles.py | 190 - .../pip/_vendor/rich/diagnose.py | 37 - .../site-packages/pip/_vendor/rich/emoji.py | 96 - .../site-packages/pip/_vendor/rich/errors.py | 34 - .../pip/_vendor/rich/file_proxy.py | 57 - .../pip/_vendor/rich/filesize.py | 89 - .../pip/_vendor/rich/highlighter.py | 232 - .../site-packages/pip/_vendor/rich/json.py | 140 - .../site-packages/pip/_vendor/rich/jupyter.py | 101 - .../site-packages/pip/_vendor/rich/layout.py | 443 - .../site-packages/pip/_vendor/rich/live.py | 375 - .../pip/_vendor/rich/live_render.py | 113 - .../site-packages/pip/_vendor/rich/logging.py | 289 - .../site-packages/pip/_vendor/rich/markup.py | 246 - .../site-packages/pip/_vendor/rich/measure.py | 151 - .../site-packages/pip/_vendor/rich/padding.py | 141 - .../site-packages/pip/_vendor/rich/pager.py | 34 - .../site-packages/pip/_vendor/rich/palette.py | 100 - .../site-packages/pip/_vendor/rich/panel.py | 308 - .../site-packages/pip/_vendor/rich/pretty.py | 994 -- .../pip/_vendor/rich/progress.py | 1702 --- .../pip/_vendor/rich/progress_bar.py | 224 - .../site-packages/pip/_vendor/rich/prompt.py | 376 - .../pip/_vendor/rich/protocol.py | 42 - .../site-packages/pip/_vendor/rich/py.typed | 0 .../site-packages/pip/_vendor/rich/region.py | 10 - .../site-packages/pip/_vendor/rich/repr.py | 149 - .../site-packages/pip/_vendor/rich/rule.py | 130 - .../site-packages/pip/_vendor/rich/scope.py | 86 - .../site-packages/pip/_vendor/rich/screen.py | 54 - .../site-packages/pip/_vendor/rich/segment.py | 739 -- .../site-packages/pip/_vendor/rich/spinner.py | 137 - .../site-packages/pip/_vendor/rich/status.py | 132 - .../site-packages/pip/_vendor/rich/style.py | 796 -- .../site-packages/pip/_vendor/rich/styled.py | 42 - .../site-packages/pip/_vendor/rich/syntax.py | 948 -- .../site-packages/pip/_vendor/rich/table.py | 1002 -- .../pip/_vendor/rich/terminal_theme.py | 153 - .../site-packages/pip/_vendor/rich/text.py | 1307 -- .../site-packages/pip/_vendor/rich/theme.py | 115 - .../site-packages/pip/_vendor/rich/themes.py | 5 - .../pip/_vendor/rich/traceback.py | 756 -- .../site-packages/pip/_vendor/rich/tree.py | 251 - .../site-packages/pip/_vendor/six.py | 998 -- .../pip/_vendor/tenacity/__init__.py | 608 - .../__pycache__/__init__.cpython-312.pyc | Bin 27084 -> 0 bytes .../__pycache__/_asyncio.cpython-312.pyc | Bin 4804 -> 0 bytes .../__pycache__/_utils.cpython-312.pyc | Bin 2313 -> 0 bytes .../__pycache__/after.cpython-312.pyc | Bin 1622 -> 0 bytes .../__pycache__/before.cpython-312.pyc | Bin 1462 -> 0 bytes .../__pycache__/before_sleep.cpython-312.pyc | Bin 2300 -> 0 bytes .../tenacity/__pycache__/nap.cpython-312.pyc | Bin 1410 -> 0 bytes .../__pycache__/retry.cpython-312.pyc | Bin 14279 -> 0 bytes .../tenacity/__pycache__/stop.cpython-312.pyc | Bin 5566 -> 0 bytes .../__pycache__/tornadoweb.cpython-312.pyc | Bin 2584 -> 0 bytes .../tenacity/__pycache__/wait.cpython-312.pyc | Bin 12411 -> 0 bytes .../pip/_vendor/tenacity/_asyncio.py | 94 - .../pip/_vendor/tenacity/_utils.py | 76 - .../pip/_vendor/tenacity/after.py | 51 - .../pip/_vendor/tenacity/before.py | 46 - .../pip/_vendor/tenacity/before_sleep.py | 71 - .../site-packages/pip/_vendor/tenacity/nap.py | 43 - .../pip/_vendor/tenacity/py.typed | 0 .../pip/_vendor/tenacity/retry.py | 272 - .../pip/_vendor/tenacity/stop.py | 103 - .../pip/_vendor/tenacity/tornadoweb.py | 59 - .../pip/_vendor/tenacity/wait.py | 228 - .../pip/_vendor/tomli/__init__.py | 11 - .../__pycache__/__init__.cpython-312.pyc | Bin 382 -> 0 bytes .../tomli/__pycache__/_parser.cpython-312.pyc | Bin 26925 -> 0 bytes .../tomli/__pycache__/_re.cpython-312.pyc | Bin 3906 -> 0 bytes .../tomli/__pycache__/_types.cpython-312.pyc | Bin 364 -> 0 bytes .../pip/_vendor/tomli/_parser.py | 691 - .../site-packages/pip/_vendor/tomli/_re.py | 107 - .../site-packages/pip/_vendor/tomli/_types.py | 10 - .../site-packages/pip/_vendor/tomli/py.typed | 1 - .../pip/_vendor/truststore/__init__.py | 13 - .../__pycache__/__init__.cpython-312.pyc | Bin 616 -> 0 bytes .../__pycache__/_api.cpython-312.pyc | Bin 15795 -> 0 bytes .../__pycache__/_macos.cpython-312.pyc | Bin 16660 -> 0 bytes .../__pycache__/_openssl.cpython-312.pyc | Bin 2213 -> 0 bytes .../_ssl_constants.cpython-312.pyc | Bin 1097 -> 0 bytes .../__pycache__/_windows.cpython-312.pyc | Bin 15504 -> 0 bytes .../pip/_vendor/truststore/_api.py | 302 - .../pip/_vendor/truststore/_macos.py | 501 - .../pip/_vendor/truststore/_openssl.py | 66 - .../pip/_vendor/truststore/_ssl_constants.py | 31 - .../pip/_vendor/truststore/_windows.py | 554 - .../pip/_vendor/truststore/py.typed | 0 .../pip/_vendor/typing_extensions.py | 3072 ----- .../pip/_vendor/urllib3/__init__.py | 102 - .../__pycache__/__init__.cpython-312.pyc | Bin 3403 -> 0 bytes .../__pycache__/_collections.cpython-312.pyc | Bin 15929 -> 0 bytes .../__pycache__/_version.cpython-312.pyc | Bin 216 -> 0 bytes .../__pycache__/connection.cpython-312.pyc | Bin 20405 -> 0 bytes .../connectionpool.cpython-312.pyc | Bin 36277 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 13491 -> 0 bytes .../__pycache__/fields.cpython-312.pyc | Bin 10411 -> 0 bytes .../__pycache__/filepost.cpython-312.pyc | Bin 4016 -> 0 bytes .../__pycache__/poolmanager.cpython-312.pyc | Bin 20300 -> 0 bytes .../__pycache__/request.cpython-312.pyc | Bin 7292 -> 0 bytes .../__pycache__/response.cpython-312.pyc | Bin 33964 -> 0 bytes .../pip/_vendor/urllib3/_collections.py | 337 - .../pip/_vendor/urllib3/_version.py | 2 - .../pip/_vendor/urllib3/connection.py | 572 - .../pip/_vendor/urllib3/connectionpool.py | 1132 -- .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 196 -> 0 bytes .../_appengine_environ.cpython-312.pyc | Bin 1846 -> 0 bytes .../__pycache__/appengine.cpython-312.pyc | Bin 11562 -> 0 bytes .../__pycache__/ntlmpool.cpython-312.pyc | Bin 5717 -> 0 bytes .../__pycache__/pyopenssl.cpython-312.pyc | Bin 24448 -> 0 bytes .../securetransport.cpython-312.pyc | Bin 35542 -> 0 bytes .../contrib/__pycache__/socks.cpython-312.pyc | Bin 7509 -> 0 bytes .../urllib3/contrib/_appengine_environ.py | 36 - .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 213 -> 0 bytes .../__pycache__/bindings.cpython-312.pyc | Bin 17425 -> 0 bytes .../__pycache__/low_level.cpython-312.pyc | Bin 14799 -> 0 bytes .../contrib/_securetransport/bindings.py | 519 - .../contrib/_securetransport/low_level.py | 397 - .../pip/_vendor/urllib3/contrib/appengine.py | 314 - .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 - .../pip/_vendor/urllib3/contrib/pyopenssl.py | 518 - .../urllib3/contrib/securetransport.py | 921 -- .../pip/_vendor/urllib3/contrib/socks.py | 216 - .../pip/_vendor/urllib3/exceptions.py | 323 - .../pip/_vendor/urllib3/fields.py | 274 - .../pip/_vendor/urllib3/filepost.py | 98 - .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 197 -> 0 bytes .../packages/__pycache__/six.cpython-312.pyc | Bin 41317 -> 0 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 207 -> 0 bytes .../__pycache__/makefile.cpython-312.pyc | Bin 1818 -> 0 bytes .../weakref_finalize.cpython-312.pyc | Bin 7326 -> 0 bytes .../urllib3/packages/backports/makefile.py | 51 - .../packages/backports/weakref_finalize.py | 155 - .../pip/_vendor/urllib3/packages/six.py | 1076 -- .../pip/_vendor/urllib3/poolmanager.py | 537 - .../pip/_vendor/urllib3/request.py | 191 - .../pip/_vendor/urllib3/response.py | 879 -- .../pip/_vendor/urllib3/util/__init__.py | 49 - .../util/__pycache__/__init__.cpython-312.pyc | Bin 1144 -> 0 bytes .../__pycache__/connection.cpython-312.pyc | Bin 4754 -> 0 bytes .../util/__pycache__/proxy.cpython-312.pyc | Bin 1550 -> 0 bytes .../util/__pycache__/queue.cpython-312.pyc | Bin 1350 -> 0 bytes .../util/__pycache__/request.cpython-312.pyc | Bin 4181 -> 0 bytes .../util/__pycache__/response.cpython-312.pyc | Bin 2987 -> 0 bytes .../util/__pycache__/retry.cpython-312.pyc | Bin 21695 -> 0 bytes .../util/__pycache__/ssl_.cpython-312.pyc | Bin 15101 -> 0 bytes .../ssl_match_hostname.cpython-312.pyc | Bin 5069 -> 0 bytes .../__pycache__/ssltransport.cpython-312.pyc | Bin 10765 -> 0 bytes .../util/__pycache__/timeout.cpython-312.pyc | Bin 11137 -> 0 bytes .../util/__pycache__/url.cpython-312.pyc | Bin 15793 -> 0 bytes .../util/__pycache__/wait.cpython-312.pyc | Bin 4401 -> 0 bytes .../pip/_vendor/urllib3/util/connection.py | 149 - .../pip/_vendor/urllib3/util/proxy.py | 57 - .../pip/_vendor/urllib3/util/queue.py | 22 - .../pip/_vendor/urllib3/util/request.py | 137 - .../pip/_vendor/urllib3/util/response.py | 107 - .../pip/_vendor/urllib3/util/retry.py | 620 - .../pip/_vendor/urllib3/util/ssl_.py | 495 - .../urllib3/util/ssl_match_hostname.py | 159 - .../pip/_vendor/urllib3/util/ssltransport.py | 221 - .../pip/_vendor/urllib3/util/timeout.py | 271 - .../pip/_vendor/urllib3/util/url.py | 435 - .../pip/_vendor/urllib3/util/wait.py | 152 - .../site-packages/pip/_vendor/vendor.txt | 24 - .../pip/_vendor/webencodings/__init__.py | 342 - .../__pycache__/__init__.cpython-312.pyc | Bin 11993 -> 0 bytes .../__pycache__/labels.cpython-312.pyc | Bin 7130 -> 0 bytes .../__pycache__/mklabels.cpython-312.pyc | Bin 2694 -> 0 bytes .../__pycache__/tests.cpython-312.pyc | Bin 9037 -> 0 bytes .../x_user_defined.cpython-312.pyc | Bin 3293 -> 0 bytes .../pip/_vendor/webencodings/labels.py | 231 - .../pip/_vendor/webencodings/mklabels.py | 59 - .../pip/_vendor/webencodings/tests.py | 153 - .../_vendor/webencodings/x_user_defined.py | 325 - lib/python3.12/site-packages/pip/py.typed | 4 - lib/python3.12/site-packages/wand/__init__.py | 6 - .../wand/__pycache__/__init__.cpython-312.pyc | Bin 385 -> 0 bytes .../wand/__pycache__/api.cpython-312.pyc | Bin 11674 -> 0 bytes .../__pycache__/assertions.cpython-312.pyc | Bin 6493 -> 0 bytes .../wand/__pycache__/color.cpython-312.pyc | Bin 37028 -> 0 bytes .../wand/__pycache__/compat.cpython-312.pyc | Bin 5214 -> 0 bytes .../wand/__pycache__/display.cpython-312.pyc | Bin 3470 -> 0 bytes .../wand/__pycache__/drawing.cpython-312.pyc | Bin 94774 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 15317 -> 0 bytes .../wand/__pycache__/font.cpython-312.pyc | Bin 5129 -> 0 bytes .../wand/__pycache__/image.cpython-312.pyc | Bin 451454 -> 0 bytes .../wand/__pycache__/resource.cpython-312.pyc | Bin 14385 -> 0 bytes .../wand/__pycache__/sequence.cpython-312.pyc | Bin 18945 -> 0 bytes .../wand/__pycache__/version.cpython-312.pyc | Bin 9862 -> 0 bytes lib/python3.12/site-packages/wand/api.py | 250 - .../site-packages/wand/assertions.py | 156 - .../site-packages/wand/cdefs/__init__.py | 5 - .../__pycache__/__init__.cpython-312.pyc | Bin 315 -> 0 bytes .../cdefs/__pycache__/core.cpython-312.pyc | Bin 7119 -> 0 bytes .../__pycache__/drawing_wand.cpython-312.pyc | Bin 17861 -> 0 bytes .../__pycache__/magick_image.cpython-312.pyc | Bin 64569 -> 0 bytes .../magick_property.cpython-312.pyc | Bin 12032 -> 0 bytes .../__pycache__/magick_wand.cpython-312.pyc | Bin 3521 -> 0 bytes .../pixel_iterator.cpython-312.pyc | Bin 2545 -> 0 bytes .../__pycache__/pixel_wand.cpython-312.pyc | Bin 9830 -> 0 bytes .../__pycache__/structures.cpython-312.pyc | Bin 6403 -> 0 bytes .../__pycache__/wandtypes.cpython-312.pyc | Bin 1937 -> 0 bytes .../site-packages/wand/cdefs/core.py | 136 - .../site-packages/wand/cdefs/drawing_wand.py | 278 - .../site-packages/wand/cdefs/magick_image.py | 1248 -- .../wand/cdefs/magick_property.py | 200 - .../site-packages/wand/cdefs/magick_wand.py | 68 - .../wand/cdefs/pixel_iterator.py | 50 - .../site-packages/wand/cdefs/pixel_wand.py | 178 - .../site-packages/wand/cdefs/structures.py | 221 - .../site-packages/wand/cdefs/wandtypes.py | 44 - lib/python3.12/site-packages/wand/color.py | 779 -- lib/python3.12/site-packages/wand/compat.py | 148 - lib/python3.12/site-packages/wand/display.py | 82 - lib/python3.12/site-packages/wand/drawing.py | 2131 --- .../site-packages/wand/exceptions.py | 449 - lib/python3.12/site-packages/wand/font.py | 124 - lib/python3.12/site-packages/wand/image.py | 10887 ---------------- lib/python3.12/site-packages/wand/resource.py | 381 - lib/python3.12/site-packages/wand/sequence.py | 358 - lib/python3.12/site-packages/wand/version.py | 302 - pyvenv.cfg | 5 - 1255 files changed, 236319 deletions(-) delete mode 100644 bin/Activate.ps1 delete mode 100644 bin/activate delete mode 100644 bin/activate.csh delete mode 100644 bin/activate.fish delete mode 100755 bin/markdown_py delete mode 100755 bin/pip delete mode 100755 bin/pip3 delete mode 100755 bin/pip3.12 delete mode 120000 bin/python delete mode 120000 bin/python3 delete mode 120000 bin/python3.12 delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/INSTALLER delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/LICENSE.rst delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/METADATA delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/RECORD delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/REQUESTED delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/WHEEL delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/entry_points.txt delete mode 100644 lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/top_level.txt delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/INSTALLER delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/LICENSE.md delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/METADATA delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/RECORD delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/REQUESTED delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/WHEEL delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/entry_points.txt delete mode 100644 lib/python3.12/site-packages/Markdown-3.6.dist-info/top_level.txt delete mode 100644 lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER delete mode 100644 lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst delete mode 100644 lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/METADATA delete mode 100644 lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/RECORD delete mode 100644 lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL delete mode 100644 lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt delete mode 100644 lib/python3.12/site-packages/Wand-0.6.13.dist-info/INSTALLER delete mode 100644 lib/python3.12/site-packages/Wand-0.6.13.dist-info/LICENSE delete mode 100644 lib/python3.12/site-packages/Wand-0.6.13.dist-info/METADATA delete mode 100644 lib/python3.12/site-packages/Wand-0.6.13.dist-info/RECORD delete mode 100644 lib/python3.12/site-packages/Wand-0.6.13.dist-info/REQUESTED delete mode 100644 lib/python3.12/site-packages/Wand-0.6.13.dist-info/WHEEL delete mode 100644 lib/python3.12/site-packages/Wand-0.6.13.dist-info/top_level.txt delete mode 100644 lib/python3.12/site-packages/fpdf-1.7.2.dist-info/INSTALLER delete mode 100644 lib/python3.12/site-packages/fpdf-1.7.2.dist-info/METADATA delete mode 100644 lib/python3.12/site-packages/fpdf-1.7.2.dist-info/RECORD delete mode 100644 lib/python3.12/site-packages/fpdf-1.7.2.dist-info/REQUESTED delete mode 100644 lib/python3.12/site-packages/fpdf-1.7.2.dist-info/WHEEL delete mode 100644 lib/python3.12/site-packages/fpdf-1.7.2.dist-info/top_level.txt delete mode 100644 lib/python3.12/site-packages/fpdf/__init__.py delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/fonts.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/fpdf.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/html.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/php.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/py3k.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/template.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/__pycache__/ttfonts.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/fpdf/fonts.py delete mode 100644 lib/python3.12/site-packages/fpdf/fpdf.py delete mode 100644 lib/python3.12/site-packages/fpdf/html.py delete mode 100644 lib/python3.12/site-packages/fpdf/php.py delete mode 100644 lib/python3.12/site-packages/fpdf/py3k.py delete mode 100644 lib/python3.12/site-packages/fpdf/template.py delete mode 100644 lib/python3.12/site-packages/fpdf/ttfonts.py delete mode 100644 lib/python3.12/site-packages/jinja2/__init__.py delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/_identifier.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/async_utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/bccache.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/compiler.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/constants.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/debug.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/defaults.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/environment.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/exceptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/ext.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/filters.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/idtracking.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/lexer.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/loaders.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/meta.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/nativetypes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/nodes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/optimizer.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/parser.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/runtime.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/sandbox.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/tests.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/__pycache__/visitor.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/jinja2/_identifier.py delete mode 100644 lib/python3.12/site-packages/jinja2/async_utils.py delete mode 100644 lib/python3.12/site-packages/jinja2/bccache.py delete mode 100644 lib/python3.12/site-packages/jinja2/compiler.py delete mode 100644 lib/python3.12/site-packages/jinja2/constants.py delete mode 100644 lib/python3.12/site-packages/jinja2/debug.py delete mode 100644 lib/python3.12/site-packages/jinja2/defaults.py delete mode 100644 lib/python3.12/site-packages/jinja2/environment.py delete mode 100644 lib/python3.12/site-packages/jinja2/exceptions.py delete mode 100644 lib/python3.12/site-packages/jinja2/ext.py delete mode 100644 lib/python3.12/site-packages/jinja2/filters.py delete mode 100644 lib/python3.12/site-packages/jinja2/idtracking.py delete mode 100644 lib/python3.12/site-packages/jinja2/lexer.py delete mode 100644 lib/python3.12/site-packages/jinja2/loaders.py delete mode 100644 lib/python3.12/site-packages/jinja2/meta.py delete mode 100644 lib/python3.12/site-packages/jinja2/nativetypes.py delete mode 100644 lib/python3.12/site-packages/jinja2/nodes.py delete mode 100644 lib/python3.12/site-packages/jinja2/optimizer.py delete mode 100644 lib/python3.12/site-packages/jinja2/parser.py delete mode 100644 lib/python3.12/site-packages/jinja2/py.typed delete mode 100644 lib/python3.12/site-packages/jinja2/runtime.py delete mode 100644 lib/python3.12/site-packages/jinja2/sandbox.py delete mode 100644 lib/python3.12/site-packages/jinja2/tests.py delete mode 100644 lib/python3.12/site-packages/jinja2/utils.py delete mode 100644 lib/python3.12/site-packages/jinja2/visitor.py delete mode 100644 lib/python3.12/site-packages/markdown/__init__.py delete mode 100644 lib/python3.12/site-packages/markdown/__main__.py delete mode 100644 lib/python3.12/site-packages/markdown/__meta__.py delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/__main__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/__meta__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/blockparser.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/blockprocessors.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/core.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/htmlparser.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/inlinepatterns.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/postprocessors.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/preprocessors.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/serializers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/test_tools.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/treeprocessors.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/__pycache__/util.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/blockparser.py delete mode 100644 lib/python3.12/site-packages/markdown/blockprocessors.py delete mode 100644 lib/python3.12/site-packages/markdown/core.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__init__.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/abbr.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/admonition.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/attr_list.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/codehilite.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/def_list.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/extra.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/fenced_code.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/footnotes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/legacy_attrs.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/legacy_em.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/md_in_html.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/meta.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/nl2br.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/sane_lists.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/smarty.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/tables.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/toc.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/__pycache__/wikilinks.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markdown/extensions/abbr.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/admonition.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/attr_list.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/codehilite.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/def_list.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/extra.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/fenced_code.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/footnotes.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/legacy_attrs.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/legacy_em.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/md_in_html.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/meta.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/nl2br.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/sane_lists.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/smarty.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/tables.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/toc.py delete mode 100644 lib/python3.12/site-packages/markdown/extensions/wikilinks.py delete mode 100644 lib/python3.12/site-packages/markdown/htmlparser.py delete mode 100644 lib/python3.12/site-packages/markdown/inlinepatterns.py delete mode 100644 lib/python3.12/site-packages/markdown/postprocessors.py delete mode 100644 lib/python3.12/site-packages/markdown/preprocessors.py delete mode 100644 lib/python3.12/site-packages/markdown/serializers.py delete mode 100644 lib/python3.12/site-packages/markdown/test_tools.py delete mode 100644 lib/python3.12/site-packages/markdown/treeprocessors.py delete mode 100644 lib/python3.12/site-packages/markdown/util.py delete mode 100644 lib/python3.12/site-packages/markupsafe/__init__.py delete mode 100644 lib/python3.12/site-packages/markupsafe/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markupsafe/__pycache__/_native.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/markupsafe/_native.py delete mode 100644 lib/python3.12/site-packages/markupsafe/_speedups.c delete mode 100755 lib/python3.12/site-packages/markupsafe/_speedups.cpython-312-darwin.so delete mode 100644 lib/python3.12/site-packages/markupsafe/_speedups.pyi delete mode 100644 lib/python3.12/site-packages/markupsafe/py.typed delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/AUTHORS.txt delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/INSTALLER delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/LICENSE.txt delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/METADATA delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/RECORD delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/REQUESTED delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/WHEEL delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/entry_points.txt delete mode 100644 lib/python3.12/site-packages/pip-24.0.dist-info/top_level.txt delete mode 100644 lib/python3.12/site-packages/pip/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/__main__.py delete mode 100644 lib/python3.12/site-packages/pip/__pip-runner__.py delete mode 100644 lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/build_env.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cache.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/base_command.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/command_context.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/main.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/main_parser.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/parser.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/req_command.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/spinners.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/cli/status_codes.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/cache.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/check.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/completion.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/configuration.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/debug.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/download.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/freeze.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/hash.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/help.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/index.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/inspect.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/install.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/list.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/search.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/show.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/uninstall.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/commands/wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/configuration.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/base.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/installed.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/sdist.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/distributions/wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/exceptions.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/collector.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/package_finder.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/index/sources.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/_distutils.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/locations/base.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/main.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/_json.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/base.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/candidate.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/direct_url.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/format_control.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/index.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/installation_report.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/link.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/scheme.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/search_scope.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/target_python.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/models/wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/auth.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/cache.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/download.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/session.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/utils.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/check.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/freeze.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/operations/prepare.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/pyproject.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/constructors.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/req_file.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/req_install.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/req_set.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/base.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/self_outdated_check.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/_log.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/appdirs.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/compat.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/datetime.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/deprecation.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/egg_link.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/encoding.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/filesystem.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/filetypes.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/glibc.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/hashes.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/logging.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/misc.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/models.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/packaging.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/subprocess.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/unpacking.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/urls.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/utils/wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/git.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/subversion.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py delete mode 100644 lib/python3.12/site-packages/pip/_internal/wheel_builder.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/core.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/certifi/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/big5freq.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/big5prober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/chardistribution.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/charsetgroupprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/charsetprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/cli/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/cli/chardetect.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachine.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachinedict.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/cp949prober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/enums.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/escprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/escsm.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/eucjpprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/euckrfreq.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/euckrprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/euctwfreq.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/euctwprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/gb2312freq.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/gb2312prober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/hebrewprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/jisfreq.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/johabfreq.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/johabprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/jpcntx.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/langbulgarianmodel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/langgreekmodel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/langhebrewmodel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/langhungarianmodel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/langrussianmodel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/langthaimodel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/langturkishmodel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/latin1prober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/macromanprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/mbcharsetprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/mbcsgroupprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/mbcssm.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/metadata/languages.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/resultdict.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/sbcharsetprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/sbcsgroupprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/sjisprober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/universaldetector.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/utf1632prober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/utf8prober.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/chardet/version.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/ansi.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/ansitowin32.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/initialise.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansi_test.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/initialise_test.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/isatty_test.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/utils.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/tests/winterm_test.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/win32.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/colorama/winterm.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/compat.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/database.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/index.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/locators.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/markers.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/resources.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/util.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/version.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distro/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distro/__main__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distro/distro.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/distro/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/codec.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/compat.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/core.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/intranges.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/package_data.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__about__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/markers.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/tags.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/utils.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/packaging/version.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/console.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/filter.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/img.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/irc.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/latex.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/other.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/rtf.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/svg.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/terminal.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/formatters/terminal256.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/lexer.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/lexers/_mapping.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/lexers/python.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/modeline.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/plugin.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/regexopt.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/scanner.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/sphinxext.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/style.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/styles/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/token.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/unistring.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pygments/util.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/actions.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/common.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/core.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/diagram/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/exceptions.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/helpers.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/results.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/testing.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/unicode.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyparsing/util.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_compat.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/__version__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/adapters.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/api.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/auth.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/certs.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/compat.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/cookies.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/help.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/hooks.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/models.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/packages.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/sessions.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/structures.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/requests/utils.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__main__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_extension.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_loop.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_pick.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_stack.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_timer.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_windows.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/abc.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/align.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/ansi.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/bar.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/box.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/cells.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/color.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/columns.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/console.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/constrain.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/containers.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/control.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/emoji.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/errors.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/filesize.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/json.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/jupyter.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/layout.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/live.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/live_render.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/logging.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/markup.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/measure.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/padding.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/pager.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/palette.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/panel.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/pretty.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/progress.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/prompt.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/protocol.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/region.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/repr.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/rule.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/scope.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/screen.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/segment.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/spinner.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/status.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/style.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/styled.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/syntax.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/table.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/text.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/theme.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/themes.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/traceback.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/rich/tree.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/six.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/_asyncio.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/_utils.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/after.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/before.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/before_sleep.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/nap.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/retry.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/stop.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/tornadoweb.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tenacity/wait.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/_re.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/_types.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/tomli/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/_api.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/truststore/py.typed delete mode 100644 lib/python3.12/site-packages/pip/_vendor/typing_extensions.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/request.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/response.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/vendor.txt delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/__init__.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/labels.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/mklabels.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/tests.py delete mode 100644 lib/python3.12/site-packages/pip/_vendor/webencodings/x_user_defined.py delete mode 100644 lib/python3.12/site-packages/pip/py.typed delete mode 100644 lib/python3.12/site-packages/wand/__init__.py delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/api.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/assertions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/color.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/compat.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/display.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/drawing.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/exceptions.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/font.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/image.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/resource.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/sequence.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/__pycache__/version.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/api.py delete mode 100644 lib/python3.12/site-packages/wand/assertions.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__init__.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/__init__.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/core.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/drawing_wand.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/magick_image.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/magick_property.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/magick_wand.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/pixel_iterator.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/pixel_wand.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/structures.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/__pycache__/wandtypes.cpython-312.pyc delete mode 100644 lib/python3.12/site-packages/wand/cdefs/core.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/drawing_wand.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/magick_image.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/magick_property.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/magick_wand.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/pixel_iterator.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/pixel_wand.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/structures.py delete mode 100644 lib/python3.12/site-packages/wand/cdefs/wandtypes.py delete mode 100644 lib/python3.12/site-packages/wand/color.py delete mode 100644 lib/python3.12/site-packages/wand/compat.py delete mode 100644 lib/python3.12/site-packages/wand/display.py delete mode 100644 lib/python3.12/site-packages/wand/drawing.py delete mode 100644 lib/python3.12/site-packages/wand/exceptions.py delete mode 100644 lib/python3.12/site-packages/wand/font.py delete mode 100644 lib/python3.12/site-packages/wand/image.py delete mode 100644 lib/python3.12/site-packages/wand/resource.py delete mode 100644 lib/python3.12/site-packages/wand/sequence.py delete mode 100644 lib/python3.12/site-packages/wand/version.py delete mode 100644 pyvenv.cfg diff --git a/bin/Activate.ps1 b/bin/Activate.ps1 deleted file mode 100644 index b49d77b..0000000 --- a/bin/Activate.ps1 +++ /dev/null @@ -1,247 +0,0 @@ -<# -.Synopsis -Activate a Python virtual environment for the current PowerShell session. - -.Description -Pushes the python executable for a virtual environment to the front of the -$Env:PATH environment variable and sets the prompt to signify that you are -in a Python virtual environment. Makes use of the command line switches as -well as the `pyvenv.cfg` file values present in the virtual environment. - -.Parameter VenvDir -Path to the directory that contains the virtual environment to activate. The -default value for this is the parent of the directory that the Activate.ps1 -script is located within. - -.Parameter Prompt -The prompt prefix to display when this virtual environment is activated. By -default, this prompt is the name of the virtual environment folder (VenvDir) -surrounded by parentheses and followed by a single space (ie. '(.venv) '). - -.Example -Activate.ps1 -Activates the Python virtual environment that contains the Activate.ps1 script. - -.Example -Activate.ps1 -Verbose -Activates the Python virtual environment that contains the Activate.ps1 script, -and shows extra information about the activation as it executes. - -.Example -Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv -Activates the Python virtual environment located in the specified location. - -.Example -Activate.ps1 -Prompt "MyPython" -Activates the Python virtual environment that contains the Activate.ps1 script, -and prefixes the current prompt with the specified string (surrounded in -parentheses) while the virtual environment is active. - -.Notes -On Windows, it may be required to enable this Activate.ps1 script by setting the -execution policy for the user. You can do this by issuing the following PowerShell -command: - -PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - -For more information on Execution Policies: -https://go.microsoft.com/fwlink/?LinkID=135170 - -#> -Param( - [Parameter(Mandatory = $false)] - [String] - $VenvDir, - [Parameter(Mandatory = $false)] - [String] - $Prompt -) - -<# Function declarations --------------------------------------------------- #> - -<# -.Synopsis -Remove all shell session elements added by the Activate script, including the -addition of the virtual environment's Python executable from the beginning of -the PATH variable. - -.Parameter NonDestructive -If present, do not remove this function from the global namespace for the -session. - -#> -function global:deactivate ([switch]$NonDestructive) { - # Revert to original values - - # The prior prompt: - if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { - Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt - Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT - } - - # The prior PYTHONHOME: - if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { - Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME - Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME - } - - # The prior PATH: - if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { - Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH - Remove-Item -Path Env:_OLD_VIRTUAL_PATH - } - - # Just remove the VIRTUAL_ENV altogether: - if (Test-Path -Path Env:VIRTUAL_ENV) { - Remove-Item -Path env:VIRTUAL_ENV - } - - # Just remove VIRTUAL_ENV_PROMPT altogether. - if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { - Remove-Item -Path env:VIRTUAL_ENV_PROMPT - } - - # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: - if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { - Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force - } - - # Leave deactivate function in the global namespace if requested: - if (-not $NonDestructive) { - Remove-Item -Path function:deactivate - } -} - -<# -.Description -Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the -given folder, and returns them in a map. - -For each line in the pyvenv.cfg file, if that line can be parsed into exactly -two strings separated by `=` (with any amount of whitespace surrounding the =) -then it is considered a `key = value` line. The left hand string is the key, -the right hand is the value. - -If the value starts with a `'` or a `"` then the first and last character is -stripped from the value before being captured. - -.Parameter ConfigDir -Path to the directory that contains the `pyvenv.cfg` file. -#> -function Get-PyVenvConfig( - [String] - $ConfigDir -) { - Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" - - # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). - $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue - - # An empty map will be returned if no config file is found. - $pyvenvConfig = @{ } - - if ($pyvenvConfigPath) { - - Write-Verbose "File exists, parse `key = value` lines" - $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath - - $pyvenvConfigContent | ForEach-Object { - $keyval = $PSItem -split "\s*=\s*", 2 - if ($keyval[0] -and $keyval[1]) { - $val = $keyval[1] - - # Remove extraneous quotations around a string value. - if ("'""".Contains($val.Substring(0, 1))) { - $val = $val.Substring(1, $val.Length - 2) - } - - $pyvenvConfig[$keyval[0]] = $val - Write-Verbose "Adding Key: '$($keyval[0])'='$val'" - } - } - } - return $pyvenvConfig -} - - -<# Begin Activate script --------------------------------------------------- #> - -# Determine the containing directory of this script -$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition -$VenvExecDir = Get-Item -Path $VenvExecPath - -Write-Verbose "Activation script is located in path: '$VenvExecPath'" -Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" -Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" - -# Set values required in priority: CmdLine, ConfigFile, Default -# First, get the location of the virtual environment, it might not be -# VenvExecDir if specified on the command line. -if ($VenvDir) { - Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" -} -else { - Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." - $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") - Write-Verbose "VenvDir=$VenvDir" -} - -# Next, read the `pyvenv.cfg` file to determine any required value such -# as `prompt`. -$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir - -# Next, set the prompt from the command line, or the config file, or -# just use the name of the virtual environment folder. -if ($Prompt) { - Write-Verbose "Prompt specified as argument, using '$Prompt'" -} -else { - Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" - if ($pyvenvCfg -and $pyvenvCfg['prompt']) { - Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" - $Prompt = $pyvenvCfg['prompt']; - } - else { - Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" - Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" - $Prompt = Split-Path -Path $venvDir -Leaf - } -} - -Write-Verbose "Prompt = '$Prompt'" -Write-Verbose "VenvDir='$VenvDir'" - -# Deactivate any currently active virtual environment, but leave the -# deactivate function in place. -deactivate -nondestructive - -# Now set the environment variable VIRTUAL_ENV, used by many tools to determine -# that there is an activated venv. -$env:VIRTUAL_ENV = $VenvDir - -if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { - - Write-Verbose "Setting prompt to '$Prompt'" - - # Set the prompt to include the env name - # Make sure _OLD_VIRTUAL_PROMPT is global - function global:_OLD_VIRTUAL_PROMPT { "" } - Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT - New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt - - function global:prompt { - Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " - _OLD_VIRTUAL_PROMPT - } - $env:VIRTUAL_ENV_PROMPT = $Prompt -} - -# Clear PYTHONHOME -if (Test-Path -Path Env:PYTHONHOME) { - Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME - Remove-Item -Path Env:PYTHONHOME -} - -# Add the venv to the PATH -Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH -$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/bin/activate b/bin/activate deleted file mode 100644 index 6f2a7de..0000000 --- a/bin/activate +++ /dev/null @@ -1,70 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# You cannot run it directly - -deactivate () { - # reset old environment variables - if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then - PATH="${_OLD_VIRTUAL_PATH:-}" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then - PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # Call hash to forget past commands. Without forgetting - # past commands the $PATH changes we made may not be respected - hash -r 2> /dev/null - - if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then - PS1="${_OLD_VIRTUAL_PS1:-}" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - unset VIRTUAL_ENV_PROMPT - if [ ! "${1:-}" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -# on Windows, a path can contain colons and backslashes and has to be converted: -if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then - # transform D:\path\to\venv to /d/path/to/venv on MSYS - # and to /cygdrive/d/path/to/venv on Cygwin - export VIRTUAL_ENV=$(cygpath "/Users/poni/lorenzo-web/script") -else - # use the path as-is - export VIRTUAL_ENV="/Users/poni/lorenzo-web/script" -fi - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/bin:$PATH" -export PATH - -# unset PYTHONHOME if set -# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) -# could use `if (set -u; : $PYTHONHOME) ;` in bash -if [ -n "${PYTHONHOME:-}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then - _OLD_VIRTUAL_PS1="${PS1:-}" - PS1="(script) ${PS1:-}" - export PS1 - VIRTUAL_ENV_PROMPT="(script) " - export VIRTUAL_ENV_PROMPT -fi - -# Call hash to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -hash -r 2> /dev/null diff --git a/bin/activate.csh b/bin/activate.csh deleted file mode 100644 index abd6091..0000000 --- a/bin/activate.csh +++ /dev/null @@ -1,27 +0,0 @@ -# This file must be used with "source bin/activate.csh" *from csh*. -# You cannot run it directly. - -# Created by Davide Di Blasi . -# Ported to Python 3.3 venv by Andrew Svetlov - -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' - -# Unset irrelevant variables. -deactivate nondestructive - -setenv VIRTUAL_ENV "/Users/poni/lorenzo-web/script" - -set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/bin:$PATH" - - -set _OLD_VIRTUAL_PROMPT="$prompt" - -if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - set prompt = "(script) $prompt" - setenv VIRTUAL_ENV_PROMPT "(script) " -endif - -alias pydoc python -m pydoc - -rehash diff --git a/bin/activate.fish b/bin/activate.fish deleted file mode 100644 index d77f978..0000000 --- a/bin/activate.fish +++ /dev/null @@ -1,69 +0,0 @@ -# This file must be used with "source /bin/activate.fish" *from fish* -# (https://fishshell.com/). You cannot run it directly. - -function deactivate -d "Exit virtual environment and return to normal shell environment" - # reset old environment variables - if test -n "$_OLD_VIRTUAL_PATH" - set -gx PATH $_OLD_VIRTUAL_PATH - set -e _OLD_VIRTUAL_PATH - end - if test -n "$_OLD_VIRTUAL_PYTHONHOME" - set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME - set -e _OLD_VIRTUAL_PYTHONHOME - end - - if test -n "$_OLD_FISH_PROMPT_OVERRIDE" - set -e _OLD_FISH_PROMPT_OVERRIDE - # prevents error when using nested fish instances (Issue #93858) - if functions -q _old_fish_prompt - functions -e fish_prompt - functions -c _old_fish_prompt fish_prompt - functions -e _old_fish_prompt - end - end - - set -e VIRTUAL_ENV - set -e VIRTUAL_ENV_PROMPT - if test "$argv[1]" != "nondestructive" - # Self-destruct! - functions -e deactivate - end -end - -# Unset irrelevant variables. -deactivate nondestructive - -set -gx VIRTUAL_ENV "/Users/poni/lorenzo-web/script" - -set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/bin" $PATH - -# Unset PYTHONHOME if set. -if set -q PYTHONHOME - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME - set -e PYTHONHOME -end - -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" - # fish uses a function instead of an env var to generate the prompt. - - # Save the current fish_prompt function as the function _old_fish_prompt. - functions -c fish_prompt _old_fish_prompt - - # With the original prompt function renamed, we can override with our own. - function fish_prompt - # Save the return status of the last command. - set -l old_status $status - - # Output the venv prompt; color taken from the blue of the Python logo. - printf "%s%s%s" (set_color 4B8BBE) "(script) " (set_color normal) - - # Restore the return status of the previous command. - echo "exit $old_status" | . - # Output the original/"old" prompt. - _old_fish_prompt - end - - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" - set -gx VIRTUAL_ENV_PROMPT "(script) " -end diff --git a/bin/markdown_py b/bin/markdown_py deleted file mode 100755 index 89e1168..0000000 --- a/bin/markdown_py +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/poni/lorenzo-web/script/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from markdown.__main__ import run -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(run()) diff --git a/bin/pip b/bin/pip deleted file mode 100755 index f936ad2..0000000 --- a/bin/pip +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/poni/lorenzo-web/script/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/bin/pip3 b/bin/pip3 deleted file mode 100755 index f936ad2..0000000 --- a/bin/pip3 +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/poni/lorenzo-web/script/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/bin/pip3.12 b/bin/pip3.12 deleted file mode 100755 index f936ad2..0000000 --- a/bin/pip3.12 +++ /dev/null @@ -1,8 +0,0 @@ -#!/Users/poni/lorenzo-web/script/bin/python3.12 -# -*- coding: utf-8 -*- -import re -import sys -from pip._internal.cli.main import main -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/bin/python b/bin/python deleted file mode 120000 index 11b9d88..0000000 --- a/bin/python +++ /dev/null @@ -1 +0,0 @@ -python3.12 \ No newline at end of file diff --git a/bin/python3 b/bin/python3 deleted file mode 120000 index 11b9d88..0000000 --- a/bin/python3 +++ /dev/null @@ -1 +0,0 @@ -python3.12 \ No newline at end of file diff --git a/bin/python3.12 b/bin/python3.12 deleted file mode 120000 index f3d5d0b..0000000 --- a/bin/python3.12 +++ /dev/null @@ -1 +0,0 @@ -/usr/local/opt/python@3.12/bin/python3.12 \ No newline at end of file diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/INSTALLER b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/LICENSE.rst b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/LICENSE.rst deleted file mode 100644 index c37cae4..0000000 --- a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/LICENSE.rst +++ /dev/null @@ -1,28 +0,0 @@ -Copyright 2007 Pallets - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/METADATA b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/METADATA deleted file mode 100644 index 56e9429..0000000 --- a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/METADATA +++ /dev/null @@ -1,105 +0,0 @@ -Metadata-Version: 2.1 -Name: Jinja2 -Version: 3.1.3 -Summary: A very fast and expressive template engine. -Home-page: https://palletsprojects.com/p/jinja/ -Maintainer: Pallets -Maintainer-email: contact@palletsprojects.com -License: BSD-3-Clause -Project-URL: Donate, https://palletsprojects.com/donate -Project-URL: Documentation, https://jinja.palletsprojects.com/ -Project-URL: Changes, https://jinja.palletsprojects.com/changes/ -Project-URL: Source Code, https://github.com/pallets/jinja/ -Project-URL: Issue Tracker, https://github.com/pallets/jinja/issues/ -Project-URL: Chat, https://discord.gg/pallets -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Text Processing :: Markup :: HTML -Requires-Python: >=3.7 -Description-Content-Type: text/x-rst -License-File: LICENSE.rst -Requires-Dist: MarkupSafe >=2.0 -Provides-Extra: i18n -Requires-Dist: Babel >=2.7 ; extra == 'i18n' - -Jinja -===== - -Jinja is a fast, expressive, extensible templating engine. Special -placeholders in the template allow writing code similar to Python -syntax. Then the template is passed data to render the final document. - -It includes: - -- Template inheritance and inclusion. -- Define and import macros within templates. -- HTML templates can use autoescaping to prevent XSS from untrusted - user input. -- A sandboxed environment can safely render untrusted templates. -- AsyncIO support for generating templates and calling async - functions. -- I18N support with Babel. -- Templates are compiled to optimized Python code just-in-time and - cached, or can be compiled ahead-of-time. -- Exceptions point to the correct line in templates to make debugging - easier. -- Extensible filters, tests, functions, and even syntax. - -Jinja's philosophy is that while application logic belongs in Python if -possible, it shouldn't make the template designer's job difficult by -restricting functionality too much. - - -Installing ----------- - -Install and update using `pip`_: - -.. code-block:: text - - $ pip install -U Jinja2 - -.. _pip: https://pip.pypa.io/en/stable/getting-started/ - - -In A Nutshell -------------- - -.. code-block:: jinja - - {% extends "base.html" %} - {% block title %}Members{% endblock %} - {% block content %} - - {% endblock %} - - -Donate ------- - -The Pallets organization develops and supports Jinja and other popular -packages. In order to grow the community of contributors and users, and -allow the maintainers to devote more time to the projects, `please -donate today`_. - -.. _please donate today: https://palletsprojects.com/donate - - -Links ------ - -- Documentation: https://jinja.palletsprojects.com/ -- Changes: https://jinja.palletsprojects.com/changes/ -- PyPI Releases: https://pypi.org/project/Jinja2/ -- Source Code: https://github.com/pallets/jinja/ -- Issue Tracker: https://github.com/pallets/jinja/issues/ -- Chat: https://discord.gg/pallets diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/RECORD b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/RECORD deleted file mode 100644 index eefb694..0000000 --- a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/RECORD +++ /dev/null @@ -1,59 +0,0 @@ -Jinja2-3.1.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Jinja2-3.1.3.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 -Jinja2-3.1.3.dist-info/METADATA,sha256=0cLNbRCI91jytc7Bzv3XAQfZzFDF2gxkJuH46eF5vew,3301 -Jinja2-3.1.3.dist-info/RECORD,, -Jinja2-3.1.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Jinja2-3.1.3.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92 -Jinja2-3.1.3.dist-info/entry_points.txt,sha256=zRd62fbqIyfUpsRtU7EVIFyiu1tPwfgO7EvPErnxgTE,59 -Jinja2-3.1.3.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 -jinja2/__init__.py,sha256=NTBwMwsECrdHmxeXF7seusHLzrh6Ldn1A9qhS5cDuf0,1927 -jinja2/__pycache__/__init__.cpython-312.pyc,, -jinja2/__pycache__/_identifier.cpython-312.pyc,, -jinja2/__pycache__/async_utils.cpython-312.pyc,, -jinja2/__pycache__/bccache.cpython-312.pyc,, -jinja2/__pycache__/compiler.cpython-312.pyc,, -jinja2/__pycache__/constants.cpython-312.pyc,, -jinja2/__pycache__/debug.cpython-312.pyc,, -jinja2/__pycache__/defaults.cpython-312.pyc,, -jinja2/__pycache__/environment.cpython-312.pyc,, -jinja2/__pycache__/exceptions.cpython-312.pyc,, -jinja2/__pycache__/ext.cpython-312.pyc,, -jinja2/__pycache__/filters.cpython-312.pyc,, -jinja2/__pycache__/idtracking.cpython-312.pyc,, -jinja2/__pycache__/lexer.cpython-312.pyc,, -jinja2/__pycache__/loaders.cpython-312.pyc,, -jinja2/__pycache__/meta.cpython-312.pyc,, -jinja2/__pycache__/nativetypes.cpython-312.pyc,, -jinja2/__pycache__/nodes.cpython-312.pyc,, -jinja2/__pycache__/optimizer.cpython-312.pyc,, -jinja2/__pycache__/parser.cpython-312.pyc,, -jinja2/__pycache__/runtime.cpython-312.pyc,, -jinja2/__pycache__/sandbox.cpython-312.pyc,, -jinja2/__pycache__/tests.cpython-312.pyc,, -jinja2/__pycache__/utils.cpython-312.pyc,, -jinja2/__pycache__/visitor.cpython-312.pyc,, -jinja2/_identifier.py,sha256=_zYctNKzRqlk_murTNlzrju1FFJL7Va_Ijqqd7ii2lU,1958 -jinja2/async_utils.py,sha256=dFcmh6lMNfbh7eLKrBio8JqAKLHdZbpCuurFN4OERtY,2447 -jinja2/bccache.py,sha256=mhz5xtLxCcHRAa56azOhphIAe19u1we0ojifNMClDio,14061 -jinja2/compiler.py,sha256=PJzYdRLStlEOqmnQs1YxlizPrJoj3jTZuUleREn6AIQ,72199 -jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433 -jinja2/debug.py,sha256=iWJ432RadxJNnaMOPrjIDInz50UEgni3_HKuFXi2vuQ,6299 -jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267 -jinja2/environment.py,sha256=0qldX3VQKZcm6lgn7zHz94oRFow7YPYERiqkquomNjU,61253 -jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071 -jinja2/ext.py,sha256=5fnMpllaXkfm2P_93RIvi-OnK7Tk8mCW8Du-GcD12Hc,31844 -jinja2/filters.py,sha256=vYjKb2zaPShvYtn_LpSmqfS8SScbrA_KOanNibsMDIE,53862 -jinja2/idtracking.py,sha256=GfNmadir4oDALVxzn3DL9YInhJDr69ebXeA2ygfuCGA,10704 -jinja2/lexer.py,sha256=DW2nX9zk-6MWp65YR2bqqj0xqCvLtD-u9NWT8AnFRxQ,29726 -jinja2/loaders.py,sha256=ayAwxfrA1SAffQta0nwSDm3TDT4KYiIGN_D9Z45B310,23085 -jinja2/meta.py,sha256=GNPEvifmSaU3CMxlbheBOZjeZ277HThOPUTf1RkppKQ,4396 -jinja2/nativetypes.py,sha256=7GIGALVJgdyL80oZJdQUaUfwSt5q2lSSZbXt0dNf_M4,4210 -jinja2/nodes.py,sha256=i34GPRAZexXMT6bwuf5SEyvdmS-bRCy9KMjwN5O6pjk,34550 -jinja2/optimizer.py,sha256=tHkMwXxfZkbfA1KmLcqmBMSaz7RLIvvItrJcPoXTyD8,1650 -jinja2/parser.py,sha256=Y199wPL-G67gJoi5G_5sHuu9uEP1PJkjjLEW_xTH8-k,39736 -jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -jinja2/runtime.py,sha256=_6LkKIWFJjQdqlrgA3K39zBFQ-7Orm3wGDm96RwxQoE,33406 -jinja2/sandbox.py,sha256=Y0xZeXQnH6EX5VjaV2YixESxoepnRbW_3UeQosaBU3M,14584 -jinja2/tests.py,sha256=Am5Z6Lmfr2XaH_npIfJJ8MdXtWsbLjMULZJulTAj30E,5905 -jinja2/utils.py,sha256=IMwRIcN1SsTw2-jdQtlH2KzNABsXZBW_-tnFXafQBvY,23933 -jinja2/visitor.py,sha256=MH14C6yq24G_KVtWzjwaI7Wg14PCJIYlWW1kpkxYak0,3568 diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/REQUESTED b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/WHEEL b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/WHEEL deleted file mode 100644 index 98c0d20..0000000 --- a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/entry_points.txt b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/entry_points.txt deleted file mode 100644 index 7b9666c..0000000 --- a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[babel.extractors] -jinja2 = jinja2.ext:babel_extract[i18n] diff --git a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/top_level.txt b/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/top_level.txt deleted file mode 100644 index 7f7afbf..0000000 --- a/lib/python3.12/site-packages/Jinja2-3.1.3.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -jinja2 diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/INSTALLER b/lib/python3.12/site-packages/Markdown-3.6.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/lib/python3.12/site-packages/Markdown-3.6.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/LICENSE.md b/lib/python3.12/site-packages/Markdown-3.6.dist-info/LICENSE.md deleted file mode 100644 index 6249d60..0000000 --- a/lib/python3.12/site-packages/Markdown-3.6.dist-info/LICENSE.md +++ /dev/null @@ -1,30 +0,0 @@ -BSD 3-Clause License - -Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) -Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) -Copyright 2004 Manfred Stienstra (the original version) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/METADATA b/lib/python3.12/site-packages/Markdown-3.6.dist-info/METADATA deleted file mode 100644 index 516d18d..0000000 --- a/lib/python3.12/site-packages/Markdown-3.6.dist-info/METADATA +++ /dev/null @@ -1,146 +0,0 @@ -Metadata-Version: 2.1 -Name: Markdown -Version: 3.6 -Summary: Python implementation of John Gruber's Markdown. -Author: Manfred Stienstra, Yuri Takhteyev -Author-email: Waylan limberg -Maintainer: Isaac Muse -Maintainer-email: Waylan Limberg -License: BSD 3-Clause License - - Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) - Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) - Copyright 2004 Manfred Stienstra (the original version) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Project-URL: Homepage, https://Python-Markdown.github.io/ -Project-URL: Documentation, https://Python-Markdown.github.io/ -Project-URL: Repository, https://github.com/Python-Markdown/markdown -Project-URL: Issue Tracker, https://github.com/Python-Markdown/markdown/issues -Project-URL: Changelog, https://python-markdown.github.io/changelog/ -Keywords: markdown,markdown-parser,python-markdown,markdown-to-html -Classifier: Development Status :: 5 - Production/Stable -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Communications :: Email :: Filters -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries -Classifier: Topic :: Internet :: WWW/HTTP :: Site Management -Classifier: Topic :: Software Development :: Documentation -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Text Processing :: Filters -Classifier: Topic :: Text Processing :: Markup :: HTML -Classifier: Topic :: Text Processing :: Markup :: Markdown -Requires-Python: >=3.8 -Description-Content-Type: text/markdown -License-File: LICENSE.md -Requires-Dist: importlib-metadata >=4.4 ; python_version < "3.10" -Provides-Extra: docs -Requires-Dist: mkdocs >=1.5 ; extra == 'docs' -Requires-Dist: mkdocs-nature >=0.6 ; extra == 'docs' -Requires-Dist: mdx-gh-links >=0.2 ; extra == 'docs' -Requires-Dist: mkdocstrings[python] ; extra == 'docs' -Requires-Dist: mkdocs-gen-files ; extra == 'docs' -Requires-Dist: mkdocs-section-index ; extra == 'docs' -Requires-Dist: mkdocs-literate-nav ; extra == 'docs' -Provides-Extra: testing -Requires-Dist: coverage ; extra == 'testing' -Requires-Dist: pyyaml ; extra == 'testing' - -[Python-Markdown][] -=================== - -[![Build Status][build-button]][build] -[![Coverage Status][codecov-button]][codecov] -[![Latest Version][mdversion-button]][md-pypi] -[![Python Versions][pyversion-button]][md-pypi] -[![BSD License][bsdlicense-button]][bsdlicense] -[![Code of Conduct][codeofconduct-button]][Code of Conduct] - -[build-button]: https://github.com/Python-Markdown/markdown/workflows/CI/badge.svg?event=push -[build]: https://github.com/Python-Markdown/markdown/actions?query=workflow%3ACI+event%3Apush -[codecov-button]: https://codecov.io/gh/Python-Markdown/markdown/branch/master/graph/badge.svg -[codecov]: https://codecov.io/gh/Python-Markdown/markdown -[mdversion-button]: https://img.shields.io/pypi/v/Markdown.svg -[md-pypi]: https://pypi.org/project/Markdown/ -[pyversion-button]: https://img.shields.io/pypi/pyversions/Markdown.svg -[bsdlicense-button]: https://img.shields.io/badge/license-BSD-yellow.svg -[bsdlicense]: https://opensource.org/licenses/BSD-3-Clause -[codeofconduct-button]: https://img.shields.io/badge/code%20of%20conduct-contributor%20covenant-green.svg?style=flat-square -[Code of Conduct]: https://github.com/Python-Markdown/markdown/blob/master/CODE_OF_CONDUCT.md - -This is a Python implementation of John Gruber's [Markdown][]. -It is almost completely compliant with the reference implementation, -though there are a few known issues. See [Features][] for information -on what exactly is supported and what is not. Additional features are -supported by the [Available Extensions][]. - -[Python-Markdown]: https://Python-Markdown.github.io/ -[Markdown]: https://daringfireball.net/projects/markdown/ -[Features]: https://Python-Markdown.github.io#Features -[Available Extensions]: https://Python-Markdown.github.io/extensions - -Documentation -------------- - -```bash -pip install markdown -``` -```python -import markdown -html = markdown.markdown(your_text_string) -``` - -For more advanced [installation] and [usage] documentation, see the `docs/` directory -of the distribution or the project website at . - -[installation]: https://python-markdown.github.io/install/ -[usage]: https://python-markdown.github.io/reference/ - -See the change log at . - -Support -------- - -You may report bugs, ask for help, and discuss various other issues on the [bug tracker][]. - -[bug tracker]: https://github.com/Python-Markdown/markdown/issues - -Code of Conduct ---------------- - -Everyone interacting in the Python-Markdown project's code bases, issue trackers, -and mailing lists is expected to follow the [Code of Conduct]. diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/RECORD b/lib/python3.12/site-packages/Markdown-3.6.dist-info/RECORD deleted file mode 100644 index 6715a72..0000000 --- a/lib/python3.12/site-packages/Markdown-3.6.dist-info/RECORD +++ /dev/null @@ -1,75 +0,0 @@ -../../../bin/markdown_py,sha256=4ZgxDp0aOu2bvhxlP5wPJakDcatfwd6VqZhBNEDSA6U,243 -Markdown-3.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Markdown-3.6.dist-info/LICENSE.md,sha256=e6TrbRCzKy0R3OE4ITQDUc27swuozMZ4Qdsv_Ybnmso,1650 -Markdown-3.6.dist-info/METADATA,sha256=8_ETqzTxcOemQXj7ujUabMFcDBDGtsRrccFDr1-XWvc,7040 -Markdown-3.6.dist-info/RECORD,, -Markdown-3.6.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Markdown-3.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92 -Markdown-3.6.dist-info/entry_points.txt,sha256=lMEyiiA_ZZyfPCBlDviBl-SiU0cfoeuEKpwxw361sKQ,1102 -Markdown-3.6.dist-info/top_level.txt,sha256=IAxs8x618RXoH1uCqeLLxXsDefJvE_mIibr_M4sOlyk,9 -markdown/__init__.py,sha256=dfzwwdpG9L8QLEPBpLFPIHx_BN056aZXp9xZifTxYIU,1777 -markdown/__main__.py,sha256=innFBxRqwPBNxG1zhKktJji4bnRKtVyYYd30ID13Tcw,5859 -markdown/__meta__.py,sha256=DqtqnYYLznrkvI1G4JalBc4WpgOp48naNoG9zlMWZas,1712 -markdown/__pycache__/__init__.cpython-312.pyc,, -markdown/__pycache__/__main__.cpython-312.pyc,, -markdown/__pycache__/__meta__.cpython-312.pyc,, -markdown/__pycache__/blockparser.cpython-312.pyc,, -markdown/__pycache__/blockprocessors.cpython-312.pyc,, -markdown/__pycache__/core.cpython-312.pyc,, -markdown/__pycache__/htmlparser.cpython-312.pyc,, -markdown/__pycache__/inlinepatterns.cpython-312.pyc,, -markdown/__pycache__/postprocessors.cpython-312.pyc,, -markdown/__pycache__/preprocessors.cpython-312.pyc,, -markdown/__pycache__/serializers.cpython-312.pyc,, -markdown/__pycache__/test_tools.cpython-312.pyc,, -markdown/__pycache__/treeprocessors.cpython-312.pyc,, -markdown/__pycache__/util.cpython-312.pyc,, -markdown/blockparser.py,sha256=j4CQImVpiq7g9pz8wCxvzT61X_T2iSAjXupHJk8P3eA,5728 -markdown/blockprocessors.py,sha256=koY5rq8DixzBCHcquvZJp6x2JYyBGjrwxMWNZhd6D2U,27013 -markdown/core.py,sha256=DyyzDsmd-KcuEp8ZWUKJAeUCt7B7G3J3NeqZqp3LphI,21335 -markdown/extensions/__init__.py,sha256=9z1khsdKCVrmrJ_2GfxtPAdjD3FyMe5vhC7wmM4O9m0,4822 -markdown/extensions/__pycache__/__init__.cpython-312.pyc,, -markdown/extensions/__pycache__/abbr.cpython-312.pyc,, -markdown/extensions/__pycache__/admonition.cpython-312.pyc,, -markdown/extensions/__pycache__/attr_list.cpython-312.pyc,, -markdown/extensions/__pycache__/codehilite.cpython-312.pyc,, -markdown/extensions/__pycache__/def_list.cpython-312.pyc,, -markdown/extensions/__pycache__/extra.cpython-312.pyc,, -markdown/extensions/__pycache__/fenced_code.cpython-312.pyc,, -markdown/extensions/__pycache__/footnotes.cpython-312.pyc,, -markdown/extensions/__pycache__/legacy_attrs.cpython-312.pyc,, -markdown/extensions/__pycache__/legacy_em.cpython-312.pyc,, -markdown/extensions/__pycache__/md_in_html.cpython-312.pyc,, -markdown/extensions/__pycache__/meta.cpython-312.pyc,, -markdown/extensions/__pycache__/nl2br.cpython-312.pyc,, -markdown/extensions/__pycache__/sane_lists.cpython-312.pyc,, -markdown/extensions/__pycache__/smarty.cpython-312.pyc,, -markdown/extensions/__pycache__/tables.cpython-312.pyc,, -markdown/extensions/__pycache__/toc.cpython-312.pyc,, -markdown/extensions/__pycache__/wikilinks.cpython-312.pyc,, -markdown/extensions/abbr.py,sha256=JqFOfU7JlhIFY06-nZnSU0wDqneFKKWMe95eXB-iLtc,3250 -markdown/extensions/admonition.py,sha256=Hqcn3I8JG0i-OPWdoqI189TmlQRgH6bs5PmpCANyLlg,6547 -markdown/extensions/attr_list.py,sha256=t3PrgAr5Ebldnq3nJNbteBt79bN0ccXS5RemmQfUZ9g,7820 -markdown/extensions/codehilite.py,sha256=ChlmpM6S--j-UK7t82859UpYjm8EftdiLqmgDnknyes,13503 -markdown/extensions/def_list.py,sha256=J3NVa6CllfZPsboJCEycPyRhtjBHnOn8ET6omEvVlDo,4029 -markdown/extensions/extra.py,sha256=1vleT284kued4HQBtF83IjSumJVo0q3ng6MjTkVNfNQ,2163 -markdown/extensions/fenced_code.py,sha256=-fYSmRZ9DTYQ8HO9b_78i47kVyVu6mcVJlqVTMdzvo4,8300 -markdown/extensions/footnotes.py,sha256=bRFlmIBOKDI5efG1jZfDkMoV2osfqWip1rN1j2P-mMg,16710 -markdown/extensions/legacy_attrs.py,sha256=oWcyNrfP0F6zsBoBOaD5NiwrJyy4kCpgQLl12HA7JGU,2788 -markdown/extensions/legacy_em.py,sha256=-Z_w4PEGSS-Xg-2-BtGAnXwwy5g5GDgv2tngASnPgxg,1693 -markdown/extensions/md_in_html.py,sha256=y4HEWEnkvfih22fojcaJeAmjx1AtF8N-a_jb6IDFfts,16546 -markdown/extensions/meta.py,sha256=v_4Uq7nbcQ76V1YAvqVPiNLbRLIQHJsnfsk-tN70RmY,2600 -markdown/extensions/nl2br.py,sha256=9KKcrPs62c3ENNnmOJZs0rrXXqUtTCfd43j1_OPpmgU,1090 -markdown/extensions/sane_lists.py,sha256=ogAKcm7gEpcXV7fSTf8JZH5YdKAssPCEOUzdGM3C9Tw,2150 -markdown/extensions/smarty.py,sha256=yqT0OiE2AqYrqqZtcUFFmp2eJsQHomiKzgyG2JFb9rI,11048 -markdown/extensions/tables.py,sha256=oTDvGD1qp9xjVWPGYNgDBWe9NqsX5gS6UU5wUsQ1bC8,8741 -markdown/extensions/toc.py,sha256=PGg-EqbBubm3n0b633r8Xa9kc6JIdbo20HGAOZ6GEl8,18322 -markdown/extensions/wikilinks.py,sha256=j7D2sozica6sqXOUa_GuAXqIzxp-7Hi60bfXymiuma8,3285 -markdown/htmlparser.py,sha256=dEr6IE7i9b6Tc1gdCLZGeWw6g6-E-jK1Z4KPj8yGk8Q,14332 -markdown/inlinepatterns.py,sha256=7_HF5nTOyQag_CyBgU4wwmuI6aMjtadvGadyS9IP21w,38256 -markdown/postprocessors.py,sha256=eYi6eW0mGudmWpmsW45hduLwX66Zr8Bf44WyU9vKp-I,4807 -markdown/preprocessors.py,sha256=pq5NnHKkOSVQeIo-ajC-Yt44kvyMV97D04FBOQXctJM,3224 -markdown/serializers.py,sha256=YtAFYQoOdp_TAmYGow6nBo0eB6I-Sl4PTLdLDfQJHwQ,7174 -markdown/test_tools.py,sha256=MtN4cf3ZPDtb83wXLTol-3q3aIGRIkJ2zWr6fd-RgVE,8662 -markdown/treeprocessors.py,sha256=o4dnoZZsIeVV8qR45Njr8XgwKleWYDS5pv8dKQhJvv8,17651 -markdown/util.py,sha256=vJ1E0xjMzDAlTqLUSJWgdEvxdQfLXDEYUssOQMw9kPQ,13929 diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/REQUESTED b/lib/python3.12/site-packages/Markdown-3.6.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/WHEEL b/lib/python3.12/site-packages/Markdown-3.6.dist-info/WHEEL deleted file mode 100644 index bab98d6..0000000 --- a/lib/python3.12/site-packages/Markdown-3.6.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.43.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/entry_points.txt b/lib/python3.12/site-packages/Markdown-3.6.dist-info/entry_points.txt deleted file mode 100644 index be3bd8f..0000000 --- a/lib/python3.12/site-packages/Markdown-3.6.dist-info/entry_points.txt +++ /dev/null @@ -1,22 +0,0 @@ -[console_scripts] -markdown_py = markdown.__main__:run - -[markdown.extensions] -abbr = markdown.extensions.abbr:AbbrExtension -admonition = markdown.extensions.admonition:AdmonitionExtension -attr_list = markdown.extensions.attr_list:AttrListExtension -codehilite = markdown.extensions.codehilite:CodeHiliteExtension -def_list = markdown.extensions.def_list:DefListExtension -extra = markdown.extensions.extra:ExtraExtension -fenced_code = markdown.extensions.fenced_code:FencedCodeExtension -footnotes = markdown.extensions.footnotes:FootnoteExtension -legacy_attrs = markdown.extensions.legacy_attrs:LegacyAttrExtension -legacy_em = markdown.extensions.legacy_em:LegacyEmExtension -md_in_html = markdown.extensions.md_in_html:MarkdownInHtmlExtension -meta = markdown.extensions.meta:MetaExtension -nl2br = markdown.extensions.nl2br:Nl2BrExtension -sane_lists = markdown.extensions.sane_lists:SaneListExtension -smarty = markdown.extensions.smarty:SmartyExtension -tables = markdown.extensions.tables:TableExtension -toc = markdown.extensions.toc:TocExtension -wikilinks = markdown.extensions.wikilinks:WikiLinkExtension diff --git a/lib/python3.12/site-packages/Markdown-3.6.dist-info/top_level.txt b/lib/python3.12/site-packages/Markdown-3.6.dist-info/top_level.txt deleted file mode 100644 index 0918c97..0000000 --- a/lib/python3.12/site-packages/Markdown-3.6.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -markdown diff --git a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER b/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst b/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst deleted file mode 100644 index 9d227a0..0000000 --- a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/LICENSE.rst +++ /dev/null @@ -1,28 +0,0 @@ -Copyright 2010 Pallets - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/METADATA b/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/METADATA deleted file mode 100644 index dfe37d5..0000000 --- a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/METADATA +++ /dev/null @@ -1,93 +0,0 @@ -Metadata-Version: 2.1 -Name: MarkupSafe -Version: 2.1.5 -Summary: Safely add untrusted strings to HTML/XML markup. -Home-page: https://palletsprojects.com/p/markupsafe/ -Maintainer: Pallets -Maintainer-email: contact@palletsprojects.com -License: BSD-3-Clause -Project-URL: Donate, https://palletsprojects.com/donate -Project-URL: Documentation, https://markupsafe.palletsprojects.com/ -Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/ -Project-URL: Source Code, https://github.com/pallets/markupsafe/ -Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/ -Project-URL: Chat, https://discord.gg/pallets -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content -Classifier: Topic :: Text Processing :: Markup :: HTML -Requires-Python: >=3.7 -Description-Content-Type: text/x-rst -License-File: LICENSE.rst - -MarkupSafe -========== - -MarkupSafe implements a text object that escapes characters so it is -safe to use in HTML and XML. Characters that have special meanings are -replaced so that they display as the actual characters. This mitigates -injection attacks, meaning untrusted user input can safely be displayed -on a page. - - -Installing ----------- - -Install and update using `pip`_: - -.. code-block:: text - - pip install -U MarkupSafe - -.. _pip: https://pip.pypa.io/en/stable/getting-started/ - - -Examples --------- - -.. code-block:: pycon - - >>> from markupsafe import Markup, escape - - >>> # escape replaces special characters and wraps in Markup - >>> escape("") - Markup('<script>alert(document.cookie);</script>') - - >>> # wrap in Markup to mark text "safe" and prevent escaping - >>> Markup("Hello") - Markup('hello') - - >>> escape(Markup("Hello")) - Markup('hello') - - >>> # Markup is a str subclass - >>> # methods and operators escape their arguments - >>> template = Markup("Hello {name}") - >>> template.format(name='"World"') - Markup('Hello "World"') - - -Donate ------- - -The Pallets organization develops and supports MarkupSafe and other -popular packages. In order to grow the community of contributors and -users, and allow the maintainers to devote more time to the projects, -`please donate today`_. - -.. _please donate today: https://palletsprojects.com/donate - - -Links ------ - -- Documentation: https://markupsafe.palletsprojects.com/ -- Changes: https://markupsafe.palletsprojects.com/changes/ -- PyPI Releases: https://pypi.org/project/MarkupSafe/ -- Source Code: https://github.com/pallets/markupsafe/ -- Issue Tracker: https://github.com/pallets/markupsafe/issues/ -- Chat: https://discord.gg/pallets diff --git a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/RECORD b/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/RECORD deleted file mode 100644 index 2f91c3e..0000000 --- a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/RECORD +++ /dev/null @@ -1,14 +0,0 @@ -MarkupSafe-2.1.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -MarkupSafe-2.1.5.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 -MarkupSafe-2.1.5.dist-info/METADATA,sha256=2dRDPam6OZLfpX0wg1JN5P3u9arqACxVSfdGmsJU7o8,3003 -MarkupSafe-2.1.5.dist-info/RECORD,, -MarkupSafe-2.1.5.dist-info/WHEEL,sha256=1_erwh2TCU3TrYzgBQGCtZskLEmw2vbfn7Xu2mHHvyU,111 -MarkupSafe-2.1.5.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 -markupsafe/__init__.py,sha256=r7VOTjUq7EMQ4v3p4R1LoVOGJg6ysfYRncLr34laRBs,10958 -markupsafe/__pycache__/__init__.cpython-312.pyc,, -markupsafe/__pycache__/_native.cpython-312.pyc,, -markupsafe/_native.py,sha256=GR86Qvo_GcgKmKreA1WmYN9ud17OFwkww8E-fiW-57s,1713 -markupsafe/_speedups.c,sha256=X2XvQVtIdcK4Usz70BvkzoOfjTCmQlDkkjYSn-swE0g,7083 -markupsafe/_speedups.cpython-312-darwin.so,sha256=zO55W2sOSohVnMko0CD2bITP4v6UpfeRj-x2I_8pGkA,35208 -markupsafe/_speedups.pyi,sha256=vfMCsOgbAXRNLUXkyuyonG8uEWKYU4PDqNuMaDELAYw,229 -markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 diff --git a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL b/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL deleted file mode 100644 index 0271fd6..0000000 --- a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) -Root-Is-Purelib: false -Tag: cp312-cp312-macosx_10_9_x86_64 - diff --git a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt b/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt deleted file mode 100644 index 75bf729..0000000 --- a/lib/python3.12/site-packages/MarkupSafe-2.1.5.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -markupsafe diff --git a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/INSTALLER b/lib/python3.12/site-packages/Wand-0.6.13.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/LICENSE b/lib/python3.12/site-packages/Wand-0.6.13.dist-info/LICENSE deleted file mode 100644 index c270f2c..0000000 --- a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Original work Copyright (C) 2011-2018 by Hong Minhee -Modified work Copyright (C) 2019-2023 by E. McConville - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/METADATA b/lib/python3.12/site-packages/Wand-0.6.13.dist-info/METADATA deleted file mode 100644 index de7327d..0000000 --- a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/METADATA +++ /dev/null @@ -1,128 +0,0 @@ -Metadata-Version: 2.1 -Name: Wand -Version: 0.6.13 -Summary: Ctypes-based simple MagickWand API binding for Python -Home-page: http://wand-py.org/ -Author: Hong Minhee -Author-email: hongminhee@member.fsf.org -Maintainer: E. McConville -Maintainer-email: emcconville@emcconville.com -License: MIT License -Project-URL: Documentation, https://docs.wand-py.org -Project-URL: Source, https://github.com/emcconville/wand -Project-URL: Tracker, https://github.com/emcconville/wand/issues -Keywords: ImageMagick ctypes -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Programming Language :: Python :: Implementation :: Stackless -Classifier: Topic :: Multimedia :: Graphics -Description-Content-Type: text/x-rst -License-File: LICENSE -Provides-Extra: doc -Requires-Dist: Sphinx (>=5.3.0) ; extra == 'doc' -Provides-Extra: test -Requires-Dist: pytest (>=7.2.0) ; extra == 'test' - -.. image:: https://docs.wand-py.org/en/latest/_static/wand.png - :width: 120 - :height: 120 - -Wand_ -===== - -Wand is a ``ctypes``-based simple ImageMagick_ binding for Python, -supporting 2.7, 3.3+, and PyPy. All functionalities of MagickWand API are -implemented in Wand. - -You can install the package from PyPI_ by using ``pip``: - -.. code-block:: console - - $ pip install Wand - -Or would you like to enjoy the bleeding edge? Check out the head -revision of the source code from the `GitHub repository`__: - -.. code-block:: console - - $ git clone git://github.com/emcconville/wand.git - $ cd wand/ - $ python setup.py install - -.. _Wand: http://wand-py.org/ -.. _ImageMagick: https://www.imagemagick.org/ -.. _PyPI: https://pypi.python.org/pypi/Wand -__ https://github.com/emcconville/wand - - -Docs ----- - -Recent version - https://docs.wand-py.org/ - -Development version - https://docs.wand-py.org/en/latest/ - - .. image:: https://readthedocs.org/projects/wand/badge/ - :alt: Documentation Status - :target: https://docs.wand-py.org/en/latest/ - - -Community ---------- - -Website - http://wand-py.org/ - -GitHub - https://github.com/emcconville/wand - -Package Index (Cheeseshop) - https://pypi.python.org/pypi/Wand - - .. image:: https://badge.fury.io/py/Wand.svg? - :alt: Latest PyPI version - :target: https://pypi.python.org/pypi/Wand - -Discord - https://discord.gg/wtDWDE9fXK - -Stack Overflow tag (Q&A) - http://stackoverflow.com/questions/tagged/wand - -Continuous Integration (Travis CI) - https://app.travis-ci.com/emcconville/wand - - .. image:: https://app.travis-ci.com/emcconville/wand.svg?branch=master - :alt: Build Status - :target: https://app.travis-ci.com/emcconville/wand - -Continuous Integration (GitHub Actions) - https://github.com/emcconville/wand/actions - - .. image:: https://github.com/emcconville/wand/workflows/Wand%20CI/badge.svg - :alt: Build Status - :target: https://github.com/emcconville/wand/actions?query=workflow%3A%22Wand+CI%22 - -Code Coverage - https://coveralls.io/r/emcconville/wand - - .. image:: https://coveralls.io/repos/github/emcconville/wand/badge.svg?branch=master - :target: https://coveralls.io/github/emcconville/wand?branch=master diff --git a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/RECORD b/lib/python3.12/site-packages/Wand-0.6.13.dist-info/RECORD deleted file mode 100644 index 86ab4e2..0000000 --- a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/RECORD +++ /dev/null @@ -1,53 +0,0 @@ -Wand-0.6.13.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Wand-0.6.13.dist-info/LICENSE,sha256=LApHI5GF4xKeFcpRi4lLV5DPNhJG7jO9M0B0PLsdr2c,1183 -Wand-0.6.13.dist-info/METADATA,sha256=oeM5ek_GiYCwvpVcIAs4jy1n3xVwMggUNWmXy1wqzA8,3963 -Wand-0.6.13.dist-info/RECORD,, -Wand-0.6.13.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Wand-0.6.13.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110 -Wand-0.6.13.dist-info/top_level.txt,sha256=uFTymN2uxamdZLu2fxZzaBcGwv7WW9v60YcsATzndig,5 -wand/__init__.py,sha256=bEmSKTbdilJXM5PTgsuaqvpliBlmy2of5f77SJMKRh8,202 -wand/__pycache__/__init__.cpython-312.pyc,, -wand/__pycache__/api.cpython-312.pyc,, -wand/__pycache__/assertions.cpython-312.pyc,, -wand/__pycache__/color.cpython-312.pyc,, -wand/__pycache__/compat.cpython-312.pyc,, -wand/__pycache__/display.cpython-312.pyc,, -wand/__pycache__/drawing.cpython-312.pyc,, -wand/__pycache__/exceptions.cpython-312.pyc,, -wand/__pycache__/font.cpython-312.pyc,, -wand/__pycache__/image.cpython-312.pyc,, -wand/__pycache__/resource.cpython-312.pyc,, -wand/__pycache__/sequence.cpython-312.pyc,, -wand/__pycache__/version.cpython-312.pyc,, -wand/api.py,sha256=BXkdzrPqIA0inKkAuuvBFQfjSVKvbX0vAeBLwA1o6ek,10212 -wand/assertions.py,sha256=Ou1l9us4pgxhu-StOivBSMU4zoSKvcjY0WzefQtE0ZE,4721 -wand/cdefs/__init__.py,sha256=YaCYVyNhimXKrD5xWLrAmaMsBAr0QrnVshC7b_vfIPE,126 -wand/cdefs/__pycache__/__init__.cpython-312.pyc,, -wand/cdefs/__pycache__/core.cpython-312.pyc,, -wand/cdefs/__pycache__/drawing_wand.cpython-312.pyc,, -wand/cdefs/__pycache__/magick_image.cpython-312.pyc,, -wand/cdefs/__pycache__/magick_property.cpython-312.pyc,, -wand/cdefs/__pycache__/magick_wand.cpython-312.pyc,, -wand/cdefs/__pycache__/pixel_iterator.cpython-312.pyc,, -wand/cdefs/__pycache__/pixel_wand.cpython-312.pyc,, -wand/cdefs/__pycache__/structures.cpython-312.pyc,, -wand/cdefs/__pycache__/wandtypes.cpython-312.pyc,, -wand/cdefs/core.py,sha256=raahBqwXxAndWUd3a4K_wiwx5hP07Hm0j2SBPSs4Yys,5783 -wand/cdefs/drawing_wand.py,sha256=hDIy9UnNOuCNuUj0nhelHRSTCh3Gd8Td5uu4Ng9_vQk,12343 -wand/cdefs/magick_image.py,sha256=lExHUubi3qo7XB53g-r51xSJTUf1RV5M4fDtvjfxZyE,53527 -wand/cdefs/magick_property.py,sha256=YdE5asyvGnmB2MiXRafGepK5sS5U0tSqWUoRm5osx7Q,8659 -wand/cdefs/magick_wand.py,sha256=cXrruT_7sUfOh7J603bjJDyjgZninUjbbKmkJVRcsME,2477 -wand/cdefs/pixel_iterator.py,sha256=6At0KxkCJ8XDwyud9zmMBViFG1yJqa55_9ob9jxXT2Q,1797 -wand/cdefs/pixel_wand.py,sha256=3ilKZhDkB6uPa1_0ojuHI94mW5iX6Kikv5Js_60WNK4,7553 -wand/cdefs/structures.py,sha256=-1KlazZv0ErnKCdQ8DMpF02AFPIbqbdlI8dlALm0-Jo,6787 -wand/cdefs/wandtypes.py,sha256=0_VgrY2IurGmaRcsPYFKVDPpqekRn4upQFZEXoQqoPw,1400 -wand/color.py,sha256=YaiApbRC1RoUbHd12Q7gtzYjqrnqHXuSlCoB3OjoBhM,24509 -wand/compat.py,sha256=4hYn7AdKfVNxhLiazNXZsePk5HSI2ZYEmcmshVhaplY,4571 -wand/display.py,sha256=mhlxoWKjGbyfliHAEbeeDdFLsgS0CYsPB91TbHfY258,2450 -wand/drawing.py,sha256=dQUv8hn5iSke6Mijj10G2hvPg0Udzpghx5wexfuTkQU,80107 -wand/exceptions.py,sha256=ZtD_15ij58SYXp7QXMxbXp8291vYH0k5MFQJPflICdU,11165 -wand/font.py,sha256=8auFsXmnLppE6TDvopXHCg430ZK6NkqEGqEkVkaPgsk,4021 -wand/image.py,sha256=5dVN50SufrIwlkmRBzU1eQVSr0OuQDVoZDy7WP2St4A,431410 -wand/resource.py,sha256=NrlAzL4QnyxeQp-uZS1WT4HA1kqf1y9QJ6tluZowHmg,11805 -wand/sequence.py,sha256=ewZnCuR7rOeLQTp5Ix34dxu5huiCEx5GUVjEdgDzDKU,13183 -wand/version.py,sha256=N-YjDddbg9jLv_pSgBomtDGAHMFtz8pDHTWQG9HrS-o,10692 diff --git a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/REQUESTED b/lib/python3.12/site-packages/Wand-0.6.13.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/WHEEL b/lib/python3.12/site-packages/Wand-0.6.13.dist-info/WHEEL deleted file mode 100644 index 9d8f872..0000000 --- a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.38.4) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/top_level.txt b/lib/python3.12/site-packages/Wand-0.6.13.dist-info/top_level.txt deleted file mode 100644 index 375e1d6..0000000 --- a/lib/python3.12/site-packages/Wand-0.6.13.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -wand diff --git a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/INSTALLER b/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/METADATA b/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/METADATA deleted file mode 100644 index 857ca6a..0000000 --- a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/METADATA +++ /dev/null @@ -1,27 +0,0 @@ -Metadata-Version: 2.1 -Name: fpdf -Version: 1.7.2 -Summary: Simple PDF generation for Python -Home-page: http://code.google.com/p/pyfpdf -Download-URL: https://github.com/reingart/pyfpdf/tarball/1.7.2 -Author: Olivier PLATHEY ported by Max -Author-email: maxpat78@yahoo.it -Maintainer: Mariano Reingart -Maintainer-email: reingart@gmail.com -License: LGPLv3+ -Keywords: pdf,unicode,png,jpg,ttf -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2.5 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3.2 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Operating System :: OS Independent -Classifier: Topic :: Software Development :: Libraries :: PHP Classes -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Multimedia :: Graphics - diff --git a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/RECORD b/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/RECORD deleted file mode 100644 index f7e6c38..0000000 --- a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/RECORD +++ /dev/null @@ -1,22 +0,0 @@ -fpdf-1.7.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -fpdf-1.7.2.dist-info/METADATA,sha256=uC7PCusjTBkhFZeHhnBnD3uhgg2oKFS5xQUayFX2_p0,1146 -fpdf-1.7.2.dist-info/RECORD,, -fpdf-1.7.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -fpdf-1.7.2.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110 -fpdf-1.7.2.dist-info/top_level.txt,sha256=5LInphvlslEpMUNNFUFlIxUmargkp4k1WqQnoDBAF-w,5 -fpdf/__init__.py,sha256=4IFfKo-doXEmaBsycnxiygWlU_mLBl8qZ_0KWu1axq0,415 -fpdf/__pycache__/__init__.cpython-312.pyc,, -fpdf/__pycache__/fonts.cpython-312.pyc,, -fpdf/__pycache__/fpdf.cpython-312.pyc,, -fpdf/__pycache__/html.cpython-312.pyc,, -fpdf/__pycache__/php.cpython-312.pyc,, -fpdf/__pycache__/py3k.cpython-312.pyc,, -fpdf/__pycache__/template.cpython-312.pyc,, -fpdf/__pycache__/ttfonts.cpython-312.pyc,, -fpdf/fonts.py,sha256=zldged9bndZMJZkg9sXb1nF6vv8i7KhMBrpJMOcKDec,26573 -fpdf/fpdf.py,sha256=qoNd_YEn0mBSQObG8eACOPNXDvTweJlDFfyw6LQi7vU,75624 -fpdf/html.py,sha256=jYqV0oatI7e5pS4VHswH9Ue0fx9RYdn4QiFkG8Fp3X8,14733 -fpdf/php.py,sha256=0UwFm1tR7DSOXH8xeNOAboaskytznL6Dpcp1UyI63yg,1516 -fpdf/py3k.py,sha256=A65E5L989fKEYoEfQDYDI8-hpCQOqALjMBFyspZsvJg,1602 -fpdf/template.py,sha256=8AJ_-oYLBh2ZaIOXQrFtMp9sWyZajgpjSBJDWxqkL2U,9282 -fpdf/ttfonts.py,sha256=dRwaAJF563I5loy5glrw12A9GTSRpD3U-MYfZC4TbJE,40412 diff --git a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/REQUESTED b/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/WHEEL b/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/WHEEL deleted file mode 100644 index 832be11..0000000 --- a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.43.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/top_level.txt b/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/top_level.txt deleted file mode 100644 index 744c7fb..0000000 --- a/lib/python3.12/site-packages/fpdf-1.7.2.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -fpdf diff --git a/lib/python3.12/site-packages/fpdf/__init__.py b/lib/python3.12/site-packages/fpdf/__init__.py deleted file mode 100644 index 6c8a431..0000000 --- a/lib/python3.12/site-packages/fpdf/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -"FPDF for python" - -__license__ = "LGPL 3.0" -__version__ = "1.7.2" - -from .fpdf import FPDF, FPDF_FONT_DIR, FPDF_VERSION, SYSTEM_TTFONTS, set_global, FPDF_CACHE_MODE, FPDF_CACHE_DIR -try: - from .html import HTMLMixin -except ImportError: - import warnings - warnings.warn("web2py gluon package not installed, required for html2pdf") - -from .template import Template diff --git a/lib/python3.12/site-packages/fpdf/__pycache__/__init__.cpython-312.pyc b/lib/python3.12/site-packages/fpdf/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 0311fd756765024a5e94a6d6ca93a570b5417d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 zcmYL`&ubGw6vt9K?)wC1(BYdNm`u4XWo0f_rCA(-W3X2Al}EH_c|{j z0NZrcvXuj^~e%8rCpaYSm z(43!l@=)43J?Bq5(+~{Q%YYOX0Gku>jH^<^F;ajS_b;7E|NmX>jhIV52zJ2Jg+AC% z?|?omW`|SjTWjlPCuC+cNcO^Ds8w%oRn6tnwV|?9x?U4$EQl3Q#} zG?#~pw**FM2;nacz?pBxg@fFoasD9p14N%e^Z`Vp6oPg570v(20yzJ7qyugCH%N)t p7c_f_rVlor*pKb^GxjG`8!0k=5>JVyFEUratBWg2`YnQj{{SHJ&|&}p diff --git a/lib/python3.12/site-packages/fpdf/__pycache__/fonts.cpython-312.pyc b/lib/python3.12/site-packages/fpdf/__pycache__/fonts.cpython-312.pyc deleted file mode 100644 index 03f5d44efa00e2bb6d47852fd9cc6e631043e2af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62930 zcmeHw3D{Oux%Ru?7Znf`1q2*1)3j71E6cP5oKV356-7jWm*JIBK0v{-QEqzNWwPo>RY_MjMgluQUA5{oK#J_F5uIo$CMp!b{fk-1lC4diHwv z+Rwe$Uf<`24(|7+Jj$H zwTE~))XN>c9OmV4FL&~CXD>&1xr>*(dO6a|QC^PrayKu>csUlO?Pr{$-M!qy%RRl^ z%gepJ+{erDUheDVQ@q^I%cpv|zn2Gi`7|#N^ztB-cVJIXZ$HD%=-~DtRvzl*g!W

yI6l_P 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 diff --git a/lib/python3.12/site-packages/fpdf/__pycache__/html.cpython-312.pyc b/lib/python3.12/site-packages/fpdf/__pycache__/html.cpython-312.pyc deleted file mode 100644 index 314acfa5b6d083060c95d52c35229be71ec706bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23873 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 diff --git a/lib/python3.12/site-packages/fpdf/__pycache__/php.cpython-312.pyc b/lib/python3.12/site-packages/fpdf/__pycache__/php.cpython-312.pyc deleted file mode 100644 index 8661497dc2f17027cf6567283fe7be1b389ca839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2617 zcmZ`*&2JM&6rb5$uQ&d-OF|PsauP^!h+~DcQCgK$d?c+@H9}1gB{V{gcb%BnUT0=a z63dY+L?wq(;gmxxpi9(jltq=Gl~t!|fjO%x!$?uB(6*=wv^LeHw!j;^YP*J(@RVc9xoi)(pJ7-&Aez$I z3xl7UwwW;1s6k@MS<{+M#v;0^Ma24+;3+|6nJOzcpi32Tn1Z*mn^zp>t}HW z&bK0DQ5M5b$iVv!G=c63Q613GEL9G$%q>kR-n>%pvj@K%~Ke--utAjz1VpxT0FNF&tECK+yzTPD~_$jORnyc zwYvhQDAG6~3|MrmP%92-00%f>Mn>#xc>Ep;2&NcK7^V~^vy?Jhzn{3^VOnVlz%`@hHOYBXRmWi82) z3+Vt`!f-ZaNHuJRLBN8~$U#81nlYm%Oj%DGFy2iACoDKTsdL|_MoBOHvlS|hLX$&J zo$i|#Rxf;gF*o+R;wmeyLhoOde`G(xc;Q%c6whyYjsQy} zTVA^vUyT<(*mCu3NZmjdf$vV11qINGNFF1lK^B>ou~nUu*_!S$gafWWl&A<%s#1~ zWV#~#VAchdvKRnd2Rk3zy9x_8P8aYuV-M|JC8_HrJSYq2SH2EuS5{(CVzu%%G`q7> zos3s8@xe>jm*ewv(ugIrQ9^XW_L-owl!>O66-70sk>fBv3YD_72vWAS73h}jKuJ1K z1-V&*tk1nSrC%V?1mYgaTksliV5!x#M09Yz3kw?%=@QXWTG$}(fz2_fl&u8Uf!&c$ zufAWB_Env-v)2pjbEj9K1CbSLcb{)>#jzW&uH1>L^%>wgvu3NjQeLs%Gac`?AuJOx zp^(dI3du9hA96%X8X5^m)zjNjVf9k=N;MVMkIaQhwP!4+G#*>HW*fH?00UO!1T4+y zK~F;is94;cXkj$F?O2_f#Bq?Az`T faQC(Y@3e zI+hy!UWC8(8>14u}mP{oaZAQ3k%sTv8hBv7ebDsfmE4pqy6H*2q(h8`GcXMQv9 z_ukID_nY}C5(yz_JAZyOo#PRDNGE>d8eqSQ5n4woQjm((fPodP;ThJaJs(wO_Ctge zCRpdO3g;o#5K5vVV&u&@BUF+U2_u#N94TRMO)w&*s1j{3L?c#;DKU&RhKO2RNx+v> zgTQVzc`X6+q>|KHl~y$bYbjNNzHKqki!{Cu5dk98U2+OHfo^5z(E>Ap=5fOs^sKBA ztnUaI7Y;FwH1{dh_i08Nz8v@l6lnsPtnUN1ES;M9XzK9eBjRNCMEMu_Me8qg>HUfJ{k!s{r+GHmU;3-Tx7~b!0bf zcN>&Xuua2wjT~FXGrn&8MHrXSjBsGufGWP*h~|$Nfq(G7O#ffw)c(@=|35-HaCwQl zdgV<2+i8x_SPnZjF?7M<=PGL6)*K%4SXMPBSkx9&{hDUk>3|cMHXU5F=s{)q>AB2R z3-Xz%lubQjlp*s=<^FkXDq|IhUa>QVK9#9>`5zh>Jf5+1TkEgn3$uBMmYJ@o(_kH% z9jGiiVli(OD|x#}q7b?hKIt#cfJJw1`s-T<Ri@H?NTDFQv4B!iK=_}#I{RY56 z^(>?3s=3?H4~c_LUQ*rXIvGEpKZrp8?6qcuZd>%%NZ6Kqyo|0jwFWWhNxZgcU7BQO6IoOk^kX6*b$(n6LC^Fk}**6ZVQ~wCWK}UUQ1K=UI?a4RIk9^i4GkYZc6=~ z9wmd|MRR0H(7O!A_%9LRv-lwjJrF`a3+?xW_Kg$wgq|wvvJ6iA%67RTgZuVyrz`R} zxyN=s4)eIfZR2rjkL_@yp7Aw^!iu$cYxVtFG+sUXODOf}=?C#nI!#s2)Bqc) zU)fJExciAahmn|kj4)2@v2nVM#4|V4SnB&7_tK?4e~HCOH^6Yo-^9)*HK`5UxMVGw zxWNF6Oa9{uKzQc%dG0JuQEqBiZ1uURT1)EX1kfqE=+q_$__A_{h0QHTrSFNp5(Kmfz1(2@u-j!xh*aL zcuT+(iwwmPYTb%+xi^`ub~e`)*y_X-cL}+p+*WUZ;@2_7M;VIW@T?grH^OWUW9a_{ DYkUNW diff --git a/lib/python3.12/site-packages/fpdf/__pycache__/template.cpython-312.pyc b/lib/python3.12/site-packages/fpdf/__pycache__/template.cpython-312.pyc deleted file mode 100644 index 2ce15e68ec1c18b819794346ac22081c07465e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13002 zcmcgzeQX;?cHbp;`Av}$DT$J0i}nxZIRN^-?4a;*;yP#EYRid3{c zqd@xJ><1~DNpnTf0W>>1J2N|+dGGgr@6GD(>~;$UY2{yEzi_mLqW&3g)Wj%-jSEni zr8sJk;^;w|(+%o4{h*#>I5x}-GUUn*vgB$QG;jva7&eZY22C^tWmDKZY8kYQS_iG8 zwm}=znct=c?KgRI z3j{9(hIz65!WeggB~`O;i@N~Xu~mJ6gOvuJ3Cj++2C5i)o^yWI=EV{0Fb!3F%xhV~xt?lu)9Q~dlLHTk1B!%Gper?Q{ORZ1n z6AY)jqrZ*664DiV$^tF5_arPMwepkVJi!+ITFXdX@iV!cFl=hErA!OcrWRYvv@mXJ z(O9O1xzJ*g@-h8BgG8T~=st-)CDBJE-O*l&enrxaj)Eo{00Bk=G07SgLVP3^h=rmN zi2-Gd`J9qH91U=OKFp88BT-^v{FRu*ghLTtVnd^#7ZM}z!I)$m3J9pY5<4M))<~v{ zfe04{U6WYsA_}<2k{(n@GK+l79}C68ykx;*U>p=qkgQk^3Va}@-iYHvBRIAVpIqW6 zC!zu;`m7Qo^5F}TAr!d~f-y|$yI4wu)~W7KtBP&W*tzFtjHQ@VtX)8V?0;K(KEwsN1+ zU8`lF2ehXAiat@)q&}#lN$mtkXuS0ltaT_54#jzI>>}?CMPj@V3531M_Iklej0a=m z0xt^qizFrz80GtYjKq!&`y)}I4J+Ajbb=Qo2DVr9>4hhuPJTdN7V*un$7FMb2DpjW zX#2WJ%2A=jPROoO52|Z$Z}J{5?o|G%&X4SO?f>BJ$?i?Qn7o{Nb=IHq->=@e+Va8E8z~pmqD{q+7a%{f_4#{UYq{9o*?+Y~W5;GJHbAXpI(5|3l9*=OmKoHyl z@8XArDAXVm3tm#nEHoUB2xxjF)0hwf!w{R4%%kJsSO`1H3aAr?fL)n6J{%ea$QK^b zPduXcNK`+Wm#=~-p0FPV5l|;2COXDPfQ^ZlB?G`bOhPjAk?~Pp05%GyAO?I>oCw7( zN=AVPiW-EO^Opl*iA91qCK&=_FaRfjcu~SLkohdKg73zP@8Bz}z#hRWh5aHwMw&?U z1)yos35mTF5QasG4haXKp@@o6iudL*+z3C+FJ7eqgI2c#yL}1SRcejVIXkDBH3L<* zg}{Og62Ee|K6kp4FQ?BhJDX;Xe1YY6Y|}?Rch$^xr@GUD?12?m*E(f0@0#w-yKAP8 ze_rd&xZZhloif{-Q~D&G+@7!X%qCKaOz%qVuIzUgo0r<2&3o!@n&-@!C$qt2Peg>H5UxM=BDhG z*U!wHS+#j{HgBf-zU_&%I+(^6HB1mjDov=+z+rU#0=~?rlO?JJ%QV@4ncFKiJHT=NF`y+yHe0Pa z3|++SkO50K*{)l@Z%GDb96z+=w>M8S*DW)aWGC*^l4+Z4H}Q39LO3SBm4Ow2-%6L` zx~kfj|8|2BCy2&a?`;6{cbdjVO7!T$0>KlJvQ3;HRmy(J`uBB0!n zATOXLlMH->FhxD6wSfCbc2u?21k+eh`*D7g#g?po&}!gy{3tLox2B*)wY@Nw$U_Dj zY;|1kp6UL

*fX19Jy*)|OwnYTrAZ8NV~U(y%}8*?QA9XUqIf_TsYV=@gr0{SV&zw%iX5*=N&eoLa{IL60_xp#IY)`E@DBF(5$raKP zA|%~V_}>c205wndgOnFgPA8)rE{uq;P$-OKyciIX7RR01Vkk9du_?MIun-Q{_4rKu z2Z?m-=H%SuJ;$zlrd^Lu9RZq5y-Ja9kPoOTO(4TDkPmEGl2qAOBo6hZBthQ>7`4n3 zs4e5`5m_YMascr{(~!cjV3L7D5-tj?e@YMJg2rCoG{1z7Pz_x|55~EHp{5w<#|S3$ z_OLIf$9w<~XA&@r@KZhVQ`x8y!$<6*k0tg+-li7lBEu4rPh)PWR8bVI(XX0|oe`p#~!CXT8kH#?FV$vM0a zYPX=oW?DXMz15nlZOaC8wH^1I9bm3HpZVz7yU+eRMK?U1HRfx#r7x%6TCLrktKGd^ zyJw+!skUofPi<{k!v;wcx%}F-CBLOPb7byd=5lV!o_p>+YkJDvu;!v{TYs}&0S!gm zyH9Exk1|ZKSTM8@fq^jI@&W~mU)B`B)-uZ00yCUqV0+}PML{h|s^|e=e#28`+ZovQ zR^p5(8$QJVe6lb;gBvff35c+u!6J1At`5td2XnUy;Ih{n(hQ-cvL*co>{|~SECg{Nln-JJ z1rAF*wzCjA?GN(du+JzX1|i%w1uXpN-^zoJVtZi0lMqnB35YnJLSJPNamX_wL*j^W zk7g4}o_r7c?*yR&=eDBi`o)=x)B1eto}ahPw*fG?o}<$fc}Gq1^2}SSj+UIGW!bSa zyL+|uP_FgRa%<0$qX!_uy=9#=%|CYp!WgbzdfNEFSvAe(tyRhW-#?r_o*9_yOCQJE zXO^rDX+9&)h0{FVA6&9FW~#Hzw;D3l7`U*_*pjcLUrzZmFJ+%z*gt=G#dI)V?MV-0 z2C@SS1B*v<&cmzD-kh`d=#_s&~ z9ogfH=hs-uxov~eIeY0fN@wn+f3sePt3lBEMq6*sW^hAmq=&za@Hc{64BL=|k(P3{ z57;q0SCtan?f)cjR~AxKpo2)Nz8qw5aCX2k1(<}jWkun8_P09 z3@zU=tLMzjX)36`VKcW%b zaW*1-?Oj-Zd|Z+s0HQ!TOjr zfx?H##w2!eS2;lqN6$ajUOVi-C_VzZktr5t<23S{Pq|Y)FnM z7=$PUnRyv!5n_ddkolYh>m*hPM22~pO`*#upnga$1XYOUMu~IhAAD)QkhL;}AR$BtvvOHZ~sf83^D?Mz|$GWQN02s2$i+H#RIF z;1XUVgRG3P5VXLb9(Ry*jf zlr%o5-+puV-0mBDlE!?~P9%BRbGP=aHg)EjIu~A9eEF__wd-`Q>-2J0->1X(UViOw zqsvXdn>3~kDM#M5B|VXI?aaGtXHTb2rzbL3a*a+vHB@RKg*aTK+#C^J6Jv?P`5LB=PfR z04AA%g=X$u=>d0N)m){s}iOHDnl!D zVM`LkGqeym?4#rAHfUD{Wg#4_BNUZQ=*iWkXqh69& zazhyJyk2I{ggB4E;yz*y?GSq&v4`5>@(}sT!~go~tFKC06_IE{o)Pn8gJTdbV|fCz zE09TsAvmT3sMUodgsg%)yt#$&C)gHw?0I1v@^}S!0i&bf0(5&@cZjV%hh)JsLqD9` zM+I`gE>$4@7b+zSpmtbpAU`YI3oqmF1pWu01m}Yhj)awEyFko|0f)OXDKW^Eg#1 zfmh*8tkTBOPrspZt_vcK1&oSM8=7yozHhHXnpF>`oG>6Vgp9 zwyk-G=N<$>oUU0@%9QR%56yLDIx<7Iy0YgND}kBtNz;92-)EKe*rXy=k*UfYy;Ys9 z${wAsUg%tW-&_v}O*A4GV%3F^7Kv1rkGqYiTMnJKEXR zw>E@Y55*9oFIkcb=YIr>%0(vth5=&P+l<^5;ZO)c*~dy2P6$jqro4qpSz+-U$uGP3 z+pwQuSP0U5^6Dz5j;^t`t(9lvpS$=dqB zwr#psKD+-wpE>=$BWHW+fyugRs?V9~)1Aucx@pFgtV*6sSEbM0H+f|aQ@kj+gk;m| zK`;MbHchc%@Lnwy35E6rNs&+#3z^cVTn|MktlF?zp+qRka2T}BrFQpm0Wk{mFeZU@ z;m@%2Q_OB+h9pSvLIzQlC$ao3q~QZ>R}cxDcoC4wFzSWMBALJsRu-X3L{s*-OytYR zL_uyQZ}co#eVf~ydcPuPYlm>g*UHV&x$2BA({YQvZ`vu#PqEseEXf=g3dn(lMqni% zOQk7cD7VINCPd%S-Bw0KRRj*8@0ZVGm?G=|{i!nH{3wH^v-FWwZT1Ii?(ase0hSrKWkhmAuSEJ@17 znIIZW=qPL#D>u=$EAAqnyoC9{WuEhPL@#uCfsg14+Xqf-iRKWJgLFr76!pcfKHIn1 z*yo_D%wvvYsj$x&CeZd73i4KOhuWgUCgqE-UqY>N>h_=nT{mlqjIP>&)T(29&ar*j z0f(<}T6fR2Yso4*!HqdvV}{9`1Iv4U;pl>J_xL?q<9%BvBWY?~exOSDC?Ald6=Gqmnys`r&u3Z_o6I{E>64$Pri@4dfE9)eJ3ugf5 zAKes4s5`#Oe&HP`3x9+e3F^O#r9Z}O7PB;FbC{vmDIXc2=Tpw7d5BsG*5^HZj;k#E z1hdU9g^M$Tya(ic#DyrRBXJjm58;7`%T}zIN?F!VoI(*4 zlMgZf9(%z;0TctJ1tczJKfi^3CZAohdh@P&a0*DI-{l2Az`PZX9-Z!4N6L{gWL>vx z_nmDEEg!W(G|Bj>>l54kjx+h%E$Jiap=2B!2xoQLm9nK+@B_?S!4I%Glhx_wR70}* zGiznCE8UwqlQ3@$F%?eoUvmy{eA#&#&Ki`%gY)1uFe|1V@axR*Q3rg*(UBZl zG1cL7^NcyUJ$WqczOQ`K;WPL5OS&VS@KqCp4uwD{CQA$vo6VU|_lVvtoPp)Tu;>Z+ zoJj}e(v0*$$$N-~>%@r@@_5+v;a6Y5XYT;o<@#xLaP*^<%a)L+fD2u&5x(4K`r1db zMxd&YCO-SOXsP~!c-6&NY^=Mzoxc)*e;45KyMK8U7k(FuM^k>kWbyk)quh8H%QnCN zjqyNOej@C{w>Dt*I%a;%h9Q&m;CTxe+!G?0y@go{Gr}~GybE5;kX8t2aEM}&@HByb zS<;>O05kj(e;=~9seIqd`IDzM^ftD6y@6p5Z`eHS;q^`(+p=ylu?N;_C~M8t-gSm% zed`7*+rD03$@bD4JFD2XwO!O1`UN`Q^IU#^_XfLzJwtDtqYdo#4X1&9V#BFpkJ4)< z>MZ>t4PRqz=nd?_wJNF~yFC9I)chM;%{I!@!wEqE!|3;O(V)CU@<+%}w)?>=QvPuQ zZsFh`zQ^Mu@XeVY)@4$ZbWu?_3j@H{d+?#O{K+&kHo5PTe0GSWUp`7C$b_#dSr~}e z%Nx=o{53oUwWq`bkge%yn*P#2(M=ERomVY+XV+DGzQS|W`Y%-FGFAC2s^*`lCv()3 UusU@2e;Cf`>Be;mbMmA98*R&kCIA2c diff --git a/lib/python3.12/site-packages/fpdf/__pycache__/ttfonts.cpython-312.pyc b/lib/python3.12/site-packages/fpdf/__pycache__/ttfonts.cpython-312.pyc deleted file mode 100644 index e35b6d463c614685549aa44e59091997ab0168e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40378 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 z zBU+(kw~AA++OBx*=10~ZO1VW+X-Q|(Mc|S$NpDK#`^ef!pj}UD8$KCZ7$eI^m~(Ba zJhoAyidCx{+Cfq0YJHDb-xIIj`UsYnkZ>F3vEp*69>tb}S^&G;SX388y$klxvBy>J zXyszxy_zNSa(%q&rRN%l?VuI{UMFp`olvrP==3CNnxZ!_2hWH#Jxi~O)qCa-KdEhA z%*PyW6Kl6E7l}2ymw)h!9&zt!vF3F6NTO!*QqR)0FSdy_JD0bMHGK$zt-a>ow!>=E zg7JyF>38k->`SJ&dq>2WfN8ihzkMRnmpW%8y$-i>*sd|E&9q?s&_=aQ}ycP<@jX)fO+r9X+d#ouXssa`_`i-&gfim9LCc z>ka1aF1B>f{8SY90L|-J4=vY;Go{CH?)gnUX8|I|%qnweY%_B%{M9q>3ozj15T}Pm z;+@j+n@T7c*fF`<47f65W0iopUwYD_U-0yKaBEuhZ&Y3qqiq!b!cRu2@`j}qe4Gab zk@+jia2jRE$7}(SE#uPp5YI|nTH&VP>%R(@&M`9!78RE+l4+6tOe?z1fMEr(k^+ZobH0mAEu5?O~La?mf|T!R|s75K~XRNL+XlP=4wN zYuN7}A~5@WOEQ-G?}`6Xk+2Pr_-~5!sravo8KyMm$V{L~9SnKk{`vj!lBSUPNkMhw z=3@PVfUP(rS_R!pEe{KJG6Qq8dsn!e1qzLQ8732P9@V|j9j|PM{wPk42ImLk&gRfz z;%7BW1557vf_Y3Y-yxuK7Zc$RRPd_WkF#i zenOok+iG1za(klM3Z>&=;H`cq|!^Zc4JXZknIA0>g}H->GAG z_?>v+p+%Ou@cAM6E)jr!-?3wGPMuH0ny6@2NvBQ1+htEpi#?^zZ@djd@CT5)5$9GW*;*ipnLpS+Ca6ER2 z3m>BtXDRd?IYZ>ITWJT#HwXt@m|b%mW)pyP6HYp?$)}HKN^56+fFP}OdCJG7E~CL* z`xQUUTq@>FUTJ;oM8+8mTDe&G9Wm&Ci)ehSxX>Qfz2^(*ALC%7iO%ig&Q@9TS*?oi zd1!CnP!-=3x3^2G_y=KdmUQuJqs8+-j9w8-dqVmD2gD@RP>}twKjMn+Uc9y3{va58 z^*7>9uV}qM2RW&jCCl=jU)W-=dE?FtqID#62q=roNSceu0s8!7(T4d+v8X9zdhDu= zT>nH^5I%aF^uBG03TV=sE$ws1acRLxTD8|dfRWcmSa*ev+Sa?f=XXag#YH3-#E9udyYQpMomg7p;Aw|w-9h&{q^Rq-bisWp#7lZbYcJAPH$;0s zI<;7|FtB)#%<-N|K&^UQENz=R@~j9YcvhyVY$dIO-c(tvjt~37m+qVttuVPtShq)- zBG*U{`_qm^9tK=Xwu;uRbB9PBq4yiJ#_5jg*}O-`G9DfNXTYOnix5vk(mXs&cH@VKlljBL z6I0yuIQgx^!`G(0<5CR2jr!zCa*mSo207_f$0)s$wHZm{#!tR8( z2H3q={wL&P!pINE_fv9?k#n4e1}P;d8E5g0U(|y?Zmg zl0yac|3f%G);u?8jZM!@rAF8DE~|0#^J=}({XAa>#|-Cdv%y&L+^R!_*<>tw?l8cy z>WyvB^9{yx+6=GJSo^$CYkWof+@v#h6MXk`hu+xoJl_bXP;ab%?!2Nm9??F(koShs zSn^!Rw<4Q{W<;FTZZ&$Ik8AUd#m_4Xjfb_*8`_Kqwa?FMUB;@fcefi$q-s#%Jr(Rr z>(e6viM`O&$djyw2V;`-obaK8OIM|}o|(dk%kreRATb?cSh$RSYwHz>ffZ8BG!ZPV z=ft$46lEvgO(2YIF(PIX_FMByQs3Ce|0b~Dzs65I3!6l(_P@4hw4I`+<4-k~Kh@a( zo#w!*=D@$xxSlyQC9Zeu7^=3CcW~9KSaR|b_R@Fq$tielvS}-y*A{4<|FwF=t}S`4 JA(zqN{{{1!uqprm diff --git a/lib/python3.12/site-packages/fpdf/fonts.py b/lib/python3.12/site-packages/fpdf/fonts.py deleted file mode 100644 index aeb8af6..0000000 --- a/lib/python3.12/site-packages/fpdf/fonts.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env python -# -*- coding: latin-1 -*- - -# Fonts: - -fpdf_charwidths = {} - -fpdf_charwidths['courier']={} - -for i in range(0,256): - fpdf_charwidths['courier'][chr(i)]=600 - fpdf_charwidths['courierB']=fpdf_charwidths['courier'] - fpdf_charwidths['courierI']=fpdf_charwidths['courier'] - fpdf_charwidths['courierBI']=fpdf_charwidths['courier'] - -fpdf_charwidths['helvetica']={ - '\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278, - '\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':278,' ':278,'!':278,'"':355,'#':556,'$':556,'%':889,'&':667,'\'':191,'(':333,')':333,'*':389,'+':584, - ',':278,'-':333,'.':278,'/':278,'0':556,'1':556,'2':556,'3':556,'4':556,'5':556,'6':556,'7':556,'8':556,'9':556,':':278,';':278,'<':584,'=':584,'>':584,'?':556,'@':1015,'A':667, - 'B':667,'C':722,'D':722,'E':667,'F':611,'G':778,'H':722,'I':278,'J':500,'K':667,'L':556,'M':833,'N':722,'O':778,'P':667,'Q':778,'R':722,'S':667,'T':611,'U':722,'V':667,'W':944, - 'X':667,'Y':667,'Z':611,'[':278,'\\':278,']':278,'^':469,'_':556,'`':333,'a':556,'b':556,'c':500,'d':556,'e':556,'f':278,'g':556,'h':556,'i':222,'j':222,'k':500,'l':222,'m':833, - 'n':556,'o':556,'p':556,'q':556,'r':333,'s':500,'t':278,'u':556,'v':500,'w':722,'x':500,'y':500,'z':500,'{':334,'|':260,'}':334,'~':584,'\x7f':350,'\x80':556,'\x81':350,'\x82':222,'\x83':556, - '\x84':333,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':222,'\x92':222,'\x93':333,'\x94':333,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000, - '\x9a':500,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':260,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333, - '\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':556,'\xb6':537,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':667,'\xc1':667,'\xc2':667,'\xc3':667,'\xc4':667,'\xc5':667, - '\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':500,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':556,'\xf1':556, - '\xf2':556,'\xf3':556,'\xf4':556,'\xf5':556,'\xf6':556,'\xf7':584,'\xf8':611,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':500,'\xfe':556,'\xff':500} - -fpdf_charwidths['helveticaB']={ - '\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278, - '\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':278,' ':278,'!':333,'"':474,'#':556,'$':556,'%':889,'&':722,'\'':238,'(':333,')':333,'*':389,'+':584, - ',':278,'-':333,'.':278,'/':278,'0':556,'1':556,'2':556,'3':556,'4':556,'5':556,'6':556,'7':556,'8':556,'9':556,':':333,';':333,'<':584,'=':584,'>':584,'?':611,'@':975,'A':722, - 'B':722,'C':722,'D':722,'E':667,'F':611,'G':778,'H':722,'I':278,'J':556,'K':722,'L':611,'M':833,'N':722,'O':778,'P':667,'Q':778,'R':722,'S':667,'T':611,'U':722,'V':667,'W':944, - 'X':667,'Y':667,'Z':611,'[':333,'\\':278,']':333,'^':584,'_':556,'`':333,'a':556,'b':611,'c':556,'d':611,'e':556,'f':333,'g':611,'h':611,'i':278,'j':278,'k':556,'l':278,'m':889, - 'n':611,'o':611,'p':611,'q':611,'r':389,'s':556,'t':333,'u':611,'v':556,'w':778,'x':556,'y':556,'z':500,'{':389,'|':280,'}':389,'~':584,'\x7f':350,'\x80':556,'\x81':350,'\x82':278,'\x83':556, - '\x84':500,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':278,'\x92':278,'\x93':500,'\x94':500,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000, - '\x9a':556,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':280,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333, - '\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':611,'\xb6':556,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722, - '\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':556,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':611,'\xf1':611, - '\xf2':611,'\xf3':611,'\xf4':611,'\xf5':611,'\xf6':611,'\xf7':584,'\xf8':611,'\xf9':611,'\xfa':611,'\xfb':611,'\xfc':611,'\xfd':556,'\xfe':611,'\xff':556 -} - -fpdf_charwidths['helveticaBI']={ - '\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278, - '\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':278,' ':278,'!':333,'"':474,'#':556,'$':556,'%':889,'&':722,'\'':238,'(':333,')':333,'*':389,'+':584, - ',':278,'-':333,'.':278,'/':278,'0':556,'1':556,'2':556,'3':556,'4':556,'5':556,'6':556,'7':556,'8':556,'9':556,':':333,';':333,'<':584,'=':584,'>':584,'?':611,'@':975,'A':722, - 'B':722,'C':722,'D':722,'E':667,'F':611,'G':778,'H':722,'I':278,'J':556,'K':722,'L':611,'M':833,'N':722,'O':778,'P':667,'Q':778,'R':722,'S':667,'T':611,'U':722,'V':667,'W':944, - 'X':667,'Y':667,'Z':611,'[':333,'\\':278,']':333,'^':584,'_':556,'`':333,'a':556,'b':611,'c':556,'d':611,'e':556,'f':333,'g':611,'h':611,'i':278,'j':278,'k':556,'l':278,'m':889, - 'n':611,'o':611,'p':611,'q':611,'r':389,'s':556,'t':333,'u':611,'v':556,'w':778,'x':556,'y':556,'z':500,'{':389,'|':280,'}':389,'~':584,'\x7f':350,'\x80':556,'\x81':350,'\x82':278,'\x83':556, - '\x84':500,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':278,'\x92':278,'\x93':500,'\x94':500,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000, - '\x9a':556,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':280,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333, - '\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':611,'\xb6':556,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722, - '\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':556,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':611,'\xf1':611, - '\xf2':611,'\xf3':611,'\xf4':611,'\xf5':611,'\xf6':611,'\xf7':584,'\xf8':611,'\xf9':611,'\xfa':611,'\xfb':611,'\xfc':611,'\xfd':556,'\xfe':611,'\xff':556} - -fpdf_charwidths['helveticaI']={ - '\x00':278,'\x01':278,'\x02':278,'\x03':278,'\x04':278,'\x05':278,'\x06':278,'\x07':278,'\x08':278,'\t':278,'\n':278,'\x0b':278,'\x0c':278,'\r':278,'\x0e':278,'\x0f':278,'\x10':278,'\x11':278,'\x12':278,'\x13':278,'\x14':278,'\x15':278, - '\x16':278,'\x17':278,'\x18':278,'\x19':278,'\x1a':278,'\x1b':278,'\x1c':278,'\x1d':278,'\x1e':278,'\x1f':278,' ':278,'!':278,'"':355,'#':556,'$':556,'%':889,'&':667,'\'':191,'(':333,')':333,'*':389,'+':584, - ',':278,'-':333,'.':278,'/':278,'0':556,'1':556,'2':556,'3':556,'4':556,'5':556,'6':556,'7':556,'8':556,'9':556,':':278,';':278,'<':584,'=':584,'>':584,'?':556,'@':1015,'A':667, - 'B':667,'C':722,'D':722,'E':667,'F':611,'G':778,'H':722,'I':278,'J':500,'K':667,'L':556,'M':833,'N':722,'O':778,'P':667,'Q':778,'R':722,'S':667,'T':611,'U':722,'V':667,'W':944, - 'X':667,'Y':667,'Z':611,'[':278,'\\':278,']':278,'^':469,'_':556,'`':333,'a':556,'b':556,'c':500,'d':556,'e':556,'f':278,'g':556,'h':556,'i':222,'j':222,'k':500,'l':222,'m':833, - 'n':556,'o':556,'p':556,'q':556,'r':333,'s':500,'t':278,'u':556,'v':500,'w':722,'x':500,'y':500,'z':500,'{':334,'|':260,'}':334,'~':584,'\x7f':350,'\x80':556,'\x81':350,'\x82':222,'\x83':556, - '\x84':333,'\x85':1000,'\x86':556,'\x87':556,'\x88':333,'\x89':1000,'\x8a':667,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':222,'\x92':222,'\x93':333,'\x94':333,'\x95':350,'\x96':556,'\x97':1000,'\x98':333,'\x99':1000, - '\x9a':500,'\x9b':333,'\x9c':944,'\x9d':350,'\x9e':500,'\x9f':667,'\xa0':278,'\xa1':333,'\xa2':556,'\xa3':556,'\xa4':556,'\xa5':556,'\xa6':260,'\xa7':556,'\xa8':333,'\xa9':737,'\xaa':370,'\xab':556,'\xac':584,'\xad':333,'\xae':737,'\xaf':333, - '\xb0':400,'\xb1':584,'\xb2':333,'\xb3':333,'\xb4':333,'\xb5':556,'\xb6':537,'\xb7':278,'\xb8':333,'\xb9':333,'\xba':365,'\xbb':556,'\xbc':834,'\xbd':834,'\xbe':834,'\xbf':611,'\xc0':667,'\xc1':667,'\xc2':667,'\xc3':667,'\xc4':667,'\xc5':667, - '\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':278,'\xcd':278,'\xce':278,'\xcf':278,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':584,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':667,'\xde':667,'\xdf':611,'\xe0':556,'\xe1':556,'\xe2':556,'\xe3':556,'\xe4':556,'\xe5':556,'\xe6':889,'\xe7':500,'\xe8':556,'\xe9':556,'\xea':556,'\xeb':556,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':556,'\xf1':556, - '\xf2':556,'\xf3':556,'\xf4':556,'\xf5':556,'\xf6':556,'\xf7':584,'\xf8':611,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':500,'\xfe':556,'\xff':500} - -fpdf_charwidths['symbol']={ - '\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250, - '\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':250,' ':250,'!':333,'"':713,'#':500,'$':549,'%':833,'&':778,'\'':439,'(':333,')':333,'*':500,'+':549, - ',':250,'-':549,'.':250,'/':278,'0':500,'1':500,'2':500,'3':500,'4':500,'5':500,'6':500,'7':500,'8':500,'9':500,':':278,';':278,'<':549,'=':549,'>':549,'?':444,'@':549,'A':722, - 'B':667,'C':722,'D':612,'E':611,'F':763,'G':603,'H':722,'I':333,'J':631,'K':722,'L':686,'M':889,'N':722,'O':722,'P':768,'Q':741,'R':556,'S':592,'T':611,'U':690,'V':439,'W':768, - 'X':645,'Y':795,'Z':611,'[':333,'\\':863,']':333,'^':658,'_':500,'`':500,'a':631,'b':549,'c':549,'d':494,'e':439,'f':521,'g':411,'h':603,'i':329,'j':603,'k':549,'l':549,'m':576, - 'n':521,'o':549,'p':549,'q':521,'r':549,'s':603,'t':439,'u':576,'v':713,'w':686,'x':493,'y':686,'z':494,'{':480,'|':200,'}':480,'~':549,'\x7f':0,'\x80':0,'\x81':0,'\x82':0,'\x83':0, - '\x84':0,'\x85':0,'\x86':0,'\x87':0,'\x88':0,'\x89':0,'\x8a':0,'\x8b':0,'\x8c':0,'\x8d':0,'\x8e':0,'\x8f':0,'\x90':0,'\x91':0,'\x92':0,'\x93':0,'\x94':0,'\x95':0,'\x96':0,'\x97':0,'\x98':0,'\x99':0, - '\x9a':0,'\x9b':0,'\x9c':0,'\x9d':0,'\x9e':0,'\x9f':0,'\xa0':750,'\xa1':620,'\xa2':247,'\xa3':549,'\xa4':167,'\xa5':713,'\xa6':500,'\xa7':753,'\xa8':753,'\xa9':753,'\xaa':753,'\xab':1042,'\xac':987,'\xad':603,'\xae':987,'\xaf':603, - '\xb0':400,'\xb1':549,'\xb2':411,'\xb3':549,'\xb4':549,'\xb5':713,'\xb6':494,'\xb7':460,'\xb8':549,'\xb9':549,'\xba':549,'\xbb':549,'\xbc':1000,'\xbd':603,'\xbe':1000,'\xbf':658,'\xc0':823,'\xc1':686,'\xc2':795,'\xc3':987,'\xc4':768,'\xc5':768, - '\xc6':823,'\xc7':768,'\xc8':768,'\xc9':713,'\xca':713,'\xcb':713,'\xcc':713,'\xcd':713,'\xce':713,'\xcf':713,'\xd0':768,'\xd1':713,'\xd2':790,'\xd3':790,'\xd4':890,'\xd5':823,'\xd6':549,'\xd7':250,'\xd8':713,'\xd9':603,'\xda':603,'\xdb':1042, - '\xdc':987,'\xdd':603,'\xde':987,'\xdf':603,'\xe0':494,'\xe1':329,'\xe2':790,'\xe3':790,'\xe4':786,'\xe5':713,'\xe6':384,'\xe7':384,'\xe8':384,'\xe9':384,'\xea':384,'\xeb':384,'\xec':494,'\xed':494,'\xee':494,'\xef':494,'\xf0':0,'\xf1':329, - '\xf2':274,'\xf3':686,'\xf4':686,'\xf5':686,'\xf6':384,'\xf7':384,'\xf8':384,'\xf9':384,'\xfa':384,'\xfb':384,'\xfc':494,'\xfd':494,'\xfe':494,'\xff':0} - -fpdf_charwidths['times']={ - '\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250, - '\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':250,' ':250,'!':333,'"':408,'#':500,'$':500,'%':833,'&':778,'\'':180,'(':333,')':333,'*':500,'+':564, - ',':250,'-':333,'.':250,'/':278,'0':500,'1':500,'2':500,'3':500,'4':500,'5':500,'6':500,'7':500,'8':500,'9':500,':':278,';':278,'<':564,'=':564,'>':564,'?':444,'@':921,'A':722, - 'B':667,'C':667,'D':722,'E':611,'F':556,'G':722,'H':722,'I':333,'J':389,'K':722,'L':611,'M':889,'N':722,'O':722,'P':556,'Q':722,'R':667,'S':556,'T':611,'U':722,'V':722,'W':944, - 'X':722,'Y':722,'Z':611,'[':333,'\\':278,']':333,'^':469,'_':500,'`':333,'a':444,'b':500,'c':444,'d':500,'e':444,'f':333,'g':500,'h':500,'i':278,'j':278,'k':500,'l':278,'m':778, - 'n':500,'o':500,'p':500,'q':500,'r':333,'s':389,'t':278,'u':500,'v':500,'w':722,'x':500,'y':500,'z':444,'{':480,'|':200,'}':480,'~':541,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500, - '\x84':444,'\x85':1000,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':556,'\x8b':333,'\x8c':889,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':444,'\x94':444,'\x95':350,'\x96':500,'\x97':1000,'\x98':333,'\x99':980, - '\x9a':389,'\x9b':333,'\x9c':722,'\x9d':350,'\x9e':444,'\x9f':722,'\xa0':250,'\xa1':333,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':200,'\xa7':500,'\xa8':333,'\xa9':760,'\xaa':276,'\xab':500,'\xac':564,'\xad':333,'\xae':760,'\xaf':333, - '\xb0':400,'\xb1':564,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':500,'\xb6':453,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':310,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':444,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722, - '\xc6':889,'\xc7':667,'\xc8':611,'\xc9':611,'\xca':611,'\xcb':611,'\xcc':333,'\xcd':333,'\xce':333,'\xcf':333,'\xd0':722,'\xd1':722,'\xd2':722,'\xd3':722,'\xd4':722,'\xd5':722,'\xd6':722,'\xd7':564,'\xd8':722,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':722,'\xde':556,'\xdf':500,'\xe0':444,'\xe1':444,'\xe2':444,'\xe3':444,'\xe4':444,'\xe5':444,'\xe6':667,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':500, - '\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':564,'\xf8':500,'\xf9':500,'\xfa':500,'\xfb':500,'\xfc':500,'\xfd':500,'\xfe':500,'\xff':500} - -fpdf_charwidths['timesB']={ - '\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250, - '\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':250,' ':250,'!':333,'"':555,'#':500,'$':500,'%':1000,'&':833,'\'':278,'(':333,')':333,'*':500,'+':570, - ',':250,'-':333,'.':250,'/':278,'0':500,'1':500,'2':500,'3':500,'4':500,'5':500,'6':500,'7':500,'8':500,'9':500,':':333,';':333,'<':570,'=':570,'>':570,'?':500,'@':930,'A':722, - 'B':667,'C':722,'D':722,'E':667,'F':611,'G':778,'H':778,'I':389,'J':500,'K':778,'L':667,'M':944,'N':722,'O':778,'P':611,'Q':778,'R':722,'S':556,'T':667,'U':722,'V':722,'W':1000, - 'X':722,'Y':722,'Z':667,'[':333,'\\':278,']':333,'^':581,'_':500,'`':333,'a':500,'b':556,'c':444,'d':556,'e':444,'f':333,'g':500,'h':556,'i':278,'j':333,'k':556,'l':278,'m':833, - 'n':556,'o':500,'p':556,'q':556,'r':444,'s':389,'t':333,'u':556,'v':500,'w':722,'x':500,'y':500,'z':444,'{':394,'|':220,'}':394,'~':520,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500, - '\x84':500,'\x85':1000,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':556,'\x8b':333,'\x8c':1000,'\x8d':350,'\x8e':667,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':500,'\x94':500,'\x95':350,'\x96':500,'\x97':1000,'\x98':333,'\x99':1000, - '\x9a':389,'\x9b':333,'\x9c':722,'\x9d':350,'\x9e':444,'\x9f':722,'\xa0':250,'\xa1':333,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':220,'\xa7':500,'\xa8':333,'\xa9':747,'\xaa':300,'\xab':500,'\xac':570,'\xad':333,'\xae':747,'\xaf':333, - '\xb0':400,'\xb1':570,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':556,'\xb6':540,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':330,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':500,'\xc0':722,'\xc1':722,'\xc2':722,'\xc3':722,'\xc4':722,'\xc5':722, - '\xc6':1000,'\xc7':722,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':389,'\xcd':389,'\xce':389,'\xcf':389,'\xd0':722,'\xd1':722,'\xd2':778,'\xd3':778,'\xd4':778,'\xd5':778,'\xd6':778,'\xd7':570,'\xd8':778,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':722,'\xde':611,'\xdf':556,'\xe0':500,'\xe1':500,'\xe2':500,'\xe3':500,'\xe4':500,'\xe5':500,'\xe6':722,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':556, - '\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':570,'\xf8':500,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':500,'\xfe':556,'\xff':500} - -fpdf_charwidths['timesBI']={ - '\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250, - '\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':250,' ':250,'!':389,'"':555,'#':500,'$':500,'%':833,'&':778,'\'':278,'(':333,')':333,'*':500,'+':570, - ',':250,'-':333,'.':250,'/':278,'0':500,'1':500,'2':500,'3':500,'4':500,'5':500,'6':500,'7':500,'8':500,'9':500,':':333,';':333,'<':570,'=':570,'>':570,'?':500,'@':832,'A':667, - 'B':667,'C':667,'D':722,'E':667,'F':667,'G':722,'H':778,'I':389,'J':500,'K':667,'L':611,'M':889,'N':722,'O':722,'P':611,'Q':722,'R':667,'S':556,'T':611,'U':722,'V':667,'W':889, - 'X':667,'Y':611,'Z':611,'[':333,'\\':278,']':333,'^':570,'_':500,'`':333,'a':500,'b':500,'c':444,'d':500,'e':444,'f':333,'g':500,'h':556,'i':278,'j':278,'k':500,'l':278,'m':778, - 'n':556,'o':500,'p':500,'q':500,'r':389,'s':389,'t':278,'u':556,'v':444,'w':667,'x':500,'y':444,'z':389,'{':348,'|':220,'}':348,'~':570,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500, - '\x84':500,'\x85':1000,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':556,'\x8b':333,'\x8c':944,'\x8d':350,'\x8e':611,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':500,'\x94':500,'\x95':350,'\x96':500,'\x97':1000,'\x98':333,'\x99':1000, - '\x9a':389,'\x9b':333,'\x9c':722,'\x9d':350,'\x9e':389,'\x9f':611,'\xa0':250,'\xa1':389,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':220,'\xa7':500,'\xa8':333,'\xa9':747,'\xaa':266,'\xab':500,'\xac':606,'\xad':333,'\xae':747,'\xaf':333, - '\xb0':400,'\xb1':570,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':576,'\xb6':500,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':300,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':500,'\xc0':667,'\xc1':667,'\xc2':667,'\xc3':667,'\xc4':667,'\xc5':667, - '\xc6':944,'\xc7':667,'\xc8':667,'\xc9':667,'\xca':667,'\xcb':667,'\xcc':389,'\xcd':389,'\xce':389,'\xcf':389,'\xd0':722,'\xd1':722,'\xd2':722,'\xd3':722,'\xd4':722,'\xd5':722,'\xd6':722,'\xd7':570,'\xd8':722,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':611,'\xde':611,'\xdf':500,'\xe0':500,'\xe1':500,'\xe2':500,'\xe3':500,'\xe4':500,'\xe5':500,'\xe6':722,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':556, - '\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':570,'\xf8':500,'\xf9':556,'\xfa':556,'\xfb':556,'\xfc':556,'\xfd':444,'\xfe':500,'\xff':444} - -fpdf_charwidths['timesI']={ - '\x00':250,'\x01':250,'\x02':250,'\x03':250,'\x04':250,'\x05':250,'\x06':250,'\x07':250,'\x08':250,'\t':250,'\n':250,'\x0b':250,'\x0c':250,'\r':250,'\x0e':250,'\x0f':250,'\x10':250,'\x11':250,'\x12':250,'\x13':250,'\x14':250,'\x15':250, - '\x16':250,'\x17':250,'\x18':250,'\x19':250,'\x1a':250,'\x1b':250,'\x1c':250,'\x1d':250,'\x1e':250,'\x1f':250,' ':250,'!':333,'"':420,'#':500,'$':500,'%':833,'&':778,'\'':214,'(':333,')':333,'*':500,'+':675, - ',':250,'-':333,'.':250,'/':278,'0':500,'1':500,'2':500,'3':500,'4':500,'5':500,'6':500,'7':500,'8':500,'9':500,':':333,';':333,'<':675,'=':675,'>':675,'?':500,'@':920,'A':611, - 'B':611,'C':667,'D':722,'E':611,'F':611,'G':722,'H':722,'I':333,'J':444,'K':667,'L':556,'M':833,'N':667,'O':722,'P':611,'Q':722,'R':611,'S':500,'T':556,'U':722,'V':611,'W':833, - 'X':611,'Y':556,'Z':556,'[':389,'\\':278,']':389,'^':422,'_':500,'`':333,'a':500,'b':500,'c':444,'d':500,'e':444,'f':278,'g':500,'h':500,'i':278,'j':278,'k':444,'l':278,'m':722, - 'n':500,'o':500,'p':500,'q':500,'r':389,'s':389,'t':278,'u':500,'v':444,'w':667,'x':444,'y':444,'z':389,'{':400,'|':275,'}':400,'~':541,'\x7f':350,'\x80':500,'\x81':350,'\x82':333,'\x83':500, - '\x84':556,'\x85':889,'\x86':500,'\x87':500,'\x88':333,'\x89':1000,'\x8a':500,'\x8b':333,'\x8c':944,'\x8d':350,'\x8e':556,'\x8f':350,'\x90':350,'\x91':333,'\x92':333,'\x93':556,'\x94':556,'\x95':350,'\x96':500,'\x97':889,'\x98':333,'\x99':980, - '\x9a':389,'\x9b':333,'\x9c':667,'\x9d':350,'\x9e':389,'\x9f':556,'\xa0':250,'\xa1':389,'\xa2':500,'\xa3':500,'\xa4':500,'\xa5':500,'\xa6':275,'\xa7':500,'\xa8':333,'\xa9':760,'\xaa':276,'\xab':500,'\xac':675,'\xad':333,'\xae':760,'\xaf':333, - '\xb0':400,'\xb1':675,'\xb2':300,'\xb3':300,'\xb4':333,'\xb5':500,'\xb6':523,'\xb7':250,'\xb8':333,'\xb9':300,'\xba':310,'\xbb':500,'\xbc':750,'\xbd':750,'\xbe':750,'\xbf':500,'\xc0':611,'\xc1':611,'\xc2':611,'\xc3':611,'\xc4':611,'\xc5':611, - '\xc6':889,'\xc7':667,'\xc8':611,'\xc9':611,'\xca':611,'\xcb':611,'\xcc':333,'\xcd':333,'\xce':333,'\xcf':333,'\xd0':722,'\xd1':667,'\xd2':722,'\xd3':722,'\xd4':722,'\xd5':722,'\xd6':722,'\xd7':675,'\xd8':722,'\xd9':722,'\xda':722,'\xdb':722, - '\xdc':722,'\xdd':556,'\xde':611,'\xdf':500,'\xe0':500,'\xe1':500,'\xe2':500,'\xe3':500,'\xe4':500,'\xe5':500,'\xe6':667,'\xe7':444,'\xe8':444,'\xe9':444,'\xea':444,'\xeb':444,'\xec':278,'\xed':278,'\xee':278,'\xef':278,'\xf0':500,'\xf1':500, - '\xf2':500,'\xf3':500,'\xf4':500,'\xf5':500,'\xf6':500,'\xf7':675,'\xf8':500,'\xf9':500,'\xfa':500,'\xfb':500,'\xfc':500,'\xfd':444,'\xfe':500,'\xff':444} - -fpdf_charwidths['zapfdingbats']={ - '\x00':0,'\x01':0,'\x02':0,'\x03':0,'\x04':0,'\x05':0,'\x06':0,'\x07':0,'\x08':0,'\t':0,'\n':0,'\x0b':0,'\x0c':0,'\r':0,'\x0e':0,'\x0f':0,'\x10':0,'\x11':0,'\x12':0,'\x13':0,'\x14':0,'\x15':0, - '\x16':0,'\x17':0,'\x18':0,'\x19':0,'\x1a':0,'\x1b':0,'\x1c':0,'\x1d':0,'\x1e':0,'\x1f':0,' ':278,'!':974,'"':961,'#':974,'$':980,'%':719,'&':789,'\'':790,'(':791,')':690,'*':960,'+':939, - ',':549,'-':855,'.':911,'/':933,'0':911,'1':945,'2':974,'3':755,'4':846,'5':762,'6':761,'7':571,'8':677,'9':763,':':760,';':759,'<':754,'=':494,'>':552,'?':537,'@':577,'A':692, - 'B':786,'C':788,'D':788,'E':790,'F':793,'G':794,'H':816,'I':823,'J':789,'K':841,'L':823,'M':833,'N':816,'O':831,'P':923,'Q':744,'R':723,'S':749,'T':790,'U':792,'V':695,'W':776, - 'X':768,'Y':792,'Z':759,'[':707,'\\':708,']':682,'^':701,'_':826,'`':815,'a':789,'b':789,'c':707,'d':687,'e':696,'f':689,'g':786,'h':787,'i':713,'j':791,'k':785,'l':791,'m':873, - 'n':761,'o':762,'p':762,'q':759,'r':759,'s':892,'t':892,'u':788,'v':784,'w':438,'x':138,'y':277,'z':415,'{':392,'|':392,'}':668,'~':668,'\x7f':0,'\x80':390,'\x81':390,'\x82':317,'\x83':317, - '\x84':276,'\x85':276,'\x86':509,'\x87':509,'\x88':410,'\x89':410,'\x8a':234,'\x8b':234,'\x8c':334,'\x8d':334,'\x8e':0,'\x8f':0,'\x90':0,'\x91':0,'\x92':0,'\x93':0,'\x94':0,'\x95':0,'\x96':0,'\x97':0,'\x98':0,'\x99':0, - '\x9a':0,'\x9b':0,'\x9c':0,'\x9d':0,'\x9e':0,'\x9f':0,'\xa0':0,'\xa1':732,'\xa2':544,'\xa3':544,'\xa4':910,'\xa5':667,'\xa6':760,'\xa7':760,'\xa8':776,'\xa9':595,'\xaa':694,'\xab':626,'\xac':788,'\xad':788,'\xae':788,'\xaf':788, - '\xb0':788,'\xb1':788,'\xb2':788,'\xb3':788,'\xb4':788,'\xb5':788,'\xb6':788,'\xb7':788,'\xb8':788,'\xb9':788,'\xba':788,'\xbb':788,'\xbc':788,'\xbd':788,'\xbe':788,'\xbf':788,'\xc0':788,'\xc1':788,'\xc2':788,'\xc3':788,'\xc4':788,'\xc5':788, - '\xc6':788,'\xc7':788,'\xc8':788,'\xc9':788,'\xca':788,'\xcb':788,'\xcc':788,'\xcd':788,'\xce':788,'\xcf':788,'\xd0':788,'\xd1':788,'\xd2':788,'\xd3':788,'\xd4':894,'\xd5':838,'\xd6':1016,'\xd7':458,'\xd8':748,'\xd9':924,'\xda':748,'\xdb':918, - '\xdc':927,'\xdd':928,'\xde':928,'\xdf':834,'\xe0':873,'\xe1':828,'\xe2':924,'\xe3':924,'\xe4':917,'\xe5':930,'\xe6':931,'\xe7':463,'\xe8':883,'\xe9':836,'\xea':836,'\xeb':867,'\xec':867,'\xed':696,'\xee':696,'\xef':874,'\xf0':0,'\xf1':874, - '\xf2':760,'\xf3':946,'\xf4':771,'\xf5':865,'\xf6':771,'\xf7':888,'\xf8':967,'\xf9':888,'\xfa':831,'\xfb':873,'\xfc':927,'\xfd':970,'\xfe':918,'\xff':0} - diff --git a/lib/python3.12/site-packages/fpdf/fpdf.py b/lib/python3.12/site-packages/fpdf/fpdf.py deleted file mode 100644 index 6ae1e38..0000000 --- a/lib/python3.12/site-packages/fpdf/fpdf.py +++ /dev/null @@ -1,2000 +0,0 @@ -#!/usr/bin/env python -# -*- coding: latin-1 -*- -# **************************************************************************** -# * Software: FPDF for python * -# * Version: 1.7.1 * -# * Date: 2010-09-10 * -# * Last update: 2012-08-16 * -# * License: LGPL v3.0 * -# * * -# * Original Author (PHP): Olivier PLATHEY 2004-12-31 * -# * Ported to Python 2.4 by Max (maxpat78@yahoo.it) on 2006-05 * -# * Maintainer: Mariano Reingart (reingart@gmail.com) et al since 2008 est. * -# * NOTE: 'I' and 'D' destinations are disabled, and simply print to STDOUT * -# **************************************************************************** - -from __future__ import division - -from datetime import datetime -from functools import wraps -import math -import errno -import os, sys, zlib, struct, re, tempfile, struct - -from .ttfonts import TTFontFile -from .fonts import fpdf_charwidths -from .php import substr, sprintf, print_r, UTF8ToUTF16BE, UTF8StringToArray -from .py3k import PY3K, pickle, urlopen, Image, basestring, unicode, exception, b, hashpath - -# Global variables -FPDF_VERSION = '1.7.2' -FPDF_FONT_DIR = os.path.join(os.path.dirname(__file__),'font') -FPDF_CACHE_MODE = 0 # 0 - in same foder, 1 - none, 2 - hash -FPDF_CACHE_DIR = None -SYSTEM_TTFONTS = None - - -def set_global(var, val): - globals()[var] = val - - -class FPDF(object): - "PDF Generation class" - - def __init__(self, orientation='P',unit='mm',format='A4'): - # Some checks - self._dochecks() - # Initialization of properties - self.offsets={} # array of object offsets - self.page=0 # current page number - self.n=2 # current object number - self.buffer='' # buffer holding in-memory PDF - self.pages={} # array containing pages - self.orientation_changes={} # array indicating orientation changes - self.state=0 # current document state - self.fonts={} # array of used fonts - self.font_files={} # array of font files - self.diffs={} # array of encoding differences - self.images={} # array of used images - self.page_links={} # array of links in pages - self.links={} # array of internal links - self.in_footer=0 # flag set when processing footer - self.lastw=0 - self.lasth=0 # height of last cell printed - self.font_family='' # current font family - self.font_style='' # current font style - self.font_size_pt=12 # current font size in points - self.underline=0 # underlining flag - self.draw_color='0 G' - self.fill_color='0 g' - self.text_color='0 g' - self.color_flag=0 # indicates whether fill and text colors are different - self.ws=0 # word spacing - self.angle=0 - # Standard fonts - self.core_fonts={'courier':'Courier','courierB':'Courier-Bold','courierI':'Courier-Oblique','courierBI':'Courier-BoldOblique', - 'helvetica':'Helvetica','helveticaB':'Helvetica-Bold','helveticaI':'Helvetica-Oblique','helveticaBI':'Helvetica-BoldOblique', - 'times':'Times-Roman','timesB':'Times-Bold','timesI':'Times-Italic','timesBI':'Times-BoldItalic', - 'symbol':'Symbol','zapfdingbats':'ZapfDingbats'} - # Scale factor - if(unit=='pt'): - self.k=1 - elif(unit=='mm'): - self.k=72/25.4 - elif(unit=='cm'): - self.k=72/2.54 - elif(unit=='in'): - self.k=72. - else: - self.error('Incorrect unit: '+unit) - # Page format - if(isinstance(format,basestring)): - format=format.lower() - if(format=='a3'): - format=(841.89,1190.55) - elif(format=='a4'): - format=(595.28,841.89) - elif(format=='a5'): - format=(420.94,595.28) - elif(format=='letter'): - format=(612,792) - elif(format=='legal'): - format=(612,1008) - else: - self.error('Unknown page format: '+format) - self.fw_pt=format[0] - self.fh_pt=format[1] - else: - self.fw_pt=format[0]*self.k - self.fh_pt=format[1]*self.k - self.fw=self.fw_pt/self.k - self.fh=self.fh_pt/self.k - # Page orientation - orientation=orientation.lower() - if(orientation=='p' or orientation=='portrait'): - self.def_orientation='P' - self.w_pt=self.fw_pt - self.h_pt=self.fh_pt - elif(orientation=='l' or orientation=='landscape'): - self.def_orientation='L' - self.w_pt=self.fh_pt - self.h_pt=self.fw_pt - else: - self.error('Incorrect orientation: '+orientation) - self.cur_orientation=self.def_orientation - self.w=self.w_pt/self.k - self.h=self.h_pt/self.k - # Page margins (1 cm) - margin=28.35/self.k - self.set_margins(margin,margin) - # Interior cell margin (1 mm) - self.c_margin=margin/10.0 - # line width (0.2 mm) - self.line_width=.567/self.k - # Automatic page break - self.set_auto_page_break(1,2*margin) - # Full width display mode - self.set_display_mode('fullwidth') - # Enable compression - self.set_compression(1) - # Set default PDF version number - self.pdf_version='1.3' - - def check_page(fn): - "Decorator to protect drawing methods" - @wraps(fn) - def wrapper(self, *args, **kwargs): - if not self.page and not kwargs.get('split_only'): - self.error("No page open, you need to call add_page() first") - else: - return fn(self, *args, **kwargs) - return wrapper - - def set_margins(self, left,top,right=-1): - "Set left, top and right margins" - self.l_margin=left - self.t_margin=top - if(right==-1): - right=left - self.r_margin=right - - def set_left_margin(self, margin): - "Set left margin" - self.l_margin=margin - if(self.page>0 and self.x0): - #Page footer - self.in_footer=1 - self.footer() - self.in_footer=0 - #close page - self._endpage() - #Start new page - self._beginpage(orientation) - #Set line cap style to square - self._out('2 J') - #Set line width - self.line_width=lw - self._out(sprintf('%.2f w',lw*self.k)) - #Set font - if(family): - self.set_font(family,style,size) - #Set colors - self.draw_color=dc - if(dc!='0 G'): - self._out(dc) - self.fill_color=fc - if(fc!='0 g'): - self._out(fc) - self.text_color=tc - self.color_flag=cf - #Page header - self.header() - #Restore line width - if(self.line_width!=lw): - self.line_width=lw - self._out(sprintf('%.2f w',lw*self.k)) - #Restore font - if(family): - self.set_font(family,style,size) - #Restore colors - if(self.draw_color!=dc): - self.draw_color=dc - self._out(dc) - if(self.fill_color!=fc): - self.fill_color=fc - self._out(fc) - self.text_color=tc - self.color_flag=cf - - def header(self): - "Header to be implemented in your own inherited class" - pass - - def footer(self): - "Footer to be implemented in your own inherited class" - pass - - def page_no(self): - "Get current page number" - return self.page - - def set_draw_color(self, r,g=-1,b=-1): - "Set color for all stroking operations" - if((r==0 and g==0 and b==0) or g==-1): - self.draw_color=sprintf('%.3f G',r/255.0) - else: - self.draw_color=sprintf('%.3f %.3f %.3f RG',r/255.0,g/255.0,b/255.0) - if(self.page>0): - self._out(self.draw_color) - - def set_fill_color(self,r,g=-1,b=-1): - "Set color for all filling operations" - if((r==0 and g==0 and b==0) or g==-1): - self.fill_color=sprintf('%.3f g',r/255.0) - else: - self.fill_color=sprintf('%.3f %.3f %.3f rg',r/255.0,g/255.0,b/255.0) - self.color_flag=(self.fill_color!=self.text_color) - if(self.page>0): - self._out(self.fill_color) - - def set_text_color(self, r,g=-1,b=-1): - "Set color for text" - if((r==0 and g==0 and b==0) or g==-1): - self.text_color=sprintf('%.3f g',r/255.0) - else: - self.text_color=sprintf('%.3f %.3f %.3f rg',r/255.0,g/255.0,b/255.0) - self.color_flag=(self.fill_color!=self.text_color) - - def get_string_width(self, s): - "Get width of a string in the current font" - s = self.normalize_text(s) - cw=self.current_font['cw'] - w=0 - l=len(s) - if self.unifontsubset: - for char in s: - char = ord(char) - if len(cw) > char: - w += cw[char] # ord(cw[2*char])<<8 + ord(cw[2*char+1]) - #elif (char>0 and char<128 and isset($cw[chr($char)])) { $w += $cw[chr($char)]; } - elif (self.current_font['desc']['MissingWidth']) : - w += self.current_font['desc']['MissingWidth'] - #elif (isset($this->CurrentFont['MissingWidth'])) { $w += $this->CurrentFont['MissingWidth']; } - else: - w += 500 - else: - for i in range(0, l): - w += cw.get(s[i],0) - return w*self.font_size/1000.0 - - def set_line_width(self, width): - "Set line width" - self.line_width=width - if(self.page>0): - self._out(sprintf('%.2f w',width*self.k)) - - @check_page - def line(self, x1,y1,x2,y2): - "Draw a line" - self._out(sprintf('%.2f %.2f m %.2f %.2f l S',x1*self.k,(self.h-y1)*self.k,x2*self.k,(self.h-y2)*self.k)) - - def _set_dash(self, dash_length=False, space_length=False): - if(dash_length and space_length): - s = sprintf('[%.3f %.3f] 0 d', dash_length*self.k, space_length*self.k) - else: - s = '[] 0 d' - self._out(s) - - @check_page - def dashed_line(self, x1,y1,x2,y2, dash_length=1, space_length=1): - """Draw a dashed line. Same interface as line() except: - - dash_length: Length of the dash - - space_length: Length of the space between dashes""" - self._set_dash(dash_length, space_length) - self.line(x1, y1, x2, y2) - self._set_dash() - - @check_page - def rect(self, x,y,w,h,style=''): - "Draw a rectangle" - if(style=='F'): - op='f' - elif(style=='FD' or style=='DF'): - op='B' - else: - op='S' - self._out(sprintf('%.2f %.2f %.2f %.2f re %s',x*self.k,(self.h-y)*self.k,w*self.k,-h*self.k,op)) - - @check_page - def ellipse(self, x,y,w,h,style=''): - "Draw a ellipse" - if(style=='F'): - op='f' - elif(style=='FD' or style=='DF'): - op='B' - else: - op='S' - - cx = x + w/2.0 - cy = y + h/2.0 - rx = w/2.0 - ry = h/2.0 - - lx = 4.0/3.0*(math.sqrt(2)-1)*rx - ly = 4.0/3.0*(math.sqrt(2)-1)*ry - - self._out(sprintf('%.2f %.2f m %.2f %.2f %.2f %.2f %.2f %.2f c', - (cx+rx)*self.k, (self.h-cy)*self.k, - (cx+rx)*self.k, (self.h-(cy-ly))*self.k, - (cx+lx)*self.k, (self.h-(cy-ry))*self.k, - cx*self.k, (self.h-(cy-ry))*self.k)) - self._out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c', - (cx-lx)*self.k, (self.h-(cy-ry))*self.k, - (cx-rx)*self.k, (self.h-(cy-ly))*self.k, - (cx-rx)*self.k, (self.h-cy)*self.k)) - self._out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c', - (cx-rx)*self.k, (self.h-(cy+ly))*self.k, - (cx-lx)*self.k, (self.h-(cy+ry))*self.k, - cx*self.k, (self.h-(cy+ry))*self.k)) - self._out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c %s', - (cx+lx)*self.k, (self.h-(cy+ry))*self.k, - (cx+rx)*self.k, (self.h-(cy+ly))*self.k, - (cx+rx)*self.k, (self.h-cy)*self.k, - op)) - - def add_font(self, family, style='', fname='', uni=False): - "Add a TrueType or Type1 font" - family = family.lower() - if (fname == ''): - fname = family.replace(' ','') + style.lower() + '.pkl' - if (family == 'arial'): - family = 'helvetica' - style = style.upper() - if (style == 'IB'): - style = 'BI' - fontkey = family+style - if fontkey in self.fonts: - # Font already added! - return - if (uni): - global SYSTEM_TTFONTS, FPDF_CACHE_MODE, FPDF_CACHE_DIR - if os.path.exists(fname): - ttffilename = fname - elif (FPDF_FONT_DIR and - os.path.exists(os.path.join(FPDF_FONT_DIR, fname))): - ttffilename = os.path.join(FPDF_FONT_DIR, fname) - elif (SYSTEM_TTFONTS and - os.path.exists(os.path.join(SYSTEM_TTFONTS, fname))): - ttffilename = os.path.join(SYSTEM_TTFONTS, fname) - else: - raise RuntimeError("TTF Font file not found: %s" % fname) - name = '' - if FPDF_CACHE_MODE == 0: - unifilename = os.path.splitext(ttffilename)[0] + '.pkl' - elif FPDF_CACHE_MODE == 2: - unifilename = os.path.join(FPDF_CACHE_DIR, \ - hashpath(ttffilename) + ".pkl") - else: - unifilename = None - if unifilename and os.path.exists(unifilename): - fh = open(unifilename, "rb") - try: - font_dict = pickle.load(fh) - finally: - fh.close() - else: - ttf = TTFontFile() - ttf.getMetrics(ttffilename) - desc = { - 'Ascent': int(round(ttf.ascent, 0)), - 'Descent': int(round(ttf.descent, 0)), - 'CapHeight': int(round(ttf.capHeight, 0)), - 'Flags': ttf.flags, - 'FontBBox': "[%s %s %s %s]" % ( - int(round(ttf.bbox[0], 0)), - int(round(ttf.bbox[1], 0)), - int(round(ttf.bbox[2], 0)), - int(round(ttf.bbox[3], 0))), - 'ItalicAngle': int(ttf.italicAngle), - 'StemV': int(round(ttf.stemV, 0)), - 'MissingWidth': int(round(ttf.defaultWidth, 0)), - } - # Generate metrics .pkl file - font_dict = { - 'name': re.sub('[ ()]', '', ttf.fullName), - 'type': 'TTF', - 'desc': desc, - 'up': round(ttf.underlinePosition), - 'ut': round(ttf.underlineThickness), - 'ttffile': ttffilename, - 'fontkey': fontkey, - 'originalsize': os.stat(ttffilename).st_size, - 'cw': ttf.charWidths, - } - if unifilename: - try: - fh = open(unifilename, "wb") - pickle.dump(font_dict, fh) - fh.close() - except IOError: - if not exception().errno == errno.EACCES: - raise # Not a permission error. - del ttf - if hasattr(self,'str_alias_nb_pages'): - sbarr = list(range(0,57)) # include numbers in the subset! - else: - sbarr = list(range(0,32)) - self.fonts[fontkey] = { - 'i': len(self.fonts)+1, 'type': font_dict['type'], - 'name': font_dict['name'], 'desc': font_dict['desc'], - 'up': font_dict['up'], 'ut': font_dict['ut'], - 'cw': font_dict['cw'], - 'ttffile': font_dict['ttffile'], 'fontkey': fontkey, - 'subset': sbarr, 'unifilename': unifilename, - } - self.font_files[fontkey] = {'length1': font_dict['originalsize'], - 'type': "TTF", 'ttffile': ttffilename} - self.font_files[fname] = {'type': "TTF"} - else: - fontfile = open(fname) - try: - font_dict = pickle.load(fontfile) - finally: - fontfile.close() - self.fonts[fontkey] = {'i': len(self.fonts)+1} - self.fonts[fontkey].update(font_dict) - if (diff): - #Search existing encodings - d = 0 - nb = len(self.diffs) - for i in range(1, nb+1): - if(self.diffs[i] == diff): - d = i - break - if (d == 0): - d = nb + 1 - self.diffs[d] = diff - self.fonts[fontkey]['diff'] = d - filename = font_dict.get('filename') - if (filename): - if (type == 'TrueType'): - self.font_files[filename]={'length1': originalsize} - else: - self.font_files[filename]={'length1': size1, - 'length2': size2} - - def set_font(self, family,style='',size=0): - "Select a font; size given in points" - family=family.lower() - if(family==''): - family=self.font_family - if(family=='arial'): - family='helvetica' - elif(family=='symbol' or family=='zapfdingbats'): - style='' - style=style.upper() - if('U' in style): - self.underline=1 - style=style.replace('U','') - else: - self.underline=0 - if(style=='IB'): - style='BI' - if(size==0): - size=self.font_size_pt - #Test if font is already selected - if(self.font_family==family and self.font_style==style and self.font_size_pt==size): - return - #Test if used for the first time - fontkey=family+style - if fontkey not in self.fonts: - #Check if one of the standard fonts - if fontkey in self.core_fonts: - if fontkey not in fpdf_charwidths: - #Load metric file - name=os.path.join(FPDF_FONT_DIR,family) - if(family=='times' or family=='helvetica'): - name+=style.lower() - exec(compile(open(name+'.font').read(), name+'.font', 'exec')) - if fontkey not in fpdf_charwidths: - self.error('Could not include font metric file for'+fontkey) - i=len(self.fonts)+1 - self.fonts[fontkey]={'i':i,'type':'core','name':self.core_fonts[fontkey],'up':-100,'ut':50,'cw':fpdf_charwidths[fontkey]} - else: - self.error('Undefined font: '+family+' '+style) - #Select it - self.font_family=family - self.font_style=style - self.font_size_pt=size - self.font_size=size/self.k - self.current_font=self.fonts[fontkey] - self.unifontsubset = (self.fonts[fontkey]['type'] == 'TTF') - if(self.page>0): - self._out(sprintf('BT /F%d %.2f Tf ET',self.current_font['i'],self.font_size_pt)) - - def set_font_size(self, size): - "Set font size in points" - if(self.font_size_pt==size): - return - self.font_size_pt=size - self.font_size=size/self.k - if(self.page>0): - self._out(sprintf('BT /F%d %.2f Tf ET',self.current_font['i'],self.font_size_pt)) - - def add_link(self): - "Create a new internal link" - n=len(self.links)+1 - self.links[n]=(0,0) - return n - - def set_link(self, link,y=0,page=-1): - "Set destination of internal link" - if(y==-1): - y=self.y - if(page==-1): - page=self.page - self.links[link]=[page,y] - - def link(self, x,y,w,h,link): - "Put a link on the page" - if not self.page in self.page_links: - self.page_links[self.page] = [] - self.page_links[self.page] += [(x*self.k,self.h_pt-y*self.k,w*self.k,h*self.k,link),] - - @check_page - def text(self, x, y, txt=''): - "Output a string" - txt = self.normalize_text(txt) - if (self.unifontsubset): - txt2 = self._escape(UTF8ToUTF16BE(txt, False)) - for uni in UTF8StringToArray(txt): - self.current_font['subset'].append(uni) - else: - txt2 = self._escape(txt) - s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*self.k,(self.h-y)*self.k, txt2) - if(self.underline and txt!=''): - s+=' '+self._dounderline(x,y,txt) - if(self.color_flag): - s='q '+self.text_color+' '+s+' Q' - self._out(s) - - @check_page - def rotate(self, angle, x=None, y=None): - if x is None: - x = self.x - if y is None: - y = self.y; - if self.angle!=0: - self._out('Q') - self.angle = angle - if angle!=0: - angle *= math.pi/180; - c = math.cos(angle); - s = math.sin(angle); - cx = x*self.k; - cy = (self.h-y)*self.k - s = sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm',c,s,-s,c,cx,cy,-cx,-cy) - self._out(s) - - def accept_page_break(self): - "Accept automatic page break or not" - return self.auto_page_break - - @check_page - def cell(self, w,h=0,txt='',border=0,ln=0,align='',fill=0,link=''): - "Output a cell" - txt = self.normalize_text(txt) - k=self.k - if(self.y+h>self.page_break_trigger and not self.in_footer and self.accept_page_break()): - #Automatic page break - x=self.x - ws=self.ws - if(ws>0): - self.ws=0 - self._out('0 Tw') - self.add_page(self.cur_orientation) - self.x=x - if(ws>0): - self.ws=ws - self._out(sprintf('%.3f Tw',ws*k)) - if(w==0): - w=self.w-self.r_margin-self.x - s='' - if(fill==1 or border==1): - if(fill==1): - if border==1: - op='B' - else: - op='f' - else: - op='S' - s=sprintf('%.2f %.2f %.2f %.2f re %s ',self.x*k,(self.h-self.y)*k,w*k,-h*k,op) - if(isinstance(border,basestring)): - x=self.x - y=self.y - if('L' in border): - s+=sprintf('%.2f %.2f m %.2f %.2f l S ',x*k,(self.h-y)*k,x*k,(self.h-(y+h))*k) - if('T' in border): - s+=sprintf('%.2f %.2f m %.2f %.2f l S ',x*k,(self.h-y)*k,(x+w)*k,(self.h-y)*k) - if('R' in border): - s+=sprintf('%.2f %.2f m %.2f %.2f l S ',(x+w)*k,(self.h-y)*k,(x+w)*k,(self.h-(y+h))*k) - if('B' in border): - s+=sprintf('%.2f %.2f m %.2f %.2f l S ',x*k,(self.h-(y+h))*k,(x+w)*k,(self.h-(y+h))*k) - if(txt!=''): - if(align=='R'): - dx=w-self.c_margin-self.get_string_width(txt) - elif(align=='C'): - dx=(w-self.get_string_width(txt))/2.0 - else: - dx=self.c_margin - if(self.color_flag): - s+='q '+self.text_color+' ' - - # If multibyte, Tw has no effect - do word spacing using an adjustment before each space - if (self.ws and self.unifontsubset): - for uni in UTF8StringToArray(txt): - self.current_font['subset'].append(uni) - space = self._escape(UTF8ToUTF16BE(' ', False)) - s += sprintf('BT 0 Tw %.2F %.2F Td [',(self.x + dx) * k,(self.h - (self.y + 0.5*h+ 0.3 * self.font_size)) * k) - t = txt.split(' ') - numt = len(t) - for i in range(numt): - tx = t[i] - tx = '(' + self._escape(UTF8ToUTF16BE(tx, False)) + ')' - s += sprintf('%s ', tx); - if ((i+1)0): - #Go to next line - self.y+=h - if(ln==1): - self.x=self.l_margin - else: - self.x+=w - - @check_page - def multi_cell(self, w, h, txt='', border=0, align='J', fill=0, split_only=False): - "Output text with automatic or explicit line breaks" - txt = self.normalize_text(txt) - ret = [] # if split_only = True, returns splited text cells - cw=self.current_font['cw'] - if(w==0): - w=self.w-self.r_margin-self.x - wmax=(w-2*self.c_margin)*1000.0/self.font_size - s=txt.replace("\r",'') - nb=len(s) - if(nb>0 and s[nb-1]=="\n"): - nb-=1 - b=0 - if(border): - if(border==1): - border='LTRB' - b='LRT' - b2='LR' - else: - b2='' - if('L' in border): - b2+='L' - if('R' in border): - b2+='R' - if ('T' in border): - b=b2+'T' - else: - b=b2 - sep=-1 - i=0 - j=0 - l=0 - ns=0 - nl=1 - while(i0): - self.ws=0 - if not split_only: - self._out('0 Tw') - if not split_only: - self.cell(w,h,substr(s,j,i-j),b,2,align,fill) - else: - ret.append(substr(s,j,i-j)) - i+=1 - sep=-1 - j=i - l=0 - ns=0 - nl+=1 - if(border and nl==2): - b=b2 - continue - if(c==' '): - sep=i - ls=l - ns+=1 - if self.unifontsubset: - l += self.get_string_width(c) / self.font_size*1000.0 - else: - l += cw.get(c,0) - if(l>wmax): - #Automatic line break - if(sep==-1): - if(i==j): - i+=1 - if(self.ws>0): - self.ws=0 - if not split_only: - self._out('0 Tw') - if not split_only: - self.cell(w,h,substr(s,j,i-j),b,2,align,fill) - else: - ret.append(substr(s,j,i-j)) - else: - if(align=='J'): - if ns>1: - self.ws=(wmax-ls)/1000.0*self.font_size/(ns-1) - else: - self.ws=0 - if not split_only: - self._out(sprintf('%.3f Tw',self.ws*self.k)) - if not split_only: - self.cell(w,h,substr(s,j,sep-j),b,2,align,fill) - else: - ret.append(substr(s,j,sep-j)) - i=sep+1 - sep=-1 - j=i - l=0 - ns=0 - nl+=1 - if(border and nl==2): - b=b2 - else: - i+=1 - #Last chunk - if(self.ws>0): - self.ws=0 - if not split_only: - self._out('0 Tw') - if(border and 'B' in border): - b+='B' - if not split_only: - self.cell(w,h,substr(s,j,i-j),b,2,align,fill) - self.x=self.l_margin - else: - ret.append(substr(s,j,i-j)) - return ret - - @check_page - def write(self, h, txt='', link=''): - "Output text in flowing mode" - txt = self.normalize_text(txt) - cw=self.current_font['cw'] - w=self.w-self.r_margin-self.x - wmax=(w-2*self.c_margin)*1000.0/self.font_size - s=txt.replace("\r",'') - nb=len(s) - sep=-1 - i=0 - j=0 - l=0 - nl=1 - while(iwmax): - #Automatic line break - if(sep==-1): - if(self.x>self.l_margin): - #Move to next line - self.x=self.l_margin - self.y+=h - w=self.w-self.r_margin-self.x - wmax=(w-2*self.c_margin)*1000.0/self.font_size - i+=1 - nl+=1 - continue - if(i==j): - i+=1 - self.cell(w,h,substr(s,j,i-j),0,2,'',0,link) - else: - self.cell(w,h,substr(s,j,sep-j),0,2,'',0,link) - i=sep+1 - sep=-1 - j=i - l=0 - if(nl==1): - self.x=self.l_margin - w=self.w-self.r_margin-self.x - wmax=(w-2*self.c_margin)*1000.0/self.font_size - nl+=1 - else: - i+=1 - #Last chunk - if(i!=j): - self.cell(l/1000.0*self.font_size,h,substr(s,j),0,0,'',0,link) - - @check_page - def image(self, name, x=None, y=None, w=0,h=0,type='',link=''): - "Put an image on the page" - if not name in self.images: - #First use of image, get info - if(type==''): - pos=name.rfind('.') - if(not pos): - self.error('image file has no extension and no type was specified: '+name) - type=substr(name,pos+1) - type=type.lower() - if(type=='jpg' or type=='jpeg'): - info=self._parsejpg(name) - elif(type=='png'): - info=self._parsepng(name) - else: - #Allow for additional formats - #maybe the image is not showing the correct extension, - #but the header is OK, - succeed_parsing = False - #try all the parsing functions - parsing_functions = [self._parsejpg,self._parsepng,self._parsegif] - for pf in parsing_functions: - try: - info = pf(name) - succeed_parsing = True - break; - except: - pass - #last resource - if not succeed_parsing: - mtd='_parse'+type - if not hasattr(self,mtd): - self.error('Unsupported image type: '+type) - info=getattr(self, mtd)(name) - mtd='_parse'+type - if not hasattr(self,mtd): - self.error('Unsupported image type: '+type) - info=getattr(self, mtd)(name) - info['i']=len(self.images)+1 - self.images[name]=info - else: - info=self.images[name] - #Automatic width and height calculation if needed - if(w==0 and h==0): - #Put image at 72 dpi - w=info['w']/self.k - h=info['h']/self.k - elif(w==0): - w=h*info['w']/info['h'] - elif(h==0): - h=w*info['h']/info['w'] - # Flowing mode - if y is None: - if (self.y + h > self.page_break_trigger and not self.in_footer and self.accept_page_break()): - #Automatic page break - x = self.x - self.add_page(self.cur_orientation) - self.x = x - y = self.y - self.y += h - if x is None: - x = self.x - self._out(sprintf('q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q',w*self.k,h*self.k,x*self.k,(self.h-(y+h))*self.k,info['i'])) - if(link): - self.link(x,y,w,h,link) - - @check_page - def ln(self, h=''): - "Line Feed; default value is last cell height" - self.x=self.l_margin - if(isinstance(h, basestring)): - self.y+=self.lasth - else: - self.y+=h - - def get_x(self): - "Get x position" - return self.x - - def set_x(self, x): - "Set x position" - if(x>=0): - self.x=x - else: - self.x=self.w+x - - def get_y(self): - "Get y position" - return self.y - - def set_y(self, y): - "Set y position and reset x" - self.x=self.l_margin - if(y>=0): - self.y=y - else: - self.y=self.h+y - - def set_xy(self, x,y): - "Set x and y positions" - self.set_y(y) - self.set_x(x) - - def output(self, name='',dest=''): - "Output PDF to some destination" - #Finish document if necessary - if(self.state<3): - self.close() - dest=dest.upper() - if(dest==''): - if(name==''): - name='doc.pdf' - dest='I' - else: - dest='F' - if dest=='I': - print(self.buffer) - elif dest=='D': - print(self.buffer) - elif dest=='F': - #Save to local file - f=open(name,'wb') - if(not f): - self.error('Unable to create output file: '+name) - if PY3K: - # manage binary data as latin1 until PEP461 or similar is implemented - f.write(self.buffer.encode("latin1")) - else: - f.write(self.buffer) - f.close() - elif dest=='S': - #Return as a string - return self.buffer - else: - self.error('Incorrect output destination: '+dest) - return '' - - def normalize_text(self, txt): - "Check that text input is in the correct format/encoding" - # - for TTF unicode fonts: unicode object (utf8 encoding) - # - for built-in fonts: string instances (latin 1 encoding) - if self.unifontsubset and isinstance(txt, str) and not PY3K: - txt = txt.decode('utf8') - elif not self.unifontsubset and isinstance(txt, unicode) and not PY3K: - txt = txt.encode('latin1') - return txt - - - def _dochecks(self): - #Check for locale-related bug -# if(1.1==1): -# self.error("Don\'t alter the locale before including class file"); - #Check for decimal separator - if(sprintf('%.1f',1.0)!='1.0'): - import locale - locale.setlocale(locale.LC_NUMERIC,'C') - - def _getfontpath(self): - return FPDF_FONT_DIR+'/' - - def _putpages(self): - nb=self.page - if hasattr(self,'str_alias_nb_pages'): - # Replace number of pages in fonts using subsets (unicode) - alias = UTF8ToUTF16BE(self.str_alias_nb_pages, False) - r = UTF8ToUTF16BE(str(nb), False) - for n in range(1, nb+1): - self.pages[n] = self.pages[n].replace(alias, r) - # Now repeat for no pages in non-subset fonts - for n in range(1,nb+1): - self.pages[n]=self.pages[n].replace(self.str_alias_nb_pages,str(nb)) - if(self.def_orientation=='P'): - w_pt=self.fw_pt - h_pt=self.fh_pt - else: - w_pt=self.fh_pt - h_pt=self.fw_pt - if self.compress: - filter='/Filter /FlateDecode ' - else: - filter='' - for n in range(1,nb+1): - #Page - self._newobj() - self._out('<>>>' - else: - l=self.links[pl[4]] - if l[0] in self.orientation_changes: - h=w_pt - else: - h=h_pt - annots+=sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]>>',1+2*l[0],h-l[1]*self.k) - self._out(annots+']') - if(self.pdf_version>'1.3'): - self._out('/Group <>') - self._out('/Contents '+str(self.n+1)+' 0 R>>') - self._out('endobj') - #Page content - if self.compress: - # manage binary data as latin1 until PEP461 or similar is implemented - p = self.pages[n].encode("latin1") if PY3K else self.pages[n] - p = zlib.compress(p) - else: - p = self.pages[n] - self._newobj() - self._out('<<'+filter+'/Length '+str(len(p))+'>>') - self._putstream(p) - self._out('endobj') - #Pages root - self.offsets[1]=len(self.buffer) - self._out('1 0 obj') - self._out('<>') - self._out('endobj') - - def _putfonts(self): - nf=self.n - for diff in self.diffs: - #Encodings - self._newobj() - self._out('<>') - self._out('endobj') - for name,info in self.font_files.items(): - if 'type' in info and info['type'] != 'TTF': - #Font file embedding - self._newobj() - self.font_files[name]['n']=self.n - font='' - f=open(self._getfontpath()+name,'rb',1) - if(not f): - self.error('Font file not found') - font=f.read() - f.close() - compressed=(substr(name,-2)=='.z') - if(not compressed and 'length2' in info): - header=(ord(font[0])==128) - if(header): - #Strip first binary header - font=substr(font,6) - if(header and ord(font[info['length1']])==128): - #Strip second binary header - font=substr(font,0,info['length1'])+substr(font,info['length1']+6) - self._out('<>') - self._putstream(font) - self._out('endobj') - flist = [(x[1]["i"],x[0],x[1]) for x in self.fonts.items()] - flist.sort() - for idx,k,font in flist: - #Font objects - self.fonts[k]['n']=self.n+1 - type=font['type'] - name=font['name'] - if(type=='core'): - #Standard font - self._newobj() - self._out('<>') - self._out('endobj') - elif(type=='Type1' or type=='TrueType'): - #Additional Type1 or TrueType font - self._newobj() - self._out('<>') - self._out('endobj') - #Widths - self._newobj() - cw=font['cw'] - s='[' - for i in range(32,256): - # Get doesn't rise exception; returns 0 instead of None if not set - s+=str(cw.get(chr(i)) or 0)+' ' - self._out(s+']') - self._out('endobj') - #Descriptor - self._newobj() - s='<>') - self._out('endobj') - elif (type == 'TTF'): - self.fonts[k]['n'] = self.n + 1 - ttf = TTFontFile() - fontname = 'MPDFAA' + '+' + font['name'] - subset = font['subset'] - del subset[0] - ttfontstream = ttf.makeSubset(font['ttffile'], subset) - ttfontsize = len(ttfontstream) - fontstream = zlib.compress(ttfontstream) - codeToGlyph = ttf.codeToGlyph - ##del codeToGlyph[0] - # Type0 Font - # A composite font - a font composed of other fonts, organized hierarchically - self._newobj() - self._out('<>') - self._out('endobj') - - # CIDFontType2 - # A CIDFont whose glyph descriptions are based on TrueType font technology - self._newobj() - self._out('<>') - self._out('endobj') - - # ToUnicode - self._newobj() - toUni = "/CIDInit /ProcSet findresource begin\n" \ - "12 dict begin\n" \ - "begincmap\n" \ - "/CIDSystemInfo\n" \ - "<> def\n" \ - "/CMapName /Adobe-Identity-UCS def\n" \ - "/CMapType 2 def\n" \ - "1 begincodespacerange\n" \ - "<0000> \n" \ - "endcodespacerange\n" \ - "1 beginbfrange\n" \ - "<0000> <0000>\n" \ - "endbfrange\n" \ - "endcmap\n" \ - "CMapName currentdict /CMap defineresource pop\n" \ - "end\n" \ - "end" - self._out('<>') - self._putstream(toUni) - self._out('endobj') - - # CIDSystemInfo dictionary - self._newobj() - self._out('<>') - self._out('endobj') - - # Font descriptor - self._newobj() - self._out('<>') - self._out('endobj') - - # Embed CIDToGIDMap - # A specification of the mapping from CIDs to glyph indices - cidtogidmap = ''; - cidtogidmap = ["\x00"] * 256*256*2 - for cc, glyph in codeToGlyph.items(): - cidtogidmap[cc*2] = chr(glyph >> 8) - cidtogidmap[cc*2 + 1] = chr(glyph & 0xFF) - cidtogidmap = ''.join(cidtogidmap) - if PY3K: - # manage binary data as latin1 until PEP461-like function is implemented - cidtogidmap = cidtogidmap.encode("latin1") - cidtogidmap = zlib.compress(cidtogidmap); - self._newobj() - self._out('<>') - self._putstream(cidtogidmap) - self._out('endobj') - - #Font file - self._newobj() - self._out('<>') - self._putstream(fontstream) - self._out('endobj') - del ttf - else: - #Allow for additional types - mtd='_put'+type.lower() - if(not method_exists(self,mtd)): - self.error('Unsupported font type: '+type) - self.mtd(font) - - def _putTTfontwidths(self, font, maxUni): - if font['unifilename']: - cw127fname = os.path.splitext(font['unifilename'])[0] + '.cw127.pkl' - else: - cw127fname = None - if cw127fname and os.path.exists(cw127fname): - fh = open(cw127fname, "rb"); - try: - font_dict = pickle.load(fh) - finally: - fh.close() - rangeid = font_dict['rangeid'] - range_ = font_dict['range'] - prevcid = font_dict['prevcid'] - prevwidth = font_dict['prevwidth'] - interval = font_dict['interval'] - range_interval = font_dict['range_interval'] - startcid = 128 - else: - rangeid = 0 - range_ = {} - range_interval = {} - prevcid = -2 - prevwidth = -1 - interval = False - startcid = 1 - cwlen = maxUni + 1 - - # for each character - for cid in range(startcid, cwlen): - if cid == 128 and cw127fname and not os.path.exists(cw127fname): - try: - fh = open(cw127fname, "wb") - font_dict = {} - font_dict['rangeid'] = rangeid - font_dict['prevcid'] = prevcid - font_dict['prevwidth'] = prevwidth - font_dict['interval'] = interval - font_dict['range_interval'] = range_interval - font_dict['range'] = range_ - pickle.dump(font_dict, fh) - fh.close() - except IOError: - if not exception().errno == errno.EACCES: - raise # Not a permission error. - if (font['cw'][cid] == 0): - continue - width = font['cw'][cid] - if (width == 65535): width = 0 - if (cid > 255 and (cid not in font['subset']) or not cid): # - continue - if ('dw' not in font or (font['dw'] and width != font['dw'])): - if (cid == (prevcid + 1)): - if (width == prevwidth): - if (width == range_[rangeid][0]): - range_.setdefault(rangeid, []).append(width) - else: - range_[rangeid].pop() - # new range - rangeid = prevcid - range_[rangeid] = [prevwidth, width] - interval = True - range_interval[rangeid] = True - else: - if (interval): - # new range - rangeid = cid - range_[rangeid] = [width] - else: - range_[rangeid].append(width) - interval = False - else: - rangeid = cid - range_[rangeid] = [width] - interval = False - prevcid = cid - prevwidth = width - prevk = -1 - nextk = -1 - prevint = False - for k, ws in sorted(range_.items()): - cws = len(ws) - if (k == nextk and not prevint and (not k in range_interval or cws < 3)): - if (k in range_interval): - del range_interval[k] - range_[prevk] = range_[prevk] + range_[k] - del range_[k] - else: - prevk = k - nextk = k + cws - if (k in range_interval): - prevint = (cws > 3) - del range_interval[k] - nextk -= 1 - else: - prevint = False - w = [] - for k, ws in sorted(range_.items()): - if (len(set(ws)) == 1): - w.append(' %s %s %s' % (k, k + len(ws) - 1, ws[0])) - else: - w.append(' %s [ %s ]\n' % (k, ' '.join([str(int(h)) for h in ws]))) ## - self._out('/W [%s]' % ''.join(w)) - - def _putimages(self): - filter='' - if self.compress: - filter='/Filter /FlateDecode ' - i = [(x[1]["i"],x[1]) for x in self.images.items()] - i.sort() - for idx,info in i: - self._putimage(info) - del info['data'] - if 'smask' in info: - del info['smask'] - - def _putimage(self, info): - if 'data' in info: - self._newobj() - info['n']=self.n - self._out('<>') - if('trns' in info and isinstance(info['trns'], list)): - trns='' - for i in range(0,len(info['trns'])): - trns+=str(info['trns'][i])+' '+str(info['trns'][i])+' ' - self._out('/Mask ['+trns+']') - if('smask' in info): - self._out('/SMask ' + str(self.n+1) + ' 0 R'); - self._out('/Length '+str(len(info['data']))+'>>') - self._putstream(info['data']) - self._out('endobj') - # Soft mask - if('smask' in info): - dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns ' + str(info['w']) - smask = {'w': info['w'], 'h': info['h'], 'cs': 'DeviceGray', 'bpc': 8, 'f': info['f'], 'dp': dp, 'data': info['smask']} - self._putimage(smask) - #Palette - if(info['cs']=='Indexed'): - self._newobj() - filter = self.compress and '/Filter /FlateDecode ' or '' - if self.compress: - pal=zlib.compress(info['pal']) - else: - pal=info['pal'] - self._out('<<'+filter+'/Length '+str(len(pal))+'>>') - self._putstream(pal) - self._out('endobj') - - def _putxobjectdict(self): - i = [(x["i"],x["n"]) for x in self.images.values()] - i.sort() - for idx,n in i: - self._out('/I'+str(idx)+' '+str(n)+' 0 R') - - def _putresourcedict(self): - self._out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]') - self._out('/Font <<') - f = [(x["i"],x["n"]) for x in self.fonts.values()] - f.sort() - for idx,n in f: - self._out('/F'+str(idx)+' '+str(n)+' 0 R') - self._out('>>') - self._out('/XObject <<') - self._putxobjectdict() - self._out('>>') - - def _putresources(self): - self._putfonts() - self._putimages() - #Resource dictionary - self.offsets[2]=len(self.buffer) - self._out('2 0 obj') - self._out('<<') - self._putresourcedict() - self._out('>>') - self._out('endobj') - - def _putinfo(self): - self._out('/Producer '+self._textstring('PyFPDF '+FPDF_VERSION+' http://pyfpdf.googlecode.com/')) - if hasattr(self,'title'): - self._out('/Title '+self._textstring(self.title)) - if hasattr(self,'subject'): - self._out('/Subject '+self._textstring(self.subject)) - if hasattr(self,'author'): - self._out('/Author '+self._textstring(self.author)) - if hasattr (self,'keywords'): - self._out('/Keywords '+self._textstring(self.keywords)) - if hasattr(self,'creator'): - self._out('/Creator '+self._textstring(self.creator)) - self._out('/CreationDate '+self._textstring('D:'+datetime.now().strftime('%Y%m%d%H%M%S'))) - - def _putcatalog(self): - self._out('/Type /Catalog') - self._out('/Pages 1 0 R') - if(self.zoom_mode=='fullpage'): - self._out('/OpenAction [3 0 R /Fit]') - elif(self.zoom_mode=='fullwidth'): - self._out('/OpenAction [3 0 R /FitH null]') - elif(self.zoom_mode=='real'): - self._out('/OpenAction [3 0 R /XYZ null null 1]') - elif(not isinstance(self.zoom_mode,basestring)): - self._out(sprintf('/OpenAction [3 0 R /XYZ null null %s]',self.zoom_mode/100)) - if(self.layout_mode=='single'): - self._out('/PageLayout /SinglePage') - elif(self.layout_mode=='continuous'): - self._out('/PageLayout /OneColumn') - elif(self.layout_mode=='two'): - self._out('/PageLayout /TwoColumnLeft') - - def _putheader(self): - self._out('%PDF-'+self.pdf_version) - - def _puttrailer(self): - self._out('/Size '+str(self.n+1)) - self._out('/Root '+str(self.n)+' 0 R') - self._out('/Info '+str(self.n-1)+' 0 R') - - def _enddoc(self): - self._putheader() - self._putpages() - self._putresources() - #Info - self._newobj() - self._out('<<') - self._putinfo() - self._out('>>') - self._out('endobj') - #Catalog - self._newobj() - self._out('<<') - self._putcatalog() - self._out('>>') - self._out('endobj') - #Cross-ref - o=len(self.buffer) - self._out('xref') - self._out('0 '+(str(self.n+1))) - self._out('0000000000 65535 f ') - for i in range(1,self.n+1): - self._out(sprintf('%010d 00000 n ',self.offsets[i])) - #Trailer - self._out('trailer') - self._out('<<') - self._puttrailer() - self._out('>>') - self._out('startxref') - self._out(o) - self._out('%%EOF') - self.state=3 - - def _beginpage(self, orientation): - self.page+=1 - self.pages[self.page]='' - self.state=2 - self.x=self.l_margin - self.y=self.t_margin - self.font_family='' - #Page orientation - if(not orientation): - orientation=self.def_orientation - else: - orientation=orientation[0].upper() - if(orientation!=self.def_orientation): - self.orientation_changes[self.page]=1 - if(orientation!=self.cur_orientation): - #Change orientation - if(orientation=='P'): - self.w_pt=self.fw_pt - self.h_pt=self.fh_pt - self.w=self.fw - self.h=self.fh - else: - self.w_pt=self.fh_pt - self.h_pt=self.fw_pt - self.w=self.fh - self.h=self.fw - self.page_break_trigger=self.h-self.b_margin - self.cur_orientation=orientation - - def _endpage(self): - #End of page contents - self.state=1 - - def _newobj(self): - #Begin a new object - self.n+=1 - self.offsets[self.n]=len(self.buffer) - self._out(str(self.n)+' 0 obj') - - def _dounderline(self, x,y,txt): - #Underline text - up=self.current_font['up'] - ut=self.current_font['ut'] - w=self.get_string_width(txt)+self.ws*txt.count(' ') - return sprintf('%.2f %.2f %.2f %.2f re f',x*self.k,(self.h-(y-up/1000.0*self.font_size))*self.k,w*self.k,-ut/1000.0*self.font_size_pt) - - def _parsejpg(self, filename): - # Extract info from a JPEG file - try: - f = open(filename, 'rb') - while True: - markerHigh, markerLow = struct.unpack('BB', f.read(2)) - if markerHigh != 0xFF or markerLow < 0xC0: - raise SyntaxError('No JPEG marker found') - elif markerLow == 0xDA: # SOS - raise SyntaxError('No JPEG SOF marker found') - elif (markerLow == 0xC8 or # JPG - (markerLow >= 0xD0 and markerLow <= 0xD9) or # RSTx - (markerLow >= 0xF0 and markerLow <= 0xFD)): # JPGx - pass - else: - dataSize, = struct.unpack('>H', f.read(2)) - data = f.read(dataSize - 2) if dataSize > 2 else '' - if ((markerLow >= 0xC0 and markerLow <= 0xC3) or # SOF0 - SOF3 - (markerLow >= 0xC5 and markerLow <= 0xC7) or # SOF4 - SOF7 - (markerLow >= 0xC9 and markerLow <= 0xCB) or # SOF9 - SOF11 - (markerLow >= 0xCD and markerLow <= 0xCF)): # SOF13 - SOF15 - bpc, height, width, layers = struct.unpack_from('>BHHB', data) - colspace = 'DeviceRGB' if layers == 3 else ('DeviceCMYK' if layers == 4 else 'DeviceGray') - break - except Exception: - self.error('Missing or incorrect image file: %s. error: %s' % (filename, str(exception()))) - - # Read whole file from the start - f.seek(0) - data = f.read() - f.close() - return {'w':width,'h':height,'cs':colspace,'bpc':bpc,'f':'DCTDecode','data':data} - - def _parsegif(self, filename): - # Extract info from a GIF file (via PNG conversion) - if Image is None: - self.error('PIL is required for GIF support') - try: - im = Image.open(filename) - except Exception: - self.error('Missing or incorrect image file: %s. error: %s' % (filename, str(exception()))) - else: - # Use temporary file - f = tempfile.NamedTemporaryFile(delete=False, suffix=".png") - tmp = f.name - f.close() - if "transparency" in im.info: - im.save(tmp, transparency = im.info['transparency']) - else: - im.save(tmp) - info = self._parsepng(tmp) - os.unlink(tmp) - return info - - def _parsepng(self, name): - #Extract info from a PNG file - if name.startswith("http://") or name.startswith("https://"): - f = urlopen(name) - else: - f=open(name,'rb') - if(not f): - self.error("Can't open image file: "+name) - #Check signature - magic = f.read(8).decode("latin1") - signature = '\x89'+'PNG'+'\r'+'\n'+'\x1a'+'\n' - if not PY3K: signature = signature.decode("latin1") - if(magic!=signature): - self.error('Not a PNG file: '+name) - #Read header chunk - f.read(4) - chunk = f.read(4).decode("latin1") - if(chunk!='IHDR'): - self.error('Incorrect PNG file: '+name) - w=self._freadint(f) - h=self._freadint(f) - bpc=ord(f.read(1)) - if(bpc>8): - self.error('16-bit depth not supported: '+name) - ct=ord(f.read(1)) - if(ct==0 or ct==4): - colspace='DeviceGray' - elif(ct==2 or ct==6): - colspace='DeviceRGB' - elif(ct==3): - colspace='Indexed' - else: - self.error('Unknown color type: '+name) - if(ord(f.read(1))!=0): - self.error('Unknown compression method: '+name) - if(ord(f.read(1))!=0): - self.error('Unknown filter method: '+name) - if(ord(f.read(1))!=0): - self.error('Interlacing not supported: '+name) - f.read(4) - dp='/Predictor 15 /Colors ' - if colspace == 'DeviceRGB': - dp+='3' - else: - dp+='1' - dp+=' /BitsPerComponent '+str(bpc)+' /Columns '+str(w)+'' - #Scan chunks looking for palette, transparency and image data - pal='' - trns='' - data=bytes() if PY3K else str() - n=1 - while n != None: - n=self._freadint(f) - type=f.read(4).decode("latin1") - if(type=='PLTE'): - #Read palette - pal=f.read(n) - f.read(4) - elif(type=='tRNS'): - #Read transparency info - t=f.read(n) - if(ct==0): - trns=[ord(substr(t,1,1)),] - elif(ct==2): - trns=[ord(substr(t,1,1)),ord(substr(t,3,1)),ord(substr(t,5,1))] - else: - pos=t.find('\x00'.encode("latin1")) - if(pos!=-1): - trns=[pos,] - f.read(4) - elif(type=='IDAT'): - #Read image data block - data+=f.read(n) - f.read(4) - elif(type=='IEND'): - break - else: - f.read(n+4) - if(colspace=='Indexed' and not pal): - self.error('Missing palette in '+name) - f.close() - info = {'w':w,'h':h,'cs':colspace,'bpc':bpc,'f':'FlateDecode','dp':dp,'pal':pal,'trns':trns,} - if(ct>=4): - # Extract alpha channel - data = zlib.decompress(data) - color = b('') - alpha = b('') - if(ct==4): - # Gray image - length = 2*w - for i in range(h): - pos = (1+length)*i - color += b(data[pos]) - alpha += b(data[pos]) - line = substr(data, pos+1, length) - re_c = re.compile('(.).'.encode("ascii"), flags=re.DOTALL) - re_a = re.compile('.(.)'.encode("ascii"), flags=re.DOTALL) - color += re_c.sub(lambda m: m.group(1), line) - alpha += re_a.sub(lambda m: m.group(1), line) - else: - # RGB image - length = 4*w - for i in range(h): - pos = (1+length)*i - color += b(data[pos]) - alpha += b(data[pos]) - line = substr(data, pos+1, length) - re_c = re.compile('(...).'.encode("ascii"), flags=re.DOTALL) - re_a = re.compile('...(.)'.encode("ascii"), flags=re.DOTALL) - color += re_c.sub(lambda m: m.group(1), line) - alpha += re_a.sub(lambda m: m.group(1), line) - del data - data = zlib.compress(color) - info['smask'] = zlib.compress(alpha) - if (self.pdf_version < '1.4'): - self.pdf_version = '1.4' - info['data'] = data - return info - - def _freadint(self, f): - #Read a 4-byte integer from file - try: - return struct.unpack('>I', f.read(4))[0] - except: - return None - - def _textstring(self, s): - #Format a text string - return '('+self._escape(s)+')' - - def _escape(self, s): - #Add \ before \, ( and ) - return s.replace('\\','\\\\').replace(')','\\)').replace('(','\\(').replace('\r','\\r') - - def _putstream(self, s): - self._out('stream') - self._out(s) - self._out('endstream') - - def _out(self, s): - #Add a line to the document - if PY3K and isinstance(s, bytes): - # manage binary data as latin1 until PEP461-like function is implemented - s = s.decode("latin1") - elif not PY3K and isinstance(s, unicode): - s = s.encode("latin1") # default encoding (font name and similar) - elif not isinstance(s, basestring): - s = str(s) - if(self.state==2): - self.pages[self.page]+=s+"\n" - else: - self.buffer+=s+"\n" - - @check_page - def interleaved2of5(self, txt, x, y, w=1.0, h=10.0): - "Barcode I2of5 (numeric), adds a 0 if odd lenght" - narrow = w / 3.0 - wide = w - - # wide/narrow codes for the digits - bar_char={'0': 'nnwwn', '1': 'wnnnw', '2': 'nwnnw', '3': 'wwnnn', - '4': 'nnwnw', '5': 'wnwnn', '6': 'nwwnn', '7': 'nnnww', - '8': 'wnnwn', '9': 'nwnwn', 'A': 'nn', 'Z': 'wn'} - - self.set_fill_color(0) - code = txt - # add leading zero if code-length is odd - if len(code) % 2 != 0: - code = '0' + code - - # add start and stop codes - code = 'AA' + code.lower() + 'ZA' - - for i in range(0, len(code), 2): - # choose next pair of digits - char_bar = code[i] - char_space = code[i+1] - # check whether it is a valid digit - if not char_bar in bar_char.keys(): - raise RuntimeError ('Char "%s" invalid for I25: ' % char_bar) - if not char_space in bar_char.keys(): - raise RuntimeError ('Char "%s" invalid for I25: ' % char_space) - - # create a wide/narrow-seq (first digit=bars, second digit=spaces) - seq = '' - for s in range(0, len(bar_char[char_bar])): - seq += bar_char[char_bar][s] + bar_char[char_space][s] - - for bar in range(0, len(seq)): - # set line_width depending on value - if seq[bar] == 'n': - line_width = narrow - else: - line_width = wide - - # draw every second value, the other is represented by space - if bar % 2 == 0: - self.rect(x, y, line_width, h, 'F') - - x += line_width - - - @check_page - def code39(self, txt, x, y, w=1.5, h=5.0): - """Barcode 3of9""" - dim = {'w': w, 'n': w/3.} - chars = { - '0': 'nnnwwnwnn', '1': 'wnnwnnnnw', '2': 'nnwwnnnnw', - '3': 'wnwwnnnnn', '4': 'nnnwwnnnw', '5': 'wnnwwnnnn', - '6': 'nnwwwnnnn', '7': 'nnnwnnwnw', '8': 'wnnwnnwnn', - '9': 'nnwwnnwnn', 'A': 'wnnnnwnnw', 'B': 'nnwnnwnnw', - 'C': 'wnwnnwnnn', 'D': 'nnnnwwnnw', 'E': 'wnnnwwnnn', - 'F': 'nnwnwwnnn', 'G': 'nnnnnwwnw', 'H': 'wnnnnwwnn', - 'I': 'nnwnnwwnn', 'J': 'nnnnwwwnn', 'K': 'wnnnnnnww', - 'L': 'nnwnnnnww', 'M': 'wnwnnnnwn', 'N': 'nnnnwnnww', - 'O': 'wnnnwnnwn', 'P': 'nnwnwnnwn', 'Q': 'nnnnnnwww', - 'R': 'wnnnnnwwn', 'S': 'nnwnnnwwn', 'T': 'nnnnwnwwn', - 'U': 'wwnnnnnnw', 'V': 'nwwnnnnnw', 'W': 'wwwnnnnnn', - 'X': 'nwnnwnnnw', 'Y': 'wwnnwnnnn', 'Z': 'nwwnwnnnn', - '-': 'nwnnnnwnw', '.': 'wwnnnnwnn', ' ': 'nwwnnnwnn', - '*': 'nwnnwnwnn', '$': 'nwnwnwnnn', '/': 'nwnwnnnwn', - '+': 'nwnnnwnwn', '%': 'nnnwnwnwn', - } - self.set_fill_color(0) - for c in txt.upper(): - if c not in chars: - raise RuntimeError('Invalid char "%s" for Code39' % c) - for i, d in enumerate(chars[c]): - if i % 2 == 0: - self.rect(x, y, dim[d], h, 'F') - x += dim[d] - x += dim['n'] - - diff --git a/lib/python3.12/site-packages/fpdf/html.py b/lib/python3.12/site-packages/fpdf/html.py deleted file mode 100644 index b75b74d..0000000 --- a/lib/python3.12/site-packages/fpdf/html.py +++ /dev/null @@ -1,402 +0,0 @@ -# -*- coding: latin-1 -*- - -"HTML Renderer for FPDF.py" - -__author__ = "Mariano Reingart " -__copyright__ = "Copyright (C) 2010 Mariano Reingart" -__license__ = "LGPL 3.0" - -# Inspired by tuto5.py and several examples from fpdf.org, html2fpdf, etc. - -from .fpdf import FPDF -from .py3k import PY3K, basestring, unicode, HTMLParser - -DEBUG = False - -def px2mm(px): - return int(px)*25.4/72.0 - -def hex2dec(color = "#000000"): - if color: - r = int(color[1:3], 16) - g = int(color[3:5], 16) - b = int(color[5:7], 16) - return r, g, b - -class HTML2FPDF(HTMLParser): - "Render basic HTML to FPDF" - - def __init__(self, pdf, image_map=None): - HTMLParser.__init__(self) - self.style = {} - self.pre = False - self.href = '' - self.align = '' - self.page_links = {} - self.font = None - self.font_stack = [] - self.pdf = pdf - self.image_map = image_map or (lambda src: src) - self.r = self.g = self.b = 0 - self.indent = 0 - self.bullet = [] - self.set_font("times", 12) - self.font_face = "times" # initialize font - self.color = 0 #initialize font color - self.table = None # table attributes - self.table_col_width = None # column (header) widths - self.table_col_index = None # current column index - self.td = None # cell attributes - self.th = False # header enabled - self.tr = None - self.theader = None # table header cells - self.tfooter = None # table footer cells - self.thead = None - self.tfoot = None - self.theader_out = self.tfooter_out = False - self.hsize = dict(h1=2, h2=1.5, h3=1.17, h4=1, h5=0.83, h6=0.67) - - def width2mm(self, length): - if length[-1]=='%': - total = self.pdf.w - self.pdf.r_margin - self.pdf.l_margin - if self.table['width'][-1]=='%': - total *= int(self.table['width'][:-1])/100.0 - return int(length[:-1]) * total / 101.0 - else: - return int(length) / 6.0 - - def handle_data(self, txt): - if self.td is not None: # drawing a table? - if 'width' not in self.td and 'colspan' not in self.td: - try: - l = [self.table_col_width[self.table_col_index]] - except IndexError: - raise RuntimeError("Table column/cell width not specified, unable to continue") - elif 'colspan' in self.td: - i = self.table_col_index - colspan = int(self.td['colspan']) - l = self.table_col_width[i:i+colspan] - else: - l = [self.td.get('width','240')] - w = sum([self.width2mm(lenght) for lenght in l]) - h = int(self.td.get('height', 0)) / 4 or self.h*1.30 - self.table_h = h - border = int(self.table.get('border', 0)) - if not self.th: - align = self.td.get('align', 'L')[0].upper() - border = border and 'LR' - else: - self.set_style('B',True) - border = border or 'B' - align = self.td.get('align', 'C')[0].upper() - bgcolor = hex2dec(self.td.get('bgcolor', self.tr.get('bgcolor', ''))) - # parsing table header/footer (drawn later): - if self.thead is not None: - self.theader.append(((w,h,txt,border,0,align), bgcolor)) - if self.tfoot is not None: - self.tfooter.append(((w,h,txt,border,0,align), bgcolor)) - # check if reached end of page, add table footer and header: - height = h + (self.tfooter and self.tfooter[0][0][1] or 0) - if self.pdf.y+height>self.pdf.page_break_trigger and not self.th: - self.output_table_footer() - self.pdf.add_page() - self.theader_out = self.tfooter_out = False - if self.tfoot is None and self.thead is None: - if not self.theader_out: - self.output_table_header() - self.box_shadow(w, h, bgcolor) - if DEBUG: print("td cell", self.pdf.x, w, txt, "*") - self.pdf.cell(w,h,txt,border,0,align) - elif self.table is not None: - # ignore anything else than td inside a table - pass - elif self.align: - if DEBUG: print("cell", txt, "*") - self.pdf.cell(0,self.h,txt,0,1,self.align[0].upper(), self.href) - else: - txt = txt.replace("\n"," ") - if self.href: - self.put_link(self.href,txt) - else: - if DEBUG: print("write", txt, "*") - self.pdf.write(self.h,txt) - - def box_shadow(self, w, h, bgcolor): - if DEBUG: print("box_shadow", w, h, bgcolor) - if bgcolor: - fill_color = self.pdf.fill_color - self.pdf.set_fill_color(*bgcolor) - self.pdf.rect(self.pdf.x, self.pdf.y, w, h, 'F') - self.pdf.fill_color = fill_color - - def output_table_header(self): - if self.theader: - b = self.b - x = self.pdf.x - self.pdf.set_x(self.table_offset) - self.set_style('B',True) - for cell, bgcolor in self.theader: - self.box_shadow(cell[0], cell[1], bgcolor) - self.pdf.cell(*cell) - self.set_style('B',b) - self.pdf.ln(self.theader[0][0][1]) - self.pdf.set_x(self.table_offset) - #self.pdf.set_x(x) - self.theader_out = True - - def output_table_footer(self): - if self.tfooter: - x = self.pdf.x - self.pdf.set_x(self.table_offset) - #TODO: self.output_table_sep() - for cell, bgcolor in self.tfooter: - self.box_shadow(cell[0], cell[1], bgcolor) - self.pdf.cell(*cell) - self.pdf.ln(self.tfooter[0][0][1]) - self.pdf.set_x(x) - if int(self.table.get('border', 0)): - self.output_table_sep() - self.tfooter_out = True - - def output_table_sep(self): - self.pdf.set_x(self.table_offset) - x1 = self.pdf.x - y1 = self.pdf.y - w = sum([self.width2mm(lenght) for lenght in self.table_col_width]) - self.pdf.line(x1,y1,x1+w,y1) - - - def handle_starttag(self, tag, attrs): - attrs = dict(attrs) - if DEBUG: print("STARTTAG", tag, attrs) - if tag=='b' or tag=='i' or tag=='u': - self.set_style(tag,1) - if tag=='a': - self.href=attrs['href'] - if tag=='br': - self.pdf.ln(5) - if tag=='p': - self.pdf.ln(5) - if attrs: - if attrs: self.align = attrs.get('align') - if tag in self.hsize: - k = self.hsize[tag] - self.pdf.ln(5*k) - self.pdf.set_text_color(150,0,0) - self.pdf.set_font_size(12 * k) - if attrs: self.align = attrs.get('align') - if tag=='hr': - self.put_line() - if tag=='pre': - self.pdf.set_font('Courier','',11) - self.pdf.set_font_size(11) - self.set_style('B',False) - self.set_style('I',False) - self.pre = True - if tag=='blockquote': - self.set_text_color(100,0,45) - self.pdf.ln(3) - if tag=='ul': - self.indent+=1 - self.bullet.append('\x95') - if tag=='ol': - self.indent+=1 - self.bullet.append(0) - if tag=='li': - self.pdf.ln(self.h+2) - self.pdf.set_text_color(190,0,0) - bullet = self.bullet[self.indent-1] - if not isinstance(bullet, basestring): - bullet += 1 - self.bullet[self.indent-1] = bullet - bullet = "%s. " % bullet - self.pdf.write(self.h,'%s%s ' % (' '*5*self.indent, bullet)) - self.set_text_color() - if tag=='font': - # save previous font state: - self.font_stack.append((self.font_face, self.font_size, self.color)) - if 'color' in attrs: - self.color = hex2dec(attrs['color']) - self.set_text_color(*color) - self.color = color - if 'face' in attrs: - face = attrs.get('face').lower() - try: - self.pdf.set_font(face) - self.font_face = face - except RuntimeError: - pass # font not found, ignore - if 'size' in attrs: - size = int(attrs.get('size')) - self.pdf.set_font(self.font_face, size=int(size)) - self.font_size = size - if tag=='table': - self.table = dict([(k.lower(), v) for k,v in attrs.items()]) - if not 'width' in self.table: - self.table['width'] = '100%' - if self.table['width'][-1]=='%': - w = self.pdf.w - self.pdf.r_margin - self.pdf.l_margin - w *= int(self.table['width'][:-1])/100.0 - self.table_offset = (self.pdf.w-w)/2.0 - self.table_col_width = [] - self.theader_out = self.tfooter_out = False - self.theader = [] - self.tfooter = [] - self.thead = None - self.tfoot = None - self.table_h = 0 - self.pdf.ln() - if tag=='tr': - self.tr = dict([(k.lower(), v) for k,v in attrs.items()]) - self.table_col_index = 0 - self.pdf.set_x(self.table_offset) - if tag=='td': - self.td = dict([(k.lower(), v) for k,v in attrs.items()]) - if tag=='th': - self.td = dict([(k.lower(), v) for k,v in attrs.items()]) - self.th = True - if 'width' in self.td: - self.table_col_width.append(self.td['width']) - if tag=='thead': - self.thead = {} - if tag=='tfoot': - self.tfoot = {} - if tag=='img': - if 'src' in attrs: - x = self.pdf.get_x() - y = self.pdf.get_y() - w = px2mm(attrs.get('width', 0)) - h = px2mm(attrs.get('height',0)) - if self.align and self.align[0].upper() == 'C': - x = (self.pdf.w-x)/2.0 - w/2.0 - self.pdf.image(self.image_map(attrs['src']), - x, y, w, h, link=self.href) - self.pdf.set_x(x+w) - self.pdf.set_y(y+h) - if tag=='b' or tag=='i' or tag=='u': - self.set_style(tag, True) - if tag=='center': - self.align = 'Center' - - def handle_endtag(self, tag): - #Closing tag - if DEBUG: print("ENDTAG", tag) - if tag=='h1' or tag=='h2' or tag=='h3' or tag=='h4': - self.pdf.ln(6) - self.set_font() - self.set_style() - self.align = None - if tag=='pre': - self.pdf.set_font(self.font or 'Times','',12) - self.pdf.set_font_size(12) - self.pre=False - if tag=='blockquote': - self.set_text_color(0,0,0) - self.pdf.ln(3) - if tag=='strong': - tag='b' - if tag=='em': - tag='i' - if tag=='b' or tag=='i' or tag=='u': - self.set_style(tag, False) - if tag=='a': - self.href='' - if tag=='p': - self.align='' - if tag in ('ul', 'ol'): - self.indent-=1 - self.bullet.pop() - if tag=='table': - if not self.tfooter_out: - self.output_table_footer() - self.table = None - self.th = False - self.theader = None - self.tfooter = None - self.pdf.ln() - if tag=='thead': - self.thead = None - if tag=='tfoot': - self.tfoot = None - if tag=='tbody': - # draw a line separator between table bodies - self.pdf.set_x(self.table_offset) - self.output_table_sep() - if tag=='tr': - h = self.table_h - if self.tfoot is None: - self.pdf.ln(h) - self.tr = None - if tag=='td' or tag=='th': - if self.th: - if DEBUG: print("revert style") - self.set_style('B', False) # revert style - self.table_col_index += int(self.td.get('colspan','1')) - self.td = None - self.th = False - if tag=='font': - # recover last font state - face, size, color = self.font_stack.pop() - if face: - self.pdf.set_text_color(0,0,0) - self.color = None - self.set_font(face, size) - self.font = None - if tag=='center': - self.align = None - - def set_font(self, face=None, size=None): - if face: - self.font_face = face - if size: - self.font_size = size - self.h = size / 72.0*25.4 - if DEBUG: print("H", self.h) - self.pdf.set_font(self.font_face or 'times','',12) - self.pdf.set_font_size(self.font_size or 12) - self.set_style('u', False) - self.set_style('b', False) - self.set_style('i', False) - self.set_text_color() - - def set_style(self, tag=None, enable=None): - #Modify style and select corresponding font - if tag: - t = self.style.get(tag.lower()) - self.style[tag.lower()] = enable - style='' - for s in ('b','i','u'): - if self.style.get(s): - style+=s - if DEBUG: print("SET_FONT_STYLE", style) - self.pdf.set_font('',style) - - def set_text_color(self, r=None, g=0, b=0): - if r is None: - self.pdf.set_text_color(self.r,self.g,self.b) - else: - self.pdf.set_text_color(r, g, b) - self.r = r - self.g = g - self.b = b - - def put_link(self, url, txt): - #Put a hyperlink - self.set_text_color(0,0,255) - self.set_style('u', True) - self.pdf.write(5,txt,url) - self.set_style('u', False) - self.set_text_color(0) - - def put_line(self): - self.pdf.ln(2) - self.pdf.line(self.pdf.get_x(),self.pdf.get_y(),self.pdf.get_x()+187,self.pdf.get_y()) - self.pdf.ln(3) - -class HTMLMixin(object): - def write_html(self, text, image_map=None): - "Parse HTML and convert it to PDF" - h2p = HTML2FPDF(self, image_map) - text = h2p.unescape(text) # To deal with HTML entities - h2p.feed(text) - diff --git a/lib/python3.12/site-packages/fpdf/php.py b/lib/python3.12/site-packages/fpdf/php.py deleted file mode 100644 index 3371789..0000000 --- a/lib/python3.12/site-packages/fpdf/php.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python -# -*- coding: latin-1 -*- - -from .py3k import PY3K, basestring, unicode - -# fpdf php helpers: - -def substr(s, start, length=-1): - if length < 0: - length=len(s)-start - return s[start:start+length] - -def sprintf(fmt, *args): return fmt % args - -def print_r(array): - if not isinstance(array, dict): - array = dict([(k, k) for k in array]) - for k, v in array.items(): - print("[%s] => %s " % (k, v)) - -def UTF8ToUTF16BE(instr, setbom=True): - "Converts UTF-8 strings to UTF16-BE." - outstr = "".encode() - if (setbom): - outstr += "\xFE\xFF".encode("latin1") - if not isinstance(instr, unicode): - instr = instr.decode('UTF-8') - outstr += instr.encode('UTF-16BE') - # convert bytes back to fake unicode string until PEP461-like is implemented - if PY3K: - outstr = outstr.decode("latin1") - return outstr - -def UTF8StringToArray(instr): - "Converts UTF-8 strings to codepoints array" - return [ord(c) for c in instr] - -# ttfints php helpers: - -def die(msg): - raise RuntimeError(msg) - -def str_repeat(s, count): - return s * count - -def str_pad(s, pad_length=0, pad_char= " ", pad_type= +1 ): - if pad_type<0: # pad left - return s.rjust(pad_length, pad_char) - elif pad_type>0: # pad right - return s.ljust(pad_length, pad_char) - else: # pad both - return s.center(pad_length, pad_char) - -strlen = count = lambda s: len(s) diff --git a/lib/python3.12/site-packages/fpdf/py3k.py b/lib/python3.12/site-packages/fpdf/py3k.py deleted file mode 100644 index eb97658..0000000 --- a/lib/python3.12/site-packages/fpdf/py3k.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -"Special module to handle differences between Python 2 and 3 versions" - -import sys - -PY3K = sys.version_info >= (3, 0) - -try: - import cPickle as pickle -except ImportError: - import pickle - -try: - from urllib import urlopen -except ImportError: - from urllib.request import urlopen - -try: - from hashlib import md5 -except ImportError: - try: - from md5 import md5 - except ImportError: - md5 = None -def hashpath(fn): - h = md5() - if PY3K: - h.update(fn.encode("UTF-8")) - else: - h.update(fn) - return h.hexdigest() - -# Check if PIL is available (tries importing both pypi version and corrected or manually installed versions). -# Necessary for JPEG and GIF support. -# TODO: Pillow support -try: - from PIL import Image -except ImportError: - try: - import Image - except ImportError: - Image = None - -try: - from HTMLParser import HTMLParser -except ImportError: - from html.parser import HTMLParser - -if PY3K: - basestring = str - unicode = str - ord = lambda x: x -else: - basestring = basestring - unicode = unicode - ord = ord - -# shortcut to bytes conversion (b prefix) -def b(s): - if isinstance(s, basestring): - return s.encode("latin1") - elif isinstance(s, int): - if PY3K: - return bytes([s]) # http://bugs.python.org/issue4588 - else: - return chr(s) - -def exception(): - "Return the current the exception instance currently being handled" - # this is needed to support Python 2.5 that lacks "as" syntax - return sys.exc_info()[1] - - diff --git a/lib/python3.12/site-packages/fpdf/template.py b/lib/python3.12/site-packages/fpdf/template.py deleted file mode 100644 index 154b391..0000000 --- a/lib/python3.12/site-packages/fpdf/template.py +++ /dev/null @@ -1,226 +0,0 @@ -# -*- coding: iso-8859-1 -*- - -"PDF Template Helper for FPDF.py" - -__author__ = "Mariano Reingart " -__copyright__ = "Copyright (C) 2010 Mariano Reingart" -__license__ = "LGPL 3.0" - -import sys,os,csv -from .fpdf import FPDF -from .py3k import PY3K, basestring, unicode - -def rgb(col): - return (col // 65536), (col // 256 % 256), (col% 256) - -class Template: - def __init__(self, infile=None, elements=None, format='A4', orientation='portrait', - title='', author='', subject='', creator='', keywords=''): - if elements: - self.load_elements(elements) - self.handlers = {'T': self.text, 'L': self.line, 'I': self.image, - 'B': self.rect, 'BC': self.barcode, 'W': self.write, } - self.texts = {} - pdf = self.pdf = FPDF(format=format,orientation=orientation, unit="mm") - pdf.set_title(title) - pdf.set_author(author) - pdf.set_creator(creator) - pdf.set_subject(subject) - pdf.set_keywords(keywords) - - def load_elements(self, elements): - "Initialize the internal element structures" - self.pg_no = 0 - self.elements = elements - self.keys = [v['name'].lower() for v in self.elements] - - def parse_csv(self, infile, delimiter=",", decimal_sep="."): - "Parse template format csv file and create elements dict" - keys = ('name','type','x1','y1','x2','y2','font','size', - 'bold','italic','underline','foreground','background', - 'align','text','priority', 'multiline') - self.elements = [] - self.pg_no = 0 - if not PY3K: - f = open(infile, 'rb') - else: - f = open(infile) - for row in csv.reader(f, delimiter=delimiter): - kargs = {} - for i,v in enumerate(row): - if not v.startswith("'") and decimal_sep!=".": - v = v.replace(decimal_sep,".") - else: - v = v - if v=='': - v = None - else: - v = eval(v.strip()) - kargs[keys[i]] = v - self.elements.append(kargs) - self.keys = [v['name'].lower() for v in self.elements] - - def add_page(self): - self.pg_no += 1 - self.texts[self.pg_no] = {} - - def __setitem__(self, name, value): - if name.lower() in self.keys: - if not PY3K and isinstance(value, unicode): - value = value.encode("latin1","ignore") - elif value is None: - value = "" - else: - value = str(value) - self.texts[self.pg_no][name.lower()] = value - - # setitem shortcut (may be further extended) - set = __setitem__ - - def has_key(self, name): - return name.lower() in self.keys - - def __getitem__(self, name): - if name in self.keys: - key = name.lower() - if key in self.texts: - # text for this page: - return self.texts[self.pg_no][key] - else: - # find first element for default text: - elements = [element for element in self.elements - if element['name'].lower() == key] - if elements: - return elements[0]['text'] - - def split_multicell(self, text, element_name): - "Divide (\n) a string using a given element width" - pdf = self.pdf - element = [element for element in self.elements - if element['name'].lower() == element_name.lower()][0] - style = "" - if element['bold']: style += "B" - if element['italic']: style += "I" - if element['underline']: style += "U" - pdf.set_font(element['font'],style,element['size']) - align = {'L':'L','R':'R','I':'L','D':'R','C':'C','':''}.get(element['align']) # D/I in spanish - if isinstance(text, unicode) and not PY3K: - text = text.encode("latin1","ignore") - else: - text = str(text) - return pdf.multi_cell(w=element['x2']-element['x1'], - h=element['y2']-element['y1'], - txt=text,align=align,split_only=True) - - def render(self, outfile, dest="F"): - pdf = self.pdf - for pg in range(1, self.pg_no+1): - pdf.add_page() - pdf.set_font('Arial','B',16) - pdf.set_auto_page_break(False,margin=0) - - for element in sorted(self.elements,key=lambda x: x['priority']): - #print "dib",element['type'], element['name'], element['x1'], element['y1'], element['x2'], element['y2'] - element = element.copy() - element['text'] = self.texts[pg].get(element['name'].lower(), element['text']) - if 'rotate' in element: - pdf.rotate(element['rotate'], element['x1'], element['y1']) - self.handlers[element['type'].upper()](pdf, **element) - if 'rotate' in element: - pdf.rotate(0) - - if dest: - return pdf.output(outfile, dest) - - def text(self, pdf, x1=0, y1=0, x2=0, y2=0, text='', font="arial", size=10, - bold=False, italic=False, underline=False, align="", - foreground=0, backgroud=65535, multiline=None, - *args, **kwargs): - if text: - if pdf.text_color!=rgb(foreground): - pdf.set_text_color(*rgb(foreground)) - if pdf.fill_color!=rgb(backgroud): - pdf.set_fill_color(*rgb(backgroud)) - - font = font.strip().lower() - if font == 'arial black': - font = 'arial' - style = "" - for tag in 'B', 'I', 'U': - if (text.startswith("<%s>" % tag) and text.endswith("" %tag)): - text = text[3:-4] - style += tag - if bold: style += "B" - if italic: style += "I" - if underline: style += "U" - align = {'L':'L','R':'R','I':'L','D':'R','C':'C','':''}.get(align) # D/I in spanish - pdf.set_font(font,style,size) - ##m_k = 72 / 2.54 - ##h = (size/m_k) - pdf.set_xy(x1,y1) - if multiline is None: - # multiline==None: write without wrapping/trimming (default) - pdf.cell(w=x2-x1,h=y2-y1,txt=text,border=0,ln=0,align=align) - elif multiline: - # multiline==True: automatic word - warp - pdf.multi_cell(w=x2-x1,h=y2-y1,txt=text,border=0,align=align) - else: - # multiline==False: trim to fit exactly the space defined - text = pdf.multi_cell(w=x2-x1, h=y2-y1, - txt=text, align=align, split_only=True)[0] - print("trimming: *%s*" % text) - pdf.cell(w=x2-x1,h=y2-y1,txt=text,border=0,ln=0,align=align) - - #pdf.Text(x=x1,y=y1,txt=text) - - def line(self, pdf, x1=0, y1=0, x2=0, y2=0, size=0, foreground=0, *args, **kwargs): - if pdf.draw_color!=rgb(foreground): - #print "SetDrawColor", hex(foreground) - pdf.set_draw_color(*rgb(foreground)) - #print "SetLineWidth", size - pdf.set_line_width(size) - pdf.line(x1, y1, x2, y2) - - def rect(self, pdf, x1=0, y1=0, x2=0, y2=0, size=0, foreground=0, backgroud=65535, *args, **kwargs): - if pdf.draw_color!=rgb(foreground): - pdf.set_draw_color(*rgb(foreground)) - if pdf.fill_color!=rgb(backgroud): - pdf.set_fill_color(*rgb(backgroud)) - pdf.set_line_width(size) - pdf.rect(x1, y1, x2-x1, y2-y1) - - def image(self, pdf, x1=0, y1=0, x2=0, y2=0, text='', *args,**kwargs): - if text: - pdf.image(text,x1,y1,w=x2-x1,h=y2-y1,type='',link='') - - def barcode(self, pdf, x1=0, y1=0, x2=0, y2=0, text='', font="arial", size=1, - foreground=0, *args, **kwargs): - if pdf.draw_color!=rgb(foreground): - pdf.set_draw_color(*rgb(foreground)) - font = font.lower().strip() - if font == 'interleaved 2of5 nt': - pdf.interleaved2of5(text,x1,y1,w=size,h=y2-y1) - - # Added by Derek Schwalenberg Schwalenberg1013@gmail.com to allow (url) links in templates (using write method) 2014-02-22 - def write(self, pdf, x1=0, y1=0, x2=0, y2=0, text='', font="arial", size=1, - bold=False, italic=False, underline=False, align="", link='http://example.com', - foreground=0, *args, **kwargs): - if pdf.text_color!=rgb(foreground): - pdf.set_text_color(*rgb(foreground)) - font = font.strip().lower() - if font == 'arial black': - font = 'arial' - style = "" - for tag in 'B', 'I', 'U': - if (text.startswith("<%s>" % tag) and text.endswith("" %tag)): - text = text[3:-4] - style += tag - if bold: style += "B" - if italic: style += "I" - if underline: style += "U" - align = {'L':'L','R':'R','I':'L','D':'R','C':'C','':''}.get(align) # D/I in spanish - pdf.set_font(font,style,size) - ##m_k = 72 / 2.54 - ##h = (size/m_k) - pdf.set_xy(x1,y1) - pdf.write(5,text,link) diff --git a/lib/python3.12/site-packages/fpdf/ttfonts.py b/lib/python3.12/site-packages/fpdf/ttfonts.py deleted file mode 100644 index 5e664a1..0000000 --- a/lib/python3.12/site-packages/fpdf/ttfonts.py +++ /dev/null @@ -1,1067 +0,0 @@ -#****************************************************************************** -# TTFontFile class -# -# This class is based on The ReportLab Open Source PDF library -# written in Python - http://www.reportlab.com/software/opensource/ -# together with ideas from the OpenOffice source code and others. -# -# Version: 1.04 -# Date: 2011-09-18 -# Author: Ian Back -# License: LGPL -# Copyright (c) Ian Back, 2010 -# Ported to Python 2.7 by Mariano Reingart (reingart@gmail.com) on 2012 -# This header must be retained in any redistribution or -# modification of the file. -# -#****************************************************************************** - -from struct import pack, unpack, unpack_from -import re -import warnings -from .php import die, substr, str_repeat, str_pad, strlen, count -from .py3k import b, ord - - -# Define the value used in the "head" table of a created TTF file -# 0x74727565 "true" for Mac -# 0x00010000 for Windows -# Either seems to work for a font embedded in a PDF file -# when read by Adobe Reader on a Windows PC(!) -_TTF_MAC_HEADER = False - - -# TrueType Font Glyph operators -GF_WORDS = (1 << 0) -GF_SCALE = (1 << 3) -GF_MORE = (1 << 5) -GF_XYSCALE = (1 << 6) -GF_TWOBYTWO = (1 << 7) - - -def sub32(x, y): - xlo = x[1] - xhi = x[0] - ylo = y[1] - yhi = y[0] - if (ylo > xlo): - xlo += 1 << 16 - yhi += 1 - reslo = xlo-ylo - if (yhi > xhi): - xhi += 1 << 16 - reshi = xhi-yhi - reshi = reshi & 0xFFFF - return (reshi, reslo) - -def calcChecksum(data): - if (strlen(data) % 4): - data += str_repeat(b("\0"), (4-(len(data) % 4))) - hi=0x0000 - lo=0x0000 - for i in range(0, len(data), 4): - hi += (ord(data[i])<<8) + ord(data[i+1]) - lo += (ord(data[i+2])<<8) + ord(data[i+3]) - hi += lo >> 16 - lo = lo & 0xFFFF - hi = hi & 0xFFFF - return (hi, lo) - - -class TTFontFile: - - def __init__(self): - self.maxStrLenRead = 200000 # Maximum size of glyf table to read in as string (otherwise reads each glyph from file) - - def getMetrics(self, file): - self.filename = file - self.fh = open(file,'rb') - self._pos = 0 - self.charWidths = [] - self.glyphPos = {} - self.charToGlyph = {} - self.tables = {} - self.otables = {} - self.ascent = 0 - self.descent = 0 - self.TTCFonts = {} - self.version = version = self.read_ulong() - if (version==0x4F54544F): - die("Postscript outlines are not supported") - if (version==0x74746366): - die("ERROR - TrueType Fonts Collections not supported") - if (version not in (0x00010000,0x74727565)): - die("Not a TrueType font: version=" + version) - self.readTableDirectory() - self.extractInfo() - self.fh.close() - - def readTableDirectory(self, ): - self.numTables = self.read_ushort() - self.searchRange = self.read_ushort() - self.entrySelector = self.read_ushort() - self.rangeShift = self.read_ushort() - self.tables = {} - for i in range(self.numTables): - record = {} - record['tag'] = self.read_tag() - record['checksum'] = (self.read_ushort(),self.read_ushort()) - record['offset'] = self.read_ulong() - record['length'] = self.read_ulong() - self.tables[record['tag']] = record - - def get_table_pos(self, tag): - offset = self.tables[tag]['offset'] - length = self.tables[tag]['length'] - return (offset, length) - - def seek(self, pos): - self._pos = pos - self.fh.seek(self._pos) - - def skip(self, delta): - self._pos = self._pos + delta - self.fh.seek(self._pos) - - def seek_table(self, tag, offset_in_table = 0): - tpos = self.get_table_pos(tag) - self._pos = tpos[0] + offset_in_table - self.fh.seek(self._pos) - return self._pos - - def read_tag(self): - self._pos += 4 - return self.fh.read(4).decode("latin1") - - def read_short(self): - self._pos += 2 - s = self.fh.read(2) - a = (ord(s[0])<<8) + ord(s[1]) - if (a & (1 << 15) ): - a = (a - (1 << 16)) - return a - - def unpack_short(self, s): - a = (ord(s[0])<<8) + ord(s[1]) - if (a & (1 << 15) ): - a = (a - (1 << 16)) - return a - - def read_ushort(self): - self._pos += 2 - s = self.fh.read(2) - return (ord(s[0])<<8) + ord(s[1]) - - def read_ulong(self): - self._pos += 4 - s = self.fh.read(4) - # if large uInt32 as an integer, PHP converts it to -ve - return (ord(s[0])*16777216) + (ord(s[1])<<16) + (ord(s[2])<<8) + ord(s[3]) # 16777216 = 1<<24 - - def get_ushort(self, pos): - self.fh.seek(pos) - s = self.fh.read(2) - return (ord(s[0])<<8) + ord(s[1]) - - def get_ulong(self, pos): - self.fh.seek(pos) - s = self.fh.read(4) - # iF large uInt32 as an integer, PHP converts it to -ve - return (ord(s[0])*16777216) + (ord(s[1])<<16) + (ord(s[2])<<8) + ord(s[3]) # 16777216 = 1<<24 - - def pack_short(self, val): - if (val<0): - val = abs(val) - val = ~val - val += 1 - return pack(">H",val) - - def splice(self, stream, offset, value): - return substr(stream,0,offset) + value + substr(stream,offset+strlen(value)) - - def _set_ushort(self, stream, offset, value): - up = pack(">H", value) - return self.splice(stream, offset, up) - - def _set_short(self, stream, offset, val): - if (val<0): - val = abs(val) - val = ~val - val += 1 - up = pack(">H",val) - return self.splice(stream, offset, up) - - def get_chunk(self, pos, length): - self.fh.seek(pos) - if (length <1): return '' - return (self.fh.read(length)) - - def get_table(self, tag): - (pos, length) = self.get_table_pos(tag) - if (length == 0): - die('Truetype font (' + self.filename + '): error reading table: ' + tag) - self.fh.seek(pos) - return (self.fh.read(length)) - - def add(self, tag, data): - if (tag == 'head') : - data = self.splice(data, 8, b("\0\0\0\0")) - self.otables[tag] = data - -############################################/ -############################################/ - -############################################/ - - def extractInfo(self): - #################/ - # name - Naming table - #################/ - self.sFamilyClass = 0 - self.sFamilySubClass = 0 - - name_offset = self.seek_table("name") - format = self.read_ushort() - if (format != 0): - die("Unknown name table format " + format) - numRecords = self.read_ushort() - string_data_offset = name_offset + self.read_ushort() - names = {1:'',2:'',3:'',4:'',6:''} - K = list(names.keys()) - nameCount = len(names) - for i in range(numRecords): - platformId = self.read_ushort() - encodingId = self.read_ushort() - languageId = self.read_ushort() - nameId = self.read_ushort() - length = self.read_ushort() - offset = self.read_ushort() - if (nameId not in K): continue - N = '' - if (platformId == 3 and encodingId == 1 and languageId == 0x409): # Microsoft, Unicode, US English, PS Name - opos = self._pos - self.seek(string_data_offset + offset) - if (length % 2 != 0): - die("PostScript name is UTF-16BE string of odd length") - length /= 2 - N = '' - while (length > 0): - char = self.read_ushort() - N += (chr(char)) - length -= 1 - self._pos = opos - self.seek(opos) - - elif (platformId == 1 and encodingId == 0 and languageId == 0): # Macintosh, Roman, English, PS Name - opos = self._pos - N = self.get_chunk(string_data_offset + offset, length).decode("latin1") - self._pos = opos - self.seek(opos) - - if (N and names[nameId]==''): - names[nameId] = N - nameCount -= 1 - if (nameCount==0): break - - - if (names[6]): - psName = names[6] - elif (names[4]): - psName = re.sub(' ','-',names[4]) - elif (names[1]): - psName = re.sub(' ','-',names[1]) - else: - psName = '' - if (not psName): - die("Could not find PostScript font name") - self.name = psName - if (names[1]): - self.familyName = names[1] - else: - self.familyName = psName - if (names[2]): - self.styleName = names[2] - else: - self.styleName = 'Regular' - if (names[4]): - self.fullName = names[4] - else: - self.fullName = psName - if (names[3]): - self.uniqueFontID = names[3] - else: - self.uniqueFontID = psName - if (names[6]): - self.fullName = names[6] - - #################/ - # head - Font header table - #################/ - self.seek_table("head") - self.skip(18) - self.unitsPerEm = unitsPerEm = self.read_ushort() - scale = 1000 / float(unitsPerEm) - self.skip(16) - xMin = self.read_short() - yMin = self.read_short() - xMax = self.read_short() - yMax = self.read_short() - self.bbox = [(xMin*scale), (yMin*scale), (xMax*scale), (yMax*scale)] - self.skip(3*2) - indexToLocFormat = self.read_ushort() - glyphDataFormat = self.read_ushort() - if (glyphDataFormat != 0): - die('Unknown glyph data format ' + glyphDataFormat) - - #################/ - # hhea metrics table - #################/ - # ttf2t1 seems to use this value rather than the one in OS/2 - so put in for compatibility - if ("hhea" in self.tables): - self.seek_table("hhea") - self.skip(4) - hheaAscender = self.read_short() - hheaDescender = self.read_short() - self.ascent = (hheaAscender *scale) - self.descent = (hheaDescender *scale) - - - #################/ - # OS/2 - OS/2 and Windows metrics table - #################/ - if ("OS/2" in self.tables): - self.seek_table("OS/2") - version = self.read_ushort() - self.skip(2) - usWeightClass = self.read_ushort() - self.skip(2) - fsType = self.read_ushort() - if (fsType == 0x0002 or (fsType & 0x0300) != 0): - die('ERROR - Font file ' + self.filename + ' cannot be embedded due to copyright restrictions.') - self.restrictedUse = True - - self.skip(20) - sF = self.read_short() - self.sFamilyClass = (sF >> 8) - self.sFamilySubClass = (sF & 0xFF) - self._pos += 10 #PANOSE = 10 byte length - panose = self.fh.read(10) - self.skip(26) - sTypoAscender = self.read_short() - sTypoDescender = self.read_short() - if (not self.ascent): - self.ascent = (sTypoAscender*scale) - if (not self.descent): - self.descent = (sTypoDescender*scale) - if (version > 1): - self.skip(16) - sCapHeight = self.read_short() - self.capHeight = (sCapHeight*scale) - else: - self.capHeight = self.ascent - - else: - usWeightClass = 500 - if (not self.ascent): self.ascent = (yMax*scale) - if (not self.descent): self.descent = (yMin*scale) - self.capHeight = self.ascent - - self.stemV = 50 + int(pow((usWeightClass / 65.0),2)) - - #################/ - # post - PostScript table - #################/ - self.seek_table("post") - self.skip(4) - self.italicAngle = self.read_short() + self.read_ushort() / 65536.0 - self.underlinePosition = self.read_short() * scale - self.underlineThickness = self.read_short() * scale - isFixedPitch = self.read_ulong() - - self.flags = 4 - - if (self.italicAngle!= 0): - self.flags = self.flags | 64 - if (usWeightClass >= 600): - self.flags = self.flags | 262144 - if (isFixedPitch): - self.flags = self.flags | 1 - - #################/ - # hhea - Horizontal header table - #################/ - self.seek_table("hhea") - self.skip(32) - metricDataFormat = self.read_ushort() - if (metricDataFormat != 0): - die('Unknown horizontal metric data format '.metricDataFormat) - numberOfHMetrics = self.read_ushort() - if (numberOfHMetrics == 0): - die('Number of horizontal metrics is 0') - - #################/ - # maxp - Maximum profile table - #################/ - self.seek_table("maxp") - self.skip(4) - numGlyphs = self.read_ushort() - - #################/ - # cmap - Character to glyph index mapping table - #################/ - cmap_offset = self.seek_table("cmap") - self.skip(2) - cmapTableCount = self.read_ushort() - unicode_cmap_offset = 0 - unicode_cmap_offset12 = 0 - - for i in range(cmapTableCount): - platformID = self.read_ushort() - encodingID = self.read_ushort() - offset = self.read_ulong() - save_pos = self._pos - if platformID == 3 and encodingID == 10: # Microsoft, UCS-4 - format = self.get_ushort(cmap_offset + offset) - if (format == 12): - if not unicode_cmap_offset12: - unicode_cmap_offset12 = cmap_offset + offset - break - if ((platformID == 3 and encodingID == 1) or platformID == 0): # Microsoft, Unicode - format = self.get_ushort(cmap_offset + offset) - if (format == 4): - if (not unicode_cmap_offset): - unicode_cmap_offset = cmap_offset + offset - break - - self.seek(save_pos) - - if not unicode_cmap_offset and not unicode_cmap_offset12: - die('Font (' + self.filename + ') does not have cmap for Unicode (platform 3, encoding 1, format 4, or platform 3, encoding 10, format 12, or platform 0, any encoding, format 4)') - - glyphToChar = {} - charToGlyph = {} - if unicode_cmap_offset12: - self.getCMAP12(unicode_cmap_offset12, glyphToChar, charToGlyph) - else: - self.getCMAP4(unicode_cmap_offset, glyphToChar, charToGlyph) - - #################/ - # hmtx - Horizontal metrics table - #################/ - self.getHMTX(numberOfHMetrics, numGlyphs, glyphToChar, scale) - - -############################################/ -############################################/ - - def makeSubset(self, file, subset): - self.filename = file - self.fh = open(file ,'rb') - self._pos = 0 - self.charWidths = [] - self.glyphPos = {} - self.charToGlyph = {} - self.tables = {} - self.otables = {} - self.ascent = 0 - self.descent = 0 - self.skip(4) - self.maxUni = 0 - self.readTableDirectory() - - #################/ - # head - Font header table - #################/ - self.seek_table("head") - self.skip(50) - indexToLocFormat = self.read_ushort() - glyphDataFormat = self.read_ushort() - - #################/ - # hhea - Horizontal header table - #################/ - self.seek_table("hhea") - self.skip(32) - metricDataFormat = self.read_ushort() - orignHmetrics = numberOfHMetrics = self.read_ushort() - - #################/ - # maxp - Maximum profile table - #################/ - self.seek_table("maxp") - self.skip(4) - numGlyphs = self.read_ushort() - - #################/ - # cmap - Character to glyph index mapping table - #################/ - cmap_offset = self.seek_table("cmap") - self.skip(2) - cmapTableCount = self.read_ushort() - unicode_cmap_offset = 0 - unicode_cmap_offset12 = 0 - for i in range(cmapTableCount): - platformID = self.read_ushort() - encodingID = self.read_ushort() - offset = self.read_ulong() - save_pos = self._pos - if platformID == 3 and encodingID == 10: # Microsoft, UCS-4 - format = self.get_ushort(cmap_offset + offset) - if (format == 12): - if not unicode_cmap_offset12: - unicode_cmap_offset12 = cmap_offset + offset - break - if ((platformID == 3 and encodingID == 1) or platformID == 0): # Microsoft, Unicode - format = self.get_ushort(cmap_offset + offset) - if (format == 4): - unicode_cmap_offset = cmap_offset + offset - break - - self.seek(save_pos ) - - if not unicode_cmap_offset and not unicode_cmap_offset12: - die('Font (' + self.filename + ') does not have cmap for Unicode (platform 3, encoding 1, format 4, or platform 3, encoding 10, format 12, or platform 0, any encoding, format 4)') - - glyphToChar = {} - charToGlyph = {} - if unicode_cmap_offset12: - self.getCMAP12(unicode_cmap_offset12, glyphToChar, charToGlyph) - else: - self.getCMAP4(unicode_cmap_offset, glyphToChar, charToGlyph) - - self.charToGlyph = charToGlyph - - #################/ - # hmtx - Horizontal metrics table - #################/ - scale = 1 # not used - self.getHMTX(numberOfHMetrics, numGlyphs, glyphToChar, scale) - - #################/ - # loca - Index to location - #################/ - self.getLOCA(indexToLocFormat, numGlyphs) - - subsetglyphs = [(0, 0)] # special "sorted dict"! - subsetCharToGlyph = {} - for code in subset: - if (code in self.charToGlyph): - if (self.charToGlyph[code], code) not in subsetglyphs: - subsetglyphs.append((self.charToGlyph[code], code)) # Old Glyph ID => Unicode - subsetCharToGlyph[code] = self.charToGlyph[code] # Unicode to old GlyphID - self.maxUni = max(self.maxUni, code) - (start,dummy) = self.get_table_pos('glyf') - - subsetglyphs.sort() - glyphSet = {} - n = 0 - fsLastCharIndex = 0 # maximum Unicode index (character code) in this font, according to the cmap subtable for platform ID 3 and platform- specific encoding ID 0 or 1. - for originalGlyphIdx, uni in subsetglyphs: - fsLastCharIndex = max(fsLastCharIndex , uni) - glyphSet[originalGlyphIdx] = n # old glyphID to new glyphID - n += 1 - - codeToGlyph = {} - for uni, originalGlyphIdx in sorted(subsetCharToGlyph.items()): - codeToGlyph[uni] = glyphSet[originalGlyphIdx] - - self.codeToGlyph = codeToGlyph - - for originalGlyphIdx, uni in subsetglyphs: - nonlocals = {'start': start, 'glyphSet': glyphSet, - 'subsetglyphs': subsetglyphs} - self.getGlyphs(originalGlyphIdx, nonlocals) - - numGlyphs = numberOfHMetrics = len(subsetglyphs) - - #tables copied from the original - tags = ['name'] - for tag in tags: - self.add(tag, self.get_table(tag)) - tags = ['cvt ', 'fpgm', 'prep', 'gasp'] - for tag in tags: - if (tag in self.tables): - self.add(tag, self.get_table(tag)) - - # post - PostScript - opost = self.get_table('post') - post = b("\x00\x03\x00\x00") + substr(opost,4,12) + b("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") - self.add('post', post) - - # Sort CID2GID map into segments of contiguous codes - if 0 in codeToGlyph: - del codeToGlyph[0] - #unset(codeToGlyph[65535]) - rangeid = 0 - range_ = {} - prevcid = -2 - prevglidx = -1 - # for each character - for cid, glidx in sorted(codeToGlyph.items()): - if (cid == (prevcid + 1) and glidx == (prevglidx + 1)): - range_[rangeid].append(glidx) - else: - # new range - rangeid = cid - range_[rangeid] = [] - range_[rangeid].append(glidx) - prevcid = cid - prevglidx = glidx - - # cmap - Character to glyph mapping - Format 4 (MS / ) - segCount = len(range_) + 1 # + 1 Last segment has missing character 0xFFFF - searchRange = 1 - entrySelector = 0 - while (searchRange * 2 <= segCount ): - searchRange = searchRange * 2 - entrySelector = entrySelector + 1 - - searchRange = searchRange * 2 - rangeShift = segCount * 2 - searchRange - length = 16 + (8*segCount ) + (numGlyphs+1) - cmap = [0, 1, # Index : version, number of encoding subtables - 3, 1, # Encoding Subtable : platform (MS=3), encoding (Unicode) - 0, 12, # Encoding Subtable : offset (hi,lo) - 4, length, 0, # Format 4 Mapping subtable: format, length, language - segCount*2, - searchRange, - entrySelector, - rangeShift] - - range_ = sorted(range_.items()) - - # endCode(s) - for start, subrange in range_: - endCode = start + (len(subrange)-1) - cmap.append(endCode) # endCode(s) - - cmap.append(0xFFFF) # endCode of last Segment - cmap.append(0) # reservedPad - - # startCode(s) - for start, subrange in range_: - cmap.append(start) # startCode(s) - - cmap.append(0xFFFF) # startCode of last Segment - # idDelta(s) - for start, subrange in range_: - idDelta = -(start-subrange[0]) - n += count(subrange) - cmap.append(idDelta) # idDelta(s) - - cmap.append(1) # idDelta of last Segment - # idRangeOffset(s) - for subrange in range_: - cmap.append(0) # idRangeOffset[segCount] Offset in bytes to glyph indexArray, or 0 - - cmap.append(0) # idRangeOffset of last Segment - for subrange, glidx in range_: - cmap.extend(glidx) - - cmap.append(0) # Mapping for last character - cmapstr = b('') - for cm in cmap: - if cm >= 0: - cmapstr += pack(">H", cm) - else: - try: - cmapstr += pack(">h", cm) - except: - warnings.warn("cmap value too big/small: %s" % cm) - cmapstr += pack(">H", -cm) - self.add('cmap', cmapstr) - - # glyf - Glyph data - (glyfOffset,glyfLength) = self.get_table_pos('glyf') - if (glyfLength < self.maxStrLenRead): - glyphData = self.get_table('glyf') - - offsets = [] - glyf = b('') - pos = 0 - - hmtxstr = b('') - xMinT = 0 - yMinT = 0 - xMaxT = 0 - yMaxT = 0 - advanceWidthMax = 0 - minLeftSideBearing = 0 - minRightSideBearing = 0 - xMaxExtent = 0 - maxPoints = 0 # points in non-compound glyph - maxContours = 0 # contours in non-compound glyph - maxComponentPoints = 0 # points in compound glyph - maxComponentContours = 0 # contours in compound glyph - maxComponentElements = 0 # number of glyphs referenced at top level - maxComponentDepth = 0 # levels of recursion, set to 0 if font has only simple glyphs - self.glyphdata = {} - - for originalGlyphIdx, uni in subsetglyphs: - # hmtx - Horizontal Metrics - hm = self.getHMetric(orignHmetrics, originalGlyphIdx) - hmtxstr += hm - - offsets.append(pos) - try: - glyphPos = self.glyphPos[originalGlyphIdx] - glyphLen = self.glyphPos[originalGlyphIdx + 1] - glyphPos - except IndexError: - warnings.warn("missing glyph %s" % (originalGlyphIdx)) - glyphLen = 0 - - if (glyfLength < self.maxStrLenRead): - data = substr(glyphData,glyphPos,glyphLen) - else: - if (glyphLen > 0): - data = self.get_chunk(glyfOffset+glyphPos,glyphLen) - else: - data = b('') - - if (glyphLen > 0): - up = unpack(">H", substr(data,0,2))[0] - if (glyphLen > 2 and (up & (1 << 15)) ): # If number of contours <= -1 i.e. composiste glyph - pos_in_glyph = 10 - flags = GF_MORE - nComponentElements = 0 - while (flags & GF_MORE): - nComponentElements += 1 # number of glyphs referenced at top level - up = unpack(">H", substr(data,pos_in_glyph,2)) - flags = up[0] - up = unpack(">H", substr(data,pos_in_glyph+2,2)) - glyphIdx = up[0] - self.glyphdata.setdefault(originalGlyphIdx, {}).setdefault('compGlyphs', []).append(glyphIdx) - try: - data = self._set_ushort(data, pos_in_glyph + 2, glyphSet[glyphIdx]) - except KeyError: - data = 0 - warnings.warn("missing glyph data %s" % glyphIdx) - pos_in_glyph += 4 - if (flags & GF_WORDS): - pos_in_glyph += 4 - else: - pos_in_glyph += 2 - if (flags & GF_SCALE): - pos_in_glyph += 2 - elif (flags & GF_XYSCALE): - pos_in_glyph += 4 - elif (flags & GF_TWOBYTWO): - pos_in_glyph += 8 - - maxComponentElements = max(maxComponentElements, nComponentElements) - - glyf += data - pos += glyphLen - if (pos % 4 != 0): - padding = 4 - (pos % 4) - glyf += str_repeat(b("\0"),padding) - pos += padding - - offsets.append(pos) - self.add('glyf', glyf) - - # hmtx - Horizontal Metrics - self.add('hmtx', hmtxstr) - - # loca - Index to location - locastr = b('') - if (((pos + 1) >> 1) > 0xFFFF): - indexToLocFormat = 1 # long format - for offset in offsets: - locastr += pack(">L",offset) - else: - indexToLocFormat = 0 # short format - for offset in offsets: - locastr += pack(">H",int(offset/2)) - - self.add('loca', locastr) - - # head - Font header - head = self.get_table('head') - head = self._set_ushort(head, 50, indexToLocFormat) - self.add('head', head) - - # hhea - Horizontal Header - hhea = self.get_table('hhea') - hhea = self._set_ushort(hhea, 34, numberOfHMetrics) - self.add('hhea', hhea) - - # maxp - Maximum Profile - maxp = self.get_table('maxp') - maxp = self._set_ushort(maxp, 4, numGlyphs) - self.add('maxp', maxp) - - # OS/2 - OS/2 - os2 = self.get_table('OS/2') - self.add('OS/2', os2 ) - - self.fh.close() - - # Put the TTF file together - stm = self.endTTFile('') - return stm - - - ######################################### - # Recursively get composite glyph data - def getGlyphData(self, originalGlyphIdx, nonlocals): - # &maxdepth, &depth, &points, &contours - nonlocals['depth'] += 1 - nonlocals['maxdepth'] = max(nonlocals['maxdepth'], nonlocals['depth']) - if (len(self.glyphdata[originalGlyphIdx]['compGlyphs'])): - for glyphIdx in self.glyphdata[originalGlyphIdx]['compGlyphs']: - self.getGlyphData(glyphIdx, nonlocals) - - elif ((self.glyphdata[originalGlyphIdx]['nContours'] > 0) and nonlocals['depth'] > 0): # simple - contours += self.glyphdata[originalGlyphIdx]['nContours'] - points += self.glyphdata[originalGlyphIdx]['nPoints'] - - nonlocals['depth'] -= 1 - - - ######################################### - # Recursively get composite glyphs - def getGlyphs(self, originalGlyphIdx, nonlocals): - # &start, &glyphSet, &subsetglyphs) - - try: - glyphPos = self.glyphPos[originalGlyphIdx] - glyphLen = self.glyphPos[originalGlyphIdx + 1] - glyphPos - except IndexError: - warnings.warn("missing glyph %s" % (originalGlyphIdx)) - return - - if (not glyphLen): - return - - self.seek(nonlocals['start'] + glyphPos) - numberOfContours = self.read_short() - if (numberOfContours < 0): - self.skip(8) - flags = GF_MORE - while (flags & GF_MORE): - flags = self.read_ushort() - glyphIdx = self.read_ushort() - if (glyphIdx not in nonlocals['glyphSet']): - nonlocals['glyphSet'][glyphIdx] = len(nonlocals['subsetglyphs']) # old glyphID to new glyphID - nonlocals['subsetglyphs'].append((glyphIdx, 1)) - - savepos = self.fh.tell() - self.getGlyphs(glyphIdx, nonlocals) - self.seek(savepos) - if (flags & GF_WORDS): - self.skip(4) - else: - self.skip(2) - if (flags & GF_SCALE): - self.skip(2) - elif (flags & GF_XYSCALE): - self.skip(4) - elif (flags & GF_TWOBYTWO): - self.skip(8) - - ######################################### - - def getHMTX(self, numberOfHMetrics, numGlyphs, glyphToChar, scale): - start = self.seek_table("hmtx") - aw = 0 - self.charWidths = [0] * 256*256 - nCharWidths = 0 - if ((numberOfHMetrics*4) < self.maxStrLenRead): - data = self.get_chunk(start,(numberOfHMetrics*4)) - arr = unpack(">%dH" % (int(len(data)/2)), data) - else: - self.seek(start) - for glyph in range(numberOfHMetrics): - if ((numberOfHMetrics*4) < self.maxStrLenRead): - aw = arr[(glyph*2)] # PHP starts arrays from index 0!? +1 - else: - aw = self.read_ushort() - lsb = self.read_ushort() - - if (glyph in glyphToChar or glyph == 0): - if (aw >= (1 << 15) ): - aw = 0 # 1.03 Some (arabic) fonts have -ve values for width - # although should be unsigned value - comes out as e.g. 65108 (intended -50) - if (glyph == 0): - self.defaultWidth = scale*aw - continue - - for char in glyphToChar[glyph]: - if (char != 0 and char != 65535): - w = int(round(scale*aw+0.001)) # ROUND_HALF_UP in PY3K (like php) - if (w == 0): w = 65535 - if (char < 196608): - self.charWidths[char] = w - nCharWidths += 1 - - - data = self.get_chunk((start+numberOfHMetrics*4),(numGlyphs*2)) - arr = unpack(">%dH" % (int(len(data)/2)), data) - diff = numGlyphs-numberOfHMetrics - for pos in range(diff): - glyph = pos + numberOfHMetrics - if (glyph in glyphToChar): - for char in glyphToChar[glyph]: - if (char != 0 and char != 65535): - w = int(round(scale*aw+0.001)) # ROUND_HALF_UP in PY3K (like php) - if (w == 0): w = 65535 - if (char < 196608): - self.charWidths[char] = w - nCharWidths += 1 - - - # NB 65535 is a set width of 0 - # First bytes define number of chars in font - self.charWidths[0] = nCharWidths - - - def getHMetric(self, numberOfHMetrics, gid): - start = self.seek_table("hmtx") - if (gid < numberOfHMetrics): - self.seek(start+(gid*4)) - hm = self.fh.read(4) - else: - self.seek(start+((numberOfHMetrics-1)*4)) - hm = self.fh.read(2) - self.seek(start+(numberOfHMetrics*2)+(gid*2)) - hm += self.fh.read(2) - return hm - - - def getLOCA(self, indexToLocFormat, numGlyphs): - start = self.seek_table('loca') - self.glyphPos = [] - if (indexToLocFormat == 0): - data = self.get_chunk(start,(numGlyphs*2)+2) - arr = unpack(">%dH" % (int(len(data)/2)), data) - for n in range(numGlyphs): - self.glyphPos.append((arr[n] * 2)) # n+1 !? - elif (indexToLocFormat == 1): - data = self.get_chunk(start,(numGlyphs*4)+4) - arr = unpack(">%dL" % (int(len(data)/4)), data) - for n in range(numGlyphs): - self.glyphPos.append((arr[n])) # n+1 !? - else: - die('Unknown location table format ' + indexToLocFormat) - - # CMAP Format 4 - def getCMAP4(self, unicode_cmap_offset, glyphToChar, charToGlyph): - self.maxUniChar = 0 - self.seek(unicode_cmap_offset + 2) - length = self.read_ushort() - limit = unicode_cmap_offset + length - self.skip(2) - - segCount = int(self.read_ushort() / 2) - self.skip(6) - endCount = [] - for i in range(segCount): - endCount.append(self.read_ushort()) - self.skip(2) - startCount = [] - for i in range(segCount): - startCount.append(self.read_ushort()) - idDelta = [] - for i in range(segCount): - idDelta.append(self.read_short()) # ???? was unsigned short - idRangeOffset_start = self._pos - idRangeOffset = [] - for i in range(segCount): - idRangeOffset.append(self.read_ushort()) - - for n in range(segCount): - endpoint = (endCount[n] + 1) - for unichar in range(startCount[n], endpoint, 1): - if (idRangeOffset[n] == 0): - glyph = (unichar + idDelta[n]) & 0xFFFF - else: - offset = (unichar - startCount[n]) * 2 + idRangeOffset[n] - offset = idRangeOffset_start + 2 * n + offset - if (offset >= limit): - glyph = 0 - else: - glyph = self.get_ushort(offset) - if (glyph != 0): - glyph = (glyph + idDelta[n]) & 0xFFFF - - charToGlyph[unichar] = glyph - if (unichar < 196608): - self.maxUniChar = max(unichar,self.maxUniChar) - glyphToChar.setdefault(glyph, []).append(unichar) - - # CMAP Format 12 - def getCMAP12(self, unicode_cmap_offset, glyphToChar, charToGlyph): - self.maxUniChar = 0 - # table (skip format version, should be 12) - self.seek(unicode_cmap_offset + 2) - # reserved - self.skip(2) - # table length - length = self.read_ulong() - # language (should be 0) - self.skip(4) - # groups count - grpCount = self.read_ulong() - - if 2 + 2 + 4 + 4 + 4 + grpCount * 3 * 4 > length: - die("TTF format 12 cmap table too small") - for n in range(grpCount): - startCharCode = self.read_ulong() - endCharCode = self.read_ulong() - glyph = self.read_ulong() - for unichar in range(startCharCode, endCharCode + 1): - charToGlyph[unichar] = glyph - if (unichar < 196608): - self.maxUniChar = max(unichar, self.maxUniChar) - glyphToChar.setdefault(glyph, []).append(unichar) - glyph += 1 - - - - # Put the TTF file together - def endTTFile(self, stm): - stm = b('') - numTables = count(self.otables) - searchRange = 1 - entrySelector = 0 - while (searchRange * 2 <= numTables): - searchRange = searchRange * 2 - entrySelector = entrySelector + 1 - - searchRange = searchRange * 16 - rangeShift = numTables * 16 - searchRange - - # Header - if (_TTF_MAC_HEADER): - stm += (pack(">LHHHH", 0x74727565, numTables, searchRange, entrySelector, rangeShift)) # Mac - else: - stm += (pack(">LHHHH", 0x00010000 , numTables, searchRange, entrySelector, rangeShift)) # Windows - - - # Table directory - tables = self.otables - - offset = 12 + numTables * 16 - sorted_tables = sorted(tables.items()) - for tag, data in sorted_tables: - if (tag == 'head'): - head_start = offset - stm += tag.encode("latin1") - checksum = calcChecksum(data) - stm += pack(">HH", checksum[0],checksum[1]) - stm += pack(">LL", offset, strlen(data)) - paddedLength = (strlen(data)+3)&~3 - offset = offset + paddedLength - - # Table data - for tag, data in sorted_tables: - data += b("\0\0\0") - stm += substr(data,0,(strlen(data)&~3)) - - checksum = calcChecksum(stm) - checksum = sub32((0xB1B0,0xAFBA), checksum) - chk = pack(">HH", checksum[0],checksum[1]) - stm = self.splice(stm,(head_start + 8),chk) - return stm - diff --git a/lib/python3.12/site-packages/jinja2/__init__.py b/lib/python3.12/site-packages/jinja2/__init__.py deleted file mode 100644 index af5d428..0000000 --- a/lib/python3.12/site-packages/jinja2/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -"""Jinja is a template engine written in pure Python. It provides a -non-XML syntax that supports inline expressions and an optional -sandboxed environment. -""" -from .bccache import BytecodeCache as BytecodeCache -from .bccache import FileSystemBytecodeCache as FileSystemBytecodeCache -from .bccache import MemcachedBytecodeCache as MemcachedBytecodeCache -from .environment import Environment as Environment -from .environment import Template as Template -from .exceptions import TemplateAssertionError as TemplateAssertionError -from .exceptions import TemplateError as TemplateError -from .exceptions import TemplateNotFound as TemplateNotFound -from .exceptions import TemplateRuntimeError as TemplateRuntimeError -from .exceptions import TemplatesNotFound as TemplatesNotFound -from .exceptions import TemplateSyntaxError as TemplateSyntaxError -from .exceptions import UndefinedError as UndefinedError -from .loaders import BaseLoader as BaseLoader -from .loaders import ChoiceLoader as ChoiceLoader -from .loaders import DictLoader as DictLoader -from .loaders import FileSystemLoader as FileSystemLoader -from .loaders import FunctionLoader as FunctionLoader -from .loaders import ModuleLoader as ModuleLoader -from .loaders import PackageLoader as PackageLoader -from .loaders import PrefixLoader as PrefixLoader -from .runtime import ChainableUndefined as ChainableUndefined -from .runtime import DebugUndefined as DebugUndefined -from .runtime import make_logging_undefined as make_logging_undefined -from .runtime import StrictUndefined as StrictUndefined -from .runtime import Undefined as Undefined -from .utils import clear_caches as clear_caches -from .utils import is_undefined as is_undefined -from .utils import pass_context as pass_context -from .utils import pass_environment as pass_environment -from .utils import pass_eval_context as pass_eval_context -from .utils import select_autoescape as select_autoescape - -__version__ = "3.1.3" diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/__init__.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 78aab9ccc2010d0242759abd5025de9e76c468aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1644 zcmZ9M%Wm676o!YEWl7ZCk|p0w+er%}u!zLH1xN$bx3ooU7;yp=vmq#QVoyTO5Hll3 z@~U0+5!zSiv*Zl~5Gc@9cWr}ivg(;}XsIEjAK&@s%#~;Owpz6jJpa7id--z#p+9tx zJu@HR-H#SRzn~Cd6k6d-WW_Uh#?qVv&f%QlS>RbbYd9a}<2gKMcn-LL3x*3(F)rbf z;Uch&ZNnwtGA-Uts z@*OH2-%%t^B3}`QunWqF^F~mm2y-ZNl7S%3*+^Y-)^om7P9pdf4GHwJ8E3mcoIG{p zh$(;Qs7qfta*!lkC<$F7JrWrvf=Ed@gB~n|zrzy+p&!{2j6NTd5T?DNg0q+~)wBPE z`anC@xVk@5B;X-A@PkVNM)#OT36$p#6elw96LOv3 z>)r3|o$h=(E_hzZ1J4^5`hl5RN4wi;TRTIRL1w6wJ>Xz75A3*x4LL|0pjT9&jdYgqvq=Ld>L zQmkrYP0PBL4K0qAO^|Wf^R9@{SIzT&L+`*s?@!$qP}IHPXF1!32G_YLX0G7vOT zZbbWTVlFqF(gRmgMRt>$@{sN;{egJkdLCs|d0sCWy)QnBO))(dyD+@IsFH#Fm9s4C z@0px6`)?6hpQY$YijGpWm!jPieVd{$QuHWAhbelTqWu(oW&Ha_AExN@6ahmr=+`EM azF(&3UW(l82O(rW{JpmDQ(4@DDgOhC@#9|r diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/_identifier.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/_identifier.cpython-312.pyc deleted file mode 100644 index 09a5819bc144514b6e7c95d3b41f8abb95acdc71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2125 zcmYL~&2Qtz8OCKB?KTZ^?5&3)x1^Z3O%A;j{SylGkW1R4*sPV-TgNtR2f_AI>RbL` zEZV!0Wm_^W>WidkN+R`Pi;{p|llG9qIvc0icjQy&Vxqp~)MwBH5%A;l%sY=}-XSIM z)7M`6aRi_Le)`S_^#_s2tsH#!S@_o6{{p5ES&A&ptwi37%txY;$MfHXzSpIBd+z_E z_vW9>y|M5gIr!~IzrwP=|HH@s7<{I%f4cw5e4b#RXP#^9`S|(tI(8kuPF|<3GhgJ` z7soGl*^9Fm?VCKiIlVb!H`SZQP4mWLH_lhuS8ew1ov-Wc>-I~Vz4Ts=NzXIVi=>}G z4AN_m2I(fmq4Of6^Aj=-85!qf7>ue3s$M|?s!kZy_Nk^p3RJ65&7gXWQ9VKRfa;iS zB&m_1MwS}87^u`JP@_T(gBlZRBH2t(GoU7tW}M6nnOQQCG*vP+GTUT!$n24Yq?I5m zAPY%5MRo?VO*W#oN_K^8gKYFQ{5gSyzPo1kt$T|~Vk zd5C&h@(}e@@}7~GC$B=DK|YrB6XcJ`56DNlm!uxjy)5;R?y1x(P_IHggZgpmCup!k zgMCJWr!>gZ;0W%F23;C>H0;pOXEeN`OWcRcPw1*cS14Rv($$Er0vcr*jZ_MbC@50U zqhLV6B?S`-rZny_nj~qGrb&h-Dh36b;2BQ>nx?s8Gp5?4!%t7rW5fbr9({Im=4dFgL z8P`=_N%2aWS4>{j8L!&B+J=mHv%q-sgqzP8H_P0_oEdO)$}LP=W8P92ZzXvPt2s&T zpkc@37bsrD`NcWJ;clIA*W>Lfkl4Ir0%fUgc9Bgk~7 zOlL7=7JE8N}?rpqy8$T9B zR}_6FieqtH7RP7eq%BT5LXQhQE%aTX8%*d8QBg!CCMpOTDPic4jxeU8T4$o_h+2k; z+M%c`Ow<#i?lI9&M588}CKJuRFcZSu6Q(N65fkQESZ!f-nXr6e4TLom)+WM3+}$n{_}w4s$l?Lbx!v1;Ch$@hRf zQ33rFPC+Tuj%1{W!m$l=jJ{4wFsF8?>9SKDXO%ZpYwiGfn&u@KNrMBJ=+4wIFi%3w z+JUi(q1Kk$wfjJB*Pe!2_W-8b0H!pU@;flTG}yt%iTyE<_qm4~*~7Yhxm^DffM?Rz zz@aSQ_#@fJs2}ESbf35VFyE4s_U GkNgi`Z~t5X diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/async_utils.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/async_utils.cpython-312.pyc deleted file mode 100644 index a9ab77cbf5899425d5d235b67cb85d93c823d8ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4079 zcmb_fTWnOv8J;=!-L==3wY^{)x`u_Ygm}UD($F;ZQZAx2E{TZ~8KKSbo@2Al`s`-T zS>ISo5Kz2ED44dvCW?xY64extc;vCDkLkm1*OJ{6BY{e#=A~LNYJtA=pR+eRP|;K! zbN=~f=AVCdzW+9SU0!ZS&>nrgyZ?d>p}){Up;;?1SgFJa%^(FSID&d}J?>>-%tY8B zu9w4fjs>3Y<$>oEJ|YZ>y`senz)QUnMhsG!!RmtYQm=^DK|gK1c11didL3$+TCO_P z3bj(LQmbK~OTh)16H;%DVgpUvb9+`(nBB2@oZ}U7Jur&c&se=3I8Je#<$B#Vl>1XE zlyVraQ*26^Vh1fP|49q%bb@6481_|uONF|8*mS-3PTu5Jj z^CLu#>EF`3!AJ@ok##*l27s@M0UK0@P4}x_x1C)hth2k{{;3rW( zR`6MA0w-`c@-baLYQSr|~$!B;HP4bh%3^Ix;2dTpEw5cNQRH=gE=$w$iMp0^z zE3!oJ`Q)cn$)**t6U@UaS9}yEwW_;U^fQyr9{rC~}nruHY4e z^!DFr38t`G=qFgCwjeYmCfFOo^*k=C=23!C#2eCe3O}?YO7ck|Nqxq4R=S>>M1_8W zn-Yk_aObB{f-9cIDfR>xEGw;m*&JOaCzAo)6o_iXiMGawJcwFGJOa$ijAs;$lYp?K zjy+g3O5sR^3fJpK*O)Fs@9N`BY?xd~)`9j#qY+aI>p@u`(?ZuUae#zQoyPO*ZU4Kv zN_2lLs)hZLC{eZX=xZZtpI;A=aLn*W!hQbOm~kSi?QY)H;@885`dUm5eJBs8x_>aN z4azNkOKmW2gd=)$Y>ZG}9&gD_4$CAgYew@Mk!VPc=x;VFYA8x%BT7nBg&#&i(Ki4& zg_hmxW`-{gf1%9no3FZhaM9bE_O@o+ZK=w(6%ar#22_ES{|}%q^7j(R#0dxactRbO zP#+~#Kum|K4Tnio8&WmH0)bdJvT!CfRP296W*uzSHv@SAG977e$D+40?d{CC1F6aY zp|0;^O?xmn6jkC8H5i1X6x8G)%9RC!AI0TJZbZ`+WT^0frYhGU*^maR~) zxJ{8}=9o&xcm4OynBTGqbm>0<^5hhHD4?qKvo*hRCIj~?JWK9|*}&}H>CtKKensV< z-A!|?DR;|!d)nQSs%*LM+BnChT>g0>?eeF}{FXJ2`pOB7T2tyL(V<|pZ;;STV)>8B z2DGu9|L{gU7Ew)BR}Dh5l4)1M{rxJ0WJo164-k4o(`7|nE|!D&`0`1liLOaj#Q_A( z$`X1(*)WI>@RhL2O%X3uN}ZC>`x5G5I?ePS0F0i_&OD5^V$6i-5gR z^O$y7J1*agOY?j2jhYo$*o(7H)OY}=q;<=UO;;ZU~?uuaww)_1vhT%|{xHkI_+cF?+pt{s%DkAV z+nGFgZ|nA?xFBs_s;EmkEhFaKl(9e}&Gecy&wk*^xmx)eV2B@KpHo=0%X_xME}=zRT6b_Dy_ zE<*ip+-WoiM&z&|_eIoWJ;!~5$r)oY)vShx)X-2=3&u!zC~Sm>RlSsjO);$LF*RhE zj<7Blw)-&I2`Y2tE@v#e95S>FKsv+YLnyIMG^9fLd5`h3VxN&enD zJVx`X;qmAEgaxCnd_Y-(Z=PgdQ7&M(&?M070WtAOU(C&gI*_%r^ld;2AZ^?>&u2C?FFO1S z4*x7Z7f3n$PyXcar#Syp=$`7dD17Yn;c3Rp{gU$tm+(gW4C@g-=e*o+ut%7~Uhb;o z!#v z%1;F*51l@g44vsZg&zq%T$_C#BR8aoIqy6>fAm)C?b%Jb5E9q{vN-6g@-;{$Kst! aj*ct~{XJfo>^a?&{ORdqk9ind*Z4Q*36y~V diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/bccache.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/bccache.cpython-312.pyc deleted file mode 100644 index f67d5b245f5db6b13d8c80da24a66bca728ca7d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19330 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 z 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 diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/debug.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/debug.cpython-312.pyc deleted file mode 100644 index eda48bc58935147eb27ee47666bfcc1c04496806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6572 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 diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/defaults.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/defaults.cpython-312.pyc deleted file mode 100644 index 1831bba48b166df48850f6af58ec05f7d7e6503b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1597 zcmah}NpIUm6dr1`7E9LZMRqp3jw&RUkfbPDAZeh;bfQ|89a-+ereGP(*r834>X3pf z21bKkdbLk>fdKWjza8wevTXh;&U5BoJ=$1ep01UR4tJ0WSr#X&9HiAWI_ zhX6;VsEbDc$E28x!+=MnQ2`NQJMRTM>uJD^laR)6L`veQl)^D7jYp*nj!RjbkaAd% z#=*CA=HnqUIR%hR;jx?0gD(F+x}>X1Nz*tb&ET|j4rjnSJ7mw33*;h+k_d^BQJi}k zk}lzKJb?vxC*e1R$5jERaQRtn;Q{sf!j~-B5I=o0rFefsY*fW!hy|&lZxI&2YTIHV&CQdA z+U`17Xxq(}MRYIM77Oc!(dCPK5rjgph-pwu-XVRn7`D@GqtjKP0wu+4tEy~T)QWS+u9Op>!pUkX@y3XSPj4FX3LNYs#Bo zvQ$I2Q*V(wyD*<=Ct;qFdhG+fWKp%#A($l>#ihzd9V)k4uT^W}dU2kGtbSM3x0qnD zkxf;DYMB%+7Gh(bc(}1FXc5ygsk_X$XLPrk1$&mNnKT4`bc8oy-tha#;;qluM7erT ztS;9YcUkI9I2m#yx(S(^%x4jnzEfYVF7v%@wxDftY4QyxHWoc5_erH$tK6x(hu}<@ z`Iml6oAnOFf96bk?3t4CKNJ>T?eaP*8uP<0u`yXzbltENPMWezV_X!2#8zZCt#uZ! z^E}svLmKCT+_EUH$*pFk2IuOoJUm}C0X90u1u3s?jmnC+zE-J{9I*d-6kW}B*AtE{OH%iX^9$k1<;u3ayiaLyOt_UtHI z#4K;C`nGbtjLD|b(=4;p?Y|D+>=?MGk&ozmFg?Gt=AY1<`UOGw6{Y_`pC;KC}<) zDYfDKSx)bMCM7%N#>r!oeyupY=iXs&(SSs@*Mb{Mo}W; zj3%ALtdq#{FO`28AIbR!D0MoHrY|_@8HnY~Ty!QT9T?{4kFCMfRq%e9io6T50@ c%LkW_GDpgfSiJd8oJfB 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

$S(Haf|@J<99JfBbsV z96kT|Xcp~=Ui=auJT0p{O430m+GDf)Wvs2fg0wyIS3xcMnPODo`vFjlr`m*RvD1|H)&d6 zoiV7_fbsO7q85s!7QIF-hER)iYm+M3gE#4LY~A$cSP^qK@F_hF_=oJP3zk|wtBuhw zHnaV*aVcw^)<`d5VmTV)3XK=Hd=aDcIeB>9Jig#qM1H^Um!KIVpbyVaIT|A>Wb0Ds z&448JLh3z;T~LxxV@s4|)Q~BkpnXo-7AB$iK$p3lInWXe9*-h1wwbX>!h5!2mmS+G zL9zF0NWLS%(cw#!GYNhtv3rcY+~(lW@F+InBh64pi9{pKoW+IF@cGcF&`SxUOf^E~ zXqzw*u{8&1gxq~BG)0p5u`tBu!`R0e9^yRk*%bDPmEd^TfP_Tv!$XKMbYFs3LI8_) z@8w`592^R%V)N%T=LQu5QhK570LyL?;2HwR+!#Z{DmDW2O>#?a48xV-(b3?jLYr4% zY!s*yD(xj*tMxfn;VeC>sw`O>n zLBsYpHq#Yqz;^K!?JNyEF3lg{Ea@d(y~t5)IzSspy+j~UA?Fq71&z}a`aBfmT+r}G zl%Wvzuy}KRV4(hM8|w!KG#Du}tu$p^)^-j)S6N8@#8NiSrj(L)H{x>@l~OHqg4lUM zuhAY$Qp=>)^=s=v@kOhfT6$9RCV_&co=t6pbbBvfqz$xu(sXWZN`>_jzi55eEvYuO zZem+2ioICsmi`G9du>;fD|dWI(@LO$gRM8-Hv{Fk2x7ov4RnAtS1_o>_pHN0IS0=} zO-D{@VC;5@vWU8zQ!v;@K?2%QZuUUgC#7_iVhZNpEag&MWM9Ff$- zsxlV74AR=b#WXW5)(3Jh8oE&3n2Lhk=maIXxv85ceo;V)>JlZ3KsiI#a15OX$pum6 z3@1{s!O$lVd$LRc8F4_m*P(@v!K_twn{QHBM_g%i4A> zr~vkF2L{B%NZm>o#f~F3i2Yqo!B6;_iohl{(QBHojdWKo4i8?Wm{3yxV6Y5Ljv8N( z>d&d+@yV+^Gd+DS_(Cu;6~Q3EcNk#`W;6ahpOi^xVq$byn<}mI!X-tS=#Q$QVbttG zzgENK7C8g;2t~aN9aF%qC)FDxc;zA#kgyL9)jFP{bXBxulKohfMYjwz<9n*~UXvjPZntH`nQ9)%&2WlT zSPVYPOhupoc#^R`r-H_JG?<5=Ogc%xlV&P+cJTaE5_}pNv!bi4V3|Sd0w~i$=Szo!@{1@+($_i$ ze4QBF$%#m4NNEvj=d@<&;6;R3)@*Cp0YuP-7qI|I`JkIZDZPiJy4ERCEe#8T<6y*@ zZeGLyj3(zIRC_^=wP}>ewnnEweJ4O#s1oQ?qf($iVsM;Ku9(?cI@z}LO)?Q0gl6sq zZQ|dNR4bZ7%#sEeN5;cf2q{Csp~>+) zqwFW0(#P|nSi*ZEGeX}o7=(J3UQ5wO$a-L4$JVVtTS48&l#sUWq`K232KA62aCjIG zBE11AkOx?&t@x-Y4RU552f;OrCp8q|8K+X9@CW)Zh#3OoL=X&p{9|ou0h?8339rRq zNXl+tfFRdfO~8Uog`ovlT1>E18d+R4(@NE73q8}6+_tn)c6x&e9+=j<=tr)LB3oLY z8poWWtjMt^DO)7#HL~Php+)lWIH~z+y4KX9%rJ$}epiA!w_1u}#OhZSYS`pnJ{QIa z5$!D&-IkW%+@L9^t++Auqno%bv{p_6F%q6siLIlxzoiuO7(guwJH3k(B&nfN|3=h5c@JSL(DsgsTmc(?Xp%tsQ zq47jl3a~YZ(cMBEF{MEIF`P`C868C%Cbfb_4KEH~AT9vfr#yc{4-gsDgD&Y}f)x5A z4@ZpI$J$lrHOmH}qnzAZCOHTDtECeIGZ;QU0{Mlu@DdLK_b`)Ph9+zZ8^NPlqYcD! z2%`&4s$^u1wHFUvy?rA=IXqsU+$_waV2T2ML-Ik$C|Y(3%qj4NP+!AqOD(CpX?Z8O z7`?nL4AlUGmC6fQJ{}PCwm%e^8XsJ*fudL(0eGf+)Xo^#l-xuWSiB5Q5=|9UD+zBf z=)+ft2ca22e5X@j1i>{V|s0gl$wgNwoXKH;^jLKE4e%ynyPJ#`QTd|DY*T28_0LJf_6DOtCb z7Diu56sBEfu=X`;a3?%EXDO>>F_UoXJX%X4%bWuf8Dhk$J1I?;IZ-9Nlt`mzi5wk$ zG_C&al-g&-k-=g_>6a4$2mT)IhyFB77@&7-wc5cGT3%eF7vFDaS!Hv1qDW6SlaCUO zUWt;`246FQceK{WdlJ%%Sm>Yk8``2X1$Zjg-$nQ8q0cD0LQfYxpod_&mHm#^zsR%7 zh%drZP=AVc>LJrg!X`~gZ`*nrYj}vNqe#J{QXQkvdAg0$Eljrwy1hg<(mUZHq(&)3 zc&AR%?K0i2&@B%)*fPLKC6TGg;Z4tp+ z46BJSts;~NTQCUg2lsG95Kfg;#2SlX(WHzH{k^L3G!@9z;0l>_Vd$plEyKjn&EPRY zJx^0WnoHO(x%>M`s@~r}U0~VTXwhR~8ZSk>xWO3XgiWg5Ip@6Ru8Ie@(r-n4V>|uU z#A|oaZ!liBhkmQ$H9P3H>aq9bn<%~{UeQFqWvThBWk_3))2li0(i;9L3F0R^URH-6 z|0fwzN&RZ^=2-FOmEtXk@!c=1SuL!O71pm5HsU$!esRNU@s?QemX+dGdXM~yD-iJB zFRWf@S}CNDvf`D^RCsw@0|wcaHm;UziIr?wDWT7@5mVl@Shtk5QnnAz{s$#ge)fHL z^+Mf;?t0dMS6`skCInBiKO$PhH17-oWVSVe-_&cwpl#+G)Aoq0952}P(V~x1j00Pv zefrBCvP=`BDT}b|$5_@Kycr`*)2v*u$pM>E(VaZ65`y%=QjkzAkuf;|?onZ6ZnUev zf;g^kgodzgypxSAOxvC5QY-o-y_z5#q9G3)%91?UH~iQAtM1B}yYjVfEJl}xm%g-8 z)$yVGu(0*Y3Pmw1o}a`Z9MmWjK9wYDS)$R8F5*VB$%yqW;^@+;EG)iIAS}dT{{_1* zqrK6#cD-d)+pB@3R);;-J6cMc^lG(JwD`Y6i!&FBX&9nF@L$B3>qb%fn$6nuI#(u# znI~g&P@|2f6cSVP61#-|yp%dWrEzDb{3y8pii)kS@e4^ZB`RFSHWm16)yR;9E9YU8 zDcGf?{Y715a|L2ETFafs8ix0~hR4A`53^O5DNaQ1CtO^~L?%}8)D4MDEaNBuvo1yg zQol+#E-6z9mkGhxKeu?^IX}3t^TXW6hp=X85>_Y1JcfLXk@hF(WvjiG+1olc z=woQMc&1pk9guLh^WDLB=K+f~*NDMCpbYIwZ?k3OS~63T&Sq=G;2QLN$jm2QN}8nF}`%RY^E$~@C=i-i0xH>)M&ezl9|$(G7F|x zz}7HeO|RxfO^(3i6G}`zXuK?H%<`y{!7-S?>2*R4jCL5N`WXBYz9Yl#ljL40&;T()4x?vXl*MZT4|@G6mY3ozg{i3zRru>_4?B+`^c!;!AR zNtMj#lD<~14k{B-UiOJ~DJ`*xo>5WiFm}oygfr-`NgKKhlUtIOX+jo#e+#Q{nvpbU zu`IQ~OX5b$D+4%75|;Xr7@jEE6c&7>8=%$9LJ>9LnDs-8*Z{OttO|)nPK?6jU-;~R zxjgbvL*{&mb)*3Ww>HZjMN2~rBE*gtv8_W*VW>K2ng`aZ@e~XCXyi6I!HOfJ&`21a zLdAQqAg79$4JtGm)JarRK-&zx3lf}S`96ZJFC!~(rKHV4O-h;>LcK#54`CtAU8W90 zV}UAYs-&3~^D~ z1!(Gy9bwtPfOVk=$(^aaL45`Uz;@NZfX;Z5mW2+An0uJLWe%7)+up_k^(202=?cVw z2MHmHNo4lZZd-qU!qYF-_y~f@C9CKDeszvM@ffJ84&hmSm2TVU_8qz%rQ0#Oou(Ue zL{74=7R>!C6e;7@SS|n?polNHFyZ?AA{@Q&;$T-Vt2e0Fo47@2iKe$znqM(DXKIz6 z4s@CL(xOFPquCiQt1vr%a>gd*7JRq+UmW}P*XNvZU+&GKxl{9X^E1n3&5QEV{^gdZ z-m81>>&u6q`zSkbo-)efJiIxF}Up@AqqznaMnNaz9>z&rsvesBx>q=SM$CAyn zRV$!+(_3Y4lr0|qoyxhxH%?zaJzx8QuX4?S1P{E0TtM8HLoZf+!I&@jX4O*uQr}AT zQ}=uw54^>%U5R-&#mhFKu#+G88y53d{LRbmX2F!8)r^bSNBVnIf}52oF&DHT^|tA% zUeH|j36p-;K&`>|Z`&BZtX9M>{$@JQ+JzkTXViftm_P?+NV%o+1>gS0vb*we2o1Jr zAO%8`ZNkLt#LJW`9b=?3AF}Ng>0N`den)E&cC^uWoTOLeXNid!5iSc+2kQ%+pfGsR zsg@*epRyos=Mk|M>#d{CN$S_}8lFzvdMq_e>609UJf0c-ePSulBt=C zmq^QgK}8NCAd>$DH7H4lu1W8;{paT%bx(t|41cM|HBmAANX!J#?hfWhgQqmV&!cs<=bO>Pv0x(S@A!;?0%Xd zN;p9I5^miq%pl>PevzPz@$pjxZo^ChLO51JJ}1>mBpDHx=?uekYcS-fgWSX>MGb~{ z#vV18QDYIc*CRzuv6@})`&kF#y?XvA)uDeeXnzsz2dt%|9EVMMQ5p|ik*+#kl&;wD z))2rMZ=L#E;HO{D+5DxNy=yF+MJf6hSU9&Ig)$Gg6!gRx?T#3eGVeBnMPaFa5bI9T zg@6YFvCKp2mbdNd+bAdDq)pC7cOs`l=aAUNQ^G@@FhtOM3Q7Z$6a1h)gOAj+^kpWP z8Y(aW=SjqXK^D#;DScT**{i?HWl*vR4L>5}8s)~<1a>mz)*}Csu;trGk9Czh+tVHo z6y3af>%g)v__O=Dm2Z09-M8%D{jucrwBPra&NsZ-dC%XlW_RaR+%K=3zxw?HH;=5j z9fcM5t2Qk}7LTk{wS7?1_OtutjUb+d6+bE202*0X@$*l-Qb{$U@=AYFP=ctu(offN zq=J&$2X7r*7+iASJh&3r`+;xoS}_XxG(xl5%g#*cTXh}nj(5Esh4#DNjtu+z4jZ1| z&+v5QyWaQPDV%4caK3}Wg`SRT*ZY+mAGA@px`^WU(pL$O(PQZ`d;w(=hFhGx03&p) zV~oQ>QCyGXRLaPp4&WM&Uq0nGvpuP*B8(r#;@T2~>bo(LQmgq*}MF@j<&CkgB z-yuSG8^u`3pFM_=RPqDD$gd(jVWh*8N2~hn3!arg)3UGWXZQUTG%x4<#FtCcZ{DYC zPKRe7VeQndgUh~ZU~TDZ``*oAthLdbVhzbWgk_}b~aeV;Pd^RhQb`i`f}amQBX z_$_Cx^gHz(*^c*pHr&_q0k!TQj9yK6AgL7+;6a1H z;X8wP{u#O+b5N#=oq=@nyjizwoAr!iry!lD7`(O5dS=`slwZm1Y5)=bv5r)0;B z=lhcEoUwi1F1voTg04 zHg1#Mzipd!%sBDn9Jj%fk~5m8=RabsX7v~#ewLp5Y&O=`x%!(CLlU9KND^FC)y=rB z`AsNf57#{F2ZrAy_^EM>7*Y%KTiH9~(ucK88ds9aBEBo-LRqad8Q02YT;I%|aix=0 z%w~*xt?~?`9vSOGkYRzKE(wA(G6X=7ziv*FnG^g&Wz9GsC2_uK`;LuCmUSB3FzcJ~ z0y{Ehe7I-+z&Y!E5srXoeP8#P?P%>|@$QPvmU0)2?vT2lV%e=mh}%o->IME8vTYA zT0g`TVO9No`iNRu-AqZ{q(IS+DO|lvj~S58Lg5QrlRUx&4C)_I@=bK>!L2bzP`6|% zq5dJgr%XihKSn5#slcz{SZE^QA@^tfRPBV5cBvDNvB-slO#%A}M|}N6UWf&!ncKX? z93IdJOg}X{-2aS?g~z9>tXyE41b<7E^jC3%tGoiqR~RoUyFGeqbna-pBzXP!13Zn~ z8lk7kx#JJ~MK`{7{cH0(R{YpAdEoWW?T;4}&wFluZJ~a#Zn0!3Z#jSaT<1q%0_xuM z-19fB*&TV$+TsNzs|DL*1>5fx?EJ(n1?m?fEBTw3eVgy)gCP*X2f2mI{(TDt%hhdn z3YJuau`VpHUM}Bqt7vK4T*m!C`D&mp7N}e31(Ba~Kkx>=dv&$AK8F9^`nbPn?i=@u zn&L$}mR?*sxqRr%a=|l?9QNXTcs0t)#|key@5agNC+BVRyFc{R#ql{jxmj4Z!`0dQkF|H%j*jnwx`1BH0(}v)5v2|Qp zUetmQh!6zJY6=H5RaDsZc7p(-bu0Tx47oTEMtxZCZQwEjj zU<=eNVfROVm!TleLeHc;Xow9A7~e3~L!7Cxk4d7;&yBC$>i+~pQvVXS$Fb4FNJkAg zUHBL-QuH1RCN`~ui5pWekwg`wI7m7`qmadpDTBr`2T&N??kFBuR3N3>VHH$M-#vP4 zSq1n1;DXa~x>%fRRFD??Q+9(ZafE&oFV2ukn;>lrCMk7sOKX&iIsrB;kmbXDCCCeW zF2iU-(d`3_4x>0))3aY~>mF+op#-@>e?q)2G+c>yA#dQMpJysB3v6ZGLD6(uNOGVn zK_zeFk|hakgviSI$qVdZ91lr(3COKR2TW)6qOElM_z-hnv@Ia?_GBnwj$%&$N^(MP z+ag0tyH#v92kkVIH(MsVp#K-bVX?7rc^FQTwOtizEN)F*-;OA+Mj(TrtTEsO?GI=4 zv*w{1#B(AS>c#S?0x_B<(|B9kC8pG3`Sk%pDbfrV=a4MIM4wbhvT#{(bfraOM}L6pG$3e&Ha`!v zK$)T*g{yJ8t>Tv4IO>OpO5Qye4X#kz5WfrYu3O42x+%|hFC1BHSn+RP_3w@O_pbQ& zExY%L87J+i{+IYTsm{h|oV8&MnRexxejF3mk~IDe5edX9V*IBSi#%cc|1rit9HaB- z*E}z$r2)WR-9bLm!hB_FSQ(W~P2?!~R448u7@dR#2Mya`F3t~sM4P>c??L1o7>8iv!-^Q(tJlT)AkrS1n z$(PKc27)AU3R~!ddJnkO14$CeI@RC84J##TVUl_?sZjrl-aL-)2?sVWrv26_4iT3K z*-zpNAbX{hUwHGme^EY{f%S@@3GKJqR|EC2K>cFIl5^?eO5o74@6cyb1`>k&`i3Uy zcgs86j`uTdxF-<@V$+yqe-43f*}vtm4wgB`oE>iXY_CAU^hw0QqE2KCFLS6s3jNU; zqf61()V`WlJn!DqX0d@^WU9t!0s2i!xW*2-(LKZ@pg(#09bf9Ch_Fo%93o7jvmz|m zZo8@CH7Pn}Kzhe-W(%E;<^vZRUKDq!34} z0B_{bn*MwC^%S>er0b6BcC)SYjh!qL@v!A$i>N^V&5blYA5L(+yU1 zGCzNOi|5;fXC$2Z*)?fC@AVCLHY|h|3l^`glQ3jJ#; zv?zU{*QkgFB=}Fj)Y~PhL{$tvE|Ar~yFgwLV#&alWHX9>QufVNpwH%v7oG1;umg z1A&nxku6Fmrw};cLrAqYA~C-C75XNbMN)r?IPmA37)LZ*jiy->z}|sq>a>!)CNQFJ z60TiAM&O?cr2L}WRkx}ZiWs5u_RMAAgoWE>x5`%Y>SB3y3(qa~F73Jd>`GqeT*iYy zu^^}`0c`s?JqPAGKDe-x;gAA0lBhkB}VHFA3I}zV1Q5N?XBtK`E03A!)G{Y=g#NkZ5Fj#$dfJ zl6@|70oq(m8_b#x6Yzpxhakz++==U~gQ*oGNF#WJ&semX3bJ6|{vE()6>Nlw+Z16} z+Fqr!5gNqINee-PM>kYS?M98WQT}V{Mq&~{F-oM|lDID)6oda4#EYv*1~`6e{FCfV zq8ORFl!2O7zoJ12_G&LqMojh=Je(ei4r^eG7gX&4iN{SacwamY2Tc#DjyE z4pa>^o@hEZ$xTVlm7=Py#r`oh98EQ7IACP)&CByw7mHT>TbJEiwT*H$bY(ivVp79K zs9za07+8Ev7dIXe!rL%D;F*Yp+;3;3?dAV~gp3vu%7?pJ0IdEko|Cu8G*C%p^$}55 z4Ap$e<74oqb1jgOsqE(lOnr!~K7Z+diPF`N@rhV2SZhyVu06fRDTB7zjN~0vQ&Yg8 z;Ds|th1r78F6BxV7VvzOW=;{QW?ax9p+?7rlui`~cbvn48Q0)o9otar?X?hlweBFqgESLioU{Z4^qL3pO1bulgEb@_m9#E5w2&mb5g zNs2|A&1xA*6Af8b3G--;F*ouO+Jz8#l7;C=7;6(aM55KCF{U&&jox7$7`+HfO%jZf zy?jWW5*|gU3|*i@;z0dbvjjESGI}wfr%VQzKZ00k7)&N{l$v}2B0kkFn;)R+32`sTrZonJ| z#Sukdda1Kmk3%e$xW*XsCXWjq8Bk$aLV_V-kIpqoDnfUr6Vg0M2-R9qhzT(j2BX(u zfJIuim~p5$T{xrxjmBgbURQ=qM-~R;MqXoZ9|jJajR7El;#0YxL2Bx$4w#cF8|xw^ zNvgDjRCZ`s=a-Nnz5D|q!ZrnFtPzsB~{VvCKmOZIEZ?bq?_ATK|`S3QFf zE|_$ZqNx9#ZvQvkf^?%5=sL`oLBJDUF}(YsJo`8YwmvzJ)68=n1%RCIk)ZA9U9)>V zyGY??)0?&T{F~yHbvM27(u&v1@01JH3*6JqjCf(`?XTYY>O%M8k)?+Brf+_ArSR-r z_fP!!@#2b`+1lP$dHqc{iNX%tIsk62WF@d|*|$w!?(Q-LVdX3c+ew13U7xbu*DD7) zN~HJgg>)||@7U#df2R%iM4q{u3fsIbq7 zl$&M^T%`Aft#0i}#EHAUa+r1Ey+-G)@6#Q*6lpef%b*&O{yT%_o4KVu2*)WKs~e~m zIMeEo8Ha>HZGu<{zS1c$Sl$-t>C9g_L(bIa$8R`g_q!gweJ0Vjm0*k~}yPgqhHluxh#;(=`-H@B!H!so000h!=qf zPMi*8$m>iuFM^P3k`9Z$zg{-cB-3jQJz2gr38*ee0pTQZ9%fOi-zH7A!S05biu2|w z)bt^v0eCENH)s`!6m@Q(273smJ4c>3BQ-R~Md0se6qUn?d6UAagM}7$Y5r*@BREIT z;<@nP!GomBA3R_^8nB_!D4E}5d?EpowP?H~#P1Mtuuq(Z`k`<*c;G;A$F};%KWo6t z1KYNnFPQs%EO$<}W1E?bSW&Yj&(JQj=3`4VKJP1w$r+QXwyT1P4-<%RvZHM@8zq?l zYqKO;dEDX(lJnB$EHXD?haSS4i;)M!0GMF-ltt4G5|+YD&Y%T{vW15kOS^0Bo3`PA zg7u9Jjl>p^V<4j(uDs6kd{zd{W+ik`4loqR*~roG%4D`_y2-K4_#old#|I`q5)@1q z4PKlahi@vjPBB}vhi5|dc_bkT61*d+B#5VjAcf$&(a*aNiCo^Bupo~5ztcAkB^=?& z5(_e6JEZ=c;{9l8>*-ZOnoDFik~2B*J1XBQ^7w!F zD=uH9_1^^U=fm<;!mSUg$0Z-+Wr3D`7J#QKt@5_V-`hdCA~fY=Ex2FGFM%=P(Bg@E zdAmuD>?S#K>1v=U7HC=tG|wHu6HTvBV)-CYcfY7HUeLTa^uw{Y$5vZ9V=bMlEhl0v zCw_cn`RsERy_F2;tq5a*g@Sv&P1u&nE4uBw<$LYf*Zc1DExMQLS1Q`?9{F+Jz1)+_ z{!>tyAu&sBEKvJq*IPYr^epXo&vviw@JgU_&VAosz0k1Sd|<_YaM^wEXVA9It$pG? zS3atCv!k{%U;5Mh^3JV}KW(+)p2)xvW>BI+N3dVnexal^Jv@={jfOAqBk3OFFxU&@ zKo6lz6-iQEG2}D_Xu@yVzUBN@{F6C1p)Yd+a&YKqG^+zSqMGhT6G zZgX9;pODr&{O%eZk(a4+0xv_w(2|SC5~dt8=JMxkbI!Q{^3Hn2H|xIc{N`2}$8L=} z$6T|Xv5a5KAIqH08gtKj=`8XY&vl!eZO)=lrSraMQ#*L?cdUq-LaX3yr#`njy?)U+ro8}2Z2&*^vN26c-#a=Vl7sei!&OGEUXE770#;QloXPpV^aIP9`_=PK=ty06s(IG~BP8oe zxpWM%Ar<#jkzNwa;2p3IsL?+FZ&N;-HL* zh_%rO<~m$o)oXph{0TP~lT7T2jl$C=csHX~TBBOPv^11nu-3KA;{{na6-WVa1%Z`` zeT4%;c;T}27D%zFF93!^^BV;`v1EWm@Lng_U)qZk+izOe8Zc^lFxq$Edf*&TQ)v

s6pffH6YrjIndHHn^ndZGq2xg_rlevm4U~?NF<1FIH{v_ZLW)!5 zcwFsKe+Oe(IMUFli9WW)z9B6YljX4LZzIZLUZr~R;q>-&9D&|V76UKqM0gqlnFaLM zq$=kH;k9a=Z(3QY?`2?J2`g5i_%lB>)5>02{BHL)h3ReSe#=ColYQX8!>DI z%&cTX6aO8pW8j~F|LHjroV8LL`r?Y67LPXko6=0U8l64ElJvK>g#F6-gmW@FvHXf=!8xiNA{l~aijGegY#HC$p3A&ax*x6^H(6JyLz&Jn(h zAye!aLrn9NVwg~^6gS*-#y4)g>AaU)6VEMK&8?2*!ajA;`C;ysj|xj)t9iZtPW|i6 zcbXS2V{f@^&)vF}!b5AYrD}VxEnZM~`{=EsFrhtp=j39>%7)f^1zZ0P_El|vM+qL% zO=vZ}pIc3~Q0=b6j!Zt09NXbk_iofvt)goC`i`IJKho8Gs-w5-NFs}#&hYos(- zGwrBp4^C%^Pq6f>nReCC%6WPNrpe*RMMR0TRF*L&8w(PdVx&dX9O}KZXjyi&l*mLE zQV*&%6i?MtYw1Srh}i5~Eul~;Ztz(W!K9XOkA>hA4kr>Ma+0TpL>5R`zmV*)3{R|a z0u(F6rHl@&*6$h|4Z~w%f!OF_lzN(g@=$4nTuf_J8tek(Y6>xsCVam~Ul@B>30psT znF6W%F~xITg7}Ix4}t@bd;&qu>#3&%qULFhYff>~6;H(1R>I9CWc>4M(tq3`d75Ci zyzH%7bK0^C-*f=qvI`fTkLU+pk#aXILwDH?<@^9y4J`XNExQjbHypa>KD6e{^t8Ph zpuNSmcRTrK>B!&F6Nj;1<@3)S`fJ~b72k=U7FWh|i{>4#^)BvzFY8{#$sc#dD$Zb$ zRFX4y>>*Z2rOV~JmM$-iESGkC=sWyTpz!wYTf2oQ^Io9ges2D4?=A0q_r2WOpZH3a z%iESVEtM^o?!V_du;$G3RL4s;td?w!m26%-ao4+2a^zzvJG;Y%;kK#itxIoQTHUli zwrT&}-uHH_Y&sUpt-YBs?_Q{0vuEU0#LKH*-+yPnP!W31`JTK|eiEjRInsuP)$)C@ z@_l!Ytdw`$bpJHBY<|x|@4einpX6?spN6GG(cYlpDa% zzMXR`=fm9KPu&H}h1)-L@A%m#6;jD&Y?YYseq%3g8)Wbe+dZPK5%7It~X>SB zMhQ^gLtbDGi9zITAt5m&#+*4(U970l+Ve^T?nHTUVC11GUm0~2EWeP3g359mXe_s2 zp_zy5HHwX1G1+!lk3`yapXy00IGRjj*v)1oattmo3I$7u5F*sL22>VsAp8vRHX|l_ z7B~q1%FsX5*<8(cG0I3092?mYPYi=9)W_m*mgqBcrkaZuQD=P<4-#E$q-w9=jWako zVP+?qR}&Lc6IobR(J6YT8!DK(!2n@JGr(vE|Jy!b7<%)n49@)lqb0A;V1IKlLZ+s6NA~O?u5P|PuI^ zo%%)c9G#7m?IhN?Zo3S-{6w`Q?(9v!l zpj&HzaYgD3iKPNfTdTQEvD~JW+~zqKe26T2tK%#4UzhKVypFVa;g@S^(_W~G^n?ZNOInWrcA>x#M8G1p1KDKaYJ1n<>R+}sI;Vfra7e)W zJdhJ#(6)MXLW#kcvN25yc@2ws2p9uRRftsvg)mo(dkm zMw?O#Q!JsQV6n(nq0=%-sqaa+3LeTWdA9#FXXD~?_i}bDyLT`Wsu{>MkpcNN_WYA(U&M=srxhV-xsui* z8@8OlQYL62WUT5-^j_qGcDBeBbb%5bJ^{!5G*wud7m^ub&e8t#y*5#)Ve6d@dhVZxI|?@FLKn#NC%M>Wh@l+oOWadWz(mz_0)CKy0|-%Du7g`o3jv<^BBfW z^TfUW8|~NIX-X_Ezde0x`u5jveSKkgrFiSyG1h9SWwZ0T4+`oQ-Kz};KWI4k&@B~| z#|t*B7SzQG>Q)Oj#|kzt9=%tv<3VxNO+Pf0$rMa%pTX{_Zppd2wIjB*g;7U{n!EQfRTIQE?Qii1u&7m-c#Ujyf~- z1SLmf3x}tMV*ue4=>}S+2JC7xo6A!~JITl(=Vmdf5R2;*X_ijGbanM!oy5b!T99yq zq8cnM`=Panp*5CP`?4n-?G8gRXuzDiN$UR?kK4|32ZPxj>>-{!Rjm<}o?vbXK2IlD zQ4o~ZfS4fHVZ$Nf*wG-+r zN>8pTP(w$`dJ|Ubb{lP&3*6vC)P&jKXTgipm6FNa(8R|I6+RfCzIN=McO!Hf=1#`FdCT4k(orODV092<2U_QjJn#or{WURv z&BBhw;uU|}vb#+%M!Nw?5-ldyhG{WLcR!OB=fdBS!3^O`?b3x)U>2}mGQB3Taw77j z3u*~AY@cJ53|~fC98Kk>h)Sp8Di|CRHG%CAR6orw3m61r2|erN?Q{sSQZJ-3=)TC& zX?3Y*Vezo7ZLm$I_oN{^wzwUvn)elB3)&I-8OzD-7f|cLzUX&Vaz_REnHVK*Wn0 z6@GEWd_giX=nlg6$|&QX$@xE%^M7h`-e#)h(FAAE^N1kmIypCV{4f-;cP=74rznHO2?!Lq1AiOb{_97Nbx=LW~r~ zK53m&fqd>0sr5o5*0SVIH}9@Hk5RpiGCylNOM+CN+MqJ2&F^VpFkSs@H$I=<+6&Ug z3LH351!r+-RwfWT!2=n&)=t?7XdxRjt>%p$)5Vzj9;mfS8dE}B(U>_^(!o-zanl!A zG-EW`@SK9<~`!nq@4UQqX@`<|a1EdPc#?uVBy zUU1Q3OJ3|=Dc*k539I?+LcCusZi*GdY1UHlO7Y$ga`&!fBact=C4X?iwUUF~zfC{; z1hU4BZ;meqc0%%>G-b>3TD}srENy%%^GqE3I`+#q`DdImt4Mr}K^|)@@Q+VFr8OGIN4c<~N@O z&#cX-DcuEj4Xh@6k5!q0rbUl79g6wOz)p-Tc45&>df@41XUd9ZT$*ZW9CGT;gJ0rIyn*sqEk5X_~-zM2Oi0;%)%mE*EWn zckmDPE^j$-&wG$nT*(vM^2YYN-R~V;37lH?ow}c0yj-&7-K+Pq_rwDY%f1HeIL8wGNE@CeSoU{u$j-l9pS z2lWgsU!`LKx3?tw)#JHRlU}54Y^r}~lynTpPZ2siiZv*_pr;B0E$w51qPGP0oe4LY z=|Y%C)iW3^Vh>u|)}wKlEV;0X$j{OEAs&y%k1u;}Z#*}DuHz$rF+7g$ASIy{f5Wo7 zfu|p6E#iV;ABLvg^w7=smhMJdZ=CpCmFyW*GA&d~=tg_~ zD(#-A%tf&7-7e&uaG#^Id_fr#u4l)|TEyLn5kp*0!hzA7aA5XPf0aI@O>*@X-L}!~ z`?%3b4AA9Nqf=@f#S!C|a36;<2nlP2Bb`5>7eAsGnHZJi)K0kN{WlcZp1gT06>#w=D#NzBF!m{v!;Qi%&wPt%R) zx|k&{Q4XDS>!90i{q`LMB4^Nfzal-fU$ME|Yts(c5nVeD{Q&K!dF!>~b1&VPzCJy_ zCFXBfakgR+kQ2Dpjh~%|ZOhJ*`Rdm<-PyEI6)S67adte&_TPB^`t$sL)0S(eZ?@gu zb!*pr{jEbQ&gKWuH|@UFJ>MQH*tFu@ge+=z;t)oh(}*J+ae5;TZj85e$6F7_H`K=~ zH^)1kiEr8$Khlk(RpRwq-e^6ae7m zm1~(CbW6e7H4g`~q{`|wF9&^6Rn1y92Xmx~;F_O?FYSvpA6l+I6svkFR?x9l!AUD|l)+jR2ZIuth#IUBZ0uS!$JI!Ig4<2E zn&zJo;4D7#!)M=qb}=hfu|1Z*W384G)lqS*%ezobXVWZ(emL^>$lbu(;pHs{-*YZ+ zITEYsTHeqVE9hR^$X{%d^73zI-O8HZAIoi6tLL}|sjy_Nk%LWC*UcPkmP*TB&$^Sf za41%?eQgWJwZPE)5x4!?3wD>Q)3)%^TUXw=vKU$F_`~iWb>H0=+i`Tc^=PdA*qTJI zf86_sf7fy{T}=yZZ|!_zCloqeO^b-f&svdG+Y}Gh$2T^|5vbc7uW5|8?TNSUif^cm zS8j}V9E)$-5URE8iZ;9_d7(ad{zIhuxBEhZ$j0%Tst}ToT6wpwCg8~&eC{Tfe z0u?wYP=SNVsK8OlsK8MI6*wqRfrA1SI4DqogP#u-IH^Dd4yK?2$9)zmaH3xb75Ix3 zRNy#)3LF%uz`+z$;5b5swN?&pm9mN-wQ=y6UCPK=v)f%&Hz#q(qO0nWLyuT<+g)dD z3weAd(#cr$o=13p#o&f1^o^s7olALtSoovD#S>7<;ujA* zSvQKW7vIdgU3jZ--m{!n9rM&Ya^aJ;OyAjf~>!u1O`2j}X#0R=zcs+qUMVG(IUmKyI(*kHYKK zS~f-H=%e{dvHZq0KSkxz_|KzIzLe#?QFy)ZQGlMn1h;OF@7NQs-yCn=`p_S6Wj)Br zTXW&p0xLZ|308XlS+G)?6j&)L1y+j6)gjEIr)|jq7Ha_F*8(6tJqbX1|5*T1niK#j zDg{7_G6AHgZBhpLc(2|VuWNYd$#b$+*{saH=k_FY-rE^Ya5w z4rTGkg|z5j4U&Kc34T)`p_pVyCj_$Zq~JERTOlp}yDBn@^QeXXresFa#30ajQ_xlzvpMC6vW)|BCDn};$ZeijG$ zXX)Z2dP2Wv_`cQu&3hEO|9JqP$W<|_X^|2q(+7O`xy*6oA z`$NZO*C8G#^xLv+jh-KPDjvD;yEb5xcJ7VuI~1>KjPHLcURm?df6C_CX+nGU^)KD| z(sD^dEVpsZMXvy^!BoxMnOW?NRc(zGw5?_GOSe>1e7o;f--7L}tT(b2I~R8@)h+Ie z1$V~^_pEt139911(RaOX-f_Ku&C5|fsknp=ve2fZbBkR|I~HkDiWNaj%}H{I*JId- zy5u~{(V15Ev^evhkjahWP=%(X(`6CZv9-gpexORf0 znto$?srHR;5TfsVZwn#%&b8buSII){nuMQ4j0F5FMIO=5S_u=VB3B8H-dJ00KcIrJC&57HSu!7jUlPwwQnWnhS4J3a6OQE}T+{!V%I6 zr#Q%UQDL7XDx94MTzgOzB(^;c2dQP?yPv!B92fw>i=2Oc`?!7Q3j zPT7#Nr8zKRAj+7r)@u(giw0A{$A0=k1ByRxmJW2-;(HG~^aQ{^o1-F$hS4jug~ny9 zS4<`+bL(t;+grQd*tOUctKAtZ*|o;mbGy()g6x_KT#a$mh4_~Ba&#aKxUf}EY0OhP zUyDV~(kYjcg?JJ)q+CO6Vt{X*oJ+#81r=0y4Y=AD9<_(uDU^F1j)JpimIiV(QEsr#{l|5Q*vp7u_QhV1=4Y zFE~Qt=9Ej6Bj+nwasYn?_$$O;5&nwtSAyKq)Kc`RT>8YfWlEl0j=v3ZgDx^M= zQam2lg*PqU%0X%qvvuTZ5QAeT&<_Ie%OTC)UN|UgWT|ntFKn6^GNbh8Dm>+R5r>^r2d6RtlYE?RB3CFjE{1? zEDdGJn_qFgqqTS6CZ&$yY5qd6e6bo36mEITD^3H7dJT$}e{?8XEl@PbTTy-*43gW{ ziLY0(hBD-BuQ>Y}zu>pq@om#D{;j+N4GDfbZiQR)7nb#t?kz1D~w*x34 z3vt~j@8Fcb@dR(Igu>Xm?a);VpjD--weTjVX2PW#?rEEZwD~8r$><~ysE)04M6N+PLka(>pBS6iV8frUopR91#(Rf!qhlF zuh5Am8g$25cRDm02?r;_@K1+L8O~5ZV%ag(&U_Xwk>GGwY!7Ry0AzEkAAq6ac(5@X z^g;*Hu^j<)-mp0|Ify;2U=-Wlq)n$OouNkLK9VBDl+sH-QNT#k3i6$<>3Qoo890LQ^ju1+MhQd^CZWDBSiEb+02I&@|Ta<23(`^Uc zCh68sHyWfZ>J$gn9@E_;1(w=5xA?vaHz1q@j#^e^XG~iPxKSDdyx;8-4uh>cb z9$ru9>d4T7{dna{fB$tSzNFrQl3KImZ-Nv-92XY%RmOcA;xG&IRmFWleiY&2xUW>a zy6-EzIkG}Y3i*FQ+*icMFJwbGlLIA>T1)&{a}Ef%a|1WNas3DI_ebe-t=I^@?>dx3%n5dqSwAak((ez-XD4u%cyJnH{NZ~gtO9L0tT6EFx@ zUm}dm6d1`wgxX$E5>jGHc+8}~i3}d|FRDI`RMUnB>=w?R>i)-sMYKeQ=17sWaqHdQ z)dQzv_+QX7=eh6p&Gp{gd(T}F&(2-V4#u*B3+0Q$cZ*lDJD`_UTs3EZ)fe~Y&3PCh z5?;;KkPJPXBqc`!9Y~pj&4K|=>P1Lmb}VUJeP%a?NN)%(j8pCSMNb(WC=zKM_oQhu zt$vWHo^2XBfq+~^6+l2p*-g;(X+&_Bq$r~1a${SXX1dfE%c-yag1UofD7pg&qv+N} z`UQ5aW-un^G*088@a&j9yL|%|D?|{x&`X<<5~x zt6tB!lY?`pOE%Bh;w80nwpX*`1?Bkh#PiDLcg6B*5QZQ9%K7P7VH3hx@xX@p7h-`; z2)iMdt*l?T9II%Vv)yx-!RVO2L~LozLUXL76;IhXPX|99i-+Q|wX~hWT(vO4ehJbhETB zvzT=ug)5!!K6v$z(#f=DY{Rf!qjTg99s%xFkw=~ZyAjY!A$vDAv=11sjDYFd_VJwQ zkQhK=q%{L+jqs&(ZggidbU5{2KG4M&5wL=zvn3trboq7oXI-*$)(I!}w{=UoT8ygC zuC?jh6*hQ=L>VPkuqwG(9V0Z7#!0UZ1s^G6o^I<3{W=ha6;Czi9J+segKanYdClB; zfMyA{tkG8)?FPZ_fD6|__DMv);H=N{%8OQ5kuWR@G_U(uCtaANvnlBu!Q*7)XT}(L z5qqvF<6`nALmrq63oBW${8$J^u_&Si53TpEum_LPh<@T4tvK2(?(2yi&>4yr!K*i1 z8mGg@BM0hvF&TjikMZG)7T@&gzWG|c_Emj*F!{UL#w-JLZcw)86_!NIe(1|o0}iqu z4?)qEOm|I2gBjhP?q2vqXNKVw^lKuM&nzDfCvwR+LOTi_9udNDo_%(59B1PwY`B%k zAr_MrTE*LZr0u5!qkKNqD2|s&__VbO=c%?5L8Sc`;kuAjH<^h3KE?eNZn}?jgUF~a z(>L^C0&X7wgJUpy^)c2Zks->N_8at6MEpl0qr|FXt}KA>hE;EQ%v-+dt^2@R_rLne z9u$<$b*(v_*%k5P%GKi5SaIu0aT~0KvYgpuLbO`k5-V<5ZhdMoy4w0wto5n)>Xuud z`SGS$>oY6GXMY;N{$>g7wtnx_nnNlm1@VMMM^0rdr}DMvLho|bj>YFQPKlNTXR zVX)I9y??N=vs(I-hVsq~$Dg`vboUf?RyzK)y7ow>7F=i4p4nz>6FcbN|N$n9PdZO+lldm^QL!hADme-ZPIPOE>#zvEVZ$K+GrE11pixF5~$cz~ZMyhv`Ry#FaY4h8ve z7SkFnY(>2Bo4FfELE3&Bc?Pw8eM?u1`m?4kk22Hf>TLJUG;5u0*)yxv&h>dSEpDdQ zYP^mZOGvk=OmECZ{u`Q#M{juQyH>hyG`W~wp)$SFjda|yWbGBvKa*&WC0%Yr4V)Gu zA@y0Bi8&9UjVzM-gs%A2uZX$S{|ewE5oqjq5^%sEee?TM=94w>O{=BZm$H@)xOHgl z-{ru`MJ-G$Eo*#4sCR+MOJmKi@x#HYFw+nlwT0tB?$1CBjr{7#6O-XfCoZ0t-Zxvl zDgFVSX(717Mgzowk~$F2)%vaBm8 zxTo(3DzF3MD7G+RtU(S1jWnn$B0PaAVIwUlCJg~{~}tlh{JAdib8=vJQY?b5h30h%_j#CJW=dP6Dc9w!h~fA z=12M>uw^siwE#^rr;A`Dv}hUJ#wu-zaP(q#FX3#A2t9pfb->MpBx>5*Dg9!x;`8-^ zWUiMg#7Zl(vwLV|cnkj*xWDKfx113`q<5#&&+L%}i2%U5gyMxnpa_XTGb94Y9RT4q zBmzhQ;Ms;$0N%|$H-mNOnb8C#rH2LRhp2;YQ3J7mOIm==o;@pQLOc^VXWTbFT4z$2 z7PAx^JJiUtjijO#Mcx;@W4?LIbWyB%OSE~*weW272DD((APQ^udD4cV96O&NcxtYWQrtj?ESPqS`_gXpC+>un?Da9K8&uHM3HoJv|!Q4 zxAI##)gDSdnZHW_po*KXF-+NSwNt5B(7kk{15YFeSgUfnxa)6R)iN&Mc*iT?SLinnth z7y2siM{C;ef4tSq)!Cb|ZNPBulZM1##{i<~%<*VyP(ov|${LuobBU!2N*jFEFm>UrFpY^tbS!Iw zJsVMq81)a{3&_ZTFIF+gVd9cQkU`~>3bU{t@Ftj>#N+0wnQgZ^j1_ITCcwBSr65LR zk~_1-4F_5uG5WC8R>Vtzumsc|oB0ElM%a_YMEfgrk+jUejug1=w|U_LI>86Gjf>+1CT zuuBrK{9@!8q~6i9c0>ZoojjnriBU9&RyBc+l822HS=fu>0V%TOi0$>VksX7`arGnz z(Q-T`mg-FXeR3GFj}Oe{wT`)O`>Q6yQ`;Ro?~{lab**pW{{pv^p_ ztPGmqCus(fPzO@cPvQlRdP;6ST5eIMMfd)IL+eR&spRw}mgPBlbb)M5)Kfdy8g1Ts zEi%`g8M#$!TLKb2QFnOR$n^+z{_;pI4vjsyydY`Oe;oS z(N|+)q%l{Vb|D^%`zYXF5RV0};tUstcju+dAN)KmmbBk;oh#Bf6)f3TEFR`B&VRNz z{Tod=_O#+y`c~2*gj*`785^J5I3N=IGr zCX{EDVN}DYVRBCyB9hrjq5k8MesFRffi77$M>uf9Ptj3HHic+$(Xz7JtiH9o%cf+b z4UY?d88!t!cq!7i$Yc%(-QzYiNr$w9PfNM+@7>y8qE%C`O}plTyJz!v6Kj3T_!dMLLzt~t#mZ>K%DIZwW8LQ-1L*IYr^ipvdMh4$lA|>5 zRt2@6sSI{CdKVE&!QpqHAq)<$zV`bdH;btU*S*rHF6nr?Nl+|Ow;s=?S!r8>)LGsJ zb|sb~b>B3tWG-nX6QqxFOUiM!Dt!&inx>WmQfSF6crs0iPErVC!dCpRw5@O%`k!!o zQ4k545FYLeM_N^F4B#nM z>pmR*MeDu~Yp*_a&Hc0N53;YX{lFJp-*dBd-(1!HSaAPr{(i?`t6d(eZHv~n&DFNY zDllYI$J_e-F#7Gk4+~i3Cb{nW`sS`$^*;x@O1(2h*+|Y*t6f#vOiew~H(Y90jdsIb z!E}v^bCSu4BTlgLIwY1-UCdq-YVW&f+I>z=1MyuFU`Spy2V5q(tstOl7?FgvO;sg34V!x z${Fwj^rs_wY&=8O)UhxnFI?lmE<|RK)=FVeYK;0D=lspHUb($i{|#;?Q8kViF=i;B zezEc8FHjvGz$Ax|^)-yRGYr%Mq3Z>BA&KyJE@~Tl6-_y%LetQnmhgq-X$C4JA~u2d zkDNFH1r!!O#%r@Lq>L@oupSN_IW-I!pYFYskRYH4i2_^?Pp}njwkV@8A$%w?+;r^C z(Ek9nHjNByfw<2cvoPcj_9Frb3Kq!}I#WvKhIM)bVmmoBNE?aBH8?a{YYsQq{?ljq zkexx(Kg<$drFreuqMz3Mq-L(E6D}iJ%cHr=#vY$+pZAwe?wIq}%?Fp=%wGnlkt_)* zvv}#yn%p$gFD0j+RZlUFjL}KRXdRAe?;71E#4?OH7_SEC1i;aEcn1UmX+wgnh6}`JM%R{x{q1pl4 z#!0kg+#_Py#XZBskBhsJNvEmO1Qz@u>XHO3$dNu;XmxiKe zi1O-KS#z|kIaanNTDIn@d#V^d-wEQ$tuJM{=|(8 z3B?U`XTZ1w#B45N8k0+j6>oo#bQ>t+r#1=2|Dn3&p&ELq zZbf&{WEpo2gyEaqe^S@?;HSP9t$oG7c;tO&S8z`Na~?Y6SSm9w{S$lR%Xk9O1RBN5sUD>zeM~9YBN>3$41alx-7L)d8>qKt`Sp@YKd{c!8)+vto;&)l`8Zdn;=WF@0}H>Ai!gd0Pr~RU6dWO7(hozj z*B|ljA)fw>Cr&V(qe+l6xr%y(KRLPd|H#t|e0DoeojmoJC$3CHj>GgpaKt=dBQ8@~ z+Gn-mi5D-tbpEBu7XWBJr)|7jP&ubn&inFWzN)CNYVxSWwwruD>T90Un&*M+vSNJ2 z#NP2Wb6VLv&}W_pq8K2j=CrE$T;H2J#&=Atn^Xn5-p;9Z2Wnq^N3?Y7Y~j{uE|3!e zq7xJ#HH}kc01~896uI)mZ0+V~$(A{73tmrD8$#vCw-yx5X+`rEg35}EE2f^FE}D8K zTHX@%qb6%G*Z&RBi-22fUgO!k1QrSIfCd3lF_S4Tff%!x$|eqD4pX^=Ve~PTM-)as zQ~7+NfT@5JgRziTikuLP#k^8NRKg%rr3B?EW2&6^ixo^&5`M9YscIW2XleAt8s-Gd zUTLD1sk$WW#d=;^WHZB(JYq z;FUy+=Gkf%f}~jplCy0)7Zm(W~5mr5>{Ou46?`tknD`=_#_WhbGOl~^AY4Ypfz6oBqn^m^p!C%mj zjJ!`=KF64jZW0%C394@VUKfLQUS<_S#>BLcf8WaLH)6OFgLo&bi^j*C0M z5ZW%cO|QG^p57R(Z;e(Wzy)p^4G#i3@)5Fh*PawVB4A(xPXiBp%H>HTDdPR&% z{TiAfo^xaH(`DMLKbug2K`} zIxGY;+L!3WE@Rn;`Vb`?G5KU8(gL33G~w9qD=i!?q5Z~EpkX@cH{cv(2+7VTcZW_5 zjfjyU;#ag_e_*m}4>qR|C7W(NfIWBiAZ^kzY^jJaXAVHQH<6;gX+p?AT8sewI#S6d z0|7H`JN-N^H?$tYCdPr`Lx=8B?&l_IXkob`oOboRzeEO|i}_dH^sl^KQU?IsVo(w- z7)U5uLEzI|rJ`o?l~~QjXw61!)~)HBEAJZn^4-eDG3}POY~Gvurf=LA^HxT^m6KnI zfqPf2ovT`R%iB6%8oK1W=o{1i$hTOlwuUFS3p))zPAx2*r;XY1=HI=Fp>*i9MN5?T z|H2kZwOT@`eYJbEH%>&uxG4+s7vN#j0Ac7jmv-&77^{Bq^6v z$oYR^6;962fH{CBlawR1(yq^`FJSO7P*7dVpkY;4T=%lJ(%OdFPK0A6jnNWV+bn4Q zq>5VY{qL*=r!)wECTqd^-^iiP5wBn4=>wjG!uxkfIh9KyjK{w`{+Kdn~VgBMB_RcN(TUiAT z`e#nr<9O;@Q0d%I=>iI6u7IcEZlFBj!Cy!rfwDvww>n{7F#g8PInZifjLJm_+ zDp+^Jf`UJZ4As*-S;#cRrWBSgUVjvCwhq&(vG847O6Kcf7eLe8;OSb}1CXi=@ZF4X zW`AZnP9F9yab3gpG^9LzZn3E#LvZ`-Q=aB*{WDZ*^ajmZhBt@UtNmz;1JkQvn4f%7`6~T>_^D|U)E8eWbu;2{|mlGF!kP}q%Y=SnPEe?0Q1L*ivn0_9S}5u|%f7kicmvt6VyJr^61nXzR|I zB+J|LC^_{=E3{bN7$$iZ+omn?!7f7r7>EeyX@nR(Fl>o22$5=eb(nTp-4zy_1+nzy z>eau3VzDy*Updi*X^8eXeKk+Q=T~?G{Wsoyiq}>!`y%gO%7Oa#aZ2(1rS*>vciii$)ZNUf`_bsty1yB?)%d0Pg5t3*8`1;9 zkf7=*c0fTfg(*)^M?p3%!=L`&*#s#DFHUta-wXKxTsktTW46oFI#mkaN>A&xu=sO* zm{9$#32z3p8$%OD($s{JG&JGPpZCo4MBDd#3drJsw65_zNfgi&c^67htHl&B-Qsh9 zhR|8C?FqnT9?->10kW454Mj^w9s7Ab4HYzCEHiPp2-QkCjJJ3{_b%(;1;z9{n-eYw zQ#Z;D=k)uik1btu)H;`1R5&2>itq5D41c&VoQFI4cs>JqmmleZQ(AM8*xlCm8?=xE z9?OuhrTZy}?=Zqno*04qrlgl5cJ07m9~?zb%5_#_>CN!@;}#~6N#Wlzf{;?W9iEr_ zhQy*SkhVsSN=H3=d2e`V82)|I1D_s(lE$XGKf|l_B;P;}z9XW1IQmHUQioF%7onvy ztDVbY7Q{Bg3%DMbMDH265Fan}yhuoFuCg}0VjWDr&A4l(n?A35nOOf4z*NY;K48RH7 z^5zo79X&q4KveL&3Vmho&fP|%96LS|0mgx`T}x~!vzl18aNLa!G#Hpu5VjcDqZq-9 z7?_fd;+rZTHvU;GO@nvEV7wqa5aIgaA*&V5m8mF3Uy`Iq(qc=Bd*wz-lZCA%87W2% z(7~c0SXdU+nwYmb>aG6B8xpi2?mBid?girqejDN=W%M&7Z6wJDS3?10oeQL8Z@AuY zUjVjPQrv8H*lG%kDFnt{XMuS09hZ}_g)Jv;EGK!0b~5gI&4>MyZcMa{Z+TB+1>9_w zGoC^4eE?sX;u)lZaHd^8^kb83p>pP7?|M{~!P3(ntf)hm005Sn&LPsq8c~&V#hSzj zQPa6ZnziCCO>Wr{Xd+*b(?%0%_V$&b@w!J&oD{Q&@*3eGOaPH;C(5tV?K&EHT)HXJ^$O+g)D^o`!{5o(cjIVEMM4aK{ zLoHNH9nK;uj%NJ3eGRYfUfv2g1vxpk&PRaZd5Xk@xCv<-nQ}ob|)UuWrKoaRDw)E_sq>8eW(`;cAC>Su9E9EfB3KR{JI&p-lgjjiDZFP@UbxXo5Cb7X>EgIc|)nSj$ z;TqR4VutlO^ibRbAi`IM<6fB!UNb578~qk?jaqJ2W{;#YfM?k~6)5|x@-Y^)8P>D? za{FBIYEbp;`O+%O8l`t5Q<5(dKcOD~7jEMuJuJTt|02+EcY4by=`t`z=zRpbuCMsl zny$`xxX;~5fls47PP@adQJ-Nkl_jd@RyYt&EZeG_s=zRVN9DI&9pp0Zb3ND|iEoz& zwnrjl-)VOQcp;}0;5#i#-s~umE2XEBC!PV{54fl4|HzplI>Wbjc%^z|N@3Y#;ae+j=2p$;7k;mE0!U~jV>=RM*c5Re$T&r{ z1k|bcWw7d(MdkP0N@;b%jo-hG(C6UwK<6s;otDlrWkxGTa;7Y&v)MhfOk=u9WxCmo zbkd+=mk6O?6bZ^ZVd1I<13Ma99<~S1>+l_Ms_?c*V0SI%Wjc0lLFG7RD5sb>AeDPY zxAX|W6CX%`?aM z^)_e3vkw4YK;k{=|HN^`m&+0L&;0p6aWaK74k4#-7SET0uPw%n)}*kI)C@X@$a<7> zR)M?g#Mz=FcoGb1E0mxo#j%H_w zZeoAY9ATK1rRJGJil|+afjCXc=4du=uzut!kSP6yV>yf8XbHk~#v9WyXj7Upjohke z$5hhD`jB|0t&hBMhV|jT6j2|}qW?gjb5Si=BjOnms3=E=4X+)xbFHf*JoIp3=XHpK;gjCxqvY{y%t=#9Ml{h|%zW`7^=OCp^8tr?&Id$rE2E zP7SQ}-{TV1doPTiMJ`V*M1(yT_e@1DK0*Dy_Nqqxz83Bohy+%*;vRw#RosP}%Fgkf z6Wb98ujpdY#O`Qrb;5%iu$4LjrXiA1g}rjikU)IcFqI;;ut#-!suS4-p5U}Qq2SL| z^{3fC$-cJkC;kQgyw{N7*{)9QWw4{|>eV7fJKC-;)>oQC(1%5)qyY(tiK=?ft_qqb$FpG>R*@wepVA zEY3(HPp$bAnOB)(<`b_WHJ8X?1tBhC5pI z9j*SZuVn10HxG^?1UQ24@L7sh?y3=9Gnh{ zP1#3ho7AnTJYczKEG@}C-==wVkHex{L5)%am#-9;+7@K z{c2#o0HOr`(h-djY}a0DyVy3h4h}vUS2CtwjW%tb1)HisVA~G(%cyjr%E)}d=2k{MRSTK8zOc-%20vSN(62V%Q+WRDmFjPJ)V22%oR(pXK~1}<%av{`Scwr%9nZIHIqNMl?Y zhje?5v}saEw0=p`9QaZ|ep_%t7Yt1wNgKMBa;NX+m9?<7%Xt48_DjcJX>7=+2}6D@ zsQGmrqlw?ve#EB*ro}szp@u>;?6NQv9%KpG zX*jQs=d-GF5%2{8DeSn3Rggdl3NCKP09t|XXj${?`y6MQtWZFpE$z;Os zh?brmF=aG!LdhhbR5EGN*ot!H(GPnsSh{KT=5t26H=8qcqnJB1p%3?3DKnk7d$Z}` z-u$FJmNWW$4)^t1Xu+xHZp2ouYNhD=k0XPuzK>7W&=hpwr<*w9&b8y z6jl?mZ?3Qha>HzJNp3H**6Qurf^Nr5yoeL+g@BRuE{cCiO1(ov+iMo`D@)nyiJxE6a74y@9h5$NHw)!ol%(hKk`HLRZ zq!AyD!ByA)gueVM8enlGparL;p|BRvgHT*~S{#Z@`VwKM$vfwPoP9c1Ftp;QZ>ecZ z*Oc^#qHgG^meVc8$k~d1Ic?cJ;jn_#)1zF1y5O#-##Cce*Nz@l`g#r@=9Sdo?1*BI z>B?yOl5Qw;+)CO~j&iL#`fe4&-c?jX!{AEgmMIgeRUHC{e<`i$+Cel@jzYO=I&ye< zm&P>toO^h$0r#GW^gWXx(F`F=k&b(bj0e51-9lE2CYjn+mDVM~mI@jPtmM1WtqGbh z>l^n^`2}Xv;5?OtlHY4*HkE`7>A;rc!6n8KrhFw}S2Ex=L4TI??i1=q>79^@r%9IZ z512GPlV+a?Il;4U@C|UaBxn{4J6&0^6HZ%c!?IN)r8}L;5jCAnPNeOzBo5fM8%Ykl ze5cGVjOTh=UAe7G}G;>!ON2vw}9pDl$ zD48s_*I6d7IZQnW?ttI1ZP$*>AD=sZFQzQYN(~4`&F%DwR?6BaYp0CP)g;|DJ1L`C zII(0>HK1cEw;ljQ>4E{>;^%87(Bd|8$K^1sP(R8D9;_^~KW7hpk|eKgV@mgxGc#{q z9hw~~`)8B)#J#Iw*8S|mV6&vGG{&xGW;4LKw(D&REejVHyACgP^er{^uS%!}5^igm z@0{x_pPbvhN*z{Z7H(V%QRzE^)KzX-2QYTI6QR$i@T(^8`mW7Dw3UH`2FqjQS5^|coBeXo6Q~w56;avKnUd1D?iPz#?Ww>Bh zkcH52ypXli`K(?AMHi%0Q&&JL^pve@J&JOE3~+=$Rj~@gF6qgQJoy_Ov8t5epkn2e zOu@31lxnBO(#9yq&tdQ<0B?m?C=+QgDBeIB&e>y60mfnm)z(;U!oZ#Z^-X*OkWKgxvS&{!P#Ls;Y__TfbmxYn z&xLPC;uCVAo9oGA_)VC}wf=b=BJn|>a+aeq8y5(bN7U9* zKT{Gj-i58XP$el-Mcoatha3WX|G6jit7-GH$TWXF3t$s+@?;b7;;AHhcEcNCDxis_ zz=!OYzA2wwz3{U^aNT{xbxo-Rnojs(fZ&&WUVqplLK~ho7%}Wf)fT~y1ZwO^(RWZO zK5OI*oo)ghmR+IdR>f>j=(yk`L=BEAU;ZyrB5HQy1Mc}?Hp~gA`Mhpu&bAu+;?a3A zlS>jPw9+knGp3%5Zl@z$ABEA2bKVq(MoYvO~Jon>v|?ERLW<#@;Z zxw&%-@z1+nT}qqmb-53zrKHA@4|bFd-|3-`WO^AVNwL!4kFb91ZpfAI*hr!T7V7MU-j{6Ym z;Fw0>`b3=;?|KYQ8n$|w)2HJ1D}>k1;qH@f3MDAO4J7=s=?(Xv13IYaa8@4&{@P=k zRHdgvIRja^`T{+f)sU{C6!8a5a-F z<>uzD9@6lSY2h<y0ebSn+%B%U#Q@&w%blJl5B);H_bK|8pe7 zrQ3n`4`TefZQ_8mV7{G*z&zPG?zXF&RxfyDS2qgGu^#?c4ghX6wzXaug`+jq(FSix zmjx>d&d=)Ia`FRASwsFIY(`1IIO3G>|1(=y5uu2=jQXZ%}iMSx7qv8Ot8!Tx7mb{kOztq>7-H&oQ5_kdy4)&uy;OqF?1PH*Dko5K!d5<;wrOa~>?46h>?ZGo&%(iSam73W zc|zj)xmUxVRG_vXI$i@jz0M(KL#UdzG7=t1Ci>yGk~8^^96D<4{Hd3Hu#jtKE*RiFx zSFVXr+ve8!=v=h?qXq5b%+1V4*`=L*_nZ1xFd2#*ZNC@Wy(sVgW1mp;}0ZTz3c7k8gujGbSU&vS$X*bjiIkq&P4J?UyY z{1;9T^X-odXZ*+P4hMBXUwhRBxRsRmtNwP4Ii_qe%Nfy1ufR}l> zJazyquIfd5vBEcKU0c@rCdnxKYy8%{wfelZQq5DXwUH*t|6Sv*@_5}4D~<(s4J?$R z-5_5|4gt@{Vx{1k^`?BDrcBv&{J2S(W{!B;Jsgrh)r1=c^;E%3+mr5m|M1)AtL6Cq zd%A)D^%RIQb9a)TgoXI-aPBg(XfR@MXzkl}|3|bG%6>_OwEBK?AG0Rd4Z@D*6n%zPW-&{b>8B02xA+%?nZ}{;_23^Td_*?@ zRR2H-BTdRaqQb^1NR()H0`_Dc(GZt$G@O6?ho_P!Uq5y72WJP)Y(I1G3P6?d&?kW4%=ox~@$uL~gya&QM%GEhxgi#r9|EZ6DsA z7cL0pL+gy5>m!0B$csClUuSr(H~9s*{PH@(V?8PeXN1M=2?P>RSeGGNjAIa9M=zZ{ KU(*Xe_WuKg+MZzm diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/ext.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/ext.cpython-312.pyc deleted file mode 100644 index 631aefafe73a00620b5dfd6946416c9d6d4e1a70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41903 zcmd75dvIIVnJ0MheiI-;f^P~W#Rn*f6h%F$m-T+rvPH=@{U9OSONkT-Fc+XC(qJN| zGZnDMX_3>tBdX&bQPbWrHFlTjn$$+Fn%X$2%*2`WP6L9xfDw6HsqxfKS8dfop;AeE zySDcCo%;Ytfs&p6XCd+2bI(2R^PTT}=R4o`onJW|Rt~@4{;F$`k8<39qZj2@B72th z7&-0+cb4P1K91M$+7V5khCQ`?TK3fS>G9N!7)FhKMh(a7dBccl)ZAxgek1&rJ`3}k zMy#W@J{$9!N9?1HJ_qw#;4kVcVt(t0bJW%6VtyO^#eK!hZ->96uY~y>Bks}CzEb8d zg1@YxLZ zdmQf;Du#FEa#4Km>m*;_8Wyt@G0TKCYN!`=*ssLRJ%u%bcTii2fW8La)7OYtM{{2l zpU}jYORsH57_A0Ttn_Y8eI zSzmOaFE*<)WEZ~$H6=EDEa`xNc^_R3aq zoHSm8dbPi;{0>0xbHb*+eL`2?eqnRp0bxtu!3nLedvepEs}Ug>9ts7$`%WM84u(Xp zpXY~y7rcS-a3nP9jrcEwz5XEYJuh7JUmgmH?f*bU_V_dz<0-#*X?*M-22uA!@ zm0)8a6b$$&sp&u{7!j_L*K#(9vW9{Jj~B<#=vYXM^oJuNs*M2qm_HouM>;vSp*M6% z2;zf{dCo*c!9R*u<7vN$N(AzI&@8_!ZHDItCvaF&Ia*Ey9j_I1Kz}-PrJmR0-GD!% zU|`{9-h^=DgxP1wl=SzC{$LobMDxP?{o$cN#xyE~!~P3G#wZGraWNQ>*95g}TECX` ztk4PWj;7}h=hJ5NVPRxYEJbLT;(NVc9qTxYDu+A9LcyVqk&q|^Cqo;q2P*P*Cw=BYWJH9-lNmra&o6%4ivwG3pM1OGHgP31++wpl0Ot4AcnpBv8}w zCV(4#v+`yJZWf<4Q@X5^0jU}j*JXu$;V(Ry`NSLb`fJSVj z5Ek4-zGiZWWEES;X(xxEHxE91^h%Bwf8j%L6!wz>a$fZbr=kRXDyVJt)b-Yb5@^<9tT`fo6@zk$6!3cVy z2=qiT@8n&W9r|G!$rV4|g>V|z6+gb1+AC8idh9UteWkpcFI_Dkp{&qe26@xatoRj< zyR5u2lvly}!H$0LtkTj-N`o4e4b!T$;s-oYj@DOOIOQL|20d!zD^|&EwYqL!kuhGW zTvm4FH_WU1DS1_`l2_UADmCD%zj2CZ_ap)7ir-)nUxS`pGokl+GZvLD@?XI6q`rl{ z0e=v*kas*R@ZLy>s3k8}QPJ-m91jL)$@h;8MJDJ|_j(UVR2OoTs4~!AqToFr8V3bNr3Jl0j-X=Moga^QNBtAtU?}1R z#fI2+JO=ZBMej@%PMklDD1`m$VF6+ic)H! zG&-*yA+%0hR#dB!P3W>9j`%0SKJWPnZvbUPh@SL&1EH}AMoLn#;h_sb3Z_mP$gA-H zItG*+S|zkwS*`Yka}|-ggXM|tNA{FFFEzcROn;Di!ygC;W7LodmXBY&FivD>m{GY{ z9|wmnfPSGNLw7tM6j(Q2@dq(5A@7xtcnN(kbv*S43L7WVN6O1P=ntT?C)812@1=oY zJ%=8o;>SX0wlsFLptWB?`8kUxDX})SkYrBXTK2e1Dx>%HD?7~6j*lo9V-O+uy=e6 zohpqcCIZ?3@=vXkR1j4G)Fu@p^^`K2Vb;BY5r6oi_sYegz(sJX`g()eBsg-~DGtSoOO%@ykUNGRmJAOr<*D1i1242+4`E?gZLU`d3l ze(XV{+Mx(*>Mtdk2 z7#YX@hxIiJ3=J}WZbG#xWdK-FhOeDrDAhRBGvo`B3yVz>&+I7fd=2jSe{qTDbG zUhe!5%R9cT++ZNm54pe6MY(?U%LMiqJzr_seL9KwX+#{c3l26%y1+;{Ol8YNd2xUL zP;dyltnu?SgyH`F$?8K2__aUr@dQ$aiSWb5p=Qmko|`@K>U9g93uiuj?apfpJ@Lw& zG2IV}7(tcM(-!j|ctpYw$hfn%VaBPR+(}=Y0__PwuNPcr4xq{VhSuNE5e+Ln7a1prDZfq_OeH4`^@g@zrKqFYGZ?_h-3JKq0vsi@%K#A2nuEZn z;qrE$F=Gs!9|q>hn6RS~u3!^o>F<|^o_1OMP#}Up7D4KHdFMbqpV5k!!_+G( zfv!J46yzt1a$QgFuObH9UR~q9bhxj-G5yBeL4uZ~V_i&}He0XTrfn&6Rl-~~xB1rY zo4fCued)@zG40z$X=icFA_0&w92yq`LPk$hEn^-W8WG61Y*R|zPSshWo+JQbo%GXQ zLV2SCHq2};2mB)=w5|w1EewSby2Hj1%kx#XhGEJtU;o*(rBxkBVoVGLu+3*PU8<6d z#0Qir4G_WzjY(93{83^ENC;ZZZ4_hxQ5l5%ayg@Fa=vQBW!q}nhlq#CIRa0ZV$5nYrq?J1VciGm&Lw;}jgq$TVnUJR=3_jWVb z=^psD#D!=_j|yUY9!F*Xjm0vX*S%^Zu_B-c0cAk!VC95Cw-6IW;8_>uM(`qVFXGBQ z3IYb~57AGUJv69h_LPbYycU+0@u7&94+-I5OT?=zNlK<)Cm)H$G$7%00uE`EWW;ow z`k4@#vUPPxjUx^gI8&45xxrcX;S!~j$H$dFJ`xEj7Oxx{6=~9T4d_ZnJwQTur{8xq zK8;^bLp4ZL5_*XNTsKi*-2;S{2e4>Ius(tKEI3oH3`H(d8nstsaux$II3xmw6{1T9 zb~b*j5ILgMW||gbAuwauB#WrIAy`@drJ=_wU_`FdQ%64pdXAWxYF;Bls18~<3Kr!M z)_)KRSfX=dghkKY6N(%o+JF{+ftPrY@~E9ce=Qp|18c#gGdEf+V4UJP;9TP#+c{@L zvZyg`Zj@)z2zZvk&@xU8;cbSPXx`=zQlS;R@R~yS{{xM3AOXatolL&SW(X1SDml#> z%qSr0)4(_gOOU#Px`@-303DA1AO;7=N7SCfl%i=&v{pC*@|cm4YC1OM7_o(Q0B|C2 zbr73ZD0rFz-Q5y3Pk#E*Hl&^E*4olPI?=DzvSqzj>ZRS%!>3l`jz)X|eFSQSaCj!S zi0@NKOo@1rS0RQ6DZz?mh)T*|hUk5YqDkb+<5JF5mU6ZvoGlCb51n_McS}DRyze{} zH=mLQQ4f#~XN;Gwu&0@y2=+6dm3&fYz=ZsiAF-6#028r>l}CF`dx699uVYVLZdR@` z;OfGzWC(&l6E$MMX@27uMP5;T)WE{1Yw%-05I%tA45(LL-&WF~%Jjj2`@P|d;GqYw zgHbkdG)CQ&vU`AfXu!KpMd30Am*x+Zk&o%lpmb%3^z>0YOCctSC}V?i4gumzJnYJOg(5yWHkYB(FjCN*O|CNF2=Ns7s4fxZXRETcaO zDC9(Z4hNuSjwWC?Y zXqi6&{-&X2@gNwWhL)_+U?`clWjQ<+ZAeI7?ERs|zGOiBY>Al?HD+~qKD1b`mrs|^)Xr<(v);BYY)g2% z;>BGF%jP8mK4(jfhP87?vm71^#UGa6DPJu6an(mvcVGC)xsT6%a_ASwe|kKz`}uh1 z^9kSSC5n|T;Wlr7q_Y}&H0jdvtmMhB8GU(ZDN0%D6PEfV1HESJxQ(0Bo42Reb)+|R zrW=|cIm->!hegF%1D;tU=X6~ko*tenzU8^;nKw{H6P4={MeDOB`fgVGxbxQ5n_K6b z-rI0{L!x?P!qu6z(0426F1^t<+ctOhR^QFOL`iGbM!|Nj%yZ-T?D4trTaz~@6Qylg z2L%@?xnabzR1fsE)p@;Yy6SN;-lS2d0cRw=bWSGbCM5y>vTY|}Afo%02<&b^`T@%j zd@FwlB|Nv{$7|k~>5dDUsOH~l{>C^2jP#9i#uqJaf2Fg*6j)%Hie!+Zy0-6t7&(I*$h%BW4Y`Xhlqd;OGh|r*~pU0 zrbDbHs@?yjVe9~v!b6b!o7P9wm0}9p|3a%wp^d6&i>RwuRHuv~a?nM!lW6N1dDE>I zM^RG7EP%t*ABbGdSpDM>(9Qw>m>^Ow`V7)o(pkC~Cg%V-V{q8{9bx-x(y1FYXR@Jx z)PG4}droc~xvbfWlQWb8PzCadRyj_&Wx%2w8|Wa+=9`15QS_FE|10Pt{|v$!NX-l?$@6 zZsG(Y{(Jm|345bH4-Cawt;taL&Ni$jhPn>|?D2EWFAP65Fz?^uWDp;gbeyq-#RR^w zyRY@IN-cv!q9Pd_eixpv4Tm|H)aPK5H$+sZEOhR}8}s1P&fwGZ1bmuh_{7PodIk(w zl}~{U;1i6GN+Zlrh*}ZUo+bwa)_34xz^WfE0Ic9#=@haCe2sz#W!gyeF5=1gPZIF5AUWpWr?n{H?K?eOvN}A!#1d-2^Rbb0d$K0-VJ5n>7V=p+Px+0rvuCq5db4v@$72V4^4x$g zTf^B)uRZ_d+@M*@<_3+&KW}an#Mg$r`Cw)9!T7{{Fv;@)(ghN}Cj2Mn@En^3R7vGW z3n`lge+dtp1-eycfr_$ModpJ(1h^)Hxv1N-AE1<1{1vx8FO!Zj}ij|s(-$$fhQAFBFC{S#bp_ra+8;B6Bd$41d^gMC$@3#DM z3-fmfKf-McoPP!n182k60O!JSv{C&t5x+@7{D>*nV#@eOg1u1%dt=lX zHOOGE>yg0zJ7|ss`{q2@FVrQuSwQ{IW`Q~nNFrdeIS*qhz?Pc`sz}P;BW{=uGzis~ zJTVi@#jBwH^^4ZKM?Vpgj+5VHb`UwC%nqvMvf1G-P-F2=5$gfP6yTtaK;}fexa0|f z=a<;R8SuoHvWl#Ud}c!U7V=pM;oHb(R}j8~-iip}JK>WNK7812+RNhlQVHXuH1+3_ zeM^Iw12lJX!g+lV&bz3ASe_2@QIK*U)GHXf&j{&?X5Pe`d5d5gR`O6Yg{+H(NjOj{ zBji#HeOAPOc3eGgLtL9AbHTSj;=(jcTj~`*!2#)Nhb&R*SS^m=5Q-o(t;BnJ=|!uw zW0mqz1Fe!XYpL^_rf0R&FUx~^%g(#d15Un`FNPG0ODM*krUZGfUC{-2MGo%a)+fW| zesLoetv4%vfZ z=>U{hqlR^?hBbnP)v{1e7Os!fUoxa3uUeG82AT^F$e=&1zr0WVT92>Kt*A0y8QkoD zGF*n6hE?)(7t-}$u+)h5u4Qd@4<9U$uZt%+|Hc@1RnxZ?J91y9_83kA#2{nif!Q$0 zJSrn{asy+TtGsZM1`0#+fC<)m!{cKlnM_AgObnP&AUM*-1VblSk zT3SzYe1~aml=}fzJ?!P>ZIgz}t?5xsq0J7j*@b-YP2KY3%EG#7&All;gxVE30fZ0XBDM7_^@X5?BdBaF$ zPc}al3>Eo{ehq*l{5lf+0gMQS%MVwo60*mK`L!t zDr{v~DwS52Qm|C|+<6O9>GDz;mVMFZeIY87YP{mdPF=L@+{K_!qzt-^JsI=33_}^q zxU!#@M2ZR3V#IIZkr$w6;`nsXk|*;^yF}&Su z8X0h*>c@qNx&>VaMswBN`UUIa!DPvfm?>>5iS12$8d9FNgr_Zb1e^M~T?^HVeA2x$ zW=`AOaa(n|yfIb2K2g3tcJxd3xoWXD>F$o1ACy+lom^PA7)h4yidoWTd&;~fVP2EA zyJucrFyGz&=|on?S-ijFwDO_LGPwdmPYgtQQN0_a;K+^8v6;3Illgr_rXPSp-JnE4 z6e?Q^(Gk@ZLXlJYpoiDxHcw#F5)x)VK96OFh0gdr{gi%L?xtnA7eJ>|hG4_0xtsG! zvP4w0yR1|z2}(2m7Hu3?{LrEmA@qvSLTFh-2ZSHkmVv3gN2GbhpfIBeWHbes%(U2$ z_ClW6OrAD}R{WnSgMSBy?IGl2JC@_*?q{GZ1w#|E%x#I3O_Gm*lE51BSmhNnX0{(- zqWBrjnCQiaW#T>55LVApc)$wR@tR8@I7KZn)|o^Ujv5FbDDpCD#l-~*^}<;$FT={3 z-1A2@LfzMGq*hS9NDQuazW6T>&wMNH@-1lKuoi(io}14raDs(>%D8&aLCbKe334tB zRS;P$v91ZLNJoE!G#GjS9YD%SzDs4EnQYi|2=E6HimADGP=p@d9_mlDo+K?B0obxP?%;w^;R)(e!;V^ ze#DS|g})bC!NiSu=tQOKrZjoyE?R}!1LD)amCwA+XWSX^h4`WDw~Vb_u&#w@yx~F! zhS=?IiI06C`Eqb9-srwkExCd+cD!UX!rb+_!H?+ngy|b;4GivaP>o zTmQh*vS3PjHe#78_bs$0%e!JnA3Dq9&c+AT8x}4mtGCUVA37`I&b1F}IuDzj(Le(^qJHYh7i1qjib_7qQ)GeLKj#4vd9?E<9+2 z;a2>H)wM47Axeah99P4=-KNKoiGPFdpgCw?$VMTf8w-soWG7*TjP8;!A(NdlHuxce zCtIJ<=PEUOhWdH~k^s@U5B!$XST@HFK*U1o>y&+M!oD_TZ%x=+7u*Z{XZEf~Iz*9> z`XQ=7u}m-ZD_Ruc_GJ{K9+6mgjlr{=V$7Y$Dh(H_(TS8|#jhY0mp}8=of2cN%iXA) zbmBy42M>w99(*G)l?1lr6=e7#i*Oha*b&QtL!QlFPgI9fUlSK$G))i8`0q z03gtcIJ;+N@SVVYTSL06GF8@;C~HcUtxJ@xTR5C7>mqTNHS@-J>yD(eJ8tfldiWI8 zp%_kK3hQ5?*~`1M5V}%OQK62Vf`%-Ph6@tvg*qLSnT#-Ta-o0A9@Q5*gqgxBK4rk4 zk=IR`hPWv+{FYTpDL{V}LUg?T5)O`MG~yRgGr**9jSC<{UOg=&dFw*`GfW-4;>W9u zW>Gt%3I6peDGQZnQhUf6wHE4~sQEG{ZbXhmU#$4?=E7-ysO2rt0k9St!w8X1?Dv6H z*?_Iu*00;!Hb#YQ$=_NP>N};ath{oi9=WGN-(S^4S7{mTlBaCJ(^1Q{HHF*G+tFXe zt9)}%J*O-)nzuJbh-zZL;VQ+Kd#;kcNI^Z%s$tY{?afH7l3&yoQJKcWq~E&Yr{pT0 zetNB-`l!|b`vt?(dMPg_?~3B^n)kIp>q*5@sZ-RZ_@<0OZPbQx3&JU1%=#9GH-$#N z5F2Xsc}uhC?Jrizsn9G^$t0MQ(M;KaM;wtxrPT^lO%-9eXi`FRPcR5dls3MG#bC-g z<%&AR&C#OamRu~w7j@=AvEf?%(|a=NL;pVp+^jy>t zW-EHI6j-oim6fX;QVlBo3T$499%{=$wc;yuB*a&+ak4}$;##EYP~zsEQJ2yOn8|jm z28CnU)mV1K=**>8d{LyvR?r+ZM7q?lA|+MSbX6m2F^e4U%WT6bcho(+MTwbvqOJ0r zL~P?*dK^Z(FF=1Q>c-(iGaALRJ@TZLjj?kRQ`mkfs7GC%+Sn*M5YNMh@+zd zpRqurQu2!b5mnFVM?!u+W0aWZ;E1F(+$s$s|>XxL!h9-r{;_=|6VCYH^ zDo&Cxqj$1|sUav)*qO>?wel)>Nvk9TS#%{q_$wl>+lM;02ixVU_^P4qMfCA;6wIW@ zGbVcP9~#UUn6fKOU`Q$sP%xYrgXIi-H7<3T+A?+8r7h3JeM1j0+t# zG};f9SA2yn76Fz?Bq>5BxqUtq8eyVl{j$D8sl>KnH2VuwG(msH0p$y_*3!>3Xfigb zvsjHYp1c=qJ!t$$fhAJ}IX0-Ul1f`nG>;9TLCQsk4rXRpGB#3kQY87T(3TaT91_6b z7b%i{%&bb7+3|pd9cK7N4mwQr(=%-VA|Yiy^sRn(X$YD^WiCW=}YP9%%A zeeSGCyF51>vyPN&ZNjy7{-yh_4J2aZxjr>Lm2$34I4R7z;d58n!_ul7r)Ez{45tN8 zvUFqYP#XFMZ%)5CHv|n5%E&frOMBKYoc-|CJFhN0e|K-Z^hCO}^2W*8lMgD|vnH;% z<}s%)E@3Knxe`)NU&85Ic=?`l%L7;G%()w{&%S=&)tK(slIl2|=s2A0I2v~yow3X{ z-CB2ZUBcCT$DJ;&m{~J__PtkczZ&0sGSPH0UA2ZjE>tF}HqDqmcU64ZvH8QvJCk>t zezNZ4b)Q^LcJ#zuJ$ZR7xF0&J;?9N#?%KJ)yIbDtzTJJ_-Tt7V<-NAsZ3{0iUQRab znK_Z(uzlv(oN(*X%}WqDf3RT_>GVFRsJ&&qX`SD`@KUm3%VKy*r)~F;M7o)4Y(|>; z=J%>^S1%e8^;>3&vPU$Wv+T*K%) z3w3uj319c!!^ye>Gq!Yn$D$@tziClO)bB*4z=ABfzI%Fi%H~bjyeV5#!qyaT-ujts zTe_+)cH)8EHRHKaJ6n6-z9x;@tH2-+)vNcM+f|@kpQu>Ba4uP~dB%`-SKQb+yK{ah z;qFKSUQW!ONJAj~(1$1PoLJZ!?>-r?IF&~4*>Bn()NBGklz9OVWgfupn$`uwhqgPm zMBQepZhjX+cjfx2=~F4YH(~dJZHksQwx~UFHraRp;jxo*&C9B-cFo9V_H|$8H3*F_ zTk~6-#O#FXjMF{0;~uzN^0@adZcR3T*EP5HUpcb|M1l5)s~UYWeIo6sh&#MgmlM+` z;u!bK_w9QgN{2>ODNl34)12~jBs?AQjr$Xx1F<8Y+e*^q)zW#t+At@JIm6Q zwW-SXL}mNJ&AqwgG`p-Z zJ;_Tst~;llbH@8PU9#23!9p%=TR0eZcgF3V58dUl6A~Nbe<4I=?7tH3he-uuCMiGS zqcP^vet1YlYc(;pr=2}1R0~sU_)6o&5~_o?JS~tg&84t|s1D-a!&%M_iX&vQ{pqN2 z0DgLEf}HulNnCyzblwod2o>bB?5n zIFuNLOU%UtbLNMI<9zKF>lv#f`t{3PrMyBL29^0VT%bR&G0_$5Wi=Iu%Yx&;L-rBo zB20g!>UXfMpVDc0&qC(|ygAo@!GBt%H3hbrg_uvgh4tRQ`)Bvw*DcS$%JY7MS{LZ~ zpoX_X2Gz(*Y%WdkP5A9B=d!3))C9xGzYtr{k=Jt`q$y%)idTu9&sZp&pDSv_I2PxR zW3X$LwiS@i5ot44sGcQx^|VDu0GR!Fw-Wwc&5ZVKPgECCnRbxQmA5p5WQd}4vQyf` zj6=D5MAGI48S7Mo-3yzS1;(rEO};6e+ua{`10xA$eP) zZEBs=`obBz`jPfOHfbxw;z0%jL2UPvv8Y>%$?g@KsW7$#p!b>C0jBC73XVV#9?Iit z8mKC>IN}e`_{ps-OR4_M7!+&-oQEE(xb??h-EI=4{0hFv461_OI1_Y(mx zhDKncNgRh!32ZcACuaH1PA*6?azu7)80MyI!~QGYfv+?JlT}bw8-ei~C|c*lY^2&u zmJLa=Y9mnBCd-yyNG`#)rd`@2{U_93{LgT(#~T|%&BUM63sml4kP`rwfv6TM}aVOiJvCQRd ztNxyrxc>@=DfM|OV%Bt#E2eu`R8oinJ9p37m3FzAvg%f{7LtMrW%b5X_0~l7)>QSL zMD?D#;ZF`GtB>7x9apL9{~c6yaXArosp95DakI3`hwM!6cgCH~adWdojuF3GG6G6FTuE{2GXf?jCN^QysRd@#J~JL@ zk10#;)P6X>rgHu{xy=ijDQi^sRvTEBh3FW=GxAYaYNeK7Y#XB%n0C_QXw2}|I^Lwd zS%+2nC)dnpC7rFW+CThNdzMe#*#7t}NL zGpMIV&gTl}vrcv#A+v0-6hcNPBs(LrT@sv|GxC5LDugMe%P@t;w~PM+*^2)sIV3J3 zi>xisyO*5*l^kL|`bzS|PqGwBTbqpG02wXG7;$b7d(+|#`arxq@mK6Ccygm*$ri=` zO`){s$&`{^>ofjA;n?6lRhK!VI~C$H`hzfgmC>K}55fHL^W%}R@rbWTV%V*Q&cxqQ z#)QI{{AR{N5)O=YCVRfd_eFAORSpw^TgE|?r7{u-f2LH1%3UnNtPB68w0wHF z(u$P3G2w1Zxi=@=n`7ojP|I0!`)ay;O{%;lQ4Vt_3xQ<$CV5A`=2qR!Iu=y92|M!A z+L+~mul>X7JJpLXCw+V3t$Sk@?DXTdI_%CRF^{%i#y}Bd+*zy`%<#l@lMmNwwrD9uPhpqRom`X zezN~l{il4=c_yYu&0)8ruH{zfW+++L@mtQ|*fVRL(aoHFWaLU4<^v07|LsV+v?lE; zr9~{|YDl;mz|Y!!d-tMyQAjrK`pmWakqxOHqgyId?hOg|h6M<o|?PBIDfk4p|jVzN&Esk`fl z(WfMLb^BLh=$jQ7+@irBQ?QES+Y*Y>@SOcuk=hpyrqrdiXR z4(3AMxcNrB0{r3iSp&YH#x=FKx^H&R2X5}oQe4#1Y9rGiX|v_JY1)KIbY`ypR?E$n z`Fh6nJ#)KbvGd2_?s>V=37FX!`HB7Ehv}{Dj9oC%GJc6~Dj`=Xzj_Fw3_v2$99lIO&sE57APm`>t zp(AVDU}#Bu>asd|c0vaiPsIpK@eR+cXHGX;Jr{@?db=i)$#7n84q?5@;I*Zkg%H;L*ckPhHa{pn@jQa3z>wHisMQ7{w|i-0X{ z2&VU$CQLqarkHH~oQaG^4k}_3AEDd4@ zi47{2XF5Rg4#Ntem6jo9buG^*9_$v8m0Xw+lg;9>6F1q0sg@6kYEy2_q^U zD{YdGto; zdl#BN+;C?@vT1v&X>X!w?|tWUF+KKbsnX^|X>+o)HKu>t0)BnW#(=8_GPtWQ6VwvX zjvkSaHIcv)L=s6W;vOi;IYqUg1>$?K|D=WeCo|_Lj%@|T)$0tUG_CPiDEqMPPTgbj zN_kN7Wl*j3=TZ<^t%Pb`cTr21Xz&KQK%)>`ucFy!Dx_VeYC_T#99DJ(N9oB>XbhAe zF&jO!jTQw3Af@t?8R*_;knY+-@>3tE8@Dt08#lX>ckYSJtu^Qy%kd1}~JpBjvAQVAf@ zP3R;|U9tmo$xL6|=B0_EH+0cN!9!jCsz0i}EBqw*aWLL_ zGT}Rg6Fx(iG<7JeWm89ih9$x?E2oa6=Kkyj0at~Xv1nMZK+sho)(N^Qr0Ae?868>23?Cu;3$g_fW`R;1@SF; zS>{)nYV2(p7h&a?Y;00oyvP}ml|MBLdbuL{$0*9xQRvj74zK6s+QLSRRkMCKMcTz2 z=H1QQJruBqc@@113Xx@p3fEAoUx-Hoye(mLk)QQISl&ypP#lQ{FOU!S8b~)eu@~^A zQNt+}1aOf6N#j7PTHpaho7y`&+cz@!$`}~LJ`E$QgvNhm^Jtah5W?9jemRqMg^sGG zv`@#$3Q+-hcy8FXB5SFRq{WEnHZ5>e9wcj z>bZldn)QjA^{JXoiJDERnr(@iZONJ)$+GT8CVh!DW`v3iM72OY&kZi@Ta4Uy?uwgt zJ(~t#oGkfDu6QU&FG*w#FT|_l<7Y&jPx^m1OXLhQ4rO$5r0c< z2tC1R2;#Xy5T8?vDg@^W+#ZB3%oVp-h(_Gew znz#3nzzI?j&vV5Otp5N>Ugy=#kXH}ais*P%>#;RIO`&Z=PTxgMQv>FEfrEpnp-_6I z2XRPnrf|C4I)XR?c5qE}tFkvl)!sVNpb4 zppZ-eT@4hJi?q_BimgA^aS(rC)8IZFutVtyd`rZeYCc~Q36PjAbe%%jJJ16m1?e6q z`SKqoED-kYC&WQpT6Vn=jNn6%`U;WrB$j}U+6d$us3sBb&>#z=OLKBJ8_9Z@YRhN? zfW$2G0@b2Bc$oaa#n1={5SWu6LnA@6Nz9;QQW1QJu2PV$R-)XLyF?*cA+eDL^3dHt zu1}~L1BYR5MHpb6CEXjuZYv@q^k|7Pc!&roj9dp{JCfhCXrg}vR~vbv-10 zL7bZ~Mt2`^$*`$Vs8q;ifTsmv4y8Yc{0)0srH3M*?)Q>-w0xJ4RFzz@bp61}FqATg zu_hqc@WeMC-Sx%VNh0cFIQ^0cVcEtIyS0cqc*Kv>EC#7cKgzcC_w3mtL9w&}Qm&Ia zwBp7viiV4Jyt}=5Us@$Y`}B0VZC?rCZEqcHPw>KjqY7&1>MOE?kL)^tyG3jiu7u0CpH58v;jZ?Ey!C9X!R*? zN^ywQ%Az4QO2jM81E248)^Ak%)yu=(9=SzzHv_9Dsvu|n%yOwjR^(xfGVX4}Om8GLzQ+ptNO(&0NYW|v}& zkDdo4$yWX8E8XrT%@F!7SLX_F1*?)&4&|gEt-QQ|f|Q&F24s-OXC)?`)bid|APnTp znvDw_7}~_7W|s=l=pqWkp#myKJ2vlWb`vdQ1YjJ&B4A0|fb|9j1B)z z^zeE4PBhlNz*yr!S}R!nfof!MMr2$z2b~-2-U*2iEXc2_@h`%<${jN3MQPd+7_z+N zjHp&jcni16v1?0|0+h@NQA4B)S7xweJpqu5>JKz1*M+~OW;hB-_&Suj$*%Y{&D$`T zEG>v{+sGUMErioreF4 ze22-QEv5K-a(+$@HB)5A^)Hd{WpZADgDnnCos15g5w`IKJG=!Q#VBgAm3+jKhX#@L*D_CaF)de3yv+~&{hUI=Yj>L1#iq}V{ZG0La=b}!6d zT;DsrH*Rar5B-g^3OjU++x)is<-3w4yJ81^0l0amsEhNoc8Sz=^2xE4xnCRPVAP$i>IeHO4vO|XKfFC<4K zu-Gya)kbzfpBaIMfvN@i@h zgC(LU(#dA^)L6?8AgCUb<;zD%wWIeXP4@=GfZVB(E3d^dn=M^~)3*EO%Cx7Py;j%c zZV423pcc!RQY!P2(9R9q&6{^1RPYXl!tAK1rb@js5F5o~koZDhOlhZdv}NWsmpQ28 z+M%scSiT?3MrCu$B*hHaW|F!50`r39)EPAvk{MK(T^BSY&Bex!#*_WdaC&HstPE@9 za^}s}!d||Hdxd*@;0kwD_X>AK)3_qO5{|hhS zcWBs*;mX~N^&H)CDv2sfP=O1`NcBd(dx+vn*xt&3wx6km+9bcEGHS#D1TG2{cOmK% z(#x45wp^X}2k4e3K0H~w0(zEz{=W!@{sw&n7}7c{^$*&&%JN9K;_$@H6AR68S0~iu zI*NV^1*T02SKEwcrhD#909$+m+xq3ASk zLad6q`O;MVCTOtTE8mp%w!Bw#yC~`17+=$wsOZG^>iXEhADqZmBJ*r1SL%6K<)wf> zJa%w3%~&eR>OZfb^`Wf(|G^3(#r}#hv%b4wznS}}Y~K#;PmM+J{l?=!j~{wnNq z(o!NLLk9ON82K68I|%Yio?zk0nnK{LeElba=08Q|q-^F+IlZ6)<`1UUZceP-ymP*0Be^O^cg*p?`7TiE>J&O1Brx)bYmCChi;bL}Qo!#x0FS82-GkZ?A<+ch5{DZ6B2S2A}T z;Byo_)@3KUz&f00Acy1`B(jmvz9h27y6!lAU2(v>g~G`Bg4+Bh5)gA&59Y4jXn-BL z@*Bgm!}G=OmESHW39iMih1x{@wuEPUR!85D9{W4%FRk%2=YHvA0ZifyAF{3@L;XC= z*5R@6!iVSXoLf9_=hY>8&3cW7E%PvlhsVOc4-eltyx4W;#AAAuxWiPN3~}-WT*{g; z%iN)`wD_5%3q`}r3?h=2Pb2=8{xhbHv?qW8C1SH8tChcesrN!Ej?k@>Q(+B4u4H1S zkW{>~PSAHuCl3$fPWfzDB^Mfmx102NYeZBJRxoT)BfdI`DHiUsH%8Resu0~5QQ5{h zpKKr6lndd_5tUiYTXOzEGueEfGU84vBi2(JZ&wacrc4pAWu@OLz2?ZVkcT}=+}u-H zc~?nYl$V+yaK-N#shxSL3owMAk=m7)x@JYeczs6d;=I&#-#B$iUTW_*POWO5UDbpk zmy(xP!;^Wf((|feoG0>F`(z$6WR&HVMElPbKLu*!*q*%Dtt+D9Rf(M!tL@2Ha$ewCff?>%7dv3o;j6Noa zf$b&O`U5g$z&3mmcOLm+TM1Jy5?epy^)qHHvGJ4@i|sLUbzjf+sPa1srfsKEtq54E z${v}RbLVk z>X=j*?RXipZdAJeo9(_8hUc=Q0NSlnNfO_65Y++CoC!gps_YObzmjy)pfXOO%n5F* zln{N5_{=X|I-V1sDllYQ+B=or=|!>u#kRU)upSKC5y)Fts_qVh6Qvf?DUJ%8N>1U4 zV8nk_(o_X}VHl8n%zuI1C5$nR2!5Ub=)6Gv3ClKgdLvh|o1O5`)!;-Hb+fLdmkmsy zS-QTS1DgfvURX`x{a3w|+hkNx%rs4ioN?_&9Q@G9^g`@=$al(JRbCbU!BkkaTOkJm5GAlOp>^q*I)3iBp86 z^0n(YXY+;t#NhQWJM*AE!?c5)CI1C@lnsV@@{xBXH>-QA5<_B2(b$cSMZkBLtUHZN zNabg&KqI&t9(4|9xUV$pdk%}IfNz;nRmLQr+DhW+ItAV0NxLy3^p=Q?yqYXURFfy) zqe|B*OV-m!VPerRiy%-W1P!n0%xH0wuWkZ{q4ZD$hnQ?ehY83wCm93mbO<6OYSfC0 zFQN&{7*|Y8hm1x|)=8&XGWN`I<&hnI--cF(iBzE-n}?Ys>UviC>8pb1o z8@Bs2hka|smkG4?lJnmvCdp?pZ6)avQPU}?*dvLw=VZ!QB;h9#3nNpq|K#%rPV}GY z-S=WI+!v4a9Lcz(utPlum5{P?`(8Y@Z~w_d%Okqg;Jmn{2cAE5>QE2mmX~LV5}FsY z?BuZ?mSgWBmf-Y@hYlZmIpb!*N_;uchN_+FXB9h>ah#-@o>pF6J%?VBvO4s_*+V@C z4rR(t96EHmzxTy`#}Iy`U;Zw3P#66jwVidQ9(--sj^lw0!4W@A-Jz!gTROA3$}YPW zac(7TzuCcyNIP_&OFTjOK#^Qx_(~JxdAw$d)M?LjD#bpE^C~$cmL(F^CLJdcA2?$q zmIve{nULcceJh0%roACUHhB&^0m?X*O)_x`nHXqd-2`tyItxMtyS7|A{;;Z^jBU-2 zEbfQ8VybF)qH6cuK(cE8Z?TQv0mEaJEvd>4iOLPh%8ppkZ=AKTZuD^T_L%iAcF)%( z-5c+jJF^bNeC*=PO$)~prmeV6I%d7^-k30VKEjpSy_$E5Z&lu`e7EZZ-Td}M<$BVJ z>ec+HOM3piRC?Zj@f@j1^=hCBSyVRj(%i)bebTYv+TjN!wP~~Sx^3DPFKzvxHPv<~ z(RL_lKCA{de_&3v?n|`pOPcqqf$KhaIkn+LV#A4~`J@`?`(S%&-I2t)BT4g7HL&f2 zqp9`B66=p8&BxWif(5Nhn%Cbm_x#A5+SrrW*rP`FCCzR3%*Q{tm})BOefN%IT104Fw_ z1jF843PT8w*SOrqYbPG9<;>35l{w3OQ$xCI8(oS+X2#;R9SQTs&rLFfj?(L|O~3Xp-$*$c5{`!XZSU>8y>nsm?lxH1N;(c+J4{#jI$>oj<@6@N z67wXTI3{=it96%dgl0qYmr~8U63x5ro=Y|#OnMG6(N;((7S+rho+)4q5SMrR+4rz7GY9y>WZ zjCSb_PO_n8FaC|W2E-LI;(Mo7jzSxHd@KxoXm;6`4H*0Wjemg0GmQQU&5Tk!^t>$UpalK|G?2h2Tl-5ES4%k zwo#ZXhj+;s6{; z`V}i4Q(YA|QTSDILgZ+uofG6^?884H-}lKOHmHQ`nbwq(;(5pc515^G$ojW>dgUoH z9U(K8V#d6Gh-j)~&r4dd7wH2bm5iROTZ&fl+DD+hL<$bjUJ8rll*@7!MyvO zFSxodIPVwSnuj|5_xFBx@2~X@U+8PTAh+(Z-e4%6d-2w*H(!0s!TY$#U~u73fnHqD za;#f(>!q77#hbRpcbtkhol4a9#PwBKtFcuZ=Za@KZ)}_0HrF+;o78+PyFI+!6eRk$p+)7+)}k+u|FubYO-EWJD| zuedQeJ2~Gt`<<+T0>ET1!PU&nYvzn5szF+B`2LZ%j>HbkxM%z~F3et#)sfvdLkr*f z@XDPlNBM!2kO8^?UIGE{QVo+Ce4;dsMVJ2Y0WDd z&3;YVQFOg;x-Y9^Zx4%{*N3Nv=iJkwtbv7~LbB@gnc0r4NeVM_h<9%K+{}Tw;#*}m z%Vv%z98lJkK3bPoJ8ibb&dk)`Xqjz+GBa5bICHaOq4UFSceX*9x%;DTXch1Md71i2w@%%A?peR{?dLmxmXnhu;q%d-t!`_(B1wNuKlD$5mY6)WP?BDe zWT{b-ZL+=7)@b8zd!wDd9gPnDb~ZY-Zx_BDo$juT#ta+1>#hmta&gz=oIGfXXoh4m!8s~62AL+S`b2(jr^t{G-oGwIqe&c*j7a_f%aRH}` zkzUxikkhk}UevhACMm9t2lb&cztvhEgT;-dX#4EWvaa&Ra(=I*v!ZKB;}TBKLAxp& zD>*&4v#P7QvDzltrJa&I?*&PouatHiFiX@^7abzixXeygnv##+*hA-Agx zZ``96v}MUlUvM?9$9VnC|03gc_r32nXIM|ApA{NiF*9u*c^Ss#KDlPb+4*evp_Znv z`!nAKBrgXf*U6=F0Fa%7-z)I@en9$6kn8F=q4&=G21MUxE#g_9nO9HYZd^~B-?uM` zN6w)^=UTLOC0hG{GN0k9R$e8qR@TaE@V^%S>rg|wHM!1sKU-e^g6pDIdECh9H1Oa~9;aW*G)|jP=UvaEyjj_WKCA`QK42NQ-Ij5B5N+HuV;k!Y zT>6mZoh^80FX2+m;(y~YPS-MHG~}&l#Ws1nyn|aa6YQshEu#z`(JXl<*4{p4o>uq& z#h9s7-o+(TEnftym&v=^vgJLNaoR6xlKI1L>81o!j_YfnW!jQWT2)0Ui1PATUj`LN|_ zqcT^Xl$$Mgo{~SF5kIe0o(9Jy=thudd~KUsZb54g^E+ucAnuV-}hK z5|E?y`M+!MvsP9xCo|KaHngREh8$~|N*%fF)6fi0)55L7B^tCZPwueHWi!VA?-(aP zfilxU+&VxlQ#1J}THUFQVwT*6Q4E@MCI7t~20u)6I0CrnM!si|R%d9bNsDvksHHtE zmJ&ZIMcG4qQ2>5TAEjkfeL z~Mx`!n?{JwC3bo?0Y>^l(Jf7)Mv?3i=c?0-@5)*Xz7-jZ~4fA^f^y`9bPS=!%!hqHNa`f;!4|AJ-y z`x!&U4GeW}XW;WdPa1gvF#A@@=xZFQmZs!jzrJdq-p1Mcvyksf)`7hkgA6ZI!f!q1Q zJ!DlHVa($FT2eb(dOSnn@@)%`S+DGFWF#;IEm{YC|$Vzp|S_pKT;mY zb)E8SxNcG!aINO+zgG4k{jQRY>t(+Fv2qycqso)G{u`wo*FRD2$Mt_xj^O&Iiu#fb z_54@~;@7`b+HieOIfU!KQyOuNa1H-nIfnF~DO+&;-<55+{<+eR>wi!l#q~cbkKvk7 zzJ%+T@)WLDl;?0ASH6PlRpmikcPM=?*}h9P{agv-_g^T-alNK|8P^Hrd0gLDI&n=Z z`*HnGN-nO~l@470vl7GgFO|Kx{*@BK^@h@d>o1gtas4k!J+6PPJb>#5N;9tihoVqT zN~^M4`KtV1&pWhFmvvj2D} zcEle$qWGJet8Ga~u%#7WuGS;LP#B4fb~Vz|-O`JsTZy&? zyOp<)+80!h_H^T(CmLysHAQ3UFUhEh8#%#fZ@9JTSWpcG!!g{*3iiYzO~DY_VE#Ie z-*4HH+58NTJ3~>*TeySUTCcYEbSdH3c2$kgOPL45veFg`D>CId66@-W2HTXTj%Xy@ zB=>Z6M{zs5I~a{NwMN1*b1 zb~ZiJ6NxFv?8c8!AEmt8Q%dn}M*&-niZaY(QA02+w?s}TvgM6d9TC&FW*wF$OYq|r zNs(axm&o?7INI#89c#kb>!@}nGj;`|yAJHzn{=y6tVa#EY9?c&EHYqEI=PTu=`Gv- zw{S^1qe^F6l(PD7?OSm$idkRL9SMh4bVgJq+!tAXTxnSmZB;|vu@#-6mKEK-u_KZ2 z>Ok$P6;aI3^6p^k(O|n0UC|K=cLZ0h&>$z!-JA3@HPN^?HTC6bO$+FEDo|h4h0B06 zk)1b*1OUlJZ-j$gN>fuZtEs6gBKLGsI=cx29PHGdH~=_m6<$!w=~7LXO1k*<3*C}D>E$&@aj5|-r0>Lzh)Rpm zAB_5g{_aRL)~!Zbm1q>V0gC>*ww`cnU2|9PsL~XS#ng5shPBfi@B`3}DQYb0$EbzE z?a?ehKCy_uGjd!}TZ2?$SoRBmiTWd0<*Gl{+pVCQ=<-lBQ0-1;g`%NwG!_iED(Z5y zHED|_op?2-*3vH*7xk7+U4>r)ka#|l-cWlOFw{h~sQ2MvfHEw_WkCAaEqMxtE6x{Q z%~){Vmv{Eq(6N_;BgL=Jdv)Gx3&wqw2~Xt>Z{EOOp0lLavLw}cC?J_hoeZ_~#FV7h zG8)MYtodM1XROtUT>2+v3cn_O&HgpV*IX%6Y15g&7vVZ%PHTs?6sVZYHk zf14WV@&|d=2oV7rM_M|R)|iQuRV)(BTpPb`8K{8Yzb%4^52~2sPMRcHpZs7efsR=V zzi!kS#hbf<659a^-9dsKP=@Yc>N6%s&lRB%%4|onV7xsobzTTGT+RWvS%l}rSBIm z9Ept=mQ&WkK`$>8^s1z(TUF3rfdqJcG>PV~MWsnceYh9hq;9GA(}g-Ex=Jlmx8lNm zYzC?KKPdX>o6;|JCvvT)oOJmItmRo!PQ~bxGSxr)x`zh3-m@l6TIH*3GQ z_KmfFPf7lLvqZ|Cm2ehwgIkT+L_svP^n22Y`QkYT9*J%8M(!^k=N8J`n5`kgPjvCs`{-I1l| zHNRzt<$1PwUr$+{rg@t+s!kvZHxPwGb^=kj;;shNZR7fnOVzI6TNsMFz#6TQuCAaz zN&o;JPONrwRcojOEBWrw2(Rj?n1o13S}dXjTaTEC#l$3B3WH(_HeuwK29t3117JCs zDr@u!`C57z%?Wyi-v%ZP5nd&ZkT4;*IW^ciZ3skRz*AiM_7g!cy8?9@qg3ZFrF3l# zU00RXXg>p?a9B}m11rUS@pDyRB{C?nR)P3#*=iVpOh;J& zl5Tp^6jHY!x4<)mQv~wNM2ff%MxcUaBdpU`%?PFoR6AthUDBb?5VA*OxDfixFCKQE zFC01e+T5|cvO(7eiKFAgA?hM7$?P!on_*LD3OVYWQhBxpu zD$+hWpR9Ug1XcV2x1cSfFx~sARWhYGcc*>s8HpGoUg*C$C1DA?YNXbviSAtSF6u2d)YBu|FZi+?O0yT72l48XUC1~yuoz?`#$~1 zCFSk3@t|KQuP<=+6~_Vx!=Xs{DX`i#eocfroH7eEmP|EYL?VS=!tYyO{%X02Qqr@u z;F2_1=60jqFPWnqGo%-j!_vne?5?A4>-I1NlUBt~BB`IX0FXaG5Dpvxu09^>?DRu~ zX#pGD>z5-v#0?8o0kAaG0QemZ2rt8_ zWy8u#OUJzn63zvJYtf(#Wk`|}|2+Qx1&P%0pU$sD=bA|0%D<+Q6!rOtS|QxvWv8q& zgTK(`w;Z)zU+dD~wADcC0IxvldWTn#{Zl++!5IT#DF z@JVthM1-LK;A4APQ1C+{eFnmGFGN;My8qyT9m_XpWOqw28fx_)SA*S9BSAPJ5nLBv zp*?|$ApkZZssvc4((FHe1oDt36=eZaYJzMH)uBnfDX-y&5^jyiN;9`D=$Au~mXH~g zNhPq-+EGVbQkP%}>ipZNFW_mo(ty8St3|+Riz4pJC`*Ox)!B<2+!kuj)bfb|X>P7M zs`S=~(yN=BF)ATw(-`VeT1SNRQY_0G#fb3|Qo7c}$1Pnqx?Q@W)Q<%ej>NP^1+c;n zJOZ{)g`gkx$5aI}CFO!(&!v}EtlClPSDxt!fti9*3kyyc=mP%TZT{X!k3X!SJ=}TO zAMFfAk0{X^);B;Qz=c5d2g#x{*s4^aZ16=?DD_O}d$bk@0)A=)a8^*36}hg?zbdev z-@j#Bl7hGhsjtTWBrVE^BpZ{E!{r)}W9zqDmI~BeZyU($HGrq(nLYK{w;kWKy<)RT zXO=jnUdIm{$8FWl15ow2fd`tNiQckp+OLut4YHCwurg^onzS8@(gMarGJ?OAxv^ad zD<`_u&3%i2KMZg(`4J<-_wgR%lD{E_>(yXq}ZWL1nl z`eyH?{CCz|t$Z-Cr2eXB%ZCnR{4`3awemd_*^M1SlECrY!*9~v(*$qP*KBPWQJbd6|>cXUC&vxIG>@GLs z#iU08d^NSkPN?%yW6~B)IwGBN(h*jULp6+b9&5FdeuIJ741@{>!Z`qyCOA@wn4GDf zXuu?4CZSKqN?7vQFKVdTa?hdP0~bt#jSrBi!D7UrP}PxWw8V1XVcu7*_pu?%$e(SJ zN3)GUwO$LcG?)}-ZLH%V8Y5Zqn(a4De{xCIl&q$WpJixtU=J zs0R&T!T?$j22!J!xQW~oGn=)`qzu#BR43#>;H+q*2b>BK4PY$RV~a;X3jUKP{iVAU z=+FF*N7PQa)I@`Pmr&u(NJMVwRZ6S<{ry}wy+@zroBi4|@p5XZLHeleM=V7KsW`bZ zas*#B{#EG;6i>xfyw6qs@}KZwhKMw_WFpa+9+p%xv_7j(0m@Y7n22u%3rvemJxZ5O zx^&Scj0>}&+zFut$^vfD3yI?S4=K;{xPbiyX2}`opU5j9JW+VfyYPy4;dNiZaP8@1 zXP+H<_I>*=tAMc3jwc(Q~O{+_xd&*#P}-X5O%4xbdpTf8AR!ym}<-s<-TV-s}$`_+A7mE|KYIG1LE8;)_SyS}?tA%(k=B(@SN`E^0WTgPu?M=nN05+!tu7bAM2fabgd8h-o2xb^u72Mlk8(ThM;f z7+RT64Q`u=O)`D5Ps*H zOl>@8RY_YrL0L}Fr5cwMGEPLS4F8jF<08nog*d0Pkl1=Hs*lgZ1q0z~Q+UdDdn?Lz z$UrAC&EK@YV*jek1tz1{wq82pVz$5$d>EXpjxxi7J%m-$9{~r$xMUg=$6618HM_vR zk~kw)baV5GI6o9fiLoNgSj6DrQGg#+fmwpK=tQg19rK5XMLfZ|dG&$^7Pd+-ZGPBb zV_?yU2cY%<%jxPatvZ&V1m8tZ!G5>(bW)kb$$@nt^8mHMu;v1C85g4#6?`5M1Fja8 zg-8cRC^$&imO8hG?0C%2gU2Lu5X7{0u*zM;$#(|B?L9E}p?q+eFoX+(5^c>wk|He)l3H%+W1 z%)%h0K8yGMGybESabYI(AIp6U5Q?EXC)mwc%cXpzremr+e z!n5UuujuT_p_8ZkuQ}&man8RLrQPPI>a*&LY?rfb&^}zwaU^A)LGf|Amf&Z?uMSST+QjoEjS=KHxk3zO!WZrf39 zXXeC+aPbG*0;YXTwdQj^lZldTaVLok-!>R0U=2q)**IoM!e&W$(_y*qx~O3u+;@K4 zuo^(zXm?7otAi$U$|r8r+wYFs)r`1Xb;+){oA4^`NF6lpQ$EmY5vkx$+^yG%+-?vi zckpk4x3-d$N48sk!_IwsS3Cg~i=m0tW!DzaDPDVo3m9O8luk=UTYg}*g5h3X8{o`h z@ZKObI!`ZgY(Oq;!B8g&uJ8b%wS9<;-?3#0i^z~tU)pq zCA9?=9D;-U#()CW&{qYlB@Pdh{Ko}oSqi1_lRQf}ayRi&TV zhWaR@{#JlPRH3<^GQ4CI1V%IFmf!&R2z)p2y$&5bOdulkTO%$y-2sEF_pB!j#hk|Y z3vQnEC<>?*(V{jOJar9=i6-F}6mDmA01#zhwJ{+NDZLtOG03rfnKc`ly;=--Uu6T~ zn`uuOnlVdk=8R%OZ`msQ?3+q&+3@GD_6qFD>Uvt3$;>9M1#E269aVyA>yc!Z3C~G4 zX{5rk;Es>r1@#%a5N3lmpZVkgy73%cSQ>YLrm!fUw5!LWBtvQdX0ps0AgO2Y@PFbz zO4@R;%p0W~-@x`8vu3~2ey;tc&__~+>%O5Zcn%z#@a7F}I=^SM=k3td`5Pv(i$3rc zUGvTx^UfRDI_~u+yfxPg<|h{IcsKg4@?LFX!M^c={fX@TH#|9KvxlT zej~$oEo1JLjJely3Wv9xZp0mL&cN>JOdlb7M)qHTyMA(OusakBlD8BP3zJ~0kO_!k z3!ZA|%na7MhP)Ysr;1=cOrDkjOXtk9;CH6gFpa;>0SUD{K8p^m0&0)W=Gpn!BSGq5 z9)0ncck#HlEa5EUVd%@LdTRO8(W;YAKeh4jvg%fi9N;YpyK%KqNgx3mUt02KDuvVP zE=)ayq3XS;)nPG=EE9$iwK5Lv1F4A8kwcx(A`i^Vb8qWzM8pUNljXu-qSu&WGI8|{ z>b$ZajuV{;N-3zz-iqiC(d^MUGXYEjx@szn)C>#)sXt+Q!|Wi_>j-XeJi zAVT6Ao8wY6XvA7^@6?y@d?SHGGZI*^0EyhQ>xb4uaGg_otz_L;$-1AMc-Qvhlj9{@ z|IX#i%({_R^uDj~rc27nAI=}zd3N8>zS9qn$fLERt45Bz9)2}EzA!MJ9r(zByps+$ zY0lg(_opA(@tcM1w^!Ded6Ky_u1!%T4Cgwy0wwJ&y?t|IN?#%lM33&OzIt3x19sa;35;*lr8ZFl#&B&NLN#)mgzdz)V8~V5nIH z$nC8+q(Dt&Rn-e-J>Y+Yy&PG$PjX8yQ6+|5$Wb7kL?Z!ipm`*69f#8@X$RyGfDU=_ zvZdz5OcG<4@R)?i&Tgo**X%Ld$S#h+j;n6V{X!Q zpa)tA;XdJ}q7|7rEMzj8seXg9)2r&Y=<+Hq!XK|0W3Ks6crA@pe*-yoQ}al(`6+OC zK=Nb_9z1n&BG)(Mn8@@F9)EEGr$5MDoG5){JonLr=h2%^H@qZluV=iP@uuy2t~Xq7 zKJ&evH+n|1$4ZtH$}axN;-6OhsN(M^`Ei~EJ!Qo!%g!x(Y5C}r?_^x{KA3Pm$gIMx zoLFGDX2*Hz(BWH|G2rlM49OHLh+)9rgGQ!mDhY{2EeJRabM4!99jW!ZOjl$0@VMgk zw;lR3@;41GN6`(8@HFKXnb?IrR$#ZvsBS$f-3%N~*9Q-ytO$ry`~z2&=@D zqElf^su^H4>`>?Dw#v|2g9#@lfP9XXAOu**sQOJI5NL0vQp!3%n@g!3^tP~RfV1F+ zF~>m$QQ`N@_0v*i^r$<`!K`a-m?2M3DOvd6!g`_#@&M+=>aZJ8jnaXEi7apnT3|CK z)ezarWoXMlPlU#;lSIYl=293;RY+C=8rM(IRbJfFjg_Lb``VsS9!*Tr|iL zpBQx%OTJ2wd!glul1F+pL;!~VqUcbV%b*5epu!lawl=69K_)GYr|DoKiut-L(8Cx) z*yOQP1>{v3#cnF)ai}(ikEWTSGliI8(sapjQz`VBu-#0dr?&@QNZdg`%v@@$wTEdx zcbWi?{S}Bm5WWJWRK@tvjVP&vNvjBEmz!ra0bojAnJ6;Vh0}0oG;`j=fkL+h(A;I; z)5-O#0=4jtGzOiZuesT1HFQ3vmVk&L!*gn1u{41mvD%G7jMp(dN&v1yv`X|g(+c67 z>07f-FXeVEIS&0i`zeUUwjWlUjlja{Yq(T9*z1l-ruuEVq4`ZSL1HpQ#FO2qlOC*e zrk0w6IKiACq!}PcvIRA<r3As_(8(3cRl>9FCQn1{8)zN7azc$v$MN~b`3Y2**8%z>-3%vy~y@ylsNTMtLk%X zzgvP!(#Z^PK`gKp7@J7wQy>a8elT-}XXc?A|3Te$m&(`~?k#_cLQ@z!(*?wpDOs%^ z7tuZX^t-KcuEqvZ+xP=EP_nRr8CatBSdRWQ?rsM&sJo=ZGr$y*vIL(7U^98XH*N(KAYemMTOx2sA!Z86{#3myw>0lAbw5{?SAO7q2&(&Q+Y4DhI@wFN7V7W(hHue-r9t-_LGluq-^Ztv7wL&-`s1y@-bg|qGJEJ z@8K(+hv8n1`?sQ`e*QIYy+gX}m|O36TwY|uH3f+iDs|w05-OThXn`lDsUeBmVNW82 zj}JL11QC~6L#Kkp=mMlFAfrGiU1Gxr;Sqg)Op^IoD6|&dCpG@nhvOK;sb*7P$XbC4 zf2AmCC+w%x_^JEds6~vEgwher)f9{b?HSU`oiNwJ8!>7p4T{)?8*Ikwu$dBAijDyK4D^LXC)C}-Y{t2?%~o3D#7n{; z$-WiGLl6he(ll$FZit-0csQNofz?odC$3dhMFvs*CP^UVqM4|ldC}VUDjcIPS6apq*vkn@?0^M^dTDkDU!|N({s=4`g4Itw&#!*+Eav|V(SU46N zc!kMXuSt_a$-%UT?B2-B8apn59ZzBrE(DwhcL54<@-#H14!qG!%Eab79@NT8b1Z38 zghs(6abPWlc2Xb9^pZ%e@C*SH9yO9yeeP` z2>?%c-E9YDP0hHKWNuE28l#;F1T3(3*BFvtTRV>#84PS)G$yF$hjf(lWcCF zRc-W14X$|!Sb(0_fdB&(rSZQk4ReD5R(@jlNHm7vR|f|uvwKEkg-3y4D1pAot|<28 zIt1_dM|9&~Eo#DsU;YE|Dd@S`7Tg)G` z{EKKOec-xma(=Mz==De2EnX`ozX@|8Y$(Ky@W)gWL)TH-!|CBs!ld$0kCjnjIrGHGkqpFZ=DVG8uk5*86dLx)Cs2hh7#>FE8CYmQgD* z-Y`bR95tv%%P>`jMN?nfM?%=Ws;O%L>aD;vVZ$-bL;~#Xfu9=65zMbJUu()l2um$W z>^S5bb4?MaqI>sg6~aA~%g}(h#&F{h7*$XdE%=Jz4{ac|J4R(s8SEVGAE>H~3krbs zYJ7;Pi?51n>;c_|drj(lX}F2nRoV-?Sqli~k4Or3qw4$!8$q5$R(wJ_U6?{RlEEGK zg4BM|xaa}IdaDYrlAe*`&qCTvbj&&)-iwl|7BUc=RXsIDDa0<-I}TKP!A=Idg@nQ~ zEjx!S2avJ-nH{T>PEshSd+8>j6t+6+z9TFH571qffir=+goieE8_FkyDVkVGZAOIr zo6T`?kd=C^{#!h*0@y~$As6zUg66RkM6owzG19rgmci*0aTY=bKrKKK&0k0LYyb~4T> z9bG#HUKz9aDx?z05YZwzAf`5-Dr1(b=)QT+XpW|64^N{f9=$B&#OGm`AhYojAJR82g8t% zZ7E)RrIt)(LYKuIa0&uh}p2z>>*KrZc%Q`J4V5I{)U1w}8 zIL9lz;CPWazo^2Ab;kDn>VHJbFzD1}c=0s_NsWZKPz9t&GW$x}B%TSCJg`!xfc$#I z=wHL5IF0^JBzV!@^zZ}}FB)~c)O4*lFjgEGFJ5`gw=&^bneeUr^tyM!?dRejqqQjO zl&wC)_QL#1Y1CHXe8W*Gy-7E|YpayLH@DvDxNNiI=VgbD(oP4`DU(2$pI7~}NW21H zvUKahRMnf4qOTDBn^y{9O#T>JK7;SlpJ11-vC5`s`RsjvV_7NiuhrB^sS8EOkNdF^ z7`tb6t0GAiLUN-`l)Qfd(S*qLfrJO$PX=2QIzzB?cJ^iwwF9FC2N9}-L>6HbxMQY( zHzCKN;etmREUGcJs*?EtFbJDAk@kNNZD#;m5EsS8ShUQ{{mt4esP^!2{Sy54t< z`*vUP?56d;M_=#r7fG+r-RSsz+eSn%B3X zj$p%s3E!-1zEVVHy5_4H^VKAlKQ``bxZ-J`IXa-vQPFJamGaGwKeTOjB;75L%GKVK z*&%U`X9s7|%|PJ$p>t9p&Oy~r(OxL+KpL@Hka8jA=2Qk!9!_N&{%7GF5^xlE(?-$M)S~C(G z*!GKplA+=e`Te{7x|yFz1{?(O@#GBKPW4UrW=~}14i~*R|9Sy7N4>Okc>c(t1dKMG za*}v9AOH|aJewf#)DIq;D4ab~KWck*`?&`Ox51NbICeTdF?Zo;@vAi#ipJ(HztEbP zv+B~~OFJ%YNX*`NC2u2%L7Nbz4eu47s~IgCE2tQ4P2?}Vu=v7`3mX!?H3`oe!4?~g zFS<jh{cLXDsN=0&KKfd8P_1V~m|S!wBMhZ}TzK%Ir+ zrtKdi^w-TLsQ-xPe@f#{tQBodEf`*VdUL`#hnv_}@};V$o<1H}w*2tPRW57MjCHV4fCO!)jE(vg2Jbz88`h+P*# z7u)^a@W0ji=C6XPFcgtNvDj^jzB?nd%Z-~yzIkEDwNWKn&2_-`#ZHtdMIdl9Z?8zr ztqqegylCKw*3KS&okV3z5dr^pYCAbik*^|1BX0wSV+rz$(LRETK}%WBfH8z!gA7lW z!m9{HDI)fsAf>P}i2>4zeNcNEKu;fNZQVrCEUfpMn?V}6+nW8EO%QedhgAgc;(!qZ zR>U1^+esMQ0AvI=DGo5HNDMBh(xNicb-ZgoT4-6ZU^W2%YxWk(6?D-lv=hs_hIyTT&12hQ+C}YRrRJX*G znlM;~J{13tAmGwKMtXB-7jK9P_3wVfECu#ij^1pHw*_f1 zh5@2%J*vRH7l1&xmR-(t#BJ){&52kQ*q|3ieQRzuAUy2^5U8lEL{bI@Vyviw)Dn4B1G|5b;hXT}pUoM{fpx&M z_=Yp*nzLxkSu}iPBtAB)=E|&9m+aSy?;9(=Z@l>atImxR*jidORQ2+@k!nOH9?z<{ zlC}Io(ZJRl894*bPUO!SSuvKsbkKbxqXi27%#H&COkP4 zvnwXDeG|UoiCJYId)--X_;uw;p1c{iv#LMAs6mK9IE$m{Ey3Lwt*>RIu;La!EZxqk zLO6dhBaEQoaT|%ZFJ`cX74M3VHNJ`Q&McFEH3Pi9Xys}R0h_{M#hrby$0B;QLoJIt zhcZaOPRH$nD@&v0o5lmX!dq{jlX%K>{I6_AGC=$S)z5sPGhIstGuoi6c)>%w>D2mJ zJwW}zh85K{1b1S(LlGdrCAxyQFm#5l$Qs5I#Bu8{>Io-Rq&&4KBQ#v+}!nMME=``{LxZm`-Dvhz+Bb26YKAPW7}}%$hIqa z{tNPW-YUfTtIid1{+=(KWy1yn_G@9AF(H4kaXE`OD)V&GPP}fYS&q^}vb`~yQnN4+ z$qYndqfCtSapnR+u}Ut4Rt1Z;3yuVQ(RA|hl@?NC|BxCB&59)oAgsJYnKz1Nk5rs{ zXfX3eZo$A#3IMqHW!<8dDU*G%cUIY)skUg*s+a9WO@nbYGTbPEM@D4l_KO|!+okiTAH zb!PBy(OCl>!`qELVi0xR5?@fmBpe`6%nJ$6Q3Rn1K?oEPNQncrpgRk{H;uz@ZeF!^ zt>zv`*hA=48J(N2p#rdvq)`agTfe4(~H<9je86*^d$8AGEd4AO#2E7mwID|Y}5GOFy9i{%`>=S<#HY{Ps zKq(2VR(D73JP&hIT_Nw6$B!-j%gK4`s(L&K6j*n=JPQc%w?fYQioc9}3 z*fCH^?j?_h9!Nh1FIkvET181+z|H8Yw(mx4b8kazM9iL1Jj4maY9QK)OY}y4aKd8~@}L&1O%r+nr&0e} zmd*%hS7L@Bg(`j=lfwmR)Sr|wn$xN5Z|}tBD5%T?0p8!|)2AaKs_H8g0p$Qa+UnlC z$=~O$@wby&2XckfH`kJb@UI^^R%#i@mcaG~P+kWxu=)^gzh5 zRzmDRDDMV%SUhosLV52?EMD`IhIa~o{KTa_@3g&p=-pk3Mf+Uo!>g@cx~5M zVR^z=altXho>ez;audGN;aTU)Mp|F18p|(D(w(*=*mukmy)(-5T zDz^@8OgLw=(mk2i0$bM6rp^e0m>z|SQ^tWTao5|< ziyE!Ih&iOsIs2KV9EHZ%M`%Q$$>1YVZlM#8V>tXl-6303J_)2H+?o8_Pw;-Xc8Xui ztP*P?IW)F@E(-Q6Bg7B_8+PMdBa{JbCW4Y90Je653atuWIGUajF{V;=jChUSNnzbJ zfni_pM5wE$OJ6h)9Q4w;Jt?nDo$xv$7C{c6Lo1pf0ZUyY3mPk5IwqhK8dN4dG@k7G$&#A2#r=eK+mhu)8=L|edh3j zDKV&}Nf)OnCiTeZG<(+K%;8Kei1IPQ-M<5Idr3UNxo9W4A=x%ze}6PtpoQmcg4z_e zSqhn^!hb_j{kYKCdc@68;mN$IgDdn`w3jUDq#XLrJ5vzhf)?qespXW)#lT z&3-NS?`CIbX2EEiUwpGz%9(xk;h~2o@=9LGIhQk0R5CGl(S*NZqOxY9VlDn|=1BPq zC#8)1g8%Nw%*p-8fmbITxfEh4mqRS!H-}idw7kCD)8}~l__9{C%lH_k$VYI?s`4>6 z-lfBlmgwNqqIK!`jIFkdwo>qO=DrxA6FbSgnOHTXd}Old5izWwHO#=ll`_b(h+B0G z&9X-4r8w_Y5XZq*m!T^^qamJ;Y-GdDJ#*rkZ_$`<5&UZNzvCVE)r@7%d<+SRyoyu3g`mDNXofB)z_}laF7bhK%7}iR;vr&;N2)tojKp64wAtaBR%;_i zH>0$eSARPFND<+p27f|BwwqE`2F$i_se2NhP}VK0#@1C^@YgU-x&e|HVK(bvDuAoN zZ{wQ|ywh2K#(Kbw+N$Na8KlC&upcE{%SC5_ z%|a5aYaTqdDDEx!v=`1A?irEC3(FGOWgj3Y`P$Qc3D2BQu4fm&+=qko zXoL7XYy!@lhnz3>j2wI^4(0Wg?D9{p=gm1^hhw4O`jt6vqHyk+{c!WjoOkPHCf>Le zB}LS!dDYTyWK~OV`Rc13KP#;F*(r8zwd1lczrMnC*>9(GxsB2lPNY-(z?>+6*5TwX zT&AwOiyD67^<%6-bNe>0AD0gEmMz-0zPD!raz8utuwfay2@ryYr|5G+eBcYiJOdx* zn5J4aW?pwar%6w7+G7`9_DEWRvAIeUz7%;d;c%dyeI2ej2T#Wno_Us;wYg@)WADXW za?hKsc}!>JNWYf9*fDBb?7*Q`DuNojj~=J*6pBFeLcH|kHe8@JvZ*;xS6d=%nZAxG zx*P-V#qGjH14>C?EKmV^un^N&-`%YpR3O+@)3hA)H?vDl8&*nhr_$V{c`6txW^#Aq zA!}~d)>4JGnyjHvK1=$pfa5?#baAO3^A;QVaSmp(evUM$((5R`Y#sG1 zAUrfI{9a0caAIOaV~8IjWq{r#e}%v5Hr=7DC;MysC;JzdYIUT`&g}#Hhl4b+MzqF#>OvT#p-3kfU37$>iK4PF0p zpSqUL&+H=FM;{;{M_;`dStDS03?bba$TYzL#{Uio4Op(`fYLA{hPJSJS zJ*-0C5z?xKvxn!^vFWdaM)?sUo#B<`CIBorQi9ahNM}!1_;z8|r=KQ4RY2Dt-Bc>x zCP5Y6b(S#ebj-wZW@kkXVz;^dafYR;)zc!TSwgsrSC)g`;FRp{02$&a5JyV!W(8C% z6|Yq^B?uiN&3A_Aj0(=y-@g$A$BYI~B!(Ia+ZWLK)BtuOMm^;bpY%C#tVQUUcCH1q zP85-WL(!2wNi)6}#0RZF1OxVj2SKOhte?L}~N&%R8`-V!|;iQk}pb2x;#Pg8M7fYKLbrZXF zCEby>HVQwL&5xP{kDCNJphLY$vz&Cqy1LolSsxhs7HVZek^Z29h5XXF?ZP&@3IMmdkYRdG`QnNZqZ2g=rdy_RTmx} zn|=RS?)`&~iCi4WHsTlzQ{<|m1ZdLJiM2bfRP2De%h^3cdxm?jW-q>xn}0gNi}YV7B;i~W4$2y8|dow|XR21+GNNM&nJ06^MPzJuTsu6F-*BYc z?r55Papp%gZCX*60>_rkP%2^TV%pe(m|WIVj||E{CS1nwI3r1HeGGb0 z1TU_7T5niQLUGhW4rL_U3#7VRC?=rW1V+a8fG+ZE7O_EjxSP3%jvlb?v^2%BK4huk z(>Eajl7}woGQbbuJ!FHvTHtcsbju|Op+&4I%A!}V;SDu%jC39b-Z1nVtOnr{pe;zj zA3fbV3egK|0J3MTiRJ}7!%o1oXM%8?QxiYxNL)qC6$69w&{eI55pGGiCE9&Iwg#pk z-HkETEWyOnCLy5GQr-ZPj`2Z4S{_2vxWWCs9qOfHM68v~grF_G+7FJFRD}Xnx&*4+ zMXQfdz^nnesT9iLDAsW8y@f3tf8#oH9z;1+(fv%IUnXq9`6KWr8gTc6n^K4OPNm^vnsH5ZJZmWZwA)+0fa(X zv)U5O7VMWLcNNU|m7?V->JoaJ-bA@VKS5igF}#r15&s_iW1AQPG8;u;n>VI~Hmk5^ zj%O2Y=Arl#F6poyg@vKRzOo!BVurEcmOW?+{X+5M7ExJMtcoa)WGU#Gxr4-rP&OBWJlqd;5|4YXj_2&-{f>OtfP5>{(L z2B-u#!UG^tymBmKB~%)T(p}@ZyAz(>a6}$1xsox5m4zdSr?4d9S%N)pFRvMyg`;%_ zwq3^=lk0}oy@}xmgsZ#bm73McEp_2MI-J{D8RZInbMS{q1_TbRL=l4%!dCx8x zTJrqfn;x61e57m=ThGgHx^1qqk;0FW7URaR_Z4dD3QM0-qtMd2L z4GfJ_Q|uSfCi++p7_gW+;n--#lrwy)YUc0KGNeB?m3A$EgPdK(yylv=Dv4Rw%Qe|1?7XPdPUL z@re16amGV)vtC`Z*l$NPUX#^>@D8K!@Y|=KYq4*SGdzxO7RPxf#2YRj>m3n6Xe11OcbR4v0n2M~@3O+|-~sq2o%yx^q*YJ=#sW z1&~Rj60LJwI=1U`#3QjsjCyHQAZ)#uHM+}%&A=$66)SMopLSXfwU<0(pvt0VVXhF7 zOdH;+Qa-w2syHF^H}q&KjfKugFP93U0!7JFqzgj{M7aX&S3iYXTMyTms`g1$8BNd0 zLvDc)5y~8aDq&!d8SV2y;W!MJ`$-#TX5S2`wrzV1~w+D&*la z&i4>OQ3={%w71}=8HQ&{Oj!$P-T}zh=$4pGrTd?pdXk2wz|6v;ESo!pA(o)VP?RDB2+=H^d!JR}v$oz`g=Vv7E@f4~2r)T@wnuS9 z13C+DAUICz{33%=3Sk$D^8Ihw#Ze^e`$A`iB9uO-iGhLR%ualXvq?y`%LkMQuJTVP zuh$av{C;}QufB{_(g~MAm80?}-2(iQ4(v`&dU1iD5VYvsYSPw}ep{(ek7UOX+|sKa z0cZ71;$gpwva!2pi(Sf|hw%B>H~N0%+HXAc&YFq5*&k=RvfTsQa9Gy-vNzXVsJL|C zYFXVo+s5bB|GmrMb^juJHeyT8`q&|577cGbUj&``{GWT4+;rgCz}62Xe0`WDWzYR! zR>kPiOZUCoes$LVLGQ%ghp**6^0VG|o_Tl4nUk;HKYHv!@QvQ_d9|0;{oGfV$bDqc zF_!xXj(Zr`^XX(U%J_6LPx3u#KfPR?%A zIA-W~-nL!5Eyrx(fDIepH1)a*e7DA%&cIWbT6k*cjKl{#waH%_Jhf4}7K~3X8C);o z^WKKXHVzQGEst%~uJPDT+BkIaGkI(n4SMju%iyo4@Y<~LcI{W2QIbj^uLdb~8-OQ^ zgMj)L5%5Gxiv{^LIdPaIjY>Lm0LF0e#f?@ zD*ML;NL_Z#-%{hgyx6v7X~E^vEK1ju;Qk*w7j0SP{^K$?rI*@p|Bq|3kxqI*m{h|5 z>Q)R+`mNA=Fj}NieQuU1l%*(6P0%$|sQot6uM@T-BSbd&!v?RRs>d{Y1JSG~{NzCm zQ{^k6`GiTMvq$JL1rvmP1|DWQRT(AIUZuZkdbEg@6xoYUh2vUu;f>^nu5R$-P@ZXK z4=#xd(kKKhBFHu^o-wtQbe&;%aZL|vJcFrX3U74)x&nmk(2Tk`zpSUr!Ut8tWvDfM z7-MTF1%t{Q!1&E{(v}g3jQHy*iZhKEd75Et ztrVL>WORXn7YECWe2BYpL_1js2EczqtCHvwBBAzl!MC}NZXCs&bL3+Nv?+=_uTEF+ zf*M9ngzPok`<7}^j^Up9<ZniR>2#GHy+&c2Cds0S)d!;lE8|#| z1ZIHVvMS(6J=#}9_SK#)bHg$nV6+_LFqwhJIH0qzXmA$~6y}Lph+5p|xT;XjrkN++ zZOp3I83I(36D~~}HN{Vp)`kLwSqW$C_y)Gz$jGA*)xL!zCoe$bx^Bn`RaR#4%k?)U ze4Sqm?N(+nB0|qzJX$h7Yw6!Z!8HeuTyqBH2~XCLJiO*~$C#&N$WBh2b3RGTT1ru^ za|d>R8m&N8rnWYZI}b!lN7=# zRU@X)6+7)8ozab!ge}(369VBi<|lV1tSVYGx(45r$(RR+dfepbO+Plx6WS&ew;RwT z%cR1I0dahrFvL`)+JkPaqcP4!HZWUo&dVEioyKOhSpxW{c9VgB4Khz>W%RBZtb%6e z7jb*dP4iUMGzTsYa7ryYjv6;ni^zM9XZ?fx1tZFMe)%#mZ|HydA}5M4aJf($?yiU!-TWs5fucj2TLA`;L6K*oY}j9ua(H4^S(XExe=9PEij zATESjvq-Ao!0R+&h*H3^4=a`QV0tM#Tt$p_1O%e@R9Z&UhJ*asuygik6SYX~#h7eK zoh1roxGCW*Nk2<>0*t%3`y9Ro$K;{&Jz=U0P{^X3(4PSGNG5~i2}=O0qglMr#A3?d z9H_Pl)$~+I%hmfJ3RX{|7rUt!WS-znCGdKwgJ;Y1J|KfoF%#~61tAwqJT+~oh#S*d zsrI9a{itFR|ES`IGvf=D&E@f>0R^hhqV(zIQB^$Nf5~mNk^vLd>+G`XA$LyNL-`dB z{MV4OTgBX?lDfwQ`&u^hz7~@)H<)7_3u5aq*k?3B`w;S`kLk~E-RXi7^ZPAFyqSSm z;`UQ8bobkzwI8?XJ6-heYG>cmk7)owcu7+jL3JT8REjg7SUT*i1+Nm?dqTL4U&BSP z38udYuZ8_;H(J~`#|Y=4TLE>B5)_4SkAS!LDb-JxKcNdzWHtus4nwDLBWY7o+=a{; zeFF0q?L!vEdLFE&^MzM47EJhx&K($5hYt*$OnBzrbb2_v^6U|p9z?z9Bb?H_$9B{1 z%0%Ghd}D`nY|N*aBleIx{qS5Q-*?y#FF~)f-Uda64|@|0R#s(Z{74# z5x3Y%^R283>ARWrHI5(7ug|q#_S%rVoSRu+<+?mOyS~hIxy(iBDkttktZwPRiFZ(= zwi3wc9|Hud0HIU1eHcCp{dR1OGTvh6D@{6tmr&YMXw>^n8%;WkBZ5d6eg=poB&7pG zj`nECfYAcvf?v|qkF_-jJK6?bwC6tli4@*sZ)Q7I?_d}gu9t3 z5wrL5O*#)Q#nM6|gRTe#CPXZmNF+|2Y*i@&43t7c&D*uaDaj18oF#yVc%*qlfn;b7 z3Mpj+qZ)*qJY893$(x9wy5X|mgmM&Ia1VC>@^A86s)Grlu9*z~93C>-(-Lik8#)K4 z^l!wQN_08xg|gn?EcA)Ie?o>uJOuj?7pN}8kip;Q6k)RGae)<*&58|3!@nBMYKfe{ zN$G|Ub}~N{Wg^sM@bk$$fzWY^CKOq4nUj;b^}4l%<7Fqa4~9du#X>~S{vE1RYIvvoUDwswJ0|8Wxi)Y8 z*u3@cINpKWy(Lk!PD>+=Xe{d=xY8+h7|TgY z=21&*!Q!U=3$s%}iIT1prTX~5I-=?CHiv&<_LnYX5D6^ggF;pTH zZ8z8j=Nize9vsa>aw2UKBq$1UVH||WvK2YqV!1QT(+pq`!$}-Ul;NNfIwD1_)CP!- z&oHOH0fD}8NGa=*aHOAhyazdb!Ih1}D+9o^n962*Qa102jdNnW2`5(d1oW9=QKg5L z98YL9cb)TSZemqEuypCU$?9d9&zWBak>V~@ov7waC#VL|;cC&2bhe-=r`g}FIVecM zA^5zp_1um9)wZM;g9OE;0!gv^Ew=?#8>GUbW+9yq^KUN%sqVylU@i#QH}LGw(Ij;k2_bFiR7(GLpyvU1TEQ2~9@=<8gjx;mA5>F-Qcl>ES{(X}PL5P6~1E5m>G zI_ZqZP@X`x`8supL}-;5Y4s)Q^wh~Uy8YKQxd)I>OfKB3r_AjKbIV5$j?Y~NC0XVQ z(x0suF27z<`o@|I&hONXmjtdA1g>TWJ|Q3L9MZC__++90KONG%np;ug5>L&m_u9Vg ztk1N+VXJq!e-p|v`*(|R@Aq(4k^A?vkh<)$;pXKG8>KVpn!**3FC#-rITESbGa)_5 zwihJXu7~v@&OP{>n6Dj7;fdDI4g!6g zS}jn06yiR4)UR1JHM7uTn)SnE5=7{FLbqML;-P3WA>dI6n5UA5vdq6nVVXj z`Z^l*Az=}+$U;}LLCT&#vUBv{g>9FX{A}5~J>%Ye2z|zgy05@`OdRceJ(PMZ9If=T z_@5;A)aeT3^sAk1xQ_jwe=OB+p$mQUK(=QZ!P({rzPH#ig0q4=7*oel{SBI|6hf1v zeefcm`dvKDLy3H9Fyq~iafV~*Xyt{qm&)I9U-rItaNOIFa5j9(MC?>S(HF;u{|a^9 zGkhqZ<$qCBC>n1;bN|d}1sa)D)WY?f9O0ee2wEv*q03IO(M`n?0 zQ;7r8d$xDC>j18v2hgO0Wdj9>0@d#$-&_J{4Fv?OC}72VYsbBhCY+C^@@l9}y7$Zd zZia;x{7fTqzhy*%?^PHh@|_t*gjTmU7{84yYiKY?m6m38`x1{H8uvb)a6bO2`di5R zg;|})KPRh0Y>dH?Fc2EL1ClE(9E$LSy#p?YOSwx%!G4tQp!<(f;XO~p;(X} z?|9!kFz$UU;e6~Kp&g3Q@p(9kyG1(!t=^W|;Kg_6vey^HI3U%ZA$19iAsT*X*u|Rn zUjTL?9_4N^jKSC3BP??_q};$W<~UBrGhe24^_ID=X5wxPJYyE7{uHmZ(c;oLoK;pl zv*NuqL+dVXoRegZ8Q%s|2WJO6rL-NyV6BW)%_gklm(oR z;Gj*errA1fqhn*@&Jea3zG?e)8;Cg1CGA?|9ZRD*tm}CeDChweUe=6E=lqI z5MLr?Jt>hAZAqpiQYIx)4^pP&q?J@sQf0&sEk!G3>_l>mYN@)_vQEGy`p~K|AUX+P z3T#|^h1V#ScB~`>oiniZ(?%iEdqUj<)yC7%2nLBsRnb(=Q zGiPS7oP(SHGV8s@EVMBr!4XnV-;rKpXhcmMPT7lkka_JGF301gbeL0ks{imIZsx!Y zkU5VIB%>)#JD{DV13^uHP_8LS?-}UF*eJ6kY!c=?619*pS+$%*_HD3i+<|cB%oE09 z@a{9Xv;gN~8GA~2GQTVkbNR?*Fgpe_m6|YbEOK?|g%Qm2;MjbuBo95F*?bSKxoso; z1PS6XA=KaGF@Kl^!yN}NV(*5;VIs2lLlhZ8Kjns!_Xa zayWCwa3NtC-CS88!5SLgJ#%Jg1V`?0!x-2RCOGMf32~fNvO$i>OLr+U;52z#=`(Dn zygeFt7MnRXO01`;;>ZQ|QQs0z<4DKg570W2nuJTQX?*_a%hE!gt*x7i%SQ3Sx!L@tpNnI}^Eu zv7#m%{(iL!+t7Lbv2V>p*?8F-6(M_~tR`d+eHChszwlH>M&h0)raEJuC#IhUirJnp zL>VX2(?1FxnOF~kh3m?7^}6M{eL@*ihX;q$G0RIz@bs94+U^hkvd31wV*Q*DmZ7Yk zh;7V*nv|i8%TFjOV;QZL@0k?;!m{)}(d-U|F=eIGGH^nMZOQIlxe3aJv>1DL zZ`gtCL%8VV1}?k4oY6CRHltIL<_P=cU8_GoZwsj*C1eTNq0Q@lEyuWZ3i>IWp_d=D zS8~-Qnm0q4JrzUBtCqCRN|UEIyFNc!e&YGe1qcrx*ND5!ktf+>uSP4e`~z8WY2+f- zm@%n#S8SL}}Sz_z*M#MqV_uRx;c1p>!q;XJ$;Z1!b(SeG`$2zQvg{XCQ>0 zG?F3fG&J5K!!c0$Ee^$mqH%usV6-(}(3B`Bo#+|wiF|FgV13Ay@E1=sk2gn7P1$Ds z8$ynM^Z1}VhQ*feU;exOGev)UXm(RaY~%h|ekab-3>c|`x^8||*(y|y0)c%_7hKm$lmJ5(?I3WnEFWadGXo>^JWp|p$O2=p* zzEz)R#DNpkoUi5FaD*HoYshupI^=o{hXOz_q@!0J5eyljw^T4Z^aie8%nGC%j#J9( zTQVZV-78XIwC?al*>kz1=j2F)pDGuj4uTVapj#kE=KU@k1s?wDO}cQF>hr@a_R;m} zR{QXjdA12>0)K)64YIS5wkgtKnSf$>i-39(;CB;H-{TxTewjl@47ubIxx^`x;E&jJ zStqL>l0OY!oD!z^U)i>+@&0mQv^gHwJY6t-d8Yq^*4aQ$ET_lla6v8e%Lrh~vTs`_ z6bnQ!{#E=#Av4|aJ!~(XfWQDmgeu3t!JjZIKW2KEYNp4KL$dnO{Kd&hFDLziNh(AX zNYbR^w(a(*smtFvJzKqfwz&1GQCPUk;m4#Vf;1yOgR=1>BQ}#Zu5d!Z@FC$TeEtJp z=ejghTF;-)icup0Y+{h5B21q&#A&kl^HLD}8RGg0nZA$L{tGe|tK0$IVs)L&Nfbn<)km_$ijTd;uOmbz zTUu7nmh9Mc)!kT+W}5$HM@ECA*wo-Cg!YC#tG!{7%rmq%;>dtUuR007$;_egYi7=& zFUXv%`UbND=WCaR>$2JOE%#@-M-(^k;4_>J`Wul|uU70*Z`mHVd`I1Bf7AN7<&JBY zde^y2eOG6$okJG~FY~a2;5G6H_HZ>ZMtA3i@fnQ{ z276)T;Qgd$$robMZa!hP3$l93#W1)n^DM;gkLhlsahS%BXuLz?hcJ@%7v)1PI42Hc zh9c=+GE)&`(BohxY2!CDj%5}dhosxE+2P@sRvt5q0AL&eWK&geCll}-U(`f#D{14& z-MG%iyp9l;Fh740=kf$cNZN&KpwB%|t+QaMxHA`}G+C2QI^+r*$5)^GijcG$A9ENG z_Zo*?sr^mXF4-X81<-{P7x^C?M`T^5jj{8uj>3(PM-D}UWi;Y6ZqcZr@qHMNKA&Cv zIc{IuXzbabJ_lChm&GNrnKQ~li-%bEnOj#`IjUC75V-`S^+3_)wIl+54$d4La)e6N)IXo%IBn4SR zlWxxSjJ(L|BsE;F)RrrAk{&}FVB|8?>4P4=kwZhYupmb9Zf4?TSh~if1J&s=&eIS2 z_*gUE^z$VSY=Q+e*wY5N*Dc67FQbCx_MbZ1d3xVdo%;@U_Z~?4jCAlcVxA*{GbfT3 zu%4+WN$q*m&Ea4oa=7XQo_$L~l&`8plr}2QsZ)p4{4UNPx)`)yVZ?GUs+=R3boXM&JtPO~8K(>Il#3vzQ)F+l>~)pR zn6m#-HvGwcxulaDr*K8dkg;=#8zT(WO;Pcqa*pVm$Qpf+Ytyo3CaXm`>Em*(?6$_$zR1Um5Mq3RsB+Fm{V%yuYOKhKc`gA(Wgp$ z>gJTvIi-9~DVew0uJ3tu&!@JvbGCJJG^^)q8y?s!nlHR|V*U8~2e{AOhwoD@?`p^O z?rYtl!HDlx>11hi-<0p|!nX>eJ@JxFKeuhZswQl?=^)?ieZ;BT?W!+)NmpP+jxEx{ zMPZNcNz~M*TqSBz!dIzVVb6Q>Z;p|Z;kufbO%E^l|1jwXU3k1sJFC9EuLGclMGT~ zcU*tw+B0F_MB#X0*n!j(P8Npq;#$?BhXHnjsg$F^z!RE2%@Ue-3@qtKRv^H`wUf2+KW2Oa9=QaEFr>{L7 z>bQAe>_B*5BoKZoo>LLmDi<|8)r&Q?GFG}pS71+{U!%37_qC-Ta4v8!thyLp3QZ)-E`Cp$iJ-*ew@x#tx(B3aPz-l7$e z=oTQoOSPy~VJpT|YE{IFnIyGJcdy`8rdEVICJu}rKpp6w?2ewD@EO-b_&c(Ok|A!0@ z2WORXRH{DIDBTKsK2V@*u+4HNqJUa-5$#2p1>nxhmojTb{<49?o=1gjA8Xe&V7%(| z=nkUQ($D8ezH7k)WHu9^6sDpq-q6dlYI&BDojFZX1f)e_wPj+@_?~FTou1o0vB1W- zXOph+u}NOwYV;+5!2lsSsL(BhDZfQ+Vnc-$4Tv>0NXgR#hFO0d2qXnBpdLp85zK4l z3mSo0l!U1QCgzn{h!=@k-Xe`eJ!WqSn{)c*|o;X+h%<`uI3?or4BT%Pe4#qu1%CxCAMr&c@L?kbR@vp zT)IYp(1k@ZyFNUAM0bdnQ}G6Lmq53IlW}?1#qih>-6LK(3Ocybu~JO`A#DGj<^n>8dDGF_6a}A%L^;BGS z>UN8|F}#ljzcI3p1-~)n4ya|}nu+@HdR+mG)`~Ta)&SQGS_7=qV@`DqI^E9kPF(?v z8rF2@B3*h>31USnf)$mO4S~}&@6_K#r0|^qEm)}?7Ij^?h2+;oF5McP9G$A2{DwGZ zYRSzy-L0w3v106tfjy14V4;n4tA|m<>o6wrl$@;jrT9=T>ZHQ?XgD@k}N+q;k=}~*Z!CG=qs*By& zY}joW2Ebo9fURShrD#o}b$7~9&sOch#%6+fuV2>)SdX^p@{rU#i!S;;II6nUT9m_M zA(y^pl_5->w=n;{G0U-6n)Vu#H0*igqy~E>!t`E&F1-!1Li2>8JPdp-}H8SGVw@VP;R$RGklBIUY;sM)5j!8|x9u|r$1sA@f*qBj82oi?>3 zf{`AqsGS4C5l9YB;HQT&_xA1s9`0d*L{)u-%fw=d`&(3{(PB5w9D{Vo8znMlL zR39^5w^CGsPsat1!;BwxW@rM8T*^n^L*#zsLy#}ACd!B4LM~h;3HqZSN3Xh3tq`_p zr`aan+9E>DO1y9XN89fqQ-Cw<0y8cn2K^5pjm#27)Dj`=RfaWW00Y-N-9f|}cXRvL z_H;V%X?$+%oc=}Z8x%h;hdyUOWzhTG^2`|fNDH&L)lHI4*sG)yPmxYDbq=~PRxncM zqKhr;`sr(@7d&t=L($6U521*xErT!?A_A&5vR=ZcZO1z!cSlUeQ{6w)KGqD!yjH*p z+M6CS5vEW@y`itq;=35*wSFT$0ugZpOBfVqmP2uZ#nJ^2A^Ag_6<>_!z+jOIJpk5v z0c21>nn7`-8KgrPBrxj^VQTAA2C=fn`0VP*G=nFXGYIEW2H{LIcrwc%d<_Om(VlSRx|WIWOLN$l=CE%$hj1?C5Y9A*eG+Z05sS%T zv3ksiPyjg;kmgVvX%6WS4hc*S2~(}hI2=fGIFROWU^$0yF69u;G=~FO4&jSD49s_S zr!Zf&OFmX;*VW(Yyp7Qaam%)M+V8f{4Bo{DJKXb{X92TUyT}?QJAm{ZC2GDD0Bszh za$)iUgW_{*^V=_d_oeBce|P)zv++$G^1zfZD@|J=>U@1imD(l|!k%|~ZZ?iJ z>KZU=F-G29H@alX2Qy*e_IOUE?%<{O_YkF}RuJBV=vj4!-FcM)UeG&gin_YmhWOrM@h zoTq5cP^s=E#@Q`-p;6sO>{m2z*rNxC3mB$IFC;EvJm>W_#KnpRJ;X-6gpN{!a2avA zfh&kB70n;styd9O8%)#?uN7jcTH-pxzn-{3(cGa{y^(mGqIr<8CgNrTuP1(t;Rp2% z#2XF&O~jiGx?7018n}gcn-S-B;#LE<5$`bYPU3chhsTMZFz_zo-3H!6{G@8+XopG{ zCMP7n_K6GErO~y}DXuQKSPloog-g|tkVAU6xO(7XSsWA>?jw>?IxH@X+U30?;=-Dl zWWX_TVY&?O{h{6`F06QI`QdW?gt+j%A=x${u9I+)`YCZe0~fRLOXB)6TrAn&6Bj-N zg_qOf!Z)bAcUD{&H3)@4aSfRv&xz~2@ho*gTv*fal_$I?Zd|W)PI-I!=mIE>*coRcf%D zx@0SV8g4C`t|$1?)QD)_x;`T=cT139FDL5e9v&g&vE~SF7%@) zQ(39yIc|=VIEfE)1H5FBtYOP#>wuN#P#40&WpO}6T^z7Uwt*t4XuvMn2a1b1sZuHq z@*@@cfZ21P2fsPHXuD@2~nR>eBaDz!K-@RdF;T1r<~r zeW;udDWPaYR>iSFdGNAYBnOp9_)1U}2g9L3MJ*m5m4d^e(V!#?09VV^UyzeR=Lir2yEo+&xPl=4I2~(QlO<=&pKtF|nZbp2lpi(6s#` zo0Lo>rdly2wTQI?9RfoVJ=RCZZ{OH?P6^7&&aud7XlFPA9K<3!J_ugesSL@XvFOfl z=)%siiRh)s=$_6OcJIXC!5w3RL+=e<3@STELZc&tyLX19sEnr2=*7;l3DpU#N;)28 zqBbXf%8Mu_xo>Qo!!uw1xTJmZ*jHt~MekBs%jAiayYg#}7we{kl-+f+bh>m#dSc(4 zwxa2&qipij3Sc>z$T@Er2)%3>UO{E;Wr$lwjDLWWm0(8$FGR#Iap!HNP7a*C+JQAe zD#x`ar=JJc-kkehTvvcYSw}hwP>0LR>JSbEsS-V_*sMBN_XL(48ZL${QWbhuv!1)n zda}7%q)q5m3vRfXk#3*tLSI!32d@OfGVQ#fT;eA#M%OEU8^s)W%Vb5IpR`K+Rm-R= z&X1tA@Q^GqG+njCEpaYj+>G0d1A&-3!^S)H zmIjQj^rD#L(l*XnK6Nic6gTnESbK)f$H+G@te%j1jk7a}mXj(8vWx+{$`b&l2sZ zmT*Aj17OmOaO%-lrs?QtX{QEgSlAOG2@*aZF{&e=sR04dTFk2>D5sIOp7II`MljyW znf|$f*@2nUi~M5qVpYQ3J|(7zQf?Mc7tb_LyHXBU!m&B!Yo6-4d20I9%y`ndCFQD^ za%u>)ML{INXdaai;u!L7pn^@g2J)_8TbQFY&eQsy#U?aE=(Ww}?WW3yp}w32#mTK0 z7MLY`YFo0H33pn4h)PCwJ8@4T>eWf@1=M5ZIwp<&2dUr7C?>g-qg=yc($SFeZkp?! z?VcY_dRr3CmZuKa&4bei6OKl@ad7tFvbR0yZNFQ!dkp24;B?mg7)r3~_1GhK5BW)CDCb%Z0-=KE(~PB6KjcZ7 z!oH04_RFE5niwZmNHG~;GE=B@&lBQ_mAdmb_5XSNONWYSX~iKlfe$@bQ3Bc*yR zdp2Y;pOwjgCS|zb*Z^8LTIty)isc5-hDsafp^7uMQ>@w|7e<0ZQMD)#7!7_92&lz@ zz)*NlQBZ}5mqJ4j@v3cnOd5;^W!hz`FccY^(D>C>T(?6K+xz)GOw^X_fBw{bQ>6msb+iR2d+WD?qhZhb%w)<0_syY9xf39=3 zbIH>Hy?YdvFRJU)Y zIOVNNc-ui98fh%{|5^RRn#8Wx5*5vlD^8~>YN4K%mM=T&lFqvM{>T1<5Bd}BM-$Gv zC(dK(O`LPf8)qo zM_xbPfBY@E3wLw(p;|5lv7_Z+fO%*`2k6|`X;9V+=p5=3LyVOPFAXPdgB0I7 ze)i1i^T$_VgpqibGm)l6LPa4pi!>+K&BN1&=PQ;R^$AC7%IVG$$bko4iS}0*fgDL& zIcFQ2w_0{V9vmIIq&sBt6i-@Gn%BzDus`Rx5LtOVyi<^pq@SDdAKZm94d0ajoB*`& zfRf7J@T}o-fdQ;@0?n#~hA)sVe`A}#-8cka7d`!bj4xtz1Gm{{j2KcT+ZGqidgjSO zL%L+4))>j8XWmHJ0gT!jBN_LzmF!42V1)ojCcIOZ$H2o6IqnazE>~?=i{eF5Lw0Ai zvG<_)0Na(o6=|0RN8F}Ak5+54=oBYe_0gfFnM&zvd(7K67~dYZU#p55Zlkz;m@GFF zTxM2#G)fLNcEoKP^t~=XX8461A3>~KxfB@>OTN)a)OTrcY%DnHcVuJ&Oe;+$kfp)& z0GNHz;AQv^!og8(ClapY9x6_w@E2=ZB&mnmAU18s$h75{zfT69In|ljNJEkF(WvUw zgob9#DWsyo*47TqEm)fAu4yN+N}a3aHGc>=r5oZNTf3=c%9g5X{+bht4^H)_YJInM zEbRCi+ULO;TgqEA-+$}-3*Uz=l&YvpZEd?#d%N~-@BJf7TlYOEPj2m=vCUlhN!ha^ zbWd9`LfXkyGy=MK+te|ziJK>Ui|#0R~|X*pVi>IurfLt7#GUq0B&!g*iUelXh?}Z?ddDUABfvWT5{co}KIS(wPqo9c?+z z0I6Vbg@+lUbyzG+Q-&>C8FLgMDuk?VLM#!><%KC_W;Pkih0sb1Td0!4r(@YkwdHS| z$u5*l_Mw|*R=h#AlT;j|f~}WLV3oeLt?c$ zi&%Yck;c%C6ZenL<*g%EX$<}>KtuNAwHYMGSGq#12`N~B;<*j~P*SX~F zOjT6P_0IOr@B3*Vt!mQ-tLnG(^=YPiA346D}AXjI0saayQNpzxe(Ju*7M+>-F@MiHj#A0G<`nU*Az2T5bq z2dMT66(^`TMFrFkPPLy6zCTXx1Nj_X3O%p|<+rJ7Jqr==ebnx8j5RQB%wC-pWF;zB zz;Um0PhWrYnYC1GPgQN28<`zhtVvdFOS6W9hkn`pW%t9OFJETYPm4=eM08BoTg2AI zN@Bff4%Pebe=+{~IIBLaSfLiM$kY5A{4;BjSedHWlxF7!A92yUTR&^N*LJ@NK(Wtb z51T&!!^H01WXFkQ!>g>@(_-g}2(YxLNUT`2ra7GM@}HI5E4lx|7kfY7n`}R@LT&8+ z{8@H?@y$B}w+HT9ZwHK9o_Pl9S+r7Wt-!l5l)i(>J}o#VHU-)*{m>Kkg)xHZRThn4Bo@?Kg%g9E=zZU6)k=(_O85ocSNp7E^(VOHaS2x}nSn6c=4R@DtXR}Kta z3WX&WhF0V-9?L>R_Xu2ks1&6EC3G2FSi@SZCJ!aKxBe6Z>xOt`&2nW&va(~T zayw%9#T`?}4Xbq7*_d=TF7AEe^gpxWmbUqGCBA{IKfs6-`7kpnA@hG{ND?kYq=_tI zWSM3{Z$ZLYQ{2lL%>>|U4qY5Q8jcLT7u%AHiB-4%1;AHGDnZeL?)$yj?|lbET*5dE z5hhe4@xL(gNPZVcftMaxCBo2PIE-^q@WY|-xD=Gh&0>Zamp1cb=&qq<^J=shH~%FD zQAnd@NYO~-{(%J1$>HySp5F_d$XC|DfJei?nJYm#JUDR{ZsTCAel-$u@BbSbYJv(% z^H57DNklUNSH({m*Z8MQ3dSuG&#e0{sK|gTJj}gOW_}RK@(Zi(b0P1rnFsi)F!~Xm zD6l7%qL01sdEimPXb62o*5`Y_^S3gQD%V<`>nSE9=++#0owNQE$?%K73nIu(aUrvp z$mg_r;^v+|F*~-#h2f(p>XSbJd_VS58MDg*gNo+YRE1zzLD)PRRH8A@xlEi3q~Oy? z!C#calE`*o1F0fG1?1~!P@QkV>kzse)FNLQgM&$+N$THB#aq--VD64Wd!tyR+}?;B zt6WX6X#RJARsJ;!Eia;KzUmQzv$}sV!^yku9K3z-K@_pZ$IhM%ubb{om2R5f_o#F$ zH6S#e)37c$JOLBa6A4#y%3ZPS_9flEWp``R-MSdPGjV(3vHOLT)AN^}`b5K?B~Mqv z+4Y|t<*Dj=@Q%_QFjosPT3+7!_I~Se}6U*KPZ%)CA?jzq2MEf>!`g~i#rwXg`WQbfz&syn0k*n!Rd^Xse z)%wgB-N%-n8^ZC2JZ#rk^|8TGauHGx-Ir1Pe6;D1KIH9-L{E~ga~UZiL5b}u?9Yj@ zpiCl0_rS0Xb^{G;gB2(Wr5A&vK{+&JrY_~(`b!L;_)tKNEZdrBKJ?G~A2$E9f#t(* zBoDulICM7A*uPYEE@3~%WCWD8QFOy*AYY|xXRdgZ|B#xjU_i2jnmk390@0xSW4fN9 zB18p=PtBHR)&dp(1V7~n1m<;a#lnmG(>9CPvDk8_<8}v`uN@EgUy5Iftojf}FIwR7 zsA`(*OL-b5U(<@}mV{8LRb6$Huclh}B!s54Km!GrTlXhh_iOMk{Ce-N_Oj}4`ZGgO zpW}DV+&-f{?EPPkf61Hy9lv2#Gag1g#+Ta;B-;*XqrCa+bH6&LjS|&HDdBd%_{{1N zccdz6=1$I@Otbp7PVIcGhdq|sm=gl$bh{vS%#V{xAN;`S+ zJg?({>UtllKOFpZ@K?b!(rwT4i8uPcVHFL#gi|6P<1lRVPhf`S*ycR!@=cNen^0g$ zsbWwZaT-uYg_2B>P--_#C`B^+Fw)hL=2-&UQ#4CUUl-OUkxlGmu(ie`jmieFC4ens zu;dUbI5vQF0M^Z5iRBg?8^Dqs?P0L31%SBR0G5(kD;R9YbHh@aYZZf~_-Vnh!E-4k zwwl52E&#;k2C$SyTgzbgJvS_++}1Hz%GxP7Hh3ZLwbQw2Rdr&s7{v5$@r2Kb+AZ`MMVpBa5XSHldOx19o zN!E3rM0hDUHh$8C;1^@NkA%ZMWKhAiL7I<3$#&$jS9}*K>rRf0U%Z5KNbwDij}DRl zzEdXUO!L3{QS0;DRO?XmLyZ)OQdxL3+aXVPGS;?0cgiTCeRyw(O!<<>~3u%g&CZv*T{pX9w;bc;ehk$$f86zdgU{QK`@9 z!J?VbTN4Wta7O7psveb+iKC6dqM#B*L7zC=VMUbrm{82~?HM%LhxfrI`S$iAZ>F;5 z(1DR^J4y&8JTt7`%cM9mJ+v9E3cZ4%%4amXzO!#3*Rg(WG}8V5P0-aSumzF0x5r8C-X2S@n3QG95O1*3o`d zpv-&pA(mNi7=6S{A7YCI$A`RPp|9_ZzBcn2j?ia91qae+#JKHZPCOD01Y4i>*%r-` zssBU3yKxYXy!fqj|ss$@(nlgh_Jz6cR_PxQ4 zO#+^fJ4QAhYL#EXJ7^rB95sBkK`Sf2hyp(L@eB0X6l3YCJ0gcJh7bkR6Ofpls>eeo zCnq(ht0OcDTPkBo?OKzPPY!n;f=6~Rth@wiWb6tol(%x~q^1vt zXlf4TL1#`FZNelLRr^U;N`n^=v1Aj!fHuQt6B-W4e~TI@G>L4*MyeY-SpLVjL^28d z&^k&~XD|$)jEPEDaQkGg+xllI2N)AzSO zbS9c!e`4=j&1HUHO!WkCp^2(b2sOEkRQ`KtS%-l#E4hq_tbl=L(t!^w9C(uXLMBgM z7z~u`ablh35+naZpWmS#laVTdW=1p7!mz-6L#wc$Iy1C$c??-8v4*vGA?r|1_}GDo z5q;H833_sL(%!MS?~%R3Ab|{$4lW#gV%L%q&5`uTg*M(6Pey6t`*=p48{mdIx5)4y{g*9N{>Cgn>l!B@LT7D1vW zK2VObObBDO^7N@@05Kvi(5Kwm()G%b%W!Ma@-?lweA!Nww1njET4M>HBIySySd^0H zpX&L_1!dtA@iFq5-4%1rS?9955osoiU3dB0`=7YCJ0{|UbvT62Pw?%@5d2ZFlzb5xa;&ot>Ea~jG$y|O z=F!|=>uesaLp@=B7sLG1HJEcwGZL?ocK>4Ql6^gFlBN4yu!(O-EwT3*PVgzW4( z#fNWm$b!5;aZshx=X*8s0lqAi8J1Y1PswEBl#q0y1I7cRMtuB(uX>Q<1UwEi0G2c9 zQz&lMX>`X&jSRaiav{sB*b?&z#_HB4=ZM@y*hIn}=olWpV(%(px3n(f`Ob*T@L6ph z@<&7}tEWNE&sgJ{(=fcGewqyN9CNw-`<#ku8)hzHliB=~X4AapY;s)5+s)^*E=>y< zomn2F)U6Y)fj*2xb@LEij&4nVqoDgREUFD|>+zt%h;B7=rR|;1T$v|&9V?Z*)jMgD zTLFqiL&W60+4m@7(!e4n>@(0SPmr&QNJ+yw?C?9&A#LD>v)H%V2Bck#{i|(L&FELa z%razZ&c~R~ew~HY*cXct?8z={E)QFGVSyoSVQGcuIL30SSG_Ug5O`J1^ZyCD=BsOz z*t?Fp#-bDZ@pda@kzUhc2YEUNn!m+sWSHKXukpw0zXn4RC3nmJ3LRIkyV*-@?SVfA zF)PMEeaM@P_##@ifyOr1K?+4uVl8X#$lR#Q;k=iUX94Nwd;M(%@g@53PKpc#0&){g zfR;=Z$S0#BjV2P#i8uX2x+O9{g#3@FZaFzDlZm2=Om}7qwrbN<6Zuc+MoCr;k-wk@ zn?_plm$;CBM#U5r|9}b>ICA7L6`A;t{BtUPOvM5fq)w1W*$h1!K$5arG z3d2cc{WGuWe?vuS2FYCK{z7P95qPly(&WX%&#c9wpTaXxh0?6Pt4lk-dh*|k|5jvm z7M?-BbQLeQEQ)s=w;dE?Y0+~;QKcMFoYFS8c!r-pM{X?2$UMW}FaM(Q^GdD$po_9I z&+zGH9=WE*I7Y51TD5UnDcaSJY}C5jbrex*e^CC*$}cerst+*;PHB6Q=wCdy+_E>> zvX>G@{SV83UHL2YLG?H2gHzgLMUW~p3aa`jsM07nrAq{{eLhH@F^V#^Yw4)0`k|#7WPjJGO4>-#yE_V%$Fy}srD%q7pQobiYh87l%<7!DH^9efcy~J z^WeYXerrFZC0)NHKgK1tGN;g6L7B%t6*zBpPj}A*Df>C;*orh{H16s8qWkmi2chI1%1h>5PsK9iCG)Oy75DNn zWHyWFQ{uYWF^#}K)mz&r`TTxOvK1empn>(r`LErtTX@eij>>P|754Mz`I&9saCH7A Qih|!YzxjW1bY@fgzX7A0WB>pF diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/lexer.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/lexer.cpython-312.pyc deleted file mode 100644 index 88bf30973557ee162ced4999cddf662f7020f28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32033 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 N)>A*Jv7hKQ{Qn0{ulWD~ diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/loaders.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/loaders.cpython-312.pyc deleted file mode 100644 index de3f1c6be8f99a78411764d2836b186fc43d5ea4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31115 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 diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/meta.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/meta.cpython-312.pyc deleted file mode 100644 index c26e1cd6f0098cf4c964ca92c6917a726c28a388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5481 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 diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/nativetypes.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/nativetypes.cpython-312.pyc deleted file mode 100644 index f54b42c552bd97b513c410b171d1332c4c95d2d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7002 zcmb_gU2qfE6~3$8mGv)KvJ3;8?QWq%+jORRQzJhlOdopAU9BWL zBAxtPjn1Au_uQYo_xybK{?YIE5GWt~arX!f5%N!bv5Qz?%8zq|%o2qtT$Us_csjC< z9G~Dhl<~j|34!rKR?ImQPR5JCHzk@F@65V#?t~loCdHNYa+wG1iPoMV?W(=m+y-EjAk=NMCAH`MTZ{-w z=$w#fb&$hEX+B4ku?7PYx5UC*RZkhZGfs&s?8L0zAGz#emwi>-Sf zUxs3w>C2`KmCD(qdRorHyI7E^t|F5flhYb7&a|FQr%>cStZJZZ=XayHEX4(J@Twbcn&s7nN)s>NEUSE0_;gtjec}B4&bi zP3>7E2gwCKG!ypb?!&>*@|{&bncpN-|Yp94!R~1XF^sWL?q? z3SH_rVEtezS(8qw5;Jl|nn)XCte;0m#hDn?BWDU^cQl-m|M)hk&!QAg7*_M^(K$lh!iwu5Qbe(1i4OVbb(l?@4P{X*&!B z$${u^0y#@o!o(N)ne*c5x#t%{TNb_TXAl0}8(a=X-fQyA?D@gu#r~IGSPq0Q_M9J` z;co{w%ynGWZv{J+Bds$>-}6Q&^6t1DePC|SmDa^**UX{iKzuOvL40O-%CBY>|ZU;B6xQIV|v19JgEni33ErvWLBDy^veb7YKb${q-~R-kuK#Cq|Zo;U9TQJaG4PbgUb(@W2MwO+GrXiQL@OI?%`8+{*z?L0z@j z@usY>2&b}SmvAUtf>#B_p^6z_RkzA0d}BGJ58<3}y`qm6kCC&l5h+BpvD+)v$=CdbHg4cD$ zPM(C&lpoiWii1~TAX70#7ETcJkX2a@vljYi8U1+{GTJb?#tmJAOiQh8UV0No#U8J*7@Inq9aqk1C=U!g{Fl%7$ewHy`=_8GIkKD>(mYcFL8#~78f}K zEsT{$VZ{az)KL_MNs(^|U8*w}CiEfbD&{g>0QK0yn=VXK$&_)1V$`AtYD~|OTp_RP zX-Iq&qlxLWq2EE-kO6e!mc>LG#}*GG=|Qp!$vz-DW--`ld#_uodp(xUDoG=6jXkyP z6Zdd^~xO3ju ziFri1Jh;>rUucWp@^&vr*3UeCH@NP?3+G>$Qx}7s^R7;caDQl(3E=iK6F3eGm;j%F z=i2gOTah$$uZG&T5pZM@ery}AIUw)TlqpV7NVeC6M$1{v-*zmqoq;V*f!;5ctX2C4 z%wF#R!j{k1a$*1Z{qx?AWnbvR(eplP$T9C%;@ipk-zUvWgydHq{ zD-L9RJA{mTT#TXIp| zbUlLFd*4o#@lkSm#jVRN8)lDQI$Gk9e`tsG+&8$iZ+KzfFnhb}_FRabkCsKyC_Nz5 zH9;Pm;Iq~Q-tM~nWf7hwpCGnXM?l_EZ(F6_2I?!I-e!G1esl`{)q<{wrHnPRWHsPQ zhz_DU)h64>60S)HAo zrw5S?A~}Qv=VZ1Z4oOyVNHUd`b)6o@`gW{$Rv_}4Jsv^@B;SF*9tCoa{6#o?cVm2B zSpOIQhPj=K{;n4fS<8ZYtCq!14CObVrnW39pAZzTF<$)C=+uem6j13G*PjUexh9>l zCNp4dk)2vhL8hZ{r|{eaK0gk*5DDP{r~Ehexe#m`R0Pdt1UD8#CiDm6OV+b3xc22?Cx!0{cs`FuzC>TK{RFMY;ie6^F+Hw=|Kgw;oR zoH7RnK`Xrg1hQ9v1S3m< zO$&idmyIjO=Qr=U`qaYaJ&S=}Jm`wYf=qBCRQnJ^!~nT;Mr|ruH3&tG7CflP2J{49~AAsmUjkjcrc&ZD4}AtkGF@ps$*N7?ljE9^&RN$-^eL#M-$sHthoarnr;#L( zd>4p~>#L?rp9QJOX=_ovui`0en5m5ojoO+6g%0%Bfc%?$c$UBw&{A;oLU8j^uDsuWY+=?6niWITc$5xtq;uCiY5o)34sCA diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/nodes.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/nodes.cpython-312.pyc deleted file mode 100644 index c0efb2ca8f764263544735cf2f3497f9d5c3c4be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58259 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 diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/sandbox.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/sandbox.cpython-312.pyc deleted file mode 100644 index 3e8a607fde348ec6627fc3783349a8de257b35dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17771 zcmdUWYjhOXoo7|QACkKDej%xl5U2$RFbIQeu!Rs9#|RsQ9cw+?YIT)FL#taa#W)7Fvhy>%b|d+Xl+`~Lga#l;>D&u72hJ^aN!j{9HqVmvOrusUVs zxEtJQPUHqSkrypdet>7WWx&F6>wpcpHEJJq3^;h|V~aXRT>~ywwxjGGaI>-_>KXM8 zcv;yQEgCHzC}w3B$|VCOD7!^Z)HmuM@UyZvS~^-bP{ztd(elxXfeKbGM!9mJlIJX( zWIMafSaLQOOHkjDeK$&?5A{2Zw`@Lasm06N{#zEUZlG2y9jF8J`dfOZfejehl^tP} zq(&MkHHl@9BF`Hk{EiXjG(xNpE6-R4Hi}hZHS%V$Myy5NBDu~!Va$=u0l#&G6YGA$ z-{Q5}VGDXbmF;1a^q%!=diELZ*cZr(;r2tNdTck$xduZ4pwxQqduhB1netRt3QBG`sg%h_*{#&3OdImaK z?KaeImpaYby{xtawL2uQS^F@n-HF;=(!)~mEt?Kw-?%04(8MdU z7)m50IXE1VqGB)>8kK^|STvGAt2HzfMrIeK^GOK>_YtEvUVObuI5Z~ZRymG`As%+V<-B8-TnP1j~zPQ-+M}}(c6yq_CImraBhoh zBoZ8!@j0p!rEpx7R96_Esa2uGs+^$_y$uD{7I5LaMNzefqf$s#OU20Wup~>duoO&= ziP&V-DMs+=vZz|e;$x~qmPX?jB(+`{A03qvawHslaEL=28nDa6ZsZL}R3}D9aB`|g zkrMd&P%@g3n`rACsv|TuCdEY6DN7e5S&>vnB&JAmLbWMzqz>#Fn&k%S?UtJfoJSiH zm4*}AB%4{S)|1tmv$8iDi^azi^hw3R(PSbt6s5D5!q})#G)k}Zb%~@L3+wC(V>r%^ zeGTtL=&VA!A_!j| z-vPpvl^tX8SY$^u4y2lhZ@(xF?NGvUWGt~G8X4L#Hjde1yE}G0v_k=QY#$4S&xJ-L zWyje_>}&{?8uREF8&@l_RGd~KXnX=&s7zAs6#kVHNUm~sy_G92{|`Ht%UjarEk8ZI z-1=y`_0d$>f%{fVk>j4bblF{(cGsnvyVCBi6<_&1Pua4kKJBT$+VdM{=}gNHl_h8W zimzOhw}%lyKsIbr4BDO8kHhM(3j(H)%?~goz;M4ud4h6EvPZ zBA;#h5hq%HY&E3i%RC)nz&i003qz5S4xu01)!^4d(Rlcr zVt|ig6EyZ6%YoH4VF`2uY^t3tPqkup)oo6t7M}n)4@ct{H6Cb@Nj|DpIX0r>h`gUF zJR}8z420Z+iV*&lgGjD&_g$RVKT|QajgH4Nwfhe*{V;IHS%0^rK4amF>+jZYn%z2g zGGpb71FKf6&y(S-ZcoO;75T0{DL+EM`QbcjCfuasS*<{F12i_t1yRzTNnldIGVv{9 z>I2j9*ToU540A>fe5JHC3>hQ2F?C5~_5vA>Hx4HxkpS331_Qy35$GXxx7$5$l zQbKAY>Irn2Ez~*|QWRFv51HW8h6WAh6yRlG4yO?R5wwkSXkFx^s2ZcTQY2ToOc__( zaJ75MR=MIWy7~m$2N@bOp>iT2hfS`9D&kCRKZsl9qjC=avZ2?S$K*4fNj_onw+q}1 zFWbj+c~dTzEWqVVIHmb;6c^r2zITC>)iqEbIvTg~&{82w&pQMx$%`%MkBs*1W-t5vM0MTF*{F74&TpRdz~>Vo9E3! z@{m24WzRaZ*vt{@&C+N<$>!!5`WC^c$1K>9N&ak$QIpL@`z>9Hg5DgVpW~%pQW8RB znCW+fq>-T{c-u(i0(8CzXb~y2Cpi|1>NF;py*dN|Y8j&&=~4))A+bG-F{xJ*>WVPf zFDIoz0rG=QGe{knIy9IC2F}SKX@o35oI&I$n4+IR;xDNwqxw>%tj?!%2sXNlxJB3C zi>Ea4C5bt@VMjy>GKOb`A9N%XRkTt4sui%*;-0u1PeMX*jmsy=97z~ujyMO`mLrB!3BRXfLR+*?y-c1SdFV&VH<-^qjw#o(<_sgNM zGz86ny}FN(POG)#&r+{z$47hndQW!upE#MTAUn^56xt{G8#IT}wdcgi6Q}!+_4Vd- zmB~O=H|oH;Pd(q)6D$bQ1Jy}RC?t8I{}6+f$qLSsZIuO2LVh0ou2A34kwDDVaIP{a zAIatFK)O1xJZ2C+BavDI`UOuh2}gjC4+%q> zzANa~flmF5LfWDcC9zEqBVnYlU`Qp<3`HuDRT_@VuxX*}ijmle(0!-}I$1m!6`_d1 zLK=tO#QSmqjA-6jkUGHx=+IH1O+zs|-q z569!pSaD&tbOgk>6_~^LO~95VOw~o4g^UQMF)5_gklLjwQ&olcMt%Xkeu966*cV83 zGuP1m8E3IKr(HEuu9?lSIA+4L`~JIk6Oep%@65qFMH@4Av=jQ5YG{s;=Ht~%t3Lz6 ze+P&zad1&`0~R+7V0Pdd`5 zJ)&owdaqbC?3m()d9nDFqJerip9`K3oX>udPPD+;iC$^LuuCk31F>P<@zlpAmZ49h zSPtiC1>jY#1CLIo@H_?Uhdp97;0h*O+S}h}yi2Ub_>JqXop%24nuDTKT4z6WN3eID zQ3cl~wdgqQ5bLp)P3x{@1NQCz6>uEpQn(qTgmWCvFy-FdJc10oVIFdo1W* zPx!VTbrm=pebh#bdb+?)7vv;FDcB1?&cFE;`#?Z!0bXrdXI;NHT@;3cxybR}KE++) z2e!gq*`ihyQtLzH2hQ=IK+5G92QVOxC7=(GUm+SfM-~b^H_}KFewEyQP(d^`At6Ph zimq3Tjzyy6dx>YAKDsf0Nyz&E=-r|iAy)-di*Z3o4uzxeCBQ4Ln={NH%2|&v8X7lD z4s9`-e}krki-~5}mI!ZpWK@FhJ*2J6)R+KTHcc!TXmB<$XFgUL3Wp^HE+#_}pl>yO z_Au?REVCEPI)xnNq(6xgbg(YzQn+g{&v{PT0fQxnA`0{aL3kp5kvzo$Op&+{2YhVe zrLZ)nT_Uh=3j?Si!UGRwOxtWID(p>(GhkH7G%;C#X+SH|t|hb`z&_@Jq|Xb7k|Spl zn&+%P;QW%``X#?z<=emHcT8Az;J+QkR<&GrZU=`VvG`b!`I(`Ske5jwM52}%9g=3d zTE=WS`T|MR1}bW4ZXNYiH2<07+(q(8%G&{~FVDF}8nh4ptN#tjpYplxoN4PM_kA0A zBqPw8f6D)W=eexk5iVxag@d8`Bl09*3OlFI8fuKu8Mz_q;8HW8VRQkd<#&uW-9*fN zEguBzfLpagf0Sf$JV#=YL@>yFg}CmB#)p6hvWQ-)EgXld*qgKUvPAWs>|VoNX(Qho z+f4ZkwYq~rMlWz_V~a>9yvlS!`5fLR8VZqnhp~!(LKlTN*cWgO-HjsHM%Eg%+@Ai)*RhrPk^2kSY6;6jD5tE2x`C*$K=Qb@{EJ3FA^go z>OP~nEEpsh01^0+a#`8%1MVf=^FxCT!$cSw&jZv&4y3NZf)+m9OuCChV;D5C$_K#+ z=n9zG|1eF)sBAh8WErmp2I^KxDWKa6DiMgJ| zincoyPc3ch{-EW9#NxK6QoiFU*YU3~#)$>wG7|V$;bk?he}Pg6ipcRuBD5mg%8<%7 z@sB-ZbL%E|J{CY&8UF1K;n28=1V&}{{MVc@L!o3W3PFQGzych&sNsfwEShh8P!~hA z|I872W3qVpj07j}fAa6>9VT#bf= z0|N6XVh#dNk9-8%bwu^%^rEZZ5efH>?3TXo7eD7k>LwAb4`SX$6;SUa^PCmD|_nR53#gEGoi`&DFT6N-E=`vb%X_xPD zS+&tUDQ<2nXi5hIZI9su703{ zD5P}3Z7X(l2@iGbHNoS$CWhU?9XLDk36$l_luS~>e1Ejb1V|@!5AB2|{3n_U9)Gq& z6&*Zj+w8W--#(RC_BEw_O>?faFEGDp!M^C*n{w^d4%-TKAy00Q1YmN5?reYeiQd9w z^sw{%eC>HAzwU7|73Tln(~M&W43?ce&8w(g!?NA%nCNRK8rMHYYTrnwNcT33Mf(F& ziEA%SzchO(?Q5GaU-WHHxwdO3=)wsmDX=7L3U7=eC5s*7A;7u8xuM)?M0kp8$#I`% zZ;^&An>aZMer=NXq$PWIXWrusxw-81G*krr_^((|@5Y?$A!n;G;))F{p@2e2>j68^ z*DTv6ZDGsvKqK@nHsECQTy;e2hp#Y|N37h+bI)_J@{8Oh>+{@29<6?3wApGiTG7)i zW4>~uXEvw#-sX*O0CHO<+D;{hC^`YW0p4L;Tb<=$W zyX98BPsQU13t}(YmB+)FQ@%t=5{c^9FLp_R(Sm?Vx{Vtz4TQVbFlJP@*~{Q0OkMax zf<~7On$EC>laRcjYyOE11@TXBZ71ye&wv5!bNSte`IYjjnM>CXq>6+u?)qzAdnD!C z@)=ixhP%Gn*|wkdEcx0pmZDO;*Eh~y`q6=z!x@*e60gFRdFy=tqVUkHJ>%jw2+Q@m z()GI*S{5#SP`Olpbfu;3&z@RoYFTdDlWy9xaO!s3VpGqZnw~H2d$|qprSg>xAJ=Ta zC4ObY|3OvFMpTv7eq2$5s?yqj%D8C_UuGIPf5o*Ir(c|FnSWyH#YJCd%GIg#WBo7N zoZNSs4tcF_db{^q{zFlByXE~#yna|!Mrpgdd$0Y&-4-f$@>JeyrSg9FA-nyT7OMZH zji<7m>VN6sk*aP}JJc9T|2vnhLT&M01^8cCljXR4){2f5oz|HSKGi z3(xOgkd}Opu2gTBDZ&-Na(P?29Q=DevRJ+^RkZJm`=y+}@iWfmuFP1h#g!}7b+h}g zzj(*r`o-OfhSx5q%C`dFiz`3&S5O>F<(E`&qxYAH<1jJ)7-2k#bcKA#FBf%kf939O zw7zfac33{N@+f}j@O9VNKdiJ+xtgbPjg`s`)S8FHgeVM&&!7Oikt=LBPFj9s5iPm) zq9F}jQ>d2avQ_6*1G^xySY%$)iY_p-k^?Qc%`T2rkL z(;4r-S6a8?FTd+=$asMptDJ+BbBCdv^Gb*6MU(M_H zuE`PgU@3*XJXu1&Vvl)q1UzS)_7(f2?OQ#QwnAZuqLl^Q>`9nxB&#rpwsR1D3YeVS zkRZPldqjJozLPK;lRW8Fh=FtD#lTraCpmtvSVh+r%cT7*1qrNq^4aPYhlNX+0zVsr zH|a3G2-xVJ_%`k+5#z=7S@UWDk3@uKg<(-_Bko1v#;C&|1vrqca0Z2uGpyPJbYYL~ z27xD%`A!jZ%p4pE_+d4r0l;I#*qFJ2`EV7S|8ISxC;&iD|Ab(K8=vj|?u&0!-K}au%wT2B-J1H@ z!#{G*J-e_6yNa}rZXPj&)n$kwEG9tNUZ>{^yjKD5_eAM-vL|r-qZ7Z+8yw6SalTs)ObkC;TJ%$XqMFO>@1A zCGAtz6>rJZV=Lvg%jH|rzoUu zwjN3eJ&R?BQ$>eYd<|3MBqe60l&^D6yyNSfA5Jq>mSN9Zd|zN2qe9ga3?d>Si6Hf$ zS`-YPPllrG=L$j984QZ?Fsj{(VU=jEg&Hgu;n>L`1ZE|psuMqiki^IZ)rA<`xJ)I) z@Lxn@T-4mH@GF2}8jip$dOwBt5xg_!xoR7V$D_>d(GHU08swKKd6~x8PsiXtkx6*S-=~C` zNu=4S_WmS7`Bc{lcB>PLYS=JGO~tyuJ`C?}F!&ZPpGPeVjD1`?+kc67nG!N@6w-CR z_%`>c#btM8D!9_htH&}$TuIfn7p7lWDXz@VmWvzG#SJSZRm&w!>5?WCu0^M#dbdw~ zu5a*;l&yNU^!2KnRdd$4XWkrmV_>25-O6_=Z}acl-?J~2e8B(8{-Hg!vp3y(Bqbb4 z*B)KvTy{rhL;jSX+O0hVt7?{i-Eq?~tIT!3`Q#fjQKAo1Qm3>B_Ac0tyWE6t5OjsmqVADzD4fkz)>j>9yo^GUKE-a2)N; zO>Z6!8`OHeHRGi>0PxaA|F#%!jJq(B2!kZdhx7z`R$oAp8;qodBH_1Y9@d_hh*rrV z+SX~aOU_{z3omgXyaXj&o4X+roNB|dQ9ZD(5YwGle2(3Y8(Pi-x8#F`Mh()1xgf@& z9zl*Ul?9I;Tc|u>(5+o9e`h6$)rzUoM`p?AsGwNhU5oASVX%Y0(7d{4@^C*|71P!WnMv&Mc(OZnH7{2NM0*OA|$ggMRL zr4lVlCPps*0!c2L|1VTY$*Z)4y(oO~3fR0AY~EwDcN$C$MdE454Bmp`N4DQm&8L)T z#6f`ah{Hhr)qg}wK5|p8<sA|<@eWA`zR%(7_0W-h^#<^MA&me^SC&1k4e5Wm5(U24jh^GXjUMbfbDpW>n(eF zG(Btmb2>g^Qqa8}T=lMny2YwTr@d45sl-Z2*|peoZ1(ir;rY#rCA*-J*D>eX&gmzo zj?O&uv9D^Ss_sVQdStn3OS+0Q^k){Uc3ijKD_Bd8ww;ih{_>gLsfm=UR%1@ZYnc;~ zTn=+01k`orQ}kwzL*st;W%hZwhhw4CFHtig7e^@t~lR(2sZ#a%%dG;$j zMJ7U#38L!I`;bwmdPdm~vB`*(iEd=lYE*AdxSLGpr+Tt6Vwyqel(q0SnOP-dgs4us z$ayv-%L@dENum-eJx+~QvUP}$t5&jd9;Sw$QBq0?T}8;xQt})U{E}AtjWPB7E2=2b zD|9?jeP#y@gS4P^!XDK|tC0UA!TL{>kTtAYaW~Flp;+J(3t^YvrPk*ud4Uo#d6+`ZZ_Q|G;G-m&0GZF(fdZG`UYF1l7SUGlN3^fQaQxMbDp#cx0DB`~!FG%dU8 z(ylr*-YM%{bREgqVLpMJ=gl;M!gbgxpDscYspV!GtbWQId= zzK3NChgaz>^CVxzm%?bUzhTdCD3UpYY@vUZvilG9S^2%QkKE@dzdz*g@SUkm`|bm9 f=lwb#UpHHOpF?(k6VJO-O}iEz`hMOMC$ diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/tests.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/tests.cpython-312.pyc deleted file mode 100644 index c8316b4b4cae3ed95d1075ca1da1c3ca7d9a0ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9006 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

rlzr5|PrH;kTW&F~1bH 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 diff --git a/lib/python3.12/site-packages/jinja2/__pycache__/visitor.cpython-312.pyc b/lib/python3.12/site-packages/jinja2/__pycache__/visitor.cpython-312.pyc deleted file mode 100644 index 3e95e8ea3f5d432625c12aa5acbfa79c8df04ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5367 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 diff --git a/lib/python3.12/site-packages/jinja2/_identifier.py b/lib/python3.12/site-packages/jinja2/_identifier.py deleted file mode 100644 index 928c150..0000000 --- a/lib/python3.12/site-packages/jinja2/_identifier.py +++ /dev/null @@ -1,6 +0,0 @@ -import re - -# generated by scripts/generate_identifier_pattern.py -pattern = re.compile( - r"[\w·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࣓-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣ৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఄా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣංඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ູົຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍ᢅᢆᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-᪽ᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭ᳲ-᳴᳷-᳹᷀-᷹᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰℘℮⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣠-꣱ꣿꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯︳︴﹍-﹏_𐇽𐋠𐍶-𐍺𐨁-𐨃𐨅𐨆𐨌-𐨏𐨸-𐨿𐨺𐫦𐫥𐴤-𐽆𐴧-𐽐𑀀-𑀂𑀸-𑁆𑁿-𑂂𑂰-𑂺𑄀-𑄂𑄧-𑄴𑅅𑅆𑅳𑆀-𑆂𑆳-𑇀𑇉-𑇌𑈬-𑈷𑈾𑋟-𑋪𑌀-𑌃𑌻𑌼𑌾-𑍄𑍇𑍈𑍋-𑍍𑍗𑍢𑍣𑍦-𑍬𑍰-𑍴𑐵-𑑆𑑞𑒰-𑓃𑖯-𑖵𑖸-𑗀𑗜𑗝𑘰-𑙀𑚫-𑚷𑜝-𑜫𑠬-𑠺𑨁-𑨊𑨳-𑨹𑨻-𑨾𑩇𑩑-𑩛𑪊-𑪙𑰯-𑰶𑰸-𑰿𑲒-𑲧𑲩-𑲶𑴱-𑴶𑴺𑴼𑴽𑴿-𑵅𑵇𑶊-𑶎𑶐𑶑𑶓-𑶗𑻳-𑻶𖫰-𖫴𖬰-𖬶𖽑-𖽾𖾏-𖾒𛲝𛲞𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞣐𞀪-𞣖𞥄-𞥊󠄀-󠇯]+" # noqa: B950 -) diff --git a/lib/python3.12/site-packages/jinja2/async_utils.py b/lib/python3.12/site-packages/jinja2/async_utils.py deleted file mode 100644 index 715d701..0000000 --- a/lib/python3.12/site-packages/jinja2/async_utils.py +++ /dev/null @@ -1,84 +0,0 @@ -import inspect -import typing as t -from functools import WRAPPER_ASSIGNMENTS -from functools import wraps - -from .utils import _PassArg -from .utils import pass_eval_context - -V = t.TypeVar("V") - - -def async_variant(normal_func): # type: ignore - def decorator(async_func): # type: ignore - pass_arg = _PassArg.from_obj(normal_func) - need_eval_context = pass_arg is None - - if pass_arg is _PassArg.environment: - - def is_async(args: t.Any) -> bool: - return t.cast(bool, args[0].is_async) - - else: - - def is_async(args: t.Any) -> bool: - return t.cast(bool, args[0].environment.is_async) - - # Take the doc and annotations from the sync function, but the - # name from the async function. Pallets-Sphinx-Themes - # build_function_directive expects __wrapped__ to point to the - # sync function. - async_func_attrs = ("__module__", "__name__", "__qualname__") - normal_func_attrs = tuple(set(WRAPPER_ASSIGNMENTS).difference(async_func_attrs)) - - @wraps(normal_func, assigned=normal_func_attrs) - @wraps(async_func, assigned=async_func_attrs, updated=()) - def wrapper(*args, **kwargs): # type: ignore - b = is_async(args) - - if need_eval_context: - args = args[1:] - - if b: - return async_func(*args, **kwargs) - - return normal_func(*args, **kwargs) - - if need_eval_context: - wrapper = pass_eval_context(wrapper) - - wrapper.jinja_async_variant = True - return wrapper - - return decorator - - -_common_primitives = {int, float, bool, str, list, dict, tuple, type(None)} - - -async def auto_await(value: t.Union[t.Awaitable["V"], "V"]) -> "V": - # Avoid a costly call to isawaitable - if type(value) in _common_primitives: - return t.cast("V", value) - - if inspect.isawaitable(value): - return await t.cast("t.Awaitable[V]", value) - - return t.cast("V", value) - - -async def auto_aiter( - iterable: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", -) -> "t.AsyncIterator[V]": - if hasattr(iterable, "__aiter__"): - async for item in t.cast("t.AsyncIterable[V]", iterable): - yield item - else: - for item in iterable: - yield item - - -async def auto_to_list( - value: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", -) -> t.List["V"]: - return [x async for x in auto_aiter(value)] diff --git a/lib/python3.12/site-packages/jinja2/bccache.py b/lib/python3.12/site-packages/jinja2/bccache.py deleted file mode 100644 index d0ddf56..0000000 --- a/lib/python3.12/site-packages/jinja2/bccache.py +++ /dev/null @@ -1,406 +0,0 @@ -"""The optional bytecode cache system. This is useful if you have very -complex template situations and the compilation of all those templates -slows down your application too much. - -Situations where this is useful are often forking web applications that -are initialized on the first request. -""" -import errno -import fnmatch -import marshal -import os -import pickle -import stat -import sys -import tempfile -import typing as t -from hashlib import sha1 -from io import BytesIO -from types import CodeType - -if t.TYPE_CHECKING: - import typing_extensions as te - from .environment import Environment - - class _MemcachedClient(te.Protocol): - def get(self, key: str) -> bytes: - ... - - def set(self, key: str, value: bytes, timeout: t.Optional[int] = None) -> None: - ... - - -bc_version = 5 -# Magic bytes to identify Jinja bytecode cache files. Contains the -# Python major and minor version to avoid loading incompatible bytecode -# if a project upgrades its Python version. -bc_magic = ( - b"j2" - + pickle.dumps(bc_version, 2) - + pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1], 2) -) - - -class Bucket: - """Buckets are used to store the bytecode for one template. It's created - and initialized by the bytecode cache and passed to the loading functions. - - The buckets get an internal checksum from the cache assigned and use this - to automatically reject outdated cache material. Individual bytecode - cache subclasses don't have to care about cache invalidation. - """ - - def __init__(self, environment: "Environment", key: str, checksum: str) -> None: - self.environment = environment - self.key = key - self.checksum = checksum - self.reset() - - def reset(self) -> None: - """Resets the bucket (unloads the bytecode).""" - self.code: t.Optional[CodeType] = None - - def load_bytecode(self, f: t.BinaryIO) -> None: - """Loads bytecode from a file or file like object.""" - # make sure the magic header is correct - magic = f.read(len(bc_magic)) - if magic != bc_magic: - self.reset() - return - # the source code of the file changed, we need to reload - checksum = pickle.load(f) - if self.checksum != checksum: - self.reset() - return - # if marshal_load fails then we need to reload - try: - self.code = marshal.load(f) - except (EOFError, ValueError, TypeError): - self.reset() - return - - def write_bytecode(self, f: t.IO[bytes]) -> None: - """Dump the bytecode into the file or file like object passed.""" - if self.code is None: - raise TypeError("can't write empty bucket") - f.write(bc_magic) - pickle.dump(self.checksum, f, 2) - marshal.dump(self.code, f) - - def bytecode_from_string(self, string: bytes) -> None: - """Load bytecode from bytes.""" - self.load_bytecode(BytesIO(string)) - - def bytecode_to_string(self) -> bytes: - """Return the bytecode as bytes.""" - out = BytesIO() - self.write_bytecode(out) - return out.getvalue() - - -class BytecodeCache: - """To implement your own bytecode cache you have to subclass this class - and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of - these methods are passed a :class:`~jinja2.bccache.Bucket`. - - A very basic bytecode cache that saves the bytecode on the file system:: - - from os import path - - class MyCache(BytecodeCache): - - def __init__(self, directory): - self.directory = directory - - def load_bytecode(self, bucket): - filename = path.join(self.directory, bucket.key) - if path.exists(filename): - with open(filename, 'rb') as f: - bucket.load_bytecode(f) - - def dump_bytecode(self, bucket): - filename = path.join(self.directory, bucket.key) - with open(filename, 'wb') as f: - bucket.write_bytecode(f) - - A more advanced version of a filesystem based bytecode cache is part of - Jinja. - """ - - def load_bytecode(self, bucket: Bucket) -> None: - """Subclasses have to override this method to load bytecode into a - bucket. If they are not able to find code in the cache for the - bucket, it must not do anything. - """ - raise NotImplementedError() - - def dump_bytecode(self, bucket: Bucket) -> None: - """Subclasses have to override this method to write the bytecode - from a bucket back to the cache. If it unable to do so it must not - fail silently but raise an exception. - """ - raise NotImplementedError() - - def clear(self) -> None: - """Clears the cache. This method is not used by Jinja but should be - implemented to allow applications to clear the bytecode cache used - by a particular environment. - """ - - def get_cache_key( - self, name: str, filename: t.Optional[t.Union[str]] = None - ) -> str: - """Returns the unique hash key for this template name.""" - hash = sha1(name.encode("utf-8")) - - if filename is not None: - hash.update(f"|{filename}".encode()) - - return hash.hexdigest() - - def get_source_checksum(self, source: str) -> str: - """Returns a checksum for the source.""" - return sha1(source.encode("utf-8")).hexdigest() - - def get_bucket( - self, - environment: "Environment", - name: str, - filename: t.Optional[str], - source: str, - ) -> Bucket: - """Return a cache bucket for the given template. All arguments are - mandatory but filename may be `None`. - """ - key = self.get_cache_key(name, filename) - checksum = self.get_source_checksum(source) - bucket = Bucket(environment, key, checksum) - self.load_bytecode(bucket) - return bucket - - def set_bucket(self, bucket: Bucket) -> None: - """Put the bucket into the cache.""" - self.dump_bytecode(bucket) - - -class FileSystemBytecodeCache(BytecodeCache): - """A bytecode cache that stores bytecode on the filesystem. It accepts - two arguments: The directory where the cache items are stored and a - pattern string that is used to build the filename. - - If no directory is specified a default cache directory is selected. On - Windows the user's temp directory is used, on UNIX systems a directory - is created for the user in the system temp directory. - - The pattern can be used to have multiple separate caches operate on the - same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s`` - is replaced with the cache key. - - >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache') - - This bytecode cache supports clearing of the cache using the clear method. - """ - - def __init__( - self, directory: t.Optional[str] = None, pattern: str = "__jinja2_%s.cache" - ) -> None: - if directory is None: - directory = self._get_default_cache_dir() - self.directory = directory - self.pattern = pattern - - def _get_default_cache_dir(self) -> str: - def _unsafe_dir() -> "te.NoReturn": - raise RuntimeError( - "Cannot determine safe temp directory. You " - "need to explicitly provide one." - ) - - tmpdir = tempfile.gettempdir() - - # On windows the temporary directory is used specific unless - # explicitly forced otherwise. We can just use that. - if os.name == "nt": - return tmpdir - if not hasattr(os, "getuid"): - _unsafe_dir() - - dirname = f"_jinja2-cache-{os.getuid()}" - actual_dir = os.path.join(tmpdir, dirname) - - try: - os.mkdir(actual_dir, stat.S_IRWXU) - except OSError as e: - if e.errno != errno.EEXIST: - raise - try: - os.chmod(actual_dir, stat.S_IRWXU) - actual_dir_stat = os.lstat(actual_dir) - if ( - actual_dir_stat.st_uid != os.getuid() - or not stat.S_ISDIR(actual_dir_stat.st_mode) - or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU - ): - _unsafe_dir() - except OSError as e: - if e.errno != errno.EEXIST: - raise - - actual_dir_stat = os.lstat(actual_dir) - if ( - actual_dir_stat.st_uid != os.getuid() - or not stat.S_ISDIR(actual_dir_stat.st_mode) - or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU - ): - _unsafe_dir() - - return actual_dir - - def _get_cache_filename(self, bucket: Bucket) -> str: - return os.path.join(self.directory, self.pattern % (bucket.key,)) - - def load_bytecode(self, bucket: Bucket) -> None: - filename = self._get_cache_filename(bucket) - - # Don't test for existence before opening the file, since the - # file could disappear after the test before the open. - try: - f = open(filename, "rb") - except (FileNotFoundError, IsADirectoryError, PermissionError): - # PermissionError can occur on Windows when an operation is - # in progress, such as calling clear(). - return - - with f: - bucket.load_bytecode(f) - - def dump_bytecode(self, bucket: Bucket) -> None: - # Write to a temporary file, then rename to the real name after - # writing. This avoids another process reading the file before - # it is fully written. - name = self._get_cache_filename(bucket) - f = tempfile.NamedTemporaryFile( - mode="wb", - dir=os.path.dirname(name), - prefix=os.path.basename(name), - suffix=".tmp", - delete=False, - ) - - def remove_silent() -> None: - try: - os.remove(f.name) - except OSError: - # Another process may have called clear(). On Windows, - # another program may be holding the file open. - pass - - try: - with f: - bucket.write_bytecode(f) - except BaseException: - remove_silent() - raise - - try: - os.replace(f.name, name) - except OSError: - # Another process may have called clear(). On Windows, - # another program may be holding the file open. - remove_silent() - except BaseException: - remove_silent() - raise - - def clear(self) -> None: - # imported lazily here because google app-engine doesn't support - # write access on the file system and the function does not exist - # normally. - from os import remove - - files = fnmatch.filter(os.listdir(self.directory), self.pattern % ("*",)) - for filename in files: - try: - remove(os.path.join(self.directory, filename)) - except OSError: - pass - - -class MemcachedBytecodeCache(BytecodeCache): - """This class implements a bytecode cache that uses a memcache cache for - storing the information. It does not enforce a specific memcache library - (tummy's memcache or cmemcache) but will accept any class that provides - the minimal interface required. - - Libraries compatible with this class: - - - `cachelib `_ - - `python-memcached `_ - - (Unfortunately the django cache interface is not compatible because it - does not support storing binary data, only text. You can however pass - the underlying cache client to the bytecode cache which is available - as `django.core.cache.cache._client`.) - - The minimal interface for the client passed to the constructor is this: - - .. class:: MinimalClientInterface - - .. method:: set(key, value[, timeout]) - - Stores the bytecode in the cache. `value` is a string and - `timeout` the timeout of the key. If timeout is not provided - a default timeout or no timeout should be assumed, if it's - provided it's an integer with the number of seconds the cache - item should exist. - - .. method:: get(key) - - Returns the value for the cache key. If the item does not - exist in the cache the return value must be `None`. - - The other arguments to the constructor are the prefix for all keys that - is added before the actual cache key and the timeout for the bytecode in - the cache system. We recommend a high (or no) timeout. - - This bytecode cache does not support clearing of used items in the cache. - The clear method is a no-operation function. - - .. versionadded:: 2.7 - Added support for ignoring memcache errors through the - `ignore_memcache_errors` parameter. - """ - - def __init__( - self, - client: "_MemcachedClient", - prefix: str = "jinja2/bytecode/", - timeout: t.Optional[int] = None, - ignore_memcache_errors: bool = True, - ): - self.client = client - self.prefix = prefix - self.timeout = timeout - self.ignore_memcache_errors = ignore_memcache_errors - - def load_bytecode(self, bucket: Bucket) -> None: - try: - code = self.client.get(self.prefix + bucket.key) - except Exception: - if not self.ignore_memcache_errors: - raise - else: - bucket.bytecode_from_string(code) - - def dump_bytecode(self, bucket: Bucket) -> None: - key = self.prefix + bucket.key - value = bucket.bytecode_to_string() - - try: - if self.timeout is not None: - self.client.set(key, value, self.timeout) - else: - self.client.set(key, value) - except Exception: - if not self.ignore_memcache_errors: - raise diff --git a/lib/python3.12/site-packages/jinja2/compiler.py b/lib/python3.12/site-packages/jinja2/compiler.py deleted file mode 100644 index ff95c80..0000000 --- a/lib/python3.12/site-packages/jinja2/compiler.py +++ /dev/null @@ -1,1956 +0,0 @@ -"""Compiles nodes from the parser into Python code.""" -import typing as t -from contextlib import contextmanager -from functools import update_wrapper -from io import StringIO -from itertools import chain -from keyword import iskeyword as is_python_keyword - -from markupsafe import escape -from markupsafe import Markup - -from . import nodes -from .exceptions import TemplateAssertionError -from .idtracking import Symbols -from .idtracking import VAR_LOAD_ALIAS -from .idtracking import VAR_LOAD_PARAMETER -from .idtracking import VAR_LOAD_RESOLVE -from .idtracking import VAR_LOAD_UNDEFINED -from .nodes import EvalContext -from .optimizer import Optimizer -from .utils import _PassArg -from .utils import concat -from .visitor import NodeVisitor - -if t.TYPE_CHECKING: - import typing_extensions as te - from .environment import Environment - -F = t.TypeVar("F", bound=t.Callable[..., t.Any]) - -operators = { - "eq": "==", - "ne": "!=", - "gt": ">", - "gteq": ">=", - "lt": "<", - "lteq": "<=", - "in": "in", - "notin": "not in", -} - - -def optimizeconst(f: F) -> F: - def new_func( - self: "CodeGenerator", node: nodes.Expr, frame: "Frame", **kwargs: t.Any - ) -> t.Any: - # Only optimize if the frame is not volatile - if self.optimizer is not None and not frame.eval_ctx.volatile: - new_node = self.optimizer.visit(node, frame.eval_ctx) - - if new_node != node: - return self.visit(new_node, frame) - - return f(self, node, frame, **kwargs) - - return update_wrapper(t.cast(F, new_func), f) - - -def _make_binop(op: str) -> t.Callable[["CodeGenerator", nodes.BinExpr, "Frame"], None]: - @optimizeconst - def visitor(self: "CodeGenerator", node: nodes.BinExpr, frame: Frame) -> None: - if ( - self.environment.sandboxed - and op in self.environment.intercepted_binops # type: ignore - ): - self.write(f"environment.call_binop(context, {op!r}, ") - self.visit(node.left, frame) - self.write(", ") - self.visit(node.right, frame) - else: - self.write("(") - self.visit(node.left, frame) - self.write(f" {op} ") - self.visit(node.right, frame) - - self.write(")") - - return visitor - - -def _make_unop( - op: str, -) -> t.Callable[["CodeGenerator", nodes.UnaryExpr, "Frame"], None]: - @optimizeconst - def visitor(self: "CodeGenerator", node: nodes.UnaryExpr, frame: Frame) -> None: - if ( - self.environment.sandboxed - and op in self.environment.intercepted_unops # type: ignore - ): - self.write(f"environment.call_unop(context, {op!r}, ") - self.visit(node.node, frame) - else: - self.write("(" + op) - self.visit(node.node, frame) - - self.write(")") - - return visitor - - -def generate( - node: nodes.Template, - environment: "Environment", - name: t.Optional[str], - filename: t.Optional[str], - stream: t.Optional[t.TextIO] = None, - defer_init: bool = False, - optimized: bool = True, -) -> t.Optional[str]: - """Generate the python source for a node tree.""" - if not isinstance(node, nodes.Template): - raise TypeError("Can't compile non template nodes") - - generator = environment.code_generator_class( - environment, name, filename, stream, defer_init, optimized - ) - generator.visit(node) - - if stream is None: - return generator.stream.getvalue() # type: ignore - - return None - - -def has_safe_repr(value: t.Any) -> bool: - """Does the node have a safe representation?""" - if value is None or value is NotImplemented or value is Ellipsis: - return True - - if type(value) in {bool, int, float, complex, range, str, Markup}: - return True - - if type(value) in {tuple, list, set, frozenset}: - return all(has_safe_repr(v) for v in value) - - if type(value) is dict: - return all(has_safe_repr(k) and has_safe_repr(v) for k, v in value.items()) - - return False - - -def find_undeclared( - nodes: t.Iterable[nodes.Node], names: t.Iterable[str] -) -> t.Set[str]: - """Check if the names passed are accessed undeclared. The return value - is a set of all the undeclared names from the sequence of names found. - """ - visitor = UndeclaredNameVisitor(names) - try: - for node in nodes: - visitor.visit(node) - except VisitorExit: - pass - return visitor.undeclared - - -class MacroRef: - def __init__(self, node: t.Union[nodes.Macro, nodes.CallBlock]) -> None: - self.node = node - self.accesses_caller = False - self.accesses_kwargs = False - self.accesses_varargs = False - - -class Frame: - """Holds compile time information for us.""" - - def __init__( - self, - eval_ctx: EvalContext, - parent: t.Optional["Frame"] = None, - level: t.Optional[int] = None, - ) -> None: - self.eval_ctx = eval_ctx - - # the parent of this frame - self.parent = parent - - if parent is None: - self.symbols = Symbols(level=level) - - # in some dynamic inheritance situations the compiler needs to add - # write tests around output statements. - self.require_output_check = False - - # inside some tags we are using a buffer rather than yield statements. - # this for example affects {% filter %} or {% macro %}. If a frame - # is buffered this variable points to the name of the list used as - # buffer. - self.buffer: t.Optional[str] = None - - # the name of the block we're in, otherwise None. - self.block: t.Optional[str] = None - - else: - self.symbols = Symbols(parent.symbols, level=level) - self.require_output_check = parent.require_output_check - self.buffer = parent.buffer - self.block = parent.block - - # a toplevel frame is the root + soft frames such as if conditions. - self.toplevel = False - - # the root frame is basically just the outermost frame, so no if - # conditions. This information is used to optimize inheritance - # situations. - self.rootlevel = False - - # variables set inside of loops and blocks should not affect outer frames, - # but they still needs to be kept track of as part of the active context. - self.loop_frame = False - self.block_frame = False - - # track whether the frame is being used in an if-statement or conditional - # expression as it determines which errors should be raised during runtime - # or compile time. - self.soft_frame = False - - def copy(self) -> "Frame": - """Create a copy of the current one.""" - rv = object.__new__(self.__class__) - rv.__dict__.update(self.__dict__) - rv.symbols = self.symbols.copy() - return rv - - def inner(self, isolated: bool = False) -> "Frame": - """Return an inner frame.""" - if isolated: - return Frame(self.eval_ctx, level=self.symbols.level + 1) - return Frame(self.eval_ctx, self) - - def soft(self) -> "Frame": - """Return a soft frame. A soft frame may not be modified as - standalone thing as it shares the resources with the frame it - was created of, but it's not a rootlevel frame any longer. - - This is only used to implement if-statements and conditional - expressions. - """ - rv = self.copy() - rv.rootlevel = False - rv.soft_frame = True - return rv - - __copy__ = copy - - -class VisitorExit(RuntimeError): - """Exception used by the `UndeclaredNameVisitor` to signal a stop.""" - - -class DependencyFinderVisitor(NodeVisitor): - """A visitor that collects filter and test calls.""" - - def __init__(self) -> None: - self.filters: t.Set[str] = set() - self.tests: t.Set[str] = set() - - def visit_Filter(self, node: nodes.Filter) -> None: - self.generic_visit(node) - self.filters.add(node.name) - - def visit_Test(self, node: nodes.Test) -> None: - self.generic_visit(node) - self.tests.add(node.name) - - def visit_Block(self, node: nodes.Block) -> None: - """Stop visiting at blocks.""" - - -class UndeclaredNameVisitor(NodeVisitor): - """A visitor that checks if a name is accessed without being - declared. This is different from the frame visitor as it will - not stop at closure frames. - """ - - def __init__(self, names: t.Iterable[str]) -> None: - self.names = set(names) - self.undeclared: t.Set[str] = set() - - def visit_Name(self, node: nodes.Name) -> None: - if node.ctx == "load" and node.name in self.names: - self.undeclared.add(node.name) - if self.undeclared == self.names: - raise VisitorExit() - else: - self.names.discard(node.name) - - def visit_Block(self, node: nodes.Block) -> None: - """Stop visiting a blocks.""" - - -class CompilerExit(Exception): - """Raised if the compiler encountered a situation where it just - doesn't make sense to further process the code. Any block that - raises such an exception is not further processed. - """ - - -class CodeGenerator(NodeVisitor): - def __init__( - self, - environment: "Environment", - name: t.Optional[str], - filename: t.Optional[str], - stream: t.Optional[t.TextIO] = None, - defer_init: bool = False, - optimized: bool = True, - ) -> None: - if stream is None: - stream = StringIO() - self.environment = environment - self.name = name - self.filename = filename - self.stream = stream - self.created_block_context = False - self.defer_init = defer_init - self.optimizer: t.Optional[Optimizer] = None - - if optimized: - self.optimizer = Optimizer(environment) - - # aliases for imports - self.import_aliases: t.Dict[str, str] = {} - - # a registry for all blocks. Because blocks are moved out - # into the global python scope they are registered here - self.blocks: t.Dict[str, nodes.Block] = {} - - # the number of extends statements so far - self.extends_so_far = 0 - - # some templates have a rootlevel extends. In this case we - # can safely assume that we're a child template and do some - # more optimizations. - self.has_known_extends = False - - # the current line number - self.code_lineno = 1 - - # registry of all filters and tests (global, not block local) - self.tests: t.Dict[str, str] = {} - self.filters: t.Dict[str, str] = {} - - # the debug information - self.debug_info: t.List[t.Tuple[int, int]] = [] - self._write_debug_info: t.Optional[int] = None - - # the number of new lines before the next write() - self._new_lines = 0 - - # the line number of the last written statement - self._last_line = 0 - - # true if nothing was written so far. - self._first_write = True - - # used by the `temporary_identifier` method to get new - # unique, temporary identifier - self._last_identifier = 0 - - # the current indentation - self._indentation = 0 - - # Tracks toplevel assignments - self._assign_stack: t.List[t.Set[str]] = [] - - # Tracks parameter definition blocks - self._param_def_block: t.List[t.Set[str]] = [] - - # Tracks the current context. - self._context_reference_stack = ["context"] - - @property - def optimized(self) -> bool: - return self.optimizer is not None - - # -- Various compilation helpers - - def fail(self, msg: str, lineno: int) -> "te.NoReturn": - """Fail with a :exc:`TemplateAssertionError`.""" - raise TemplateAssertionError(msg, lineno, self.name, self.filename) - - def temporary_identifier(self) -> str: - """Get a new unique identifier.""" - self._last_identifier += 1 - return f"t_{self._last_identifier}" - - def buffer(self, frame: Frame) -> None: - """Enable buffering for the frame from that point onwards.""" - frame.buffer = self.temporary_identifier() - self.writeline(f"{frame.buffer} = []") - - def return_buffer_contents( - self, frame: Frame, force_unescaped: bool = False - ) -> None: - """Return the buffer contents of the frame.""" - if not force_unescaped: - if frame.eval_ctx.volatile: - self.writeline("if context.eval_ctx.autoescape:") - self.indent() - self.writeline(f"return Markup(concat({frame.buffer}))") - self.outdent() - self.writeline("else:") - self.indent() - self.writeline(f"return concat({frame.buffer})") - self.outdent() - return - elif frame.eval_ctx.autoescape: - self.writeline(f"return Markup(concat({frame.buffer}))") - return - self.writeline(f"return concat({frame.buffer})") - - def indent(self) -> None: - """Indent by one.""" - self._indentation += 1 - - def outdent(self, step: int = 1) -> None: - """Outdent by step.""" - self._indentation -= step - - def start_write(self, frame: Frame, node: t.Optional[nodes.Node] = None) -> None: - """Yield or write into the frame buffer.""" - if frame.buffer is None: - self.writeline("yield ", node) - else: - self.writeline(f"{frame.buffer}.append(", node) - - def end_write(self, frame: Frame) -> None: - """End the writing process started by `start_write`.""" - if frame.buffer is not None: - self.write(")") - - def simple_write( - self, s: str, frame: Frame, node: t.Optional[nodes.Node] = None - ) -> None: - """Simple shortcut for start_write + write + end_write.""" - self.start_write(frame, node) - self.write(s) - self.end_write(frame) - - def blockvisit(self, nodes: t.Iterable[nodes.Node], frame: Frame) -> None: - """Visit a list of nodes as block in a frame. If the current frame - is no buffer a dummy ``if 0: yield None`` is written automatically. - """ - try: - self.writeline("pass") - for node in nodes: - self.visit(node, frame) - except CompilerExit: - pass - - def write(self, x: str) -> None: - """Write a string into the output stream.""" - if self._new_lines: - if not self._first_write: - self.stream.write("\n" * self._new_lines) - self.code_lineno += self._new_lines - if self._write_debug_info is not None: - self.debug_info.append((self._write_debug_info, self.code_lineno)) - self._write_debug_info = None - self._first_write = False - self.stream.write(" " * self._indentation) - self._new_lines = 0 - self.stream.write(x) - - def writeline( - self, x: str, node: t.Optional[nodes.Node] = None, extra: int = 0 - ) -> None: - """Combination of newline and write.""" - self.newline(node, extra) - self.write(x) - - def newline(self, node: t.Optional[nodes.Node] = None, extra: int = 0) -> None: - """Add one or more newlines before the next write.""" - self._new_lines = max(self._new_lines, 1 + extra) - if node is not None and node.lineno != self._last_line: - self._write_debug_info = node.lineno - self._last_line = node.lineno - - def signature( - self, - node: t.Union[nodes.Call, nodes.Filter, nodes.Test], - frame: Frame, - extra_kwargs: t.Optional[t.Mapping[str, t.Any]] = None, - ) -> None: - """Writes a function call to the stream for the current node. - A leading comma is added automatically. The extra keyword - arguments may not include python keywords otherwise a syntax - error could occur. The extra keyword arguments should be given - as python dict. - """ - # if any of the given keyword arguments is a python keyword - # we have to make sure that no invalid call is created. - kwarg_workaround = any( - is_python_keyword(t.cast(str, k)) - for k in chain((x.key for x in node.kwargs), extra_kwargs or ()) - ) - - for arg in node.args: - self.write(", ") - self.visit(arg, frame) - - if not kwarg_workaround: - for kwarg in node.kwargs: - self.write(", ") - self.visit(kwarg, frame) - if extra_kwargs is not None: - for key, value in extra_kwargs.items(): - self.write(f", {key}={value}") - if node.dyn_args: - self.write(", *") - self.visit(node.dyn_args, frame) - - if kwarg_workaround: - if node.dyn_kwargs is not None: - self.write(", **dict({") - else: - self.write(", **{") - for kwarg in node.kwargs: - self.write(f"{kwarg.key!r}: ") - self.visit(kwarg.value, frame) - self.write(", ") - if extra_kwargs is not None: - for key, value in extra_kwargs.items(): - self.write(f"{key!r}: {value}, ") - if node.dyn_kwargs is not None: - self.write("}, **") - self.visit(node.dyn_kwargs, frame) - self.write(")") - else: - self.write("}") - - elif node.dyn_kwargs is not None: - self.write(", **") - self.visit(node.dyn_kwargs, frame) - - def pull_dependencies(self, nodes: t.Iterable[nodes.Node]) -> None: - """Find all filter and test names used in the template and - assign them to variables in the compiled namespace. Checking - that the names are registered with the environment is done when - compiling the Filter and Test nodes. If the node is in an If or - CondExpr node, the check is done at runtime instead. - - .. versionchanged:: 3.0 - Filters and tests in If and CondExpr nodes are checked at - runtime instead of compile time. - """ - visitor = DependencyFinderVisitor() - - for node in nodes: - visitor.visit(node) - - for id_map, names, dependency in (self.filters, visitor.filters, "filters"), ( - self.tests, - visitor.tests, - "tests", - ): - for name in sorted(names): - if name not in id_map: - id_map[name] = self.temporary_identifier() - - # add check during runtime that dependencies used inside of executed - # blocks are defined, as this step may be skipped during compile time - self.writeline("try:") - self.indent() - self.writeline(f"{id_map[name]} = environment.{dependency}[{name!r}]") - self.outdent() - self.writeline("except KeyError:") - self.indent() - self.writeline("@internalcode") - self.writeline(f"def {id_map[name]}(*unused):") - self.indent() - self.writeline( - f'raise TemplateRuntimeError("No {dependency[:-1]}' - f' named {name!r} found.")' - ) - self.outdent() - self.outdent() - - def enter_frame(self, frame: Frame) -> None: - undefs = [] - for target, (action, param) in frame.symbols.loads.items(): - if action == VAR_LOAD_PARAMETER: - pass - elif action == VAR_LOAD_RESOLVE: - self.writeline(f"{target} = {self.get_resolve_func()}({param!r})") - elif action == VAR_LOAD_ALIAS: - self.writeline(f"{target} = {param}") - elif action == VAR_LOAD_UNDEFINED: - undefs.append(target) - else: - raise NotImplementedError("unknown load instruction") - if undefs: - self.writeline(f"{' = '.join(undefs)} = missing") - - def leave_frame(self, frame: Frame, with_python_scope: bool = False) -> None: - if not with_python_scope: - undefs = [] - for target in frame.symbols.loads: - undefs.append(target) - if undefs: - self.writeline(f"{' = '.join(undefs)} = missing") - - def choose_async(self, async_value: str = "async ", sync_value: str = "") -> str: - return async_value if self.environment.is_async else sync_value - - def func(self, name: str) -> str: - return f"{self.choose_async()}def {name}" - - def macro_body( - self, node: t.Union[nodes.Macro, nodes.CallBlock], frame: Frame - ) -> t.Tuple[Frame, MacroRef]: - """Dump the function def of a macro or call block.""" - frame = frame.inner() - frame.symbols.analyze_node(node) - macro_ref = MacroRef(node) - - explicit_caller = None - skip_special_params = set() - args = [] - - for idx, arg in enumerate(node.args): - if arg.name == "caller": - explicit_caller = idx - if arg.name in ("kwargs", "varargs"): - skip_special_params.add(arg.name) - args.append(frame.symbols.ref(arg.name)) - - undeclared = find_undeclared(node.body, ("caller", "kwargs", "varargs")) - - if "caller" in undeclared: - # In older Jinja versions there was a bug that allowed caller - # to retain the special behavior even if it was mentioned in - # the argument list. However thankfully this was only really - # working if it was the last argument. So we are explicitly - # checking this now and error out if it is anywhere else in - # the argument list. - if explicit_caller is not None: - try: - node.defaults[explicit_caller - len(node.args)] - except IndexError: - self.fail( - "When defining macros or call blocks the " - 'special "caller" argument must be omitted ' - "or be given a default.", - node.lineno, - ) - else: - args.append(frame.symbols.declare_parameter("caller")) - macro_ref.accesses_caller = True - if "kwargs" in undeclared and "kwargs" not in skip_special_params: - args.append(frame.symbols.declare_parameter("kwargs")) - macro_ref.accesses_kwargs = True - if "varargs" in undeclared and "varargs" not in skip_special_params: - args.append(frame.symbols.declare_parameter("varargs")) - macro_ref.accesses_varargs = True - - # macros are delayed, they never require output checks - frame.require_output_check = False - frame.symbols.analyze_node(node) - self.writeline(f"{self.func('macro')}({', '.join(args)}):", node) - self.indent() - - self.buffer(frame) - self.enter_frame(frame) - - self.push_parameter_definitions(frame) - for idx, arg in enumerate(node.args): - ref = frame.symbols.ref(arg.name) - self.writeline(f"if {ref} is missing:") - self.indent() - try: - default = node.defaults[idx - len(node.args)] - except IndexError: - self.writeline( - f'{ref} = undefined("parameter {arg.name!r} was not provided",' - f" name={arg.name!r})" - ) - else: - self.writeline(f"{ref} = ") - self.visit(default, frame) - self.mark_parameter_stored(ref) - self.outdent() - self.pop_parameter_definitions() - - self.blockvisit(node.body, frame) - self.return_buffer_contents(frame, force_unescaped=True) - self.leave_frame(frame, with_python_scope=True) - self.outdent() - - return frame, macro_ref - - def macro_def(self, macro_ref: MacroRef, frame: Frame) -> None: - """Dump the macro definition for the def created by macro_body.""" - arg_tuple = ", ".join(repr(x.name) for x in macro_ref.node.args) - name = getattr(macro_ref.node, "name", None) - if len(macro_ref.node.args) == 1: - arg_tuple += "," - self.write( - f"Macro(environment, macro, {name!r}, ({arg_tuple})," - f" {macro_ref.accesses_kwargs!r}, {macro_ref.accesses_varargs!r}," - f" {macro_ref.accesses_caller!r}, context.eval_ctx.autoescape)" - ) - - def position(self, node: nodes.Node) -> str: - """Return a human readable position for the node.""" - rv = f"line {node.lineno}" - if self.name is not None: - rv = f"{rv} in {self.name!r}" - return rv - - def dump_local_context(self, frame: Frame) -> str: - items_kv = ", ".join( - f"{name!r}: {target}" - for name, target in frame.symbols.dump_stores().items() - ) - return f"{{{items_kv}}}" - - def write_commons(self) -> None: - """Writes a common preamble that is used by root and block functions. - Primarily this sets up common local helpers and enforces a generator - through a dead branch. - """ - self.writeline("resolve = context.resolve_or_missing") - self.writeline("undefined = environment.undefined") - self.writeline("concat = environment.concat") - # always use the standard Undefined class for the implicit else of - # conditional expressions - self.writeline("cond_expr_undefined = Undefined") - self.writeline("if 0: yield None") - - def push_parameter_definitions(self, frame: Frame) -> None: - """Pushes all parameter targets from the given frame into a local - stack that permits tracking of yet to be assigned parameters. In - particular this enables the optimization from `visit_Name` to skip - undefined expressions for parameters in macros as macros can reference - otherwise unbound parameters. - """ - self._param_def_block.append(frame.symbols.dump_param_targets()) - - def pop_parameter_definitions(self) -> None: - """Pops the current parameter definitions set.""" - self._param_def_block.pop() - - def mark_parameter_stored(self, target: str) -> None: - """Marks a parameter in the current parameter definitions as stored. - This will skip the enforced undefined checks. - """ - if self._param_def_block: - self._param_def_block[-1].discard(target) - - def push_context_reference(self, target: str) -> None: - self._context_reference_stack.append(target) - - def pop_context_reference(self) -> None: - self._context_reference_stack.pop() - - def get_context_ref(self) -> str: - return self._context_reference_stack[-1] - - def get_resolve_func(self) -> str: - target = self._context_reference_stack[-1] - if target == "context": - return "resolve" - return f"{target}.resolve" - - def derive_context(self, frame: Frame) -> str: - return f"{self.get_context_ref()}.derived({self.dump_local_context(frame)})" - - def parameter_is_undeclared(self, target: str) -> bool: - """Checks if a given target is an undeclared parameter.""" - if not self._param_def_block: - return False - return target in self._param_def_block[-1] - - def push_assign_tracking(self) -> None: - """Pushes a new layer for assignment tracking.""" - self._assign_stack.append(set()) - - def pop_assign_tracking(self, frame: Frame) -> None: - """Pops the topmost level for assignment tracking and updates the - context variables if necessary. - """ - vars = self._assign_stack.pop() - if ( - not frame.block_frame - and not frame.loop_frame - and not frame.toplevel - or not vars - ): - return - public_names = [x for x in vars if x[:1] != "_"] - if len(vars) == 1: - name = next(iter(vars)) - ref = frame.symbols.ref(name) - if frame.loop_frame: - self.writeline(f"_loop_vars[{name!r}] = {ref}") - return - if frame.block_frame: - self.writeline(f"_block_vars[{name!r}] = {ref}") - return - self.writeline(f"context.vars[{name!r}] = {ref}") - else: - if frame.loop_frame: - self.writeline("_loop_vars.update({") - elif frame.block_frame: - self.writeline("_block_vars.update({") - else: - self.writeline("context.vars.update({") - for idx, name in enumerate(vars): - if idx: - self.write(", ") - ref = frame.symbols.ref(name) - self.write(f"{name!r}: {ref}") - self.write("})") - if not frame.block_frame and not frame.loop_frame and public_names: - if len(public_names) == 1: - self.writeline(f"context.exported_vars.add({public_names[0]!r})") - else: - names_str = ", ".join(map(repr, public_names)) - self.writeline(f"context.exported_vars.update(({names_str}))") - - # -- Statement Visitors - - def visit_Template( - self, node: nodes.Template, frame: t.Optional[Frame] = None - ) -> None: - assert frame is None, "no root frame allowed" - eval_ctx = EvalContext(self.environment, self.name) - - from .runtime import exported, async_exported - - if self.environment.is_async: - exported_names = sorted(exported + async_exported) - else: - exported_names = sorted(exported) - - self.writeline("from jinja2.runtime import " + ", ".join(exported_names)) - - # if we want a deferred initialization we cannot move the - # environment into a local name - envenv = "" if self.defer_init else ", environment=environment" - - # do we have an extends tag at all? If not, we can save some - # overhead by just not processing any inheritance code. - have_extends = node.find(nodes.Extends) is not None - - # find all blocks - for block in node.find_all(nodes.Block): - if block.name in self.blocks: - self.fail(f"block {block.name!r} defined twice", block.lineno) - self.blocks[block.name] = block - - # find all imports and import them - for import_ in node.find_all(nodes.ImportedName): - if import_.importname not in self.import_aliases: - imp = import_.importname - self.import_aliases[imp] = alias = self.temporary_identifier() - if "." in imp: - module, obj = imp.rsplit(".", 1) - self.writeline(f"from {module} import {obj} as {alias}") - else: - self.writeline(f"import {imp} as {alias}") - - # add the load name - self.writeline(f"name = {self.name!r}") - - # generate the root render function. - self.writeline( - f"{self.func('root')}(context, missing=missing{envenv}):", extra=1 - ) - self.indent() - self.write_commons() - - # process the root - frame = Frame(eval_ctx) - if "self" in find_undeclared(node.body, ("self",)): - ref = frame.symbols.declare_parameter("self") - self.writeline(f"{ref} = TemplateReference(context)") - frame.symbols.analyze_node(node) - frame.toplevel = frame.rootlevel = True - frame.require_output_check = have_extends and not self.has_known_extends - if have_extends: - self.writeline("parent_template = None") - self.enter_frame(frame) - self.pull_dependencies(node.body) - self.blockvisit(node.body, frame) - self.leave_frame(frame, with_python_scope=True) - self.outdent() - - # make sure that the parent root is called. - if have_extends: - if not self.has_known_extends: - self.indent() - self.writeline("if parent_template is not None:") - self.indent() - if not self.environment.is_async: - self.writeline("yield from parent_template.root_render_func(context)") - else: - self.writeline( - "async for event in parent_template.root_render_func(context):" - ) - self.indent() - self.writeline("yield event") - self.outdent() - self.outdent(1 + (not self.has_known_extends)) - - # at this point we now have the blocks collected and can visit them too. - for name, block in self.blocks.items(): - self.writeline( - f"{self.func('block_' + name)}(context, missing=missing{envenv}):", - block, - 1, - ) - self.indent() - self.write_commons() - # It's important that we do not make this frame a child of the - # toplevel template. This would cause a variety of - # interesting issues with identifier tracking. - block_frame = Frame(eval_ctx) - block_frame.block_frame = True - undeclared = find_undeclared(block.body, ("self", "super")) - if "self" in undeclared: - ref = block_frame.symbols.declare_parameter("self") - self.writeline(f"{ref} = TemplateReference(context)") - if "super" in undeclared: - ref = block_frame.symbols.declare_parameter("super") - self.writeline(f"{ref} = context.super({name!r}, block_{name})") - block_frame.symbols.analyze_node(block) - block_frame.block = name - self.writeline("_block_vars = {}") - self.enter_frame(block_frame) - self.pull_dependencies(block.body) - self.blockvisit(block.body, block_frame) - self.leave_frame(block_frame, with_python_scope=True) - self.outdent() - - blocks_kv_str = ", ".join(f"{x!r}: block_{x}" for x in self.blocks) - self.writeline(f"blocks = {{{blocks_kv_str}}}", extra=1) - debug_kv_str = "&".join(f"{k}={v}" for k, v in self.debug_info) - self.writeline(f"debug_info = {debug_kv_str!r}") - - def visit_Block(self, node: nodes.Block, frame: Frame) -> None: - """Call a block and register it for the template.""" - level = 0 - if frame.toplevel: - # if we know that we are a child template, there is no need to - # check if we are one - if self.has_known_extends: - return - if self.extends_so_far > 0: - self.writeline("if parent_template is None:") - self.indent() - level += 1 - - if node.scoped: - context = self.derive_context(frame) - else: - context = self.get_context_ref() - - if node.required: - self.writeline(f"if len(context.blocks[{node.name!r}]) <= 1:", node) - self.indent() - self.writeline( - f'raise TemplateRuntimeError("Required block {node.name!r} not found")', - node, - ) - self.outdent() - - if not self.environment.is_async and frame.buffer is None: - self.writeline( - f"yield from context.blocks[{node.name!r}][0]({context})", node - ) - else: - self.writeline( - f"{self.choose_async()}for event in" - f" context.blocks[{node.name!r}][0]({context}):", - node, - ) - self.indent() - self.simple_write("event", frame) - self.outdent() - - self.outdent(level) - - def visit_Extends(self, node: nodes.Extends, frame: Frame) -> None: - """Calls the extender.""" - if not frame.toplevel: - self.fail("cannot use extend from a non top-level scope", node.lineno) - - # if the number of extends statements in general is zero so - # far, we don't have to add a check if something extended - # the template before this one. - if self.extends_so_far > 0: - # if we have a known extends we just add a template runtime - # error into the generated code. We could catch that at compile - # time too, but i welcome it not to confuse users by throwing the - # same error at different times just "because we can". - if not self.has_known_extends: - self.writeline("if parent_template is not None:") - self.indent() - self.writeline('raise TemplateRuntimeError("extended multiple times")') - - # if we have a known extends already we don't need that code here - # as we know that the template execution will end here. - if self.has_known_extends: - raise CompilerExit() - else: - self.outdent() - - self.writeline("parent_template = environment.get_template(", node) - self.visit(node.template, frame) - self.write(f", {self.name!r})") - self.writeline("for name, parent_block in parent_template.blocks.items():") - self.indent() - self.writeline("context.blocks.setdefault(name, []).append(parent_block)") - self.outdent() - - # if this extends statement was in the root level we can take - # advantage of that information and simplify the generated code - # in the top level from this point onwards - if frame.rootlevel: - self.has_known_extends = True - - # and now we have one more - self.extends_so_far += 1 - - def visit_Include(self, node: nodes.Include, frame: Frame) -> None: - """Handles includes.""" - if node.ignore_missing: - self.writeline("try:") - self.indent() - - func_name = "get_or_select_template" - if isinstance(node.template, nodes.Const): - if isinstance(node.template.value, str): - func_name = "get_template" - elif isinstance(node.template.value, (tuple, list)): - func_name = "select_template" - elif isinstance(node.template, (nodes.Tuple, nodes.List)): - func_name = "select_template" - - self.writeline(f"template = environment.{func_name}(", node) - self.visit(node.template, frame) - self.write(f", {self.name!r})") - if node.ignore_missing: - self.outdent() - self.writeline("except TemplateNotFound:") - self.indent() - self.writeline("pass") - self.outdent() - self.writeline("else:") - self.indent() - - skip_event_yield = False - if node.with_context: - self.writeline( - f"{self.choose_async()}for event in template.root_render_func(" - "template.new_context(context.get_all(), True," - f" {self.dump_local_context(frame)})):" - ) - elif self.environment.is_async: - self.writeline( - "for event in (await template._get_default_module_async())" - "._body_stream:" - ) - else: - self.writeline("yield from template._get_default_module()._body_stream") - skip_event_yield = True - - if not skip_event_yield: - self.indent() - self.simple_write("event", frame) - self.outdent() - - if node.ignore_missing: - self.outdent() - - def _import_common( - self, node: t.Union[nodes.Import, nodes.FromImport], frame: Frame - ) -> None: - self.write(f"{self.choose_async('await ')}environment.get_template(") - self.visit(node.template, frame) - self.write(f", {self.name!r}).") - - if node.with_context: - f_name = f"make_module{self.choose_async('_async')}" - self.write( - f"{f_name}(context.get_all(), True, {self.dump_local_context(frame)})" - ) - else: - self.write(f"_get_default_module{self.choose_async('_async')}(context)") - - def visit_Import(self, node: nodes.Import, frame: Frame) -> None: - """Visit regular imports.""" - self.writeline(f"{frame.symbols.ref(node.target)} = ", node) - if frame.toplevel: - self.write(f"context.vars[{node.target!r}] = ") - - self._import_common(node, frame) - - if frame.toplevel and not node.target.startswith("_"): - self.writeline(f"context.exported_vars.discard({node.target!r})") - - def visit_FromImport(self, node: nodes.FromImport, frame: Frame) -> None: - """Visit named imports.""" - self.newline(node) - self.write("included_template = ") - self._import_common(node, frame) - var_names = [] - discarded_names = [] - for name in node.names: - if isinstance(name, tuple): - name, alias = name - else: - alias = name - self.writeline( - f"{frame.symbols.ref(alias)} =" - f" getattr(included_template, {name!r}, missing)" - ) - self.writeline(f"if {frame.symbols.ref(alias)} is missing:") - self.indent() - message = ( - "the template {included_template.__name__!r}" - f" (imported on {self.position(node)})" - f" does not export the requested name {name!r}" - ) - self.writeline( - f"{frame.symbols.ref(alias)} = undefined(f{message!r}, name={name!r})" - ) - self.outdent() - if frame.toplevel: - var_names.append(alias) - if not alias.startswith("_"): - discarded_names.append(alias) - - if var_names: - if len(var_names) == 1: - name = var_names[0] - self.writeline(f"context.vars[{name!r}] = {frame.symbols.ref(name)}") - else: - names_kv = ", ".join( - f"{name!r}: {frame.symbols.ref(name)}" for name in var_names - ) - self.writeline(f"context.vars.update({{{names_kv}}})") - if discarded_names: - if len(discarded_names) == 1: - self.writeline(f"context.exported_vars.discard({discarded_names[0]!r})") - else: - names_str = ", ".join(map(repr, discarded_names)) - self.writeline( - f"context.exported_vars.difference_update(({names_str}))" - ) - - def visit_For(self, node: nodes.For, frame: Frame) -> None: - loop_frame = frame.inner() - loop_frame.loop_frame = True - test_frame = frame.inner() - else_frame = frame.inner() - - # try to figure out if we have an extended loop. An extended loop - # is necessary if the loop is in recursive mode if the special loop - # variable is accessed in the body if the body is a scoped block. - extended_loop = ( - node.recursive - or "loop" - in find_undeclared(node.iter_child_nodes(only=("body",)), ("loop",)) - or any(block.scoped for block in node.find_all(nodes.Block)) - ) - - loop_ref = None - if extended_loop: - loop_ref = loop_frame.symbols.declare_parameter("loop") - - loop_frame.symbols.analyze_node(node, for_branch="body") - if node.else_: - else_frame.symbols.analyze_node(node, for_branch="else") - - if node.test: - loop_filter_func = self.temporary_identifier() - test_frame.symbols.analyze_node(node, for_branch="test") - self.writeline(f"{self.func(loop_filter_func)}(fiter):", node.test) - self.indent() - self.enter_frame(test_frame) - self.writeline(self.choose_async("async for ", "for ")) - self.visit(node.target, loop_frame) - self.write(" in ") - self.write(self.choose_async("auto_aiter(fiter)", "fiter")) - self.write(":") - self.indent() - self.writeline("if ", node.test) - self.visit(node.test, test_frame) - self.write(":") - self.indent() - self.writeline("yield ") - self.visit(node.target, loop_frame) - self.outdent(3) - self.leave_frame(test_frame, with_python_scope=True) - - # if we don't have an recursive loop we have to find the shadowed - # variables at that point. Because loops can be nested but the loop - # variable is a special one we have to enforce aliasing for it. - if node.recursive: - self.writeline( - f"{self.func('loop')}(reciter, loop_render_func, depth=0):", node - ) - self.indent() - self.buffer(loop_frame) - - # Use the same buffer for the else frame - else_frame.buffer = loop_frame.buffer - - # make sure the loop variable is a special one and raise a template - # assertion error if a loop tries to write to loop - if extended_loop: - self.writeline(f"{loop_ref} = missing") - - for name in node.find_all(nodes.Name): - if name.ctx == "store" and name.name == "loop": - self.fail( - "Can't assign to special loop variable in for-loop target", - name.lineno, - ) - - if node.else_: - iteration_indicator = self.temporary_identifier() - self.writeline(f"{iteration_indicator} = 1") - - self.writeline(self.choose_async("async for ", "for "), node) - self.visit(node.target, loop_frame) - if extended_loop: - self.write(f", {loop_ref} in {self.choose_async('Async')}LoopContext(") - else: - self.write(" in ") - - if node.test: - self.write(f"{loop_filter_func}(") - if node.recursive: - self.write("reciter") - else: - if self.environment.is_async and not extended_loop: - self.write("auto_aiter(") - self.visit(node.iter, frame) - if self.environment.is_async and not extended_loop: - self.write(")") - if node.test: - self.write(")") - - if node.recursive: - self.write(", undefined, loop_render_func, depth):") - else: - self.write(", undefined):" if extended_loop else ":") - - self.indent() - self.enter_frame(loop_frame) - - self.writeline("_loop_vars = {}") - self.blockvisit(node.body, loop_frame) - if node.else_: - self.writeline(f"{iteration_indicator} = 0") - self.outdent() - self.leave_frame( - loop_frame, with_python_scope=node.recursive and not node.else_ - ) - - if node.else_: - self.writeline(f"if {iteration_indicator}:") - self.indent() - self.enter_frame(else_frame) - self.blockvisit(node.else_, else_frame) - self.leave_frame(else_frame) - self.outdent() - - # if the node was recursive we have to return the buffer contents - # and start the iteration code - if node.recursive: - self.return_buffer_contents(loop_frame) - self.outdent() - self.start_write(frame, node) - self.write(f"{self.choose_async('await ')}loop(") - if self.environment.is_async: - self.write("auto_aiter(") - self.visit(node.iter, frame) - if self.environment.is_async: - self.write(")") - self.write(", loop)") - self.end_write(frame) - - # at the end of the iteration, clear any assignments made in the - # loop from the top level - if self._assign_stack: - self._assign_stack[-1].difference_update(loop_frame.symbols.stores) - - def visit_If(self, node: nodes.If, frame: Frame) -> None: - if_frame = frame.soft() - self.writeline("if ", node) - self.visit(node.test, if_frame) - self.write(":") - self.indent() - self.blockvisit(node.body, if_frame) - self.outdent() - for elif_ in node.elif_: - self.writeline("elif ", elif_) - self.visit(elif_.test, if_frame) - self.write(":") - self.indent() - self.blockvisit(elif_.body, if_frame) - self.outdent() - if node.else_: - self.writeline("else:") - self.indent() - self.blockvisit(node.else_, if_frame) - self.outdent() - - def visit_Macro(self, node: nodes.Macro, frame: Frame) -> None: - macro_frame, macro_ref = self.macro_body(node, frame) - self.newline() - if frame.toplevel: - if not node.name.startswith("_"): - self.write(f"context.exported_vars.add({node.name!r})") - self.writeline(f"context.vars[{node.name!r}] = ") - self.write(f"{frame.symbols.ref(node.name)} = ") - self.macro_def(macro_ref, macro_frame) - - def visit_CallBlock(self, node: nodes.CallBlock, frame: Frame) -> None: - call_frame, macro_ref = self.macro_body(node, frame) - self.writeline("caller = ") - self.macro_def(macro_ref, call_frame) - self.start_write(frame, node) - self.visit_Call(node.call, frame, forward_caller=True) - self.end_write(frame) - - def visit_FilterBlock(self, node: nodes.FilterBlock, frame: Frame) -> None: - filter_frame = frame.inner() - filter_frame.symbols.analyze_node(node) - self.enter_frame(filter_frame) - self.buffer(filter_frame) - self.blockvisit(node.body, filter_frame) - self.start_write(frame, node) - self.visit_Filter(node.filter, filter_frame) - self.end_write(frame) - self.leave_frame(filter_frame) - - def visit_With(self, node: nodes.With, frame: Frame) -> None: - with_frame = frame.inner() - with_frame.symbols.analyze_node(node) - self.enter_frame(with_frame) - for target, expr in zip(node.targets, node.values): - self.newline() - self.visit(target, with_frame) - self.write(" = ") - self.visit(expr, frame) - self.blockvisit(node.body, with_frame) - self.leave_frame(with_frame) - - def visit_ExprStmt(self, node: nodes.ExprStmt, frame: Frame) -> None: - self.newline(node) - self.visit(node.node, frame) - - class _FinalizeInfo(t.NamedTuple): - const: t.Optional[t.Callable[..., str]] - src: t.Optional[str] - - @staticmethod - def _default_finalize(value: t.Any) -> t.Any: - """The default finalize function if the environment isn't - configured with one. Or, if the environment has one, this is - called on that function's output for constants. - """ - return str(value) - - _finalize: t.Optional[_FinalizeInfo] = None - - def _make_finalize(self) -> _FinalizeInfo: - """Build the finalize function to be used on constants and at - runtime. Cached so it's only created once for all output nodes. - - Returns a ``namedtuple`` with the following attributes: - - ``const`` - A function to finalize constant data at compile time. - - ``src`` - Source code to output around nodes to be evaluated at - runtime. - """ - if self._finalize is not None: - return self._finalize - - finalize: t.Optional[t.Callable[..., t.Any]] - finalize = default = self._default_finalize - src = None - - if self.environment.finalize: - src = "environment.finalize(" - env_finalize = self.environment.finalize - pass_arg = { - _PassArg.context: "context", - _PassArg.eval_context: "context.eval_ctx", - _PassArg.environment: "environment", - }.get( - _PassArg.from_obj(env_finalize) # type: ignore - ) - finalize = None - - if pass_arg is None: - - def finalize(value: t.Any) -> t.Any: # noqa: F811 - return default(env_finalize(value)) - - else: - src = f"{src}{pass_arg}, " - - if pass_arg == "environment": - - def finalize(value: t.Any) -> t.Any: # noqa: F811 - return default(env_finalize(self.environment, value)) - - self._finalize = self._FinalizeInfo(finalize, src) - return self._finalize - - def _output_const_repr(self, group: t.Iterable[t.Any]) -> str: - """Given a group of constant values converted from ``Output`` - child nodes, produce a string to write to the template module - source. - """ - return repr(concat(group)) - - def _output_child_to_const( - self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo - ) -> str: - """Try to optimize a child of an ``Output`` node by trying to - convert it to constant, finalized data at compile time. - - If :exc:`Impossible` is raised, the node is not constant and - will be evaluated at runtime. Any other exception will also be - evaluated at runtime for easier debugging. - """ - const = node.as_const(frame.eval_ctx) - - if frame.eval_ctx.autoescape: - const = escape(const) - - # Template data doesn't go through finalize. - if isinstance(node, nodes.TemplateData): - return str(const) - - return finalize.const(const) # type: ignore - - def _output_child_pre( - self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo - ) -> None: - """Output extra source code before visiting a child of an - ``Output`` node. - """ - if frame.eval_ctx.volatile: - self.write("(escape if context.eval_ctx.autoescape else str)(") - elif frame.eval_ctx.autoescape: - self.write("escape(") - else: - self.write("str(") - - if finalize.src is not None: - self.write(finalize.src) - - def _output_child_post( - self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo - ) -> None: - """Output extra source code after visiting a child of an - ``Output`` node. - """ - self.write(")") - - if finalize.src is not None: - self.write(")") - - def visit_Output(self, node: nodes.Output, frame: Frame) -> None: - # If an extends is active, don't render outside a block. - if frame.require_output_check: - # A top-level extends is known to exist at compile time. - if self.has_known_extends: - return - - self.writeline("if parent_template is None:") - self.indent() - - finalize = self._make_finalize() - body: t.List[t.Union[t.List[t.Any], nodes.Expr]] = [] - - # Evaluate constants at compile time if possible. Each item in - # body will be either a list of static data or a node to be - # evaluated at runtime. - for child in node.nodes: - try: - if not ( - # If the finalize function requires runtime context, - # constants can't be evaluated at compile time. - finalize.const - # Unless it's basic template data that won't be - # finalized anyway. - or isinstance(child, nodes.TemplateData) - ): - raise nodes.Impossible() - - const = self._output_child_to_const(child, frame, finalize) - except (nodes.Impossible, Exception): - # The node was not constant and needs to be evaluated at - # runtime. Or another error was raised, which is easier - # to debug at runtime. - body.append(child) - continue - - if body and isinstance(body[-1], list): - body[-1].append(const) - else: - body.append([const]) - - if frame.buffer is not None: - if len(body) == 1: - self.writeline(f"{frame.buffer}.append(") - else: - self.writeline(f"{frame.buffer}.extend((") - - self.indent() - - for item in body: - if isinstance(item, list): - # A group of constant data to join and output. - val = self._output_const_repr(item) - - if frame.buffer is None: - self.writeline("yield " + val) - else: - self.writeline(val + ",") - else: - if frame.buffer is None: - self.writeline("yield ", item) - else: - self.newline(item) - - # A node to be evaluated at runtime. - self._output_child_pre(item, frame, finalize) - self.visit(item, frame) - self._output_child_post(item, frame, finalize) - - if frame.buffer is not None: - self.write(",") - - if frame.buffer is not None: - self.outdent() - self.writeline(")" if len(body) == 1 else "))") - - if frame.require_output_check: - self.outdent() - - def visit_Assign(self, node: nodes.Assign, frame: Frame) -> None: - self.push_assign_tracking() - self.newline(node) - self.visit(node.target, frame) - self.write(" = ") - self.visit(node.node, frame) - self.pop_assign_tracking(frame) - - def visit_AssignBlock(self, node: nodes.AssignBlock, frame: Frame) -> None: - self.push_assign_tracking() - block_frame = frame.inner() - # This is a special case. Since a set block always captures we - # will disable output checks. This way one can use set blocks - # toplevel even in extended templates. - block_frame.require_output_check = False - block_frame.symbols.analyze_node(node) - self.enter_frame(block_frame) - self.buffer(block_frame) - self.blockvisit(node.body, block_frame) - self.newline(node) - self.visit(node.target, frame) - self.write(" = (Markup if context.eval_ctx.autoescape else identity)(") - if node.filter is not None: - self.visit_Filter(node.filter, block_frame) - else: - self.write(f"concat({block_frame.buffer})") - self.write(")") - self.pop_assign_tracking(frame) - self.leave_frame(block_frame) - - # -- Expression Visitors - - def visit_Name(self, node: nodes.Name, frame: Frame) -> None: - if node.ctx == "store" and ( - frame.toplevel or frame.loop_frame or frame.block_frame - ): - if self._assign_stack: - self._assign_stack[-1].add(node.name) - ref = frame.symbols.ref(node.name) - - # If we are looking up a variable we might have to deal with the - # case where it's undefined. We can skip that case if the load - # instruction indicates a parameter which are always defined. - if node.ctx == "load": - load = frame.symbols.find_load(ref) - if not ( - load is not None - and load[0] == VAR_LOAD_PARAMETER - and not self.parameter_is_undeclared(ref) - ): - self.write( - f"(undefined(name={node.name!r}) if {ref} is missing else {ref})" - ) - return - - self.write(ref) - - def visit_NSRef(self, node: nodes.NSRef, frame: Frame) -> None: - # NSRefs can only be used to store values; since they use the normal - # `foo.bar` notation they will be parsed as a normal attribute access - # when used anywhere but in a `set` context - ref = frame.symbols.ref(node.name) - self.writeline(f"if not isinstance({ref}, Namespace):") - self.indent() - self.writeline( - "raise TemplateRuntimeError" - '("cannot assign attribute on non-namespace object")' - ) - self.outdent() - self.writeline(f"{ref}[{node.attr!r}]") - - def visit_Const(self, node: nodes.Const, frame: Frame) -> None: - val = node.as_const(frame.eval_ctx) - if isinstance(val, float): - self.write(str(val)) - else: - self.write(repr(val)) - - def visit_TemplateData(self, node: nodes.TemplateData, frame: Frame) -> None: - try: - self.write(repr(node.as_const(frame.eval_ctx))) - except nodes.Impossible: - self.write( - f"(Markup if context.eval_ctx.autoescape else identity)({node.data!r})" - ) - - def visit_Tuple(self, node: nodes.Tuple, frame: Frame) -> None: - self.write("(") - idx = -1 - for idx, item in enumerate(node.items): - if idx: - self.write(", ") - self.visit(item, frame) - self.write(",)" if idx == 0 else ")") - - def visit_List(self, node: nodes.List, frame: Frame) -> None: - self.write("[") - for idx, item in enumerate(node.items): - if idx: - self.write(", ") - self.visit(item, frame) - self.write("]") - - def visit_Dict(self, node: nodes.Dict, frame: Frame) -> None: - self.write("{") - for idx, item in enumerate(node.items): - if idx: - self.write(", ") - self.visit(item.key, frame) - self.write(": ") - self.visit(item.value, frame) - self.write("}") - - visit_Add = _make_binop("+") - visit_Sub = _make_binop("-") - visit_Mul = _make_binop("*") - visit_Div = _make_binop("/") - visit_FloorDiv = _make_binop("//") - visit_Pow = _make_binop("**") - visit_Mod = _make_binop("%") - visit_And = _make_binop("and") - visit_Or = _make_binop("or") - visit_Pos = _make_unop("+") - visit_Neg = _make_unop("-") - visit_Not = _make_unop("not ") - - @optimizeconst - def visit_Concat(self, node: nodes.Concat, frame: Frame) -> None: - if frame.eval_ctx.volatile: - func_name = "(markup_join if context.eval_ctx.volatile else str_join)" - elif frame.eval_ctx.autoescape: - func_name = "markup_join" - else: - func_name = "str_join" - self.write(f"{func_name}((") - for arg in node.nodes: - self.visit(arg, frame) - self.write(", ") - self.write("))") - - @optimizeconst - def visit_Compare(self, node: nodes.Compare, frame: Frame) -> None: - self.write("(") - self.visit(node.expr, frame) - for op in node.ops: - self.visit(op, frame) - self.write(")") - - def visit_Operand(self, node: nodes.Operand, frame: Frame) -> None: - self.write(f" {operators[node.op]} ") - self.visit(node.expr, frame) - - @optimizeconst - def visit_Getattr(self, node: nodes.Getattr, frame: Frame) -> None: - if self.environment.is_async: - self.write("(await auto_await(") - - self.write("environment.getattr(") - self.visit(node.node, frame) - self.write(f", {node.attr!r})") - - if self.environment.is_async: - self.write("))") - - @optimizeconst - def visit_Getitem(self, node: nodes.Getitem, frame: Frame) -> None: - # slices bypass the environment getitem method. - if isinstance(node.arg, nodes.Slice): - self.visit(node.node, frame) - self.write("[") - self.visit(node.arg, frame) - self.write("]") - else: - if self.environment.is_async: - self.write("(await auto_await(") - - self.write("environment.getitem(") - self.visit(node.node, frame) - self.write(", ") - self.visit(node.arg, frame) - self.write(")") - - if self.environment.is_async: - self.write("))") - - def visit_Slice(self, node: nodes.Slice, frame: Frame) -> None: - if node.start is not None: - self.visit(node.start, frame) - self.write(":") - if node.stop is not None: - self.visit(node.stop, frame) - if node.step is not None: - self.write(":") - self.visit(node.step, frame) - - @contextmanager - def _filter_test_common( - self, node: t.Union[nodes.Filter, nodes.Test], frame: Frame, is_filter: bool - ) -> t.Iterator[None]: - if self.environment.is_async: - self.write("(await auto_await(") - - if is_filter: - self.write(f"{self.filters[node.name]}(") - func = self.environment.filters.get(node.name) - else: - self.write(f"{self.tests[node.name]}(") - func = self.environment.tests.get(node.name) - - # When inside an If or CondExpr frame, allow the filter to be - # undefined at compile time and only raise an error if it's - # actually called at runtime. See pull_dependencies. - if func is None and not frame.soft_frame: - type_name = "filter" if is_filter else "test" - self.fail(f"No {type_name} named {node.name!r}.", node.lineno) - - pass_arg = { - _PassArg.context: "context", - _PassArg.eval_context: "context.eval_ctx", - _PassArg.environment: "environment", - }.get( - _PassArg.from_obj(func) # type: ignore - ) - - if pass_arg is not None: - self.write(f"{pass_arg}, ") - - # Back to the visitor function to handle visiting the target of - # the filter or test. - yield - - self.signature(node, frame) - self.write(")") - - if self.environment.is_async: - self.write("))") - - @optimizeconst - def visit_Filter(self, node: nodes.Filter, frame: Frame) -> None: - with self._filter_test_common(node, frame, True): - # if the filter node is None we are inside a filter block - # and want to write to the current buffer - if node.node is not None: - self.visit(node.node, frame) - elif frame.eval_ctx.volatile: - self.write( - f"(Markup(concat({frame.buffer}))" - f" if context.eval_ctx.autoescape else concat({frame.buffer}))" - ) - elif frame.eval_ctx.autoescape: - self.write(f"Markup(concat({frame.buffer}))") - else: - self.write(f"concat({frame.buffer})") - - @optimizeconst - def visit_Test(self, node: nodes.Test, frame: Frame) -> None: - with self._filter_test_common(node, frame, False): - self.visit(node.node, frame) - - @optimizeconst - def visit_CondExpr(self, node: nodes.CondExpr, frame: Frame) -> None: - frame = frame.soft() - - def write_expr2() -> None: - if node.expr2 is not None: - self.visit(node.expr2, frame) - return - - self.write( - f'cond_expr_undefined("the inline if-expression on' - f" {self.position(node)} evaluated to false and no else" - f' section was defined.")' - ) - - self.write("(") - self.visit(node.expr1, frame) - self.write(" if ") - self.visit(node.test, frame) - self.write(" else ") - write_expr2() - self.write(")") - - @optimizeconst - def visit_Call( - self, node: nodes.Call, frame: Frame, forward_caller: bool = False - ) -> None: - if self.environment.is_async: - self.write("(await auto_await(") - if self.environment.sandboxed: - self.write("environment.call(context, ") - else: - self.write("context.call(") - self.visit(node.node, frame) - extra_kwargs = {"caller": "caller"} if forward_caller else None - loop_kwargs = {"_loop_vars": "_loop_vars"} if frame.loop_frame else {} - block_kwargs = {"_block_vars": "_block_vars"} if frame.block_frame else {} - if extra_kwargs: - extra_kwargs.update(loop_kwargs, **block_kwargs) - elif loop_kwargs or block_kwargs: - extra_kwargs = dict(loop_kwargs, **block_kwargs) - self.signature(node, frame, extra_kwargs) - self.write(")") - if self.environment.is_async: - self.write("))") - - def visit_Keyword(self, node: nodes.Keyword, frame: Frame) -> None: - self.write(node.key + "=") - self.visit(node.value, frame) - - # -- Unused nodes for extensions - - def visit_MarkSafe(self, node: nodes.MarkSafe, frame: Frame) -> None: - self.write("Markup(") - self.visit(node.expr, frame) - self.write(")") - - def visit_MarkSafeIfAutoescape( - self, node: nodes.MarkSafeIfAutoescape, frame: Frame - ) -> None: - self.write("(Markup if context.eval_ctx.autoescape else identity)(") - self.visit(node.expr, frame) - self.write(")") - - def visit_EnvironmentAttribute( - self, node: nodes.EnvironmentAttribute, frame: Frame - ) -> None: - self.write("environment." + node.name) - - def visit_ExtensionAttribute( - self, node: nodes.ExtensionAttribute, frame: Frame - ) -> None: - self.write(f"environment.extensions[{node.identifier!r}].{node.name}") - - def visit_ImportedName(self, node: nodes.ImportedName, frame: Frame) -> None: - self.write(self.import_aliases[node.importname]) - - def visit_InternalName(self, node: nodes.InternalName, frame: Frame) -> None: - self.write(node.name) - - def visit_ContextReference( - self, node: nodes.ContextReference, frame: Frame - ) -> None: - self.write("context") - - def visit_DerivedContextReference( - self, node: nodes.DerivedContextReference, frame: Frame - ) -> None: - self.write(self.derive_context(frame)) - - def visit_Continue(self, node: nodes.Continue, frame: Frame) -> None: - self.writeline("continue", node) - - def visit_Break(self, node: nodes.Break, frame: Frame) -> None: - self.writeline("break", node) - - def visit_Scope(self, node: nodes.Scope, frame: Frame) -> None: - scope_frame = frame.inner() - scope_frame.symbols.analyze_node(node) - self.enter_frame(scope_frame) - self.blockvisit(node.body, scope_frame) - self.leave_frame(scope_frame) - - def visit_OverlayScope(self, node: nodes.OverlayScope, frame: Frame) -> None: - ctx = self.temporary_identifier() - self.writeline(f"{ctx} = {self.derive_context(frame)}") - self.writeline(f"{ctx}.vars = ") - self.visit(node.context, frame) - self.push_context_reference(ctx) - - scope_frame = frame.inner(isolated=True) - scope_frame.symbols.analyze_node(node) - self.enter_frame(scope_frame) - self.blockvisit(node.body, scope_frame) - self.leave_frame(scope_frame) - self.pop_context_reference() - - def visit_EvalContextModifier( - self, node: nodes.EvalContextModifier, frame: Frame - ) -> None: - for keyword in node.options: - self.writeline(f"context.eval_ctx.{keyword.key} = ") - self.visit(keyword.value, frame) - try: - val = keyword.value.as_const(frame.eval_ctx) - except nodes.Impossible: - frame.eval_ctx.volatile = True - else: - setattr(frame.eval_ctx, keyword.key, val) - - def visit_ScopedEvalContextModifier( - self, node: nodes.ScopedEvalContextModifier, frame: Frame - ) -> None: - old_ctx_name = self.temporary_identifier() - saved_ctx = frame.eval_ctx.save() - self.writeline(f"{old_ctx_name} = context.eval_ctx.save()") - self.visit_EvalContextModifier(node, frame) - for child in node.body: - self.visit(child, frame) - frame.eval_ctx.revert(saved_ctx) - self.writeline(f"context.eval_ctx.revert({old_ctx_name})") diff --git a/lib/python3.12/site-packages/jinja2/constants.py b/lib/python3.12/site-packages/jinja2/constants.py deleted file mode 100644 index 41a1c23..0000000 --- a/lib/python3.12/site-packages/jinja2/constants.py +++ /dev/null @@ -1,20 +0,0 @@ -#: list of lorem ipsum words used by the lipsum() helper function -LOREM_IPSUM_WORDS = """\ -a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at -auctor augue bibendum blandit class commodo condimentum congue consectetuer -consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus -diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend -elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames -faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac -hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum -justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem -luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie -mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non -nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque -penatibus per pharetra phasellus placerat platea porta porttitor posuere -potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus -ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit -sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor -tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices -ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus -viverra volutpat vulputate""" diff --git a/lib/python3.12/site-packages/jinja2/debug.py b/lib/python3.12/site-packages/jinja2/debug.py deleted file mode 100644 index 7ed7e92..0000000 --- a/lib/python3.12/site-packages/jinja2/debug.py +++ /dev/null @@ -1,191 +0,0 @@ -import sys -import typing as t -from types import CodeType -from types import TracebackType - -from .exceptions import TemplateSyntaxError -from .utils import internal_code -from .utils import missing - -if t.TYPE_CHECKING: - from .runtime import Context - - -def rewrite_traceback_stack(source: t.Optional[str] = None) -> BaseException: - """Rewrite the current exception to replace any tracebacks from - within compiled template code with tracebacks that look like they - came from the template source. - - This must be called within an ``except`` block. - - :param source: For ``TemplateSyntaxError``, the original source if - known. - :return: The original exception with the rewritten traceback. - """ - _, exc_value, tb = sys.exc_info() - exc_value = t.cast(BaseException, exc_value) - tb = t.cast(TracebackType, tb) - - if isinstance(exc_value, TemplateSyntaxError) and not exc_value.translated: - exc_value.translated = True - exc_value.source = source - # Remove the old traceback, otherwise the frames from the - # compiler still show up. - exc_value.with_traceback(None) - # Outside of runtime, so the frame isn't executing template - # code, but it still needs to point at the template. - tb = fake_traceback( - exc_value, None, exc_value.filename or "", exc_value.lineno - ) - else: - # Skip the frame for the render function. - tb = tb.tb_next - - stack = [] - - # Build the stack of traceback object, replacing any in template - # code with the source file and line information. - while tb is not None: - # Skip frames decorated with @internalcode. These are internal - # calls that aren't useful in template debugging output. - if tb.tb_frame.f_code in internal_code: - tb = tb.tb_next - continue - - template = tb.tb_frame.f_globals.get("__jinja_template__") - - if template is not None: - lineno = template.get_corresponding_lineno(tb.tb_lineno) - fake_tb = fake_traceback(exc_value, tb, template.filename, lineno) - stack.append(fake_tb) - else: - stack.append(tb) - - tb = tb.tb_next - - tb_next = None - - # Assign tb_next in reverse to avoid circular references. - for tb in reversed(stack): - tb.tb_next = tb_next - tb_next = tb - - return exc_value.with_traceback(tb_next) - - -def fake_traceback( # type: ignore - exc_value: BaseException, tb: t.Optional[TracebackType], filename: str, lineno: int -) -> TracebackType: - """Produce a new traceback object that looks like it came from the - template source instead of the compiled code. The filename, line - number, and location name will point to the template, and the local - variables will be the current template context. - - :param exc_value: The original exception to be re-raised to create - the new traceback. - :param tb: The original traceback to get the local variables and - code info from. - :param filename: The template filename. - :param lineno: The line number in the template source. - """ - if tb is not None: - # Replace the real locals with the context that would be - # available at that point in the template. - locals = get_template_locals(tb.tb_frame.f_locals) - locals.pop("__jinja_exception__", None) - else: - locals = {} - - globals = { - "__name__": filename, - "__file__": filename, - "__jinja_exception__": exc_value, - } - # Raise an exception at the correct line number. - code: CodeType = compile( - "\n" * (lineno - 1) + "raise __jinja_exception__", filename, "exec" - ) - - # Build a new code object that points to the template file and - # replaces the location with a block name. - location = "template" - - if tb is not None: - function = tb.tb_frame.f_code.co_name - - if function == "root": - location = "top-level template code" - elif function.startswith("block_"): - location = f"block {function[6:]!r}" - - if sys.version_info >= (3, 8): - code = code.replace(co_name=location) - else: - code = CodeType( - code.co_argcount, - code.co_kwonlyargcount, - code.co_nlocals, - code.co_stacksize, - code.co_flags, - code.co_code, - code.co_consts, - code.co_names, - code.co_varnames, - code.co_filename, - location, - code.co_firstlineno, - code.co_lnotab, - code.co_freevars, - code.co_cellvars, - ) - - # Execute the new code, which is guaranteed to raise, and return - # the new traceback without this frame. - try: - exec(code, globals, locals) - except BaseException: - return sys.exc_info()[2].tb_next # type: ignore - - -def get_template_locals(real_locals: t.Mapping[str, t.Any]) -> t.Dict[str, t.Any]: - """Based on the runtime locals, get the context that would be - available at that point in the template. - """ - # Start with the current template context. - ctx: "t.Optional[Context]" = real_locals.get("context") - - if ctx is not None: - data: t.Dict[str, t.Any] = ctx.get_all().copy() - else: - data = {} - - # Might be in a derived context that only sets local variables - # rather than pushing a context. Local variables follow the scheme - # l_depth_name. Find the highest-depth local that has a value for - # each name. - local_overrides: t.Dict[str, t.Tuple[int, t.Any]] = {} - - for name, value in real_locals.items(): - if not name.startswith("l_") or value is missing: - # Not a template variable, or no longer relevant. - continue - - try: - _, depth_str, name = name.split("_", 2) - depth = int(depth_str) - except ValueError: - continue - - cur_depth = local_overrides.get(name, (-1,))[0] - - if cur_depth < depth: - local_overrides[name] = (depth, value) - - # Modify the context with any derived context. - for name, (_, value) in local_overrides.items(): - if value is missing: - data.pop(name, None) - else: - data[name] = value - - return data diff --git a/lib/python3.12/site-packages/jinja2/defaults.py b/lib/python3.12/site-packages/jinja2/defaults.py deleted file mode 100644 index 638cad3..0000000 --- a/lib/python3.12/site-packages/jinja2/defaults.py +++ /dev/null @@ -1,48 +0,0 @@ -import typing as t - -from .filters import FILTERS as DEFAULT_FILTERS # noqa: F401 -from .tests import TESTS as DEFAULT_TESTS # noqa: F401 -from .utils import Cycler -from .utils import generate_lorem_ipsum -from .utils import Joiner -from .utils import Namespace - -if t.TYPE_CHECKING: - import typing_extensions as te - -# defaults for the parser / lexer -BLOCK_START_STRING = "{%" -BLOCK_END_STRING = "%}" -VARIABLE_START_STRING = "{{" -VARIABLE_END_STRING = "}}" -COMMENT_START_STRING = "{#" -COMMENT_END_STRING = "#}" -LINE_STATEMENT_PREFIX: t.Optional[str] = None -LINE_COMMENT_PREFIX: t.Optional[str] = None -TRIM_BLOCKS = False -LSTRIP_BLOCKS = False -NEWLINE_SEQUENCE: "te.Literal['\\n', '\\r\\n', '\\r']" = "\n" -KEEP_TRAILING_NEWLINE = False - -# default filters, tests and namespace - -DEFAULT_NAMESPACE = { - "range": range, - "dict": dict, - "lipsum": generate_lorem_ipsum, - "cycler": Cycler, - "joiner": Joiner, - "namespace": Namespace, -} - -# default policies -DEFAULT_POLICIES: t.Dict[str, t.Any] = { - "compiler.ascii_str": True, - "urlize.rel": "noopener", - "urlize.target": None, - "urlize.extra_schemes": None, - "truncate.leeway": 5, - "json.dumps_function": None, - "json.dumps_kwargs": {"sort_keys": True}, - "ext.i18n.trimmed": False, -} diff --git a/lib/python3.12/site-packages/jinja2/environment.py b/lib/python3.12/site-packages/jinja2/environment.py deleted file mode 100644 index 185d332..0000000 --- a/lib/python3.12/site-packages/jinja2/environment.py +++ /dev/null @@ -1,1667 +0,0 @@ -"""Classes for managing templates and their runtime and compile time -options. -""" -import os -import typing -import typing as t -import weakref -from collections import ChainMap -from functools import lru_cache -from functools import partial -from functools import reduce -from types import CodeType - -from markupsafe import Markup - -from . import nodes -from .compiler import CodeGenerator -from .compiler import generate -from .defaults import BLOCK_END_STRING -from .defaults import BLOCK_START_STRING -from .defaults import COMMENT_END_STRING -from .defaults import COMMENT_START_STRING -from .defaults import DEFAULT_FILTERS -from .defaults import DEFAULT_NAMESPACE -from .defaults import DEFAULT_POLICIES -from .defaults import DEFAULT_TESTS -from .defaults import KEEP_TRAILING_NEWLINE -from .defaults import LINE_COMMENT_PREFIX -from .defaults import LINE_STATEMENT_PREFIX -from .defaults import LSTRIP_BLOCKS -from .defaults import NEWLINE_SEQUENCE -from .defaults import TRIM_BLOCKS -from .defaults import VARIABLE_END_STRING -from .defaults import VARIABLE_START_STRING -from .exceptions import TemplateNotFound -from .exceptions import TemplateRuntimeError -from .exceptions import TemplatesNotFound -from .exceptions import TemplateSyntaxError -from .exceptions import UndefinedError -from .lexer import get_lexer -from .lexer import Lexer -from .lexer import TokenStream -from .nodes import EvalContext -from .parser import Parser -from .runtime import Context -from .runtime import new_context -from .runtime import Undefined -from .utils import _PassArg -from .utils import concat -from .utils import consume -from .utils import import_string -from .utils import internalcode -from .utils import LRUCache -from .utils import missing - -if t.TYPE_CHECKING: - import typing_extensions as te - from .bccache import BytecodeCache - from .ext import Extension - from .loaders import BaseLoader - -_env_bound = t.TypeVar("_env_bound", bound="Environment") - - -# for direct template usage we have up to ten living environments -@lru_cache(maxsize=10) -def get_spontaneous_environment(cls: t.Type[_env_bound], *args: t.Any) -> _env_bound: - """Return a new spontaneous environment. A spontaneous environment - is used for templates created directly rather than through an - existing environment. - - :param cls: Environment class to create. - :param args: Positional arguments passed to environment. - """ - env = cls(*args) - env.shared = True - return env - - -def create_cache( - size: int, -) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref, str], "Template"]]: - """Return the cache class for the given size.""" - if size == 0: - return None - - if size < 0: - return {} - - return LRUCache(size) # type: ignore - - -def copy_cache( - cache: t.Optional[t.MutableMapping], -) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref, str], "Template"]]: - """Create an empty copy of the given cache.""" - if cache is None: - return None - - if type(cache) is dict: - return {} - - return LRUCache(cache.capacity) # type: ignore - - -def load_extensions( - environment: "Environment", - extensions: t.Sequence[t.Union[str, t.Type["Extension"]]], -) -> t.Dict[str, "Extension"]: - """Load the extensions from the list and bind it to the environment. - Returns a dict of instantiated extensions. - """ - result = {} - - for extension in extensions: - if isinstance(extension, str): - extension = t.cast(t.Type["Extension"], import_string(extension)) - - result[extension.identifier] = extension(environment) - - return result - - -def _environment_config_check(environment: "Environment") -> "Environment": - """Perform a sanity check on the environment.""" - assert issubclass( - environment.undefined, Undefined - ), "'undefined' must be a subclass of 'jinja2.Undefined'." - assert ( - environment.block_start_string - != environment.variable_start_string - != environment.comment_start_string - ), "block, variable and comment start strings must be different." - assert environment.newline_sequence in { - "\r", - "\r\n", - "\n", - }, "'newline_sequence' must be one of '\\n', '\\r\\n', or '\\r'." - return environment - - -class Environment: - r"""The core component of Jinja is the `Environment`. It contains - important shared variables like configuration, filters, tests, - globals and others. Instances of this class may be modified if - they are not shared and if no template was loaded so far. - Modifications on environments after the first template was loaded - will lead to surprising effects and undefined behavior. - - Here are the possible initialization parameters: - - `block_start_string` - The string marking the beginning of a block. Defaults to ``'{%'``. - - `block_end_string` - The string marking the end of a block. Defaults to ``'%}'``. - - `variable_start_string` - The string marking the beginning of a print statement. - Defaults to ``'{{'``. - - `variable_end_string` - The string marking the end of a print statement. Defaults to - ``'}}'``. - - `comment_start_string` - The string marking the beginning of a comment. Defaults to ``'{#'``. - - `comment_end_string` - The string marking the end of a comment. Defaults to ``'#}'``. - - `line_statement_prefix` - If given and a string, this will be used as prefix for line based - statements. See also :ref:`line-statements`. - - `line_comment_prefix` - If given and a string, this will be used as prefix for line based - comments. See also :ref:`line-statements`. - - .. versionadded:: 2.2 - - `trim_blocks` - If this is set to ``True`` the first newline after a block is - removed (block, not variable tag!). Defaults to `False`. - - `lstrip_blocks` - If this is set to ``True`` leading spaces and tabs are stripped - from the start of a line to a block. Defaults to `False`. - - `newline_sequence` - The sequence that starts a newline. Must be one of ``'\r'``, - ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a - useful default for Linux and OS X systems as well as web - applications. - - `keep_trailing_newline` - Preserve the trailing newline when rendering templates. - The default is ``False``, which causes a single newline, - if present, to be stripped from the end of the template. - - .. versionadded:: 2.7 - - `extensions` - List of Jinja extensions to use. This can either be import paths - as strings or extension classes. For more information have a - look at :ref:`the extensions documentation `. - - `optimized` - should the optimizer be enabled? Default is ``True``. - - `undefined` - :class:`Undefined` or a subclass of it that is used to represent - undefined values in the template. - - `finalize` - A callable that can be used to process the result of a variable - expression before it is output. For example one can convert - ``None`` implicitly into an empty string here. - - `autoescape` - If set to ``True`` the XML/HTML autoescaping feature is enabled by - default. For more details about autoescaping see - :class:`~markupsafe.Markup`. As of Jinja 2.4 this can also - be a callable that is passed the template name and has to - return ``True`` or ``False`` depending on autoescape should be - enabled by default. - - .. versionchanged:: 2.4 - `autoescape` can now be a function - - `loader` - The template loader for this environment. - - `cache_size` - The size of the cache. Per default this is ``400`` which means - that if more than 400 templates are loaded the loader will clean - out the least recently used template. If the cache size is set to - ``0`` templates are recompiled all the time, if the cache size is - ``-1`` the cache will not be cleaned. - - .. versionchanged:: 2.8 - The cache size was increased to 400 from a low 50. - - `auto_reload` - Some loaders load templates from locations where the template - sources may change (ie: file system or database). If - ``auto_reload`` is set to ``True`` (default) every time a template is - requested the loader checks if the source changed and if yes, it - will reload the template. For higher performance it's possible to - disable that. - - `bytecode_cache` - If set to a bytecode cache object, this object will provide a - cache for the internal Jinja bytecode so that templates don't - have to be parsed if they were not changed. - - See :ref:`bytecode-cache` for more information. - - `enable_async` - If set to true this enables async template execution which - allows using async functions and generators. - """ - - #: if this environment is sandboxed. Modifying this variable won't make - #: the environment sandboxed though. For a real sandboxed environment - #: have a look at jinja2.sandbox. This flag alone controls the code - #: generation by the compiler. - sandboxed = False - - #: True if the environment is just an overlay - overlayed = False - - #: the environment this environment is linked to if it is an overlay - linked_to: t.Optional["Environment"] = None - - #: shared environments have this set to `True`. A shared environment - #: must not be modified - shared = False - - #: the class that is used for code generation. See - #: :class:`~jinja2.compiler.CodeGenerator` for more information. - code_generator_class: t.Type["CodeGenerator"] = CodeGenerator - - concat = "".join - - #: the context class that is used for templates. See - #: :class:`~jinja2.runtime.Context` for more information. - context_class: t.Type[Context] = Context - - template_class: t.Type["Template"] - - def __init__( - self, - block_start_string: str = BLOCK_START_STRING, - block_end_string: str = BLOCK_END_STRING, - variable_start_string: str = VARIABLE_START_STRING, - variable_end_string: str = VARIABLE_END_STRING, - comment_start_string: str = COMMENT_START_STRING, - comment_end_string: str = COMMENT_END_STRING, - line_statement_prefix: t.Optional[str] = LINE_STATEMENT_PREFIX, - line_comment_prefix: t.Optional[str] = LINE_COMMENT_PREFIX, - trim_blocks: bool = TRIM_BLOCKS, - lstrip_blocks: bool = LSTRIP_BLOCKS, - newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = NEWLINE_SEQUENCE, - keep_trailing_newline: bool = KEEP_TRAILING_NEWLINE, - extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = (), - optimized: bool = True, - undefined: t.Type[Undefined] = Undefined, - finalize: t.Optional[t.Callable[..., t.Any]] = None, - autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = False, - loader: t.Optional["BaseLoader"] = None, - cache_size: int = 400, - auto_reload: bool = True, - bytecode_cache: t.Optional["BytecodeCache"] = None, - enable_async: bool = False, - ): - # !!Important notice!! - # The constructor accepts quite a few arguments that should be - # passed by keyword rather than position. However it's important to - # not change the order of arguments because it's used at least - # internally in those cases: - # - spontaneous environments (i18n extension and Template) - # - unittests - # If parameter changes are required only add parameters at the end - # and don't change the arguments (or the defaults!) of the arguments - # existing already. - - # lexer / parser information - self.block_start_string = block_start_string - self.block_end_string = block_end_string - self.variable_start_string = variable_start_string - self.variable_end_string = variable_end_string - self.comment_start_string = comment_start_string - self.comment_end_string = comment_end_string - self.line_statement_prefix = line_statement_prefix - self.line_comment_prefix = line_comment_prefix - self.trim_blocks = trim_blocks - self.lstrip_blocks = lstrip_blocks - self.newline_sequence = newline_sequence - self.keep_trailing_newline = keep_trailing_newline - - # runtime information - self.undefined: t.Type[Undefined] = undefined - self.optimized = optimized - self.finalize = finalize - self.autoescape = autoescape - - # defaults - self.filters = DEFAULT_FILTERS.copy() - self.tests = DEFAULT_TESTS.copy() - self.globals = DEFAULT_NAMESPACE.copy() - - # set the loader provided - self.loader = loader - self.cache = create_cache(cache_size) - self.bytecode_cache = bytecode_cache - self.auto_reload = auto_reload - - # configurable policies - self.policies = DEFAULT_POLICIES.copy() - - # load extensions - self.extensions = load_extensions(self, extensions) - - self.is_async = enable_async - _environment_config_check(self) - - def add_extension(self, extension: t.Union[str, t.Type["Extension"]]) -> None: - """Adds an extension after the environment was created. - - .. versionadded:: 2.5 - """ - self.extensions.update(load_extensions(self, [extension])) - - def extend(self, **attributes: t.Any) -> None: - """Add the items to the instance of the environment if they do not exist - yet. This is used by :ref:`extensions ` to register - callbacks and configuration values without breaking inheritance. - """ - for key, value in attributes.items(): - if not hasattr(self, key): - setattr(self, key, value) - - def overlay( - self, - block_start_string: str = missing, - block_end_string: str = missing, - variable_start_string: str = missing, - variable_end_string: str = missing, - comment_start_string: str = missing, - comment_end_string: str = missing, - line_statement_prefix: t.Optional[str] = missing, - line_comment_prefix: t.Optional[str] = missing, - trim_blocks: bool = missing, - lstrip_blocks: bool = missing, - newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = missing, - keep_trailing_newline: bool = missing, - extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = missing, - optimized: bool = missing, - undefined: t.Type[Undefined] = missing, - finalize: t.Optional[t.Callable[..., t.Any]] = missing, - autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = missing, - loader: t.Optional["BaseLoader"] = missing, - cache_size: int = missing, - auto_reload: bool = missing, - bytecode_cache: t.Optional["BytecodeCache"] = missing, - enable_async: bool = False, - ) -> "Environment": - """Create a new overlay environment that shares all the data with the - current environment except for cache and the overridden attributes. - Extensions cannot be removed for an overlayed environment. An overlayed - environment automatically gets all the extensions of the environment it - is linked to plus optional extra extensions. - - Creating overlays should happen after the initial environment was set - up completely. Not all attributes are truly linked, some are just - copied over so modifications on the original environment may not shine - through. - - .. versionchanged:: 3.1.2 - Added the ``newline_sequence``,, ``keep_trailing_newline``, - and ``enable_async`` parameters to match ``__init__``. - """ - args = dict(locals()) - del args["self"], args["cache_size"], args["extensions"], args["enable_async"] - - rv = object.__new__(self.__class__) - rv.__dict__.update(self.__dict__) - rv.overlayed = True - rv.linked_to = self - - for key, value in args.items(): - if value is not missing: - setattr(rv, key, value) - - if cache_size is not missing: - rv.cache = create_cache(cache_size) - else: - rv.cache = copy_cache(self.cache) - - rv.extensions = {} - for key, value in self.extensions.items(): - rv.extensions[key] = value.bind(rv) - if extensions is not missing: - rv.extensions.update(load_extensions(rv, extensions)) - - if enable_async is not missing: - rv.is_async = enable_async - - return _environment_config_check(rv) - - @property - def lexer(self) -> Lexer: - """The lexer for this environment.""" - return get_lexer(self) - - def iter_extensions(self) -> t.Iterator["Extension"]: - """Iterates over the extensions by priority.""" - return iter(sorted(self.extensions.values(), key=lambda x: x.priority)) - - def getitem( - self, obj: t.Any, argument: t.Union[str, t.Any] - ) -> t.Union[t.Any, Undefined]: - """Get an item or attribute of an object but prefer the item.""" - try: - return obj[argument] - except (AttributeError, TypeError, LookupError): - if isinstance(argument, str): - try: - attr = str(argument) - except Exception: - pass - else: - try: - return getattr(obj, attr) - except AttributeError: - pass - return self.undefined(obj=obj, name=argument) - - def getattr(self, obj: t.Any, attribute: str) -> t.Any: - """Get an item or attribute of an object but prefer the attribute. - Unlike :meth:`getitem` the attribute *must* be a string. - """ - try: - return getattr(obj, attribute) - except AttributeError: - pass - try: - return obj[attribute] - except (TypeError, LookupError, AttributeError): - return self.undefined(obj=obj, name=attribute) - - def _filter_test_common( - self, - name: t.Union[str, Undefined], - value: t.Any, - args: t.Optional[t.Sequence[t.Any]], - kwargs: t.Optional[t.Mapping[str, t.Any]], - context: t.Optional[Context], - eval_ctx: t.Optional[EvalContext], - is_filter: bool, - ) -> t.Any: - if is_filter: - env_map = self.filters - type_name = "filter" - else: - env_map = self.tests - type_name = "test" - - func = env_map.get(name) # type: ignore - - if func is None: - msg = f"No {type_name} named {name!r}." - - if isinstance(name, Undefined): - try: - name._fail_with_undefined_error() - except Exception as e: - msg = f"{msg} ({e}; did you forget to quote the callable name?)" - - raise TemplateRuntimeError(msg) - - args = [value, *(args if args is not None else ())] - kwargs = kwargs if kwargs is not None else {} - pass_arg = _PassArg.from_obj(func) - - if pass_arg is _PassArg.context: - if context is None: - raise TemplateRuntimeError( - f"Attempted to invoke a context {type_name} without context." - ) - - args.insert(0, context) - elif pass_arg is _PassArg.eval_context: - if eval_ctx is None: - if context is not None: - eval_ctx = context.eval_ctx - else: - eval_ctx = EvalContext(self) - - args.insert(0, eval_ctx) - elif pass_arg is _PassArg.environment: - args.insert(0, self) - - return func(*args, **kwargs) - - def call_filter( - self, - name: str, - value: t.Any, - args: t.Optional[t.Sequence[t.Any]] = None, - kwargs: t.Optional[t.Mapping[str, t.Any]] = None, - context: t.Optional[Context] = None, - eval_ctx: t.Optional[EvalContext] = None, - ) -> t.Any: - """Invoke a filter on a value the same way the compiler does. - - This might return a coroutine if the filter is running from an - environment in async mode and the filter supports async - execution. It's your responsibility to await this if needed. - - .. versionadded:: 2.7 - """ - return self._filter_test_common( - name, value, args, kwargs, context, eval_ctx, True - ) - - def call_test( - self, - name: str, - value: t.Any, - args: t.Optional[t.Sequence[t.Any]] = None, - kwargs: t.Optional[t.Mapping[str, t.Any]] = None, - context: t.Optional[Context] = None, - eval_ctx: t.Optional[EvalContext] = None, - ) -> t.Any: - """Invoke a test on a value the same way the compiler does. - - This might return a coroutine if the test is running from an - environment in async mode and the test supports async execution. - It's your responsibility to await this if needed. - - .. versionchanged:: 3.0 - Tests support ``@pass_context``, etc. decorators. Added - the ``context`` and ``eval_ctx`` parameters. - - .. versionadded:: 2.7 - """ - return self._filter_test_common( - name, value, args, kwargs, context, eval_ctx, False - ) - - @internalcode - def parse( - self, - source: str, - name: t.Optional[str] = None, - filename: t.Optional[str] = None, - ) -> nodes.Template: - """Parse the sourcecode and return the abstract syntax tree. This - tree of nodes is used by the compiler to convert the template into - executable source- or bytecode. This is useful for debugging or to - extract information from templates. - - If you are :ref:`developing Jinja extensions ` - this gives you a good overview of the node tree generated. - """ - try: - return self._parse(source, name, filename) - except TemplateSyntaxError: - self.handle_exception(source=source) - - def _parse( - self, source: str, name: t.Optional[str], filename: t.Optional[str] - ) -> nodes.Template: - """Internal parsing function used by `parse` and `compile`.""" - return Parser(self, source, name, filename).parse() - - def lex( - self, - source: str, - name: t.Optional[str] = None, - filename: t.Optional[str] = None, - ) -> t.Iterator[t.Tuple[int, str, str]]: - """Lex the given sourcecode and return a generator that yields - tokens as tuples in the form ``(lineno, token_type, value)``. - This can be useful for :ref:`extension development ` - and debugging templates. - - This does not perform preprocessing. If you want the preprocessing - of the extensions to be applied you have to filter source through - the :meth:`preprocess` method. - """ - source = str(source) - try: - return self.lexer.tokeniter(source, name, filename) - except TemplateSyntaxError: - self.handle_exception(source=source) - - def preprocess( - self, - source: str, - name: t.Optional[str] = None, - filename: t.Optional[str] = None, - ) -> str: - """Preprocesses the source with all extensions. This is automatically - called for all parsing and compiling methods but *not* for :meth:`lex` - because there you usually only want the actual source tokenized. - """ - return reduce( - lambda s, e: e.preprocess(s, name, filename), - self.iter_extensions(), - str(source), - ) - - def _tokenize( - self, - source: str, - name: t.Optional[str], - filename: t.Optional[str] = None, - state: t.Optional[str] = None, - ) -> TokenStream: - """Called by the parser to do the preprocessing and filtering - for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. - """ - source = self.preprocess(source, name, filename) - stream = self.lexer.tokenize(source, name, filename, state) - - for ext in self.iter_extensions(): - stream = ext.filter_stream(stream) # type: ignore - - if not isinstance(stream, TokenStream): - stream = TokenStream(stream, name, filename) # type: ignore - - return stream - - def _generate( - self, - source: nodes.Template, - name: t.Optional[str], - filename: t.Optional[str], - defer_init: bool = False, - ) -> str: - """Internal hook that can be overridden to hook a different generate - method in. - - .. versionadded:: 2.5 - """ - return generate( # type: ignore - source, - self, - name, - filename, - defer_init=defer_init, - optimized=self.optimized, - ) - - def _compile(self, source: str, filename: str) -> CodeType: - """Internal hook that can be overridden to hook a different compile - method in. - - .. versionadded:: 2.5 - """ - return compile(source, filename, "exec") - - @typing.overload - def compile( # type: ignore - self, - source: t.Union[str, nodes.Template], - name: t.Optional[str] = None, - filename: t.Optional[str] = None, - raw: "te.Literal[False]" = False, - defer_init: bool = False, - ) -> CodeType: - ... - - @typing.overload - def compile( - self, - source: t.Union[str, nodes.Template], - name: t.Optional[str] = None, - filename: t.Optional[str] = None, - raw: "te.Literal[True]" = ..., - defer_init: bool = False, - ) -> str: - ... - - @internalcode - def compile( - self, - source: t.Union[str, nodes.Template], - name: t.Optional[str] = None, - filename: t.Optional[str] = None, - raw: bool = False, - defer_init: bool = False, - ) -> t.Union[str, CodeType]: - """Compile a node or template source code. The `name` parameter is - the load name of the template after it was joined using - :meth:`join_path` if necessary, not the filename on the file system. - the `filename` parameter is the estimated filename of the template on - the file system. If the template came from a database or memory this - can be omitted. - - The return value of this method is a python code object. If the `raw` - parameter is `True` the return value will be a string with python - code equivalent to the bytecode returned otherwise. This method is - mainly used internally. - - `defer_init` is use internally to aid the module code generator. This - causes the generated code to be able to import without the global - environment variable to be set. - - .. versionadded:: 2.4 - `defer_init` parameter added. - """ - source_hint = None - try: - if isinstance(source, str): - source_hint = source - source = self._parse(source, name, filename) - source = self._generate(source, name, filename, defer_init=defer_init) - if raw: - return source - if filename is None: - filename = "