From 7c61ba358d9e2316daee49705659815c624a8815 Mon Sep 17 00:00:00 2001 From: CMajeri Date: Thu, 14 Sep 2017 14:09:37 +0200 Subject: [PATCH] Moves keycloak client from the keycloak-bridge repository --- Gopkg.lock | 51 + Gopkg.toml | 34 + README.md | 4 +- client/client_test.go | 81 + client/common.go | 143 + client/definitions.go | 660 ++ client/realms.go | 29 + client/users.go | 29 + utils/.idea/misc.xml | 4 + utils/.idea/modules.xml | 8 + utils/.idea/utils.iml | 11 + utils/.idea/workspace.xml | 313 + utils/bin/activate | 78 + utils/bin/activate.csh | 36 + utils/bin/activate.fish | 76 + utils/bin/activate_this.py | 34 + utils/bin/chardetect | 11 + utils/bin/easy_install | 11 + utils/bin/easy_install-3.5 | 11 + utils/bin/pip | 11 + utils/bin/pip3 | 11 + utils/bin/pip3.5 | 11 + utils/bin/python | 1 + utils/bin/python-config | 78 + utils/bin/python3 | Bin 0 -> 11224 bytes utils/bin/python3.5 | 1 + utils/bin/wheel | 11 + utils/file_parser.py | 91 + utils/html_parser.py | 38 + utils/include/python3.5m | 1 + utils/lib/python3.5/__future__.py | 1 + .../__pycache__/__future__.cpython-35.pyc | Bin 0 -> 4361 bytes .../__pycache__/_bootlocale.cpython-35.pyc | Bin 0 -> 1091 bytes .../_collections_abc.cpython-35.pyc | Bin 0 -> 29863 bytes .../__pycache__/_weakrefset.cpython-35.pyc | Bin 0 -> 8468 bytes .../python3.5/__pycache__/abc.cpython-35.pyc | Bin 0 -> 7912 bytes .../__pycache__/base64.cpython-35.pyc | Bin 0 -> 18458 bytes .../__pycache__/bisect.cpython-35.pyc | Bin 0 -> 2881 bytes .../__pycache__/codecs.cpython-35.pyc | Bin 0 -> 35350 bytes .../python3.5/__pycache__/copy.cpython-35.pyc | Bin 0 -> 8154 bytes .../__pycache__/copyreg.cpython-35.pyc | Bin 0 -> 4599 bytes .../__pycache__/fnmatch.cpython-35.pyc | Bin 0 -> 3178 bytes .../__pycache__/functools.cpython-35.pyc | Bin 0 -> 23631 bytes .../__pycache__/genericpath.cpython-35.pyc | Bin 0 -> 3979 bytes .../__pycache__/hashlib.cpython-35.pyc | Bin 0 -> 7892 bytes .../__pycache__/heapq.cpython-35.pyc | Bin 0 -> 15089 bytes .../python3.5/__pycache__/hmac.cpython-35.pyc | Bin 0 -> 5178 bytes .../python3.5/__pycache__/imp.cpython-35.pyc | Bin 0 -> 10502 bytes .../python3.5/__pycache__/io.cpython-35.pyc | Bin 0 -> 3505 bytes .../__pycache__/keyword.cpython-35.pyc | Bin 0 -> 1987 bytes .../__pycache__/linecache.cpython-35.pyc | Bin 0 -> 4124 bytes .../__pycache__/locale.cpython-35.pyc | Bin 0 -> 36575 bytes .../__pycache__/operator.cpython-35.pyc | Bin 0 -> 14836 bytes .../python3.5/__pycache__/os.cpython-35.pyc | Bin 0 -> 31314 bytes .../__pycache__/posixpath.cpython-35.pyc | Bin 0 -> 11201 bytes .../__pycache__/random.cpython-35.pyc | Bin 0 -> 19374 bytes .../python3.5/__pycache__/re.cpython-35.pyc | Bin 0 -> 14499 bytes .../__pycache__/reprlib.cpython-35.pyc | Bin 0 -> 6006 bytes .../__pycache__/shutil.cpython-35.pyc | Bin 0 -> 32686 bytes .../python3.5/__pycache__/site.cpython-35.pyc | Bin 0 -> 22506 bytes .../__pycache__/sre_compile.cpython-35.pyc | Bin 0 -> 10967 bytes .../__pycache__/sre_constants.cpython-35.pyc | Bin 0 -> 5988 bytes .../__pycache__/sre_parse.cpython-35.pyc | Bin 0 -> 22382 bytes .../python3.5/__pycache__/stat.cpython-35.pyc | Bin 0 -> 4209 bytes .../__pycache__/struct.cpython-35.pyc | Bin 0 -> 394 bytes .../__pycache__/tarfile.cpython-35.pyc | Bin 0 -> 69129 bytes .../__pycache__/tempfile.cpython-35.pyc | Bin 0 -> 23681 bytes .../__pycache__/token.cpython-35.pyc | Bin 0 -> 3720 bytes .../__pycache__/tokenize.cpython-35.pyc | Bin 0 -> 20508 bytes .../__pycache__/types.cpython-35.pyc | Bin 0 -> 8787 bytes .../__pycache__/warnings.cpython-35.pyc | Bin 0 -> 13092 bytes .../__pycache__/weakref.cpython-35.pyc | Bin 0 -> 20693 bytes utils/lib/python3.5/_bootlocale.py | 1 + utils/lib/python3.5/_collections_abc.py | 1 + utils/lib/python3.5/_dummy_thread.py | 1 + utils/lib/python3.5/_weakrefset.py | 1 + utils/lib/python3.5/abc.py | 1 + utils/lib/python3.5/base64.py | 1 + utils/lib/python3.5/bisect.py | 1 + utils/lib/python3.5/codecs.py | 1 + utils/lib/python3.5/collections | 1 + utils/lib/python3.5/config-3.5m | 1 + utils/lib/python3.5/copy.py | 1 + utils/lib/python3.5/copyreg.py | 1 + utils/lib/python3.5/distutils/__init__.py | 101 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 3179 bytes utils/lib/python3.5/distutils/distutils.cfg | 6 + utils/lib/python3.5/encodings | 1 + utils/lib/python3.5/fnmatch.py | 1 + utils/lib/python3.5/functools.py | 1 + utils/lib/python3.5/genericpath.py | 1 + utils/lib/python3.5/hashlib.py | 1 + utils/lib/python3.5/heapq.py | 1 + utils/lib/python3.5/hmac.py | 1 + utils/lib/python3.5/imp.py | 1 + utils/lib/python3.5/importlib | 1 + utils/lib/python3.5/io.py | 1 + utils/lib/python3.5/keyword.py | 1 + utils/lib/python3.5/lib-dynload | 1 + utils/lib/python3.5/linecache.py | 1 + utils/lib/python3.5/locale.py | 1 + .../lib/python3.5/no-global-site-packages.txt | 0 utils/lib/python3.5/ntpath.py | 1 + utils/lib/python3.5/operator.py | 1 + utils/lib/python3.5/orig-prefix.txt | 1 + utils/lib/python3.5/os.py | 1 + utils/lib/python3.5/plat-linux | 1 + utils/lib/python3.5/posixpath.py | 1 + utils/lib/python3.5/random.py | 1 + utils/lib/python3.5/re.py | 1 + utils/lib/python3.5/reprlib.py | 1 + utils/lib/python3.5/rlcompleter.py | 1 + utils/lib/python3.5/shutil.py | 1 + .../__pycache__/easy_install.cpython-35.pyc | Bin 0 -> 286 bytes .../DESCRIPTION.rst | 3 + .../beautifulsoup4-4.6.0.dist-info/INSTALLER | 1 + .../beautifulsoup4-4.6.0.dist-info/METADATA | 28 + .../beautifulsoup4-4.6.0.dist-info/RECORD | 41 + .../beautifulsoup4-4.6.0.dist-info/WHEEL | 5 + .../metadata.json | 1 + .../top_level.txt | 1 + .../python3.5/site-packages/bs4/__init__.py | 529 ++ .../bs4/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 15413 bytes .../bs4/__pycache__/dammit.cpython-35.pyc | Bin 0 -> 20530 bytes .../bs4/__pycache__/diagnose.cpython-35.pyc | Bin 0 -> 8149 bytes .../bs4/__pycache__/element.cpython-35.pyc | Bin 0 -> 51512 bytes .../bs4/__pycache__/testing.cpython-35.pyc | Bin 0 -> 32815 bytes .../site-packages/bs4/builder/__init__.py | 333 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 9260 bytes .../__pycache__/_html5lib.cpython-35.pyc | Bin 0 -> 12610 bytes .../__pycache__/_htmlparser.cpython-35.pyc | Bin 0 -> 8764 bytes .../builder/__pycache__/_lxml.cpython-35.pyc | Bin 0 -> 7528 bytes .../site-packages/bs4/builder/_html5lib.py | 426 + .../site-packages/bs4/builder/_htmlparser.py | 314 + .../site-packages/bs4/builder/_lxml.py | 258 + .../lib/python3.5/site-packages/bs4/dammit.py | 842 ++ .../python3.5/site-packages/bs4/diagnose.py | 219 + .../python3.5/site-packages/bs4/element.py | 1808 ++++ .../python3.5/site-packages/bs4/testing.py | 770 ++ .../site-packages/bs4/tests/__init__.py | 1 + .../tests/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 181 bytes .../test_builder_registry.cpython-35.pyc | Bin 0 -> 5420 bytes .../__pycache__/test_docs.cpython-35.pyc | Bin 0 -> 431 bytes .../__pycache__/test_html5lib.cpython-35.pyc | Bin 0 -> 5693 bytes .../test_htmlparser.cpython-35.pyc | Bin 0 -> 1969 bytes .../__pycache__/test_lxml.cpython-35.pyc | Bin 0 -> 3071 bytes .../__pycache__/test_soup.cpython-35.pyc | Bin 0 -> 23257 bytes .../__pycache__/test_tree.cpython-35.pyc | Bin 0 -> 92942 bytes .../bs4/tests/test_builder_registry.py | 147 + .../site-packages/bs4/tests/test_docs.py | 36 + .../site-packages/bs4/tests/test_html5lib.py | 130 + .../bs4/tests/test_htmlparser.py | 34 + .../site-packages/bs4/tests/test_lxml.py | 76 + .../site-packages/bs4/tests/test_soup.py | 501 ++ .../site-packages/bs4/tests/test_tree.py | 2050 +++++ .../DESCRIPTION.rst | 49 + .../certifi-2017.4.17.dist-info/INSTALLER | 1 + .../certifi-2017.4.17.dist-info/METADATA | 68 + .../certifi-2017.4.17.dist-info/RECORD | 16 + .../certifi-2017.4.17.dist-info/WHEEL | 6 + .../certifi-2017.4.17.dist-info/metadata.json | 1 + .../certifi-2017.4.17.dist-info/top_level.txt | 1 + .../site-packages/certifi/__init__.py | 3 + .../site-packages/certifi/__main__.py | 2 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 227 bytes .../__pycache__/__main__.cpython-35.pyc | Bin 0 -> 197 bytes .../certifi/__pycache__/core.cpython-35.pyc | Bin 0 -> 1133 bytes .../site-packages/certifi/cacert.pem | 5246 +++++++++++ .../python3.5/site-packages/certifi/core.py | 36 + .../site-packages/certifi/old_root.pem | 414 + .../python3.5/site-packages/certifi/weak.pem | 5660 ++++++++++++ .../chardet-3.0.4.dist-info/DESCRIPTION.rst | 70 + .../chardet-3.0.4.dist-info/INSTALLER | 1 + .../chardet-3.0.4.dist-info/METADATA | 96 + .../chardet-3.0.4.dist-info/RECORD | 91 + .../chardet-3.0.4.dist-info/WHEEL | 6 + .../chardet-3.0.4.dist-info/entry_points.txt | 3 + .../chardet-3.0.4.dist-info/metadata.json | 1 + .../chardet-3.0.4.dist-info/top_level.txt | 1 + .../site-packages/chardet/__init__.py | 39 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 838 bytes .../__pycache__/big5freq.cpython-35.pyc | Bin 0 -> 54675 bytes .../__pycache__/big5prober.cpython-35.pyc | Bin 0 -> 1103 bytes .../chardistribution.cpython-35.pyc | Bin 0 -> 6645 bytes .../charsetgroupprober.cpython-35.pyc | Bin 0 -> 2363 bytes .../__pycache__/charsetprober.cpython-35.pyc | Bin 0 -> 3581 bytes .../codingstatemachine.cpython-35.pyc | Bin 0 -> 2925 bytes .../chardet/__pycache__/compat.cpython-35.pyc | Bin 0 -> 332 bytes .../__pycache__/cp949prober.cpython-35.pyc | Bin 0 -> 1110 bytes .../chardet/__pycache__/enums.cpython-35.pyc | Bin 0 -> 2692 bytes .../__pycache__/escprober.cpython-35.pyc | Bin 0 -> 2748 bytes .../chardet/__pycache__/escsm.cpython-35.pyc | Bin 0 -> 7854 bytes .../__pycache__/eucjpprober.cpython-35.pyc | Bin 0 -> 2549 bytes .../__pycache__/euckrfreq.cpython-35.pyc | Bin 0 -> 24061 bytes .../__pycache__/euckrprober.cpython-35.pyc | Bin 0 -> 1111 bytes .../__pycache__/euctwfreq.cpython-35.pyc | Bin 0 -> 54684 bytes .../__pycache__/euctwprober.cpython-35.pyc | Bin 0 -> 1111 bytes .../__pycache__/gb2312freq.cpython-35.pyc | Bin 0 -> 38326 bytes .../__pycache__/gb2312prober.cpython-35.pyc | Bin 0 -> 1119 bytes .../__pycache__/hebrewprober.cpython-35.pyc | Bin 0 -> 3168 bytes .../__pycache__/jisfreq.cpython-35.pyc | Bin 0 -> 44470 bytes .../chardet/__pycache__/jpcntx.cpython-35.pyc | Bin 0 -> 24767 bytes .../langbulgarianmodel.cpython-35.pyc | Bin 0 -> 24874 bytes .../langcyrillicmodel.cpython-35.pyc | Bin 0 -> 30529 bytes .../__pycache__/langgreekmodel.cpython-35.pyc | Bin 0 -> 24552 bytes .../langhebrewmodel.cpython-35.pyc | Bin 0 -> 23380 bytes .../langhungarianmodel.cpython-35.pyc | Bin 0 -> 24848 bytes .../__pycache__/langthaimodel.cpython-35.pyc | Bin 0 -> 23359 bytes .../langturkishmodel.cpython-35.pyc | Bin 0 -> 23377 bytes .../__pycache__/latin1prober.cpython-35.pyc | Bin 0 -> 3266 bytes .../mbcharsetprober.cpython-35.pyc | Bin 0 -> 2349 bytes .../mbcsgroupprober.cpython-35.pyc | Bin 0 -> 1122 bytes .../chardet/__pycache__/mbcssm.cpython-35.pyc | Bin 0 -> 18838 bytes .../sbcharsetprober.cpython-35.pyc | Bin 0 -> 3169 bytes .../sbcsgroupprober.cpython-35.pyc | Bin 0 -> 1674 bytes .../__pycache__/sjisprober.cpython-35.pyc | Bin 0 -> 2577 bytes .../universaldetector.cpython-35.pyc | Bin 0 -> 6380 bytes .../__pycache__/utf8prober.cpython-35.pyc | Bin 0 -> 2050 bytes .../__pycache__/version.cpython-35.pyc | Bin 0 -> 390 bytes .../site-packages/chardet/big5freq.py | 386 + .../site-packages/chardet/big5prober.py | 47 + .../site-packages/chardet/chardistribution.py | 233 + .../chardet/charsetgroupprober.py | 106 + .../site-packages/chardet/charsetprober.py | 145 + .../site-packages/chardet/cli/__init__.py | 1 + .../cli/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 138 bytes .../cli/__pycache__/chardetect.cpython-35.pyc | Bin 0 -> 2741 bytes .../site-packages/chardet/cli/chardetect.py | 85 + .../chardet/codingstatemachine.py | 88 + .../python3.5/site-packages/chardet/compat.py | 34 + .../site-packages/chardet/cp949prober.py | 49 + .../python3.5/site-packages/chardet/enums.py | 76 + .../site-packages/chardet/escprober.py | 101 + .../python3.5/site-packages/chardet/escsm.py | 246 + .../site-packages/chardet/eucjpprober.py | 92 + .../site-packages/chardet/euckrfreq.py | 195 + .../site-packages/chardet/euckrprober.py | 47 + .../site-packages/chardet/euctwfreq.py | 387 + .../site-packages/chardet/euctwprober.py | 46 + .../site-packages/chardet/gb2312freq.py | 283 + .../site-packages/chardet/gb2312prober.py | 46 + .../site-packages/chardet/hebrewprober.py | 292 + .../site-packages/chardet/jisfreq.py | 325 + .../python3.5/site-packages/chardet/jpcntx.py | 233 + .../chardet/langbulgarianmodel.py | 228 + .../chardet/langcyrillicmodel.py | 333 + .../site-packages/chardet/langgreekmodel.py | 225 + .../site-packages/chardet/langhebrewmodel.py | 200 + .../chardet/langhungarianmodel.py | 225 + .../site-packages/chardet/langthaimodel.py | 199 + .../site-packages/chardet/langturkishmodel.py | 193 + .../site-packages/chardet/latin1prober.py | 145 + .../site-packages/chardet/mbcharsetprober.py | 91 + .../site-packages/chardet/mbcsgroupprober.py | 54 + .../python3.5/site-packages/chardet/mbcssm.py | 572 ++ .../site-packages/chardet/sbcharsetprober.py | 132 + .../site-packages/chardet/sbcsgroupprober.py | 73 + .../site-packages/chardet/sjisprober.py | 92 + .../chardet/universaldetector.py | 286 + .../site-packages/chardet/utf8prober.py | 82 + .../site-packages/chardet/version.py | 9 + .../python3.5/site-packages/easy_install.py | 5 + .../idna-2.5.dist-info/DESCRIPTION.rst | 178 + .../idna-2.5.dist-info/INSTALLER | 1 + .../site-packages/idna-2.5.dist-info/METADATA | 204 + .../site-packages/idna-2.5.dist-info/RECORD | 22 + .../site-packages/idna-2.5.dist-info/WHEEL | 6 + .../idna-2.5.dist-info/metadata.json | 1 + .../site-packages/idna-2.5.dist-info/pbr.json | 1 + .../idna-2.5.dist-info/top_level.txt | 1 + .../python3.5/site-packages/idna/__init__.py | 1 + .../idna/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 151 bytes .../idna/__pycache__/codec.cpython-35.pyc | Bin 0 -> 3352 bytes .../idna/__pycache__/compat.cpython-35.pyc | Bin 0 -> 581 bytes .../idna/__pycache__/core.cpython-35.pyc | Bin 0 -> 9952 bytes .../idna/__pycache__/idnadata.cpython-35.pyc | Bin 0 -> 26453 bytes .../idna/__pycache__/intranges.cpython-35.pyc | Bin 0 -> 1863 bytes .../idna/__pycache__/uts46data.cpython-35.pyc | Bin 0 -> 230901 bytes .../lib/python3.5/site-packages/idna/codec.py | 118 + .../python3.5/site-packages/idna/compat.py | 12 + .../lib/python3.5/site-packages/idna/core.py | 387 + .../python3.5/site-packages/idna/idnadata.py | 1584 ++++ .../python3.5/site-packages/idna/intranges.py | 53 + .../python3.5/site-packages/idna/uts46data.py | 7633 +++++++++++++++++ .../lxml-3.8.0.dist-info/DESCRIPTION.rst | 78 + .../lxml-3.8.0.dist-info/INSTALLER | 1 + .../lxml-3.8.0.dist-info/METADATA | 114 + .../site-packages/lxml-3.8.0.dist-info/RECORD | 155 + .../site-packages/lxml-3.8.0.dist-info/WHEEL | 5 + .../lxml-3.8.0.dist-info/metadata.json | 1 + .../lxml-3.8.0.dist-info/top_level.txt | 1 + .../site-packages/lxml/ElementInclude.py | 217 + .../python3.5/site-packages/lxml/__init__.py | 20 + .../__pycache__/ElementInclude.cpython-35.pyc | Bin 0 -> 3681 bytes .../lxml/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 668 bytes .../__pycache__/_elementpath.cpython-35.pyc | Bin 0 -> 6725 bytes .../lxml/__pycache__/builder.cpython-35.pyc | Bin 0 -> 6049 bytes .../lxml/__pycache__/cssselect.cpython-35.pyc | Bin 0 -> 3721 bytes .../__pycache__/doctestcompare.cpython-35.pyc | Bin 0 -> 15294 bytes .../__pycache__/pyclasslookup.cpython-35.pyc | Bin 0 -> 196 bytes .../lxml/__pycache__/sax.cpython-35.pyc | Bin 0 -> 8265 bytes .../__pycache__/usedoctest.cpython-35.pyc | Bin 0 -> 390 bytes .../site-packages/lxml/_elementpath.py | 324 + .../python3.5/site-packages/lxml/builder.py | 234 + .../python3.5/site-packages/lxml/cssselect.py | 102 + .../site-packages/lxml/doctestcompare.py | 508 ++ .../etree.cpython-35m-x86_64-linux-gnu.so | Bin 0 -> 14109083 bytes .../site-packages/lxml/html/ElementSoup.py | 10 + .../site-packages/lxml/html/__init__.py | 1921 +++++ .../__pycache__/ElementSoup.cpython-35.pyc | Bin 0 -> 500 bytes .../html/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 59711 bytes .../__pycache__/_diffcommand.cpython-35.pyc | Bin 0 -> 2377 bytes .../__pycache__/_html5builder.cpython-35.pyc | Bin 0 -> 3789 bytes .../html/__pycache__/_setmixin.cpython-35.pyc | Bin 0 -> 2066 bytes .../html/__pycache__/builder.cpython-35.pyc | Bin 0 -> 3208 bytes .../html/__pycache__/clean.cpython-35.pyc | Bin 0 -> 17844 bytes .../lxml/html/__pycache__/defs.cpython-35.pyc | Bin 0 -> 3198 bytes .../lxml/html/__pycache__/diff.cpython-35.pyc | Bin 0 -> 26019 bytes .../html/__pycache__/formfill.cpython-35.pyc | Bin 0 -> 8259 bytes .../__pycache__/html5parser.cpython-35.pyc | Bin 0 -> 5924 bytes .../__pycache__/soupparser.cpython-35.pyc | Bin 0 -> 8538 bytes .../__pycache__/usedoctest.cpython-35.pyc | Bin 0 -> 416 bytes .../site-packages/lxml/html/_diffcommand.py | 87 + .../site-packages/lxml/html/_html5builder.py | 100 + .../site-packages/lxml/html/_setmixin.py | 52 + .../site-packages/lxml/html/builder.py | 133 + .../site-packages/lxml/html/clean.py | 741 ++ .../python3.5/site-packages/lxml/html/defs.py | 131 + .../python3.5/site-packages/lxml/html/diff.py | 881 ++ .../site-packages/lxml/html/formfill.py | 299 + .../site-packages/lxml/html/html5parser.py | 214 + .../site-packages/lxml/html/soupparser.py | 310 + .../site-packages/lxml/html/usedoctest.py | 13 + .../site-packages/lxml/includes/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 137 bytes .../site-packages/lxml/includes/c14n.pxd | 26 + .../site-packages/lxml/includes/config.pxd | 3 + .../site-packages/lxml/includes/dtdvalid.pxd | 18 + .../site-packages/lxml/includes/etree_defs.h | 421 + .../lxml/includes/etreepublic.pxd | 237 + .../lxml/includes/htmlparser.pxd | 56 + .../lxml/includes/libexslt/exslt.h | 102 + .../lxml/includes/libexslt/exsltconfig.h | 73 + .../lxml/includes/libexslt/exsltexports.h | 140 + .../lxml/includes/libxml/DOCBparser.h | 96 + .../lxml/includes/libxml/HTMLparser.h | 306 + .../lxml/includes/libxml/HTMLtree.h | 147 + .../site-packages/lxml/includes/libxml/SAX.h | 173 + .../site-packages/lxml/includes/libxml/SAX2.h | 178 + .../site-packages/lxml/includes/libxml/c14n.h | 126 + .../lxml/includes/libxml/catalog.h | 182 + .../lxml/includes/libxml/chvalid.h | 230 + .../lxml/includes/libxml/debugXML.h | 217 + .../site-packages/lxml/includes/libxml/dict.h | 80 + .../lxml/includes/libxml/encoding.h | 240 + .../lxml/includes/libxml/entities.h | 151 + .../lxml/includes/libxml/globals.h | 509 ++ .../site-packages/lxml/includes/libxml/hash.h | 233 + .../site-packages/lxml/includes/libxml/list.h | 137 + .../lxml/includes/libxml/nanoftp.h | 163 + .../lxml/includes/libxml/nanohttp.h | 81 + .../lxml/includes/libxml/parser.h | 1241 +++ .../lxml/includes/libxml/parserInternals.h | 644 ++ .../lxml/includes/libxml/relaxng.h | 217 + .../lxml/includes/libxml/schemasInternals.h | 958 +++ .../lxml/includes/libxml/schematron.h | 142 + .../lxml/includes/libxml/threads.h | 84 + .../site-packages/lxml/includes/libxml/tree.h | 1311 +++ .../site-packages/lxml/includes/libxml/uri.h | 94 + .../lxml/includes/libxml/valid.h | 458 + .../lxml/includes/libxml/xinclude.h | 129 + .../lxml/includes/libxml/xlink.h | 189 + .../lxml/includes/libxml/xmlIO.h | 366 + .../lxml/includes/libxml/xmlautomata.h | 146 + .../lxml/includes/libxml/xmlerror.h | 945 ++ .../lxml/includes/libxml/xmlexports.h | 162 + .../lxml/includes/libxml/xmlmemory.h | 224 + .../lxml/includes/libxml/xmlmodule.h | 57 + .../lxml/includes/libxml/xmlreader.h | 428 + .../lxml/includes/libxml/xmlregexp.h | 222 + .../lxml/includes/libxml/xmlsave.h | 88 + .../lxml/includes/libxml/xmlschemas.h | 246 + .../lxml/includes/libxml/xmlschemastypes.h | 151 + .../lxml/includes/libxml/xmlstring.h | 140 + .../lxml/includes/libxml/xmlunicode.h | 202 + .../lxml/includes/libxml/xmlversion.h | 489 ++ .../lxml/includes/libxml/xmlwriter.h | 488 ++ .../lxml/includes/libxml/xpath.h | 557 ++ .../lxml/includes/libxml/xpathInternals.h | 632 ++ .../lxml/includes/libxml/xpointer.h | 114 + .../lxml/includes/libxslt/attributes.h | 38 + .../lxml/includes/libxslt/documents.h | 93 + .../lxml/includes/libxslt/extensions.h | 262 + .../lxml/includes/libxslt/extra.h | 80 + .../lxml/includes/libxslt/functions.h | 78 + .../lxml/includes/libxslt/imports.h | 75 + .../lxml/includes/libxslt/keys.h | 53 + .../lxml/includes/libxslt/namespaces.h | 68 + .../lxml/includes/libxslt/numbersInternals.h | 73 + .../lxml/includes/libxslt/pattern.h | 81 + .../lxml/includes/libxslt/preproc.h | 43 + .../lxml/includes/libxslt/security.h | 104 + .../lxml/includes/libxslt/templates.h | 77 + .../lxml/includes/libxslt/transform.h | 207 + .../lxml/includes/libxslt/variables.h | 91 + .../lxml/includes/libxslt/xslt.h | 110 + .../lxml/includes/libxslt/xsltInternals.h | 1972 +++++ .../lxml/includes/libxslt/xsltconfig.h | 183 + .../lxml/includes/libxslt/xsltexports.h | 142 + .../lxml/includes/libxslt/xsltlocale.h | 67 + .../lxml/includes/libxslt/xsltutils.h | 313 + .../lxml/includes/lxml-version.h | 3 + .../site-packages/lxml/includes/relaxng.pxd | 64 + .../lxml/includes/schematron.pxd | 34 + .../site-packages/lxml/includes/tree.pxd | 477 + .../site-packages/lxml/includes/uri.pxd | 5 + .../site-packages/lxml/includes/xinclude.pxd | 22 + .../site-packages/lxml/includes/xmlerror.pxd | 851 ++ .../site-packages/lxml/includes/xmlparser.pxd | 249 + .../site-packages/lxml/includes/xmlschema.pxd | 35 + .../site-packages/lxml/includes/xpath.pxd | 135 + .../site-packages/lxml/includes/xslt.pxd | 180 + .../lxml/isoschematron/__init__.py | 334 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 10079 bytes .../resources/rng/iso-schematron.rng | 622 ++ .../resources/xsl/RNG2Schtrn.xsl | 75 + .../resources/xsl/XSD2Schtrn.xsl | 77 + .../iso_abstract_expand.xsl | 296 + .../iso-schematron-xslt1/iso_dsdl_include.xsl | 1160 +++ .../iso_schematron_message.xsl | 55 + .../iso_schematron_skeleton_for_xslt1.xsl | 1796 ++++ .../iso_svrl_for_xslt1.xsl | 588 ++ .../xsl/iso-schematron-xslt1/readme.txt | 83 + .../python3.5/site-packages/lxml/lxml.etree.h | 220 + .../site-packages/lxml/lxml.etree_api.h | 233 + .../objectify.cpython-35m-x86_64-linux-gnu.so | Bin 0 -> 5116090 bytes .../site-packages/lxml/pyclasslookup.py | 3 + utils/lib/python3.5/site-packages/lxml/sax.py | 248 + .../site-packages/lxml/usedoctest.py | 13 + .../pip-9.0.1.dist-info/DESCRIPTION.rst | 39 + .../pip-9.0.1.dist-info/INSTALLER | 1 + .../pip-9.0.1.dist-info/METADATA | 69 + .../site-packages/pip-9.0.1.dist-info/RECORD | 501 ++ .../site-packages/pip-9.0.1.dist-info/WHEEL | 6 + .../pip-9.0.1.dist-info/entry_points.txt | 5 + .../pip-9.0.1.dist-info/metadata.json | 1 + .../pip-9.0.1.dist-info/top_level.txt | 1 + .../python3.5/site-packages/pip/__init__.py | 331 + .../python3.5/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 9242 bytes .../pip/__pycache__/__main__.cpython-35.pyc | Bin 0 -> 418 bytes .../__pycache__/basecommand.cpython-35.pyc | Bin 0 -> 7884 bytes .../pip/__pycache__/baseparser.cpython-35.pyc | Bin 0 -> 10000 bytes .../pip/__pycache__/cmdoptions.cpython-35.pyc | Bin 0 -> 13899 bytes .../pip/__pycache__/download.cpython-35.pyc | Bin 0 -> 22225 bytes .../pip/__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 10965 bytes .../pip/__pycache__/index.cpython-35.pyc | Bin 0 -> 32608 bytes .../pip/__pycache__/locations.cpython-35.pyc | Bin 0 -> 4287 bytes .../pip/__pycache__/pep425tags.cpython-35.pyc | Bin 0 -> 8206 bytes .../__pycache__/status_codes.cpython-35.pyc | Bin 0 -> 354 bytes .../pip/__pycache__/wheel.cpython-35.pyc | Bin 0 -> 23734 bytes .../site-packages/pip/_vendor/__init__.py | 107 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2911 bytes .../__pycache__/appdirs.cpython-35.pyc | Bin 0 -> 19660 bytes .../_vendor/__pycache__/distro.cpython-35.pyc | Bin 0 -> 33672 bytes .../__pycache__/ipaddress.cpython-35.pyc | Bin 0 -> 70596 bytes .../__pycache__/ordereddict.cpython-35.pyc | Bin 0 -> 3883 bytes .../__pycache__/pyparsing.cpython-35.pyc | Bin 0 -> 212217 bytes .../__pycache__/re-vendor.cpython-35.pyc | Bin 0 -> 1174 bytes .../__pycache__/retrying.cpython-35.pyc | Bin 0 -> 8695 bytes .../_vendor/__pycache__/six.cpython-35.pyc | Bin 0 -> 26349 bytes .../site-packages/pip/_vendor/appdirs.py | 552 ++ .../pip/_vendor/cachecontrol/__init__.py | 11 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 520 bytes .../__pycache__/_cmd.cpython-35.pyc | Bin 0 -> 1632 bytes .../__pycache__/adapter.cpython-35.pyc | Bin 0 -> 3080 bytes .../__pycache__/cache.cpython-35.pyc | Bin 0 -> 1803 bytes .../__pycache__/compat.cpython-35.pyc | Bin 0 -> 594 bytes .../__pycache__/controller.cpython-35.pyc | Bin 0 -> 8433 bytes .../__pycache__/filewrapper.cpython-35.pyc | Bin 0 -> 2224 bytes .../__pycache__/heuristics.cpython-35.pyc | Bin 0 -> 4936 bytes .../__pycache__/serialize.cpython-35.pyc | Bin 0 -> 4859 bytes .../__pycache__/wrapper.cpython-35.pyc | Bin 0 -> 560 bytes .../pip/_vendor/cachecontrol/_cmd.py | 60 + .../pip/_vendor/cachecontrol/adapter.py | 125 + .../pip/_vendor/cachecontrol/cache.py | 39 + .../_vendor/cachecontrol/caches/__init__.py | 18 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 577 bytes .../__pycache__/file_cache.cpython-35.pyc | Bin 0 -> 2986 bytes .../__pycache__/redis_cache.cpython-35.pyc | Bin 0 -> 1762 bytes .../_vendor/cachecontrol/caches/file_cache.py | 116 + .../cachecontrol/caches/redis_cache.py | 41 + .../pip/_vendor/cachecontrol/compat.py | 20 + .../pip/_vendor/cachecontrol/controller.py | 353 + .../pip/_vendor/cachecontrol/filewrapper.py | 78 + .../pip/_vendor/cachecontrol/heuristics.py | 138 + .../pip/_vendor/cachecontrol/serialize.py | 196 + .../pip/_vendor/cachecontrol/wrapper.py | 21 + .../pip/_vendor/colorama/__init__.py | 7 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 420 bytes .../colorama/__pycache__/ansi.cpython-35.pyc | Bin 0 -> 3473 bytes .../__pycache__/ansitowin32.cpython-35.pyc | Bin 0 -> 7868 bytes .../__pycache__/initialise.cpython-35.pyc | Bin 0 -> 1791 bytes .../colorama/__pycache__/win32.cpython-35.pyc | Bin 0 -> 3968 bytes .../__pycache__/winterm.cpython-35.pyc | Bin 0 -> 4944 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 236 + .../pip/_vendor/colorama/initialise.py | 82 + .../pip/_vendor/colorama/win32.py | 154 + .../pip/_vendor/colorama/winterm.py | 162 + .../pip/_vendor/distlib/__init__.py | 23 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1046 bytes .../distlib/__pycache__/compat.cpython-35.pyc | Bin 0 -> 34494 bytes .../__pycache__/database.cpython-35.pyc | Bin 0 -> 44873 bytes .../distlib/__pycache__/index.cpython-35.pyc | Bin 0 -> 18371 bytes .../__pycache__/locators.cpython-35.pyc | Bin 0 -> 41455 bytes .../__pycache__/manifest.cpython-35.pyc | Bin 0 -> 11134 bytes .../__pycache__/markers.cpython-35.pyc | Bin 0 -> 6533 bytes .../__pycache__/metadata.cpython-35.pyc | Bin 0 -> 29389 bytes .../__pycache__/resources.cpython-35.pyc | Bin 0 -> 11778 bytes .../__pycache__/scripts.cpython-35.pyc | Bin 0 -> 10934 bytes .../distlib/__pycache__/util.cpython-35.pyc | Bin 0 -> 48832 bytes .../__pycache__/version.cpython-35.pyc | Bin 0 -> 22965 bytes .../distlib/__pycache__/wheel.cpython-35.pyc | Bin 0 -> 27835 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 436 bytes .../_backport/__pycache__/misc.cpython-35.pyc | Bin 0 -> 1107 bytes .../__pycache__/shutil.cpython-35.pyc | Bin 0 -> 22901 bytes .../__pycache__/sysconfig.cpython-35.pyc | Bin 0 -> 17552 bytes .../__pycache__/tarfile.cpython-35.pyc | Bin 0 -> 68944 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 + .../pip/_vendor/distlib/_backport/shutil.py | 761 ++ .../_vendor/distlib/_backport/sysconfig.cfg | 84 + .../_vendor/distlib/_backport/sysconfig.py | 788 ++ .../pip/_vendor/distlib/_backport/tarfile.py | 2607 ++++++ .../pip/_vendor/distlib/compat.py | 1111 +++ .../pip/_vendor/distlib/database.py | 1312 +++ .../pip/_vendor/distlib/index.py | 515 ++ .../pip/_vendor/distlib/locators.py | 1283 +++ .../pip/_vendor/distlib/manifest.py | 393 + .../pip/_vendor/distlib/markers.py | 190 + .../pip/_vendor/distlib/metadata.py | 1068 +++ .../pip/_vendor/distlib/resources.py | 355 + .../pip/_vendor/distlib/scripts.py | 384 + .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 89088 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 97792 bytes .../site-packages/pip/_vendor/distlib/util.py | 1611 ++++ .../pip/_vendor/distlib/version.py | 742 ++ .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 85504 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 94208 bytes .../pip/_vendor/distlib/wheel.py | 978 +++ .../site-packages/pip/_vendor/distro.py | 1081 +++ .../pip/_vendor/html5lib/__init__.py | 25 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 953 bytes .../__pycache__/_ihatexml.cpython-35.pyc | Bin 0 -> 14433 bytes .../__pycache__/_inputstream.cpython-35.pyc | Bin 0 -> 24856 bytes .../__pycache__/_tokenizer.cpython-35.pyc | Bin 0 -> 47749 bytes .../__pycache__/_utils.cpython-35.pyc | Bin 0 -> 3608 bytes .../__pycache__/constants.cpython-35.pyc | Bin 0 -> 72202 bytes .../__pycache__/html5parser.cpython-35.pyc | Bin 0 -> 106003 bytes .../__pycache__/serializer.cpython-35.pyc | Bin 0 -> 10055 bytes .../pip/_vendor/html5lib/_ihatexml.py | 288 + .../pip/_vendor/html5lib/_inputstream.py | 923 ++ .../pip/_vendor/html5lib/_tokenizer.py | 1721 ++++ .../pip/_vendor/html5lib/_trie/__init__.py | 14 + .../_trie/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 395 bytes .../_trie/__pycache__/_base.cpython-35.pyc | Bin 0 -> 1556 bytes .../_trie/__pycache__/datrie.cpython-35.pyc | Bin 0 -> 2109 bytes .../_trie/__pycache__/py.cpython-35.pyc | Bin 0 -> 2400 bytes .../pip/_vendor/html5lib/_trie/_base.py | 38 + .../pip/_vendor/html5lib/_trie/datrie.py | 44 + .../pip/_vendor/html5lib/_trie/py.py | 67 + .../pip/_vendor/html5lib/_utils.py | 127 + .../pip/_vendor/html5lib/constants.py | 2945 +++++++ .../pip/_vendor/html5lib/filters/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 151 bytes .../alphabeticalattributes.cpython-35.pyc | Bin 0 -> 1084 bytes .../filters/__pycache__/base.cpython-35.pyc | Bin 0 -> 841 bytes .../inject_meta_charset.cpython-35.pyc | Bin 0 -> 1808 bytes .../filters/__pycache__/lint.cpython-35.pyc | Bin 0 -> 2606 bytes .../__pycache__/optionaltags.cpython-35.pyc | Bin 0 -> 3276 bytes .../__pycache__/sanitizer.cpython-35.pyc | Bin 0 -> 18605 bytes .../__pycache__/whitespace.cpython-35.pyc | Bin 0 -> 1342 bytes .../filters/alphabeticalattributes.py | 20 + .../pip/_vendor/html5lib/filters/base.py | 12 + .../html5lib/filters/inject_meta_charset.py | 65 + .../pip/_vendor/html5lib/filters/lint.py | 81 + .../_vendor/html5lib/filters/optionaltags.py | 206 + .../pip/_vendor/html5lib/filters/sanitizer.py | 865 ++ .../_vendor/html5lib/filters/whitespace.py | 38 + .../pip/_vendor/html5lib/html5parser.py | 2733 ++++++ .../pip/_vendor/html5lib/serializer.py | 334 + .../_vendor/html5lib/treeadapters/__init__.py | 12 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 427 bytes .../__pycache__/genshi.cpython-35.pyc | Bin 0 -> 1621 bytes .../__pycache__/sax.cpython-35.pyc | Bin 0 -> 1466 bytes .../_vendor/html5lib/treeadapters/genshi.py | 47 + .../pip/_vendor/html5lib/treeadapters/sax.py | 44 + .../_vendor/html5lib/treebuilders/__init__.py | 76 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 3168 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 11930 bytes .../__pycache__/dom.cpython-35.pyc | Bin 0 -> 9998 bytes .../__pycache__/etree.cpython-35.pyc | Bin 0 -> 12956 bytes .../__pycache__/etree_lxml.cpython-35.pyc | Bin 0 -> 12922 bytes .../pip/_vendor/html5lib/treebuilders/base.py | 383 + .../pip/_vendor/html5lib/treebuilders/dom.py | 236 + .../_vendor/html5lib/treebuilders/etree.py | 340 + .../html5lib/treebuilders/etree_lxml.py | 367 + .../_vendor/html5lib/treewalkers/__init__.py | 143 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 4052 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 4936 bytes .../__pycache__/dom.cpython-35.pyc | Bin 0 -> 1819 bytes .../__pycache__/etree.cpython-35.pyc | Bin 0 -> 3996 bytes .../__pycache__/etree_lxml.cpython-35.pyc | Bin 0 -> 7253 bytes .../__pycache__/genshi.cpython-35.pyc | Bin 0 -> 2063 bytes .../pip/_vendor/html5lib/treewalkers/base.py | 150 + .../pip/_vendor/html5lib/treewalkers/dom.py | 43 + .../pip/_vendor/html5lib/treewalkers/etree.py | 137 + .../html5lib/treewalkers/etree_lxml.py | 213 + .../_vendor/html5lib/treewalkers/genshi.py | 69 + .../site-packages/pip/_vendor/ipaddress.py | 2425 ++++++ .../pip/_vendor/lockfile/__init__.py | 347 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 10292 bytes .../__pycache__/linklockfile.cpython-35.pyc | Bin 0 -> 2441 bytes .../__pycache__/mkdirlockfile.cpython-35.pyc | Bin 0 -> 2859 bytes .../__pycache__/pidlockfile.cpython-35.pyc | Bin 0 -> 5073 bytes .../__pycache__/sqlitelockfile.cpython-35.pyc | Bin 0 -> 4057 bytes .../symlinklockfile.cpython-35.pyc | Bin 0 -> 2316 bytes .../pip/_vendor/lockfile/linklockfile.py | 73 + .../pip/_vendor/lockfile/mkdirlockfile.py | 84 + .../pip/_vendor/lockfile/pidlockfile.py | 190 + .../pip/_vendor/lockfile/sqlitelockfile.py | 156 + .../pip/_vendor/lockfile/symlinklockfile.py | 70 + .../site-packages/pip/_vendor/ordereddict.py | 127 + .../pip/_vendor/packaging/__about__.py | 21 + .../pip/_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-35.pyc | Bin 0 -> 704 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 544 bytes .../__pycache__/_compat.cpython-35.pyc | Bin 0 -> 1020 bytes .../__pycache__/_structures.cpython-35.pyc | Bin 0 -> 2940 bytes .../__pycache__/markers.cpython-35.pyc | Bin 0 -> 9515 bytes .../__pycache__/requirements.cpython-35.pyc | Bin 0 -> 4222 bytes .../__pycache__/specifiers.cpython-35.pyc | Bin 0 -> 21140 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 466 bytes .../__pycache__/version.cpython-35.pyc | Bin 0 -> 11420 bytes .../pip/_vendor/packaging/_compat.py | 30 + .../pip/_vendor/packaging/_structures.py | 68 + .../pip/_vendor/packaging/markers.py | 303 + .../pip/_vendor/packaging/requirements.py | 129 + .../pip/_vendor/packaging/specifiers.py | 774 ++ .../pip/_vendor/packaging/utils.py | 14 + .../pip/_vendor/packaging/version.py | 393 + .../pip/_vendor/pkg_resources/__init__.py | 3052 +++++++ .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 101607 bytes .../pip/_vendor/progress/__init__.py | 123 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 4046 bytes .../progress/__pycache__/bar.cpython-35.pyc | Bin 0 -> 2632 bytes .../__pycache__/counter.cpython-35.pyc | Bin 0 -> 1645 bytes .../__pycache__/helpers.cpython-35.pyc | Bin 0 -> 3148 bytes .../__pycache__/spinner.cpython-35.pyc | Bin 0 -> 1270 bytes .../site-packages/pip/_vendor/progress/bar.py | 83 + .../pip/_vendor/progress/counter.py | 47 + .../pip/_vendor/progress/helpers.py | 91 + .../pip/_vendor/progress/spinner.py | 40 + .../site-packages/pip/_vendor/pyparsing.py | 5696 ++++++++++++ .../site-packages/pip/_vendor/re-vendor.py | 34 + .../pip/_vendor/requests/__init__.py | 88 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2405 bytes .../__pycache__/adapters.cpython-35.pyc | Bin 0 -> 16644 bytes .../requests/__pycache__/api.cpython-35.pyc | Bin 0 -> 6048 bytes .../requests/__pycache__/auth.cpython-35.pyc | Bin 0 -> 7775 bytes .../requests/__pycache__/certs.cpython-35.pyc | Bin 0 -> 804 bytes .../__pycache__/compat.cpython-35.pyc | Bin 0 -> 1510 bytes .../__pycache__/cookies.cpython-35.pyc | Bin 0 -> 19450 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 5111 bytes .../requests/__pycache__/hooks.cpython-35.pyc | Bin 0 -> 1003 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 23757 bytes .../__pycache__/sessions.cpython-35.pyc | Bin 0 -> 19197 bytes .../__pycache__/status_codes.cpython-35.pyc | Bin 0 -> 3908 bytes .../__pycache__/structures.cpython-35.pyc | Bin 0 -> 4528 bytes .../requests/__pycache__/utils.cpython-35.pyc | Bin 0 -> 20041 bytes .../pip/_vendor/requests/adapters.py | 503 ++ .../site-packages/pip/_vendor/requests/api.py | 148 + .../pip/_vendor/requests/auth.py | 252 + .../pip/_vendor/requests/cacert.pem | 5616 ++++++++++++ .../pip/_vendor/requests/certs.py | 25 + .../pip/_vendor/requests/compat.py | 68 + .../pip/_vendor/requests/cookies.py | 540 ++ .../pip/_vendor/requests/exceptions.py | 114 + .../pip/_vendor/requests/hooks.py | 34 + .../pip/_vendor/requests/models.py | 873 ++ .../pip/_vendor/requests/packages/__init__.py | 36 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1584 bytes .../requests/packages/chardet/__init__.py | 32 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 694 bytes .../__pycache__/big5freq.cpython-35.pyc | Bin 0 -> 113792 bytes .../__pycache__/big5prober.cpython-35.pyc | Bin 0 -> 957 bytes .../__pycache__/chardetect.cpython-35.pyc | Bin 0 -> 2640 bytes .../chardistribution.cpython-35.pyc | Bin 0 -> 6571 bytes .../charsetgroupprober.cpython-35.pyc | Bin 0 -> 2178 bytes .../__pycache__/charsetprober.cpython-35.pyc | Bin 0 -> 1798 bytes .../codingstatemachine.cpython-35.pyc | Bin 0 -> 1526 bytes .../chardet/__pycache__/compat.cpython-35.pyc | Bin 0 -> 489 bytes .../__pycache__/constants.cpython-35.pyc | Bin 0 -> 326 bytes .../__pycache__/cp949prober.cpython-35.pyc | Bin 0 -> 964 bytes .../__pycache__/escprober.cpython-35.pyc | Bin 0 -> 2060 bytes .../chardet/__pycache__/escsm.cpython-35.pyc | Bin 0 -> 7200 bytes .../__pycache__/eucjpprober.cpython-35.pyc | Bin 0 -> 2413 bytes .../__pycache__/euckrfreq.cpython-35.pyc | Bin 0 -> 88783 bytes .../__pycache__/euckrprober.cpython-35.pyc | Bin 0 -> 965 bytes .../__pycache__/euctwfreq.cpython-35.pyc | Bin 0 -> 61181 bytes .../__pycache__/euctwprober.cpython-35.pyc | Bin 0 -> 965 bytes .../__pycache__/gb2312freq.cpython-35.pyc | Bin 0 -> 68799 bytes .../__pycache__/gb2312prober.cpython-35.pyc | Bin 0 -> 971 bytes .../__pycache__/hebrewprober.cpython-35.pyc | Bin 0 -> 2947 bytes .../__pycache__/jisfreq.cpython-35.pyc | Bin 0 -> 84015 bytes .../chardet/__pycache__/jpcntx.cpython-35.pyc | Bin 0 -> 24675 bytes .../langbulgarianmodel.cpython-35.pyc | Bin 0 -> 24844 bytes .../langcyrillicmodel.cpython-35.pyc | Bin 0 -> 30462 bytes .../__pycache__/langgreekmodel.cpython-35.pyc | Bin 0 -> 24531 bytes .../langhebrewmodel.cpython-35.pyc | Bin 0 -> 23367 bytes .../langhungarianmodel.cpython-35.pyc | Bin 0 -> 24829 bytes .../__pycache__/langthaimodel.cpython-35.pyc | Bin 0 -> 23353 bytes .../__pycache__/latin1prober.cpython-35.pyc | Bin 0 -> 3133 bytes .../mbcharsetprober.cpython-35.pyc | Bin 0 -> 2111 bytes .../mbcsgroupprober.cpython-35.pyc | Bin 0 -> 1094 bytes .../chardet/__pycache__/mbcssm.cpython-35.pyc | Bin 0 -> 17419 bytes .../sbcharsetprober.cpython-35.pyc | Bin 0 -> 2917 bytes .../sbcsgroupprober.cpython-35.pyc | Bin 0 -> 1723 bytes .../__pycache__/sjisprober.cpython-35.pyc | Bin 0 -> 2447 bytes .../universaldetector.cpython-35.pyc | Bin 0 -> 3664 bytes .../__pycache__/utf8prober.cpython-35.pyc | Bin 0 -> 1882 bytes .../requests/packages/chardet/big5freq.py | 925 ++ .../requests/packages/chardet/big5prober.py | 42 + .../requests/packages/chardet/chardetect.py | 80 + .../packages/chardet/chardistribution.py | 231 + .../packages/chardet/charsetgroupprober.py | 106 + .../packages/chardet/charsetprober.py | 62 + .../packages/chardet/codingstatemachine.py | 61 + .../requests/packages/chardet/compat.py | 34 + .../requests/packages/chardet/constants.py | 39 + .../requests/packages/chardet/cp949prober.py | 44 + .../requests/packages/chardet/escprober.py | 86 + .../requests/packages/chardet/escsm.py | 242 + .../requests/packages/chardet/eucjpprober.py | 90 + .../requests/packages/chardet/euckrfreq.py | 596 ++ .../requests/packages/chardet/euckrprober.py | 42 + .../requests/packages/chardet/euctwfreq.py | 428 + .../requests/packages/chardet/euctwprober.py | 41 + .../requests/packages/chardet/gb2312freq.py | 472 + .../requests/packages/chardet/gb2312prober.py | 41 + .../requests/packages/chardet/hebrewprober.py | 283 + .../requests/packages/chardet/jisfreq.py | 569 ++ .../requests/packages/chardet/jpcntx.py | 227 + .../packages/chardet/langbulgarianmodel.py | 229 + .../packages/chardet/langcyrillicmodel.py | 329 + .../packages/chardet/langgreekmodel.py | 225 + .../packages/chardet/langhebrewmodel.py | 201 + .../packages/chardet/langhungarianmodel.py | 225 + .../packages/chardet/langthaimodel.py | 200 + .../requests/packages/chardet/latin1prober.py | 139 + .../packages/chardet/mbcharsetprober.py | 86 + .../packages/chardet/mbcsgroupprober.py | 54 + .../requests/packages/chardet/mbcssm.py | 572 ++ .../packages/chardet/sbcharsetprober.py | 120 + .../packages/chardet/sbcsgroupprober.py | 69 + .../requests/packages/chardet/sjisprober.py | 91 + .../packages/chardet/universaldetector.py | 170 + .../requests/packages/chardet/utf8prober.py | 76 + .../requests/packages/urllib3/__init__.py | 96 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2632 bytes .../__pycache__/_collections.cpython-35.pyc | Bin 0 -> 11246 bytes .../__pycache__/connection.cpython-35.pyc | Bin 0 -> 9098 bytes .../__pycache__/connectionpool.cpython-35.pyc | Bin 0 -> 23953 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 9335 bytes .../urllib3/__pycache__/fields.cpython-35.pyc | Bin 0 -> 6110 bytes .../__pycache__/filepost.cpython-35.pyc | Bin 0 -> 2809 bytes .../__pycache__/poolmanager.cpython-35.pyc | Bin 0 -> 11377 bytes .../__pycache__/request.cpython-35.pyc | Bin 0 -> 5742 bytes .../__pycache__/response.cpython-35.pyc | Bin 0 -> 14757 bytes .../requests/packages/urllib3/_collections.py | 324 + .../requests/packages/urllib3/connection.py | 330 + .../packages/urllib3/connectionpool.py | 866 ++ .../packages/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 168 bytes .../__pycache__/appengine.cpython-35.pyc | Bin 0 -> 7103 bytes .../__pycache__/ntlmpool.cpython-35.pyc | Bin 0 -> 3543 bytes .../__pycache__/pyopenssl.cpython-35.pyc | Bin 0 -> 10891 bytes .../contrib/__pycache__/socks.cpython-35.pyc | Bin 0 -> 4763 bytes .../packages/urllib3/contrib/appengine.py | 231 + .../packages/urllib3/contrib/ntlmpool.py | 115 + .../packages/urllib3/contrib/pyopenssl.py | 358 + .../packages/urllib3/contrib/socks.py | 172 + .../requests/packages/urllib3/exceptions.py | 209 + .../requests/packages/urllib3/fields.py | 178 + .../requests/packages/urllib3/filepost.py | 94 + .../packages/urllib3/packages/__init__.py | 5 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 304 bytes .../__pycache__/ordered_dict.cpython-35.pyc | Bin 0 -> 8886 bytes .../packages/__pycache__/six.cpython-35.pyc | Bin 0 -> 26384 bytes .../packages/urllib3/packages/ordered_dict.py | 259 + .../requests/packages/urllib3/packages/six.py | 868 ++ .../packages/ssl_match_hostname/__init__.py | 13 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 473 bytes .../_implementation.cpython-35.pyc | Bin 0 -> 2487 bytes .../ssl_match_hostname/_implementation.py | 105 + .../requests/packages/urllib3/poolmanager.py | 367 + .../requests/packages/urllib3/request.py | 151 + .../requests/packages/urllib3/response.py | 530 ++ .../packages/urllib3/util/__init__.py | 46 + .../util/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1020 bytes .../__pycache__/connection.cpython-35.pyc | Bin 0 -> 3486 bytes .../util/__pycache__/request.cpython-35.pyc | Bin 0 -> 2036 bytes .../util/__pycache__/response.cpython-35.pyc | Bin 0 -> 1915 bytes .../util/__pycache__/retry.cpython-35.pyc | Bin 0 -> 9601 bytes .../util/__pycache__/ssl_.cpython-35.pyc | Bin 0 -> 9235 bytes .../util/__pycache__/timeout.cpython-35.pyc | Bin 0 -> 9015 bytes .../util/__pycache__/url.cpython-35.pyc | Bin 0 -> 5267 bytes .../packages/urllib3/util/connection.py | 144 + .../requests/packages/urllib3/util/request.py | 72 + .../packages/urllib3/util/response.py | 74 + .../requests/packages/urllib3/util/retry.py | 300 + .../requests/packages/urllib3/util/ssl_.py | 320 + .../requests/packages/urllib3/util/timeout.py | 242 + .../requests/packages/urllib3/util/url.py | 217 + .../pip/_vendor/requests/sessions.py | 712 ++ .../pip/_vendor/requests/status_codes.py | 91 + .../pip/_vendor/requests/structures.py | 105 + .../pip/_vendor/requests/utils.py | 817 ++ .../site-packages/pip/_vendor/retrying.py | 267 + .../site-packages/pip/_vendor/six.py | 868 ++ .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 10055 bytes .../__pycache__/labels.cpython-35.pyc | Bin 0 -> 4435 bytes .../__pycache__/mklabels.cpython-35.pyc | Bin 0 -> 1981 bytes .../__pycache__/tests.cpython-35.pyc | Bin 0 -> 5946 bytes .../__pycache__/x_user_defined.cpython-35.pyc | Bin 0 -> 2741 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 + .../site-packages/pip/basecommand.py | 337 + .../python3.5/site-packages/pip/baseparser.py | 293 + .../python3.5/site-packages/pip/cmdoptions.py | 633 ++ .../site-packages/pip/commands/__init__.py | 86 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2200 bytes .../commands/__pycache__/check.cpython-35.pyc | Bin 0 -> 1378 bytes .../__pycache__/completion.cpython-35.pyc | Bin 0 -> 2744 bytes .../__pycache__/download.cpython-35.pyc | Bin 0 -> 5803 bytes .../__pycache__/freeze.cpython-35.pyc | Bin 0 -> 2764 bytes .../commands/__pycache__/hash.cpython-35.pyc | Bin 0 -> 2052 bytes .../commands/__pycache__/help.cpython-35.pyc | Bin 0 -> 1150 bytes .../__pycache__/install.cpython-35.pyc | Bin 0 -> 10588 bytes .../commands/__pycache__/list.cpython-35.pyc | Bin 0 -> 10495 bytes .../__pycache__/search.cpython-35.pyc | Bin 0 -> 4491 bytes .../commands/__pycache__/show.cpython-35.pyc | Bin 0 -> 5858 bytes .../__pycache__/uninstall.cpython-35.pyc | Bin 0 -> 2697 bytes .../commands/__pycache__/wheel.cpython-35.pyc | Bin 0 -> 5780 bytes .../site-packages/pip/commands/check.py | 39 + .../site-packages/pip/commands/completion.py | 81 + .../site-packages/pip/commands/download.py | 212 + .../site-packages/pip/commands/freeze.py | 87 + .../site-packages/pip/commands/hash.py | 57 + .../site-packages/pip/commands/help.py | 35 + .../site-packages/pip/commands/install.py | 437 + .../site-packages/pip/commands/list.py | 337 + .../site-packages/pip/commands/search.py | 133 + .../site-packages/pip/commands/show.py | 154 + .../site-packages/pip/commands/uninstall.py | 76 + .../site-packages/pip/commands/wheel.py | 208 + .../site-packages/pip/compat/__init__.py | 164 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 4278 bytes .../__pycache__/dictconfig.cpython-35.pyc | Bin 0 -> 15022 bytes .../site-packages/pip/compat/dictconfig.py | 565 ++ .../python3.5/site-packages/pip/download.py | 906 ++ .../python3.5/site-packages/pip/exceptions.py | 244 + .../lib/python3.5/site-packages/pip/index.py | 1102 +++ .../python3.5/site-packages/pip/locations.py | 182 + .../site-packages/pip/models/__init__.py | 4 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 233 bytes .../models/__pycache__/index.cpython-35.pyc | Bin 0 -> 886 bytes .../site-packages/pip/models/index.py | 16 + .../site-packages/pip/operations/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 137 bytes .../__pycache__/check.cpython-35.pyc | Bin 0 -> 1529 bytes .../__pycache__/freeze.cpython-35.pyc | Bin 0 -> 3122 bytes .../site-packages/pip/operations/check.py | 49 + .../site-packages/pip/operations/freeze.py | 132 + .../python3.5/site-packages/pip/pep425tags.py | 324 + .../site-packages/pip/req/__init__.py | 10 + .../req/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 428 bytes .../req/__pycache__/req_file.cpython-35.pyc | Bin 0 -> 9084 bytes .../__pycache__/req_install.cpython-35.pyc | Bin 0 -> 33203 bytes .../req/__pycache__/req_set.cpython-35.pyc | Bin 0 -> 22459 bytes .../__pycache__/req_uninstall.cpython-35.pyc | Bin 0 -> 6840 bytes .../site-packages/pip/req/req_file.py | 342 + .../site-packages/pip/req/req_install.py | 1204 +++ .../site-packages/pip/req/req_set.py | 798 ++ .../site-packages/pip/req/req_uninstall.py | 195 + .../site-packages/pip/status_codes.py | 8 + .../site-packages/pip/utils/__init__.py | 852 ++ .../utils/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 23932 bytes .../utils/__pycache__/appdirs.cpython-35.pyc | Bin 0 -> 8071 bytes .../utils/__pycache__/build.cpython-35.pyc | Bin 0 -> 1411 bytes .../__pycache__/deprecation.cpython-35.pyc | Bin 0 -> 1865 bytes .../utils/__pycache__/encoding.cpython-35.pyc | Bin 0 -> 1124 bytes .../__pycache__/filesystem.cpython-35.pyc | Bin 0 -> 645 bytes .../utils/__pycache__/glibc.cpython-35.pyc | Bin 0 -> 1480 bytes .../utils/__pycache__/hashes.cpython-35.pyc | Bin 0 -> 3412 bytes .../utils/__pycache__/logging.cpython-35.pyc | Bin 0 -> 4186 bytes .../utils/__pycache__/outdated.cpython-35.pyc | Bin 0 -> 4575 bytes .../__pycache__/packaging.cpython-35.pyc | Bin 0 -> 2141 bytes .../setuptools_build.cpython-35.pyc | Bin 0 -> 329 bytes .../pip/utils/__pycache__/ui.cpython-35.pyc | Bin 0 -> 10254 bytes .../site-packages/pip/utils/appdirs.py | 248 + .../site-packages/pip/utils/build.py | 42 + .../site-packages/pip/utils/deprecation.py | 76 + .../site-packages/pip/utils/encoding.py | 31 + .../site-packages/pip/utils/filesystem.py | 28 + .../site-packages/pip/utils/glibc.py | 81 + .../site-packages/pip/utils/hashes.py | 92 + .../site-packages/pip/utils/logging.py | 130 + .../site-packages/pip/utils/outdated.py | 162 + .../site-packages/pip/utils/packaging.py | 63 + .../pip/utils/setuptools_build.py | 8 + .../python3.5/site-packages/pip/utils/ui.py | 344 + .../site-packages/pip/vcs/__init__.py | 366 + .../vcs/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 11830 bytes .../pip/vcs/__pycache__/bazaar.cpython-35.pyc | Bin 0 -> 3944 bytes .../pip/vcs/__pycache__/git.cpython-35.pyc | Bin 0 -> 9599 bytes .../vcs/__pycache__/mercurial.cpython-35.pyc | Bin 0 -> 3871 bytes .../vcs/__pycache__/subversion.cpython-35.pyc | Bin 0 -> 7853 bytes .../python3.5/site-packages/pip/vcs/bazaar.py | 116 + .../python3.5/site-packages/pip/vcs/git.py | 300 + .../site-packages/pip/vcs/mercurial.py | 103 + .../site-packages/pip/vcs/subversion.py | 269 + .../lib/python3.5/site-packages/pip/wheel.py | 853 ++ .../site-packages/pkg_resources/__init__.py | 3072 +++++++ .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 102474 bytes .../__pycache__/py31compat.cpython-35.pyc | Bin 0 -> 705 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 151 bytes .../__pycache__/appdirs.cpython-35.pyc | Bin 0 -> 19677 bytes .../__pycache__/pyparsing.cpython-35.pyc | Bin 0 -> 212234 bytes .../_vendor/__pycache__/six.cpython-35.pyc | Bin 0 -> 26366 bytes .../pkg_resources/_vendor/appdirs.py | 552 ++ .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-35.pyc | Bin 0 -> 721 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 561 bytes .../__pycache__/_compat.cpython-35.pyc | Bin 0 -> 1037 bytes .../__pycache__/_structures.cpython-35.pyc | Bin 0 -> 2957 bytes .../__pycache__/markers.cpython-35.pyc | Bin 0 -> 9541 bytes .../__pycache__/requirements.cpython-35.pyc | Bin 0 -> 4257 bytes .../__pycache__/specifiers.cpython-35.pyc | Bin 0 -> 21157 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 483 bytes .../__pycache__/version.cpython-35.pyc | Bin 0 -> 11437 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 301 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 ++ .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 + .../pkg_resources/_vendor/pyparsing.py | 5696 ++++++++++++ .../pkg_resources/_vendor/six.py | 868 ++ .../pkg_resources/extern/__init__.py | 73 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2508 bytes .../site-packages/pkg_resources/py31compat.py | 22 + .../requests-2.18.1.dist-info/DESCRIPTION.rst | 1610 ++++ .../requests-2.18.1.dist-info/INSTALLER | 1 + .../requests-2.18.1.dist-info/METADATA | 1646 ++++ .../requests-2.18.1.dist-info/RECORD | 43 + .../requests-2.18.1.dist-info/WHEEL | 6 + .../requests-2.18.1.dist-info/metadata.json | 1 + .../requests-2.18.1.dist-info/top_level.txt | 1 + .../site-packages/requests/__init__.py | 121 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 3472 bytes .../__pycache__/__version__.cpython-35.pyc | Bin 0 -> 514 bytes .../_internal_utils.cpython-35.pyc | Bin 0 -> 1302 bytes .../__pycache__/adapters.cpython-35.pyc | Bin 0 -> 17291 bytes .../requests/__pycache__/api.cpython-35.pyc | Bin 0 -> 6478 bytes .../requests/__pycache__/auth.cpython-35.pyc | Bin 0 -> 8515 bytes .../requests/__pycache__/certs.cpython-35.pyc | Bin 0 -> 578 bytes .../__pycache__/compat.cpython-35.pyc | Bin 0 -> 1689 bytes .../__pycache__/cookies.cpython-35.pyc | Bin 0 -> 19531 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 5559 bytes .../requests/__pycache__/help.cpython-35.pyc | Bin 0 -> 2717 bytes .../requests/__pycache__/hooks.cpython-35.pyc | Bin 0 -> 996 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 25871 bytes .../__pycache__/packages.cpython-35.pyc | Bin 0 -> 407 bytes .../__pycache__/sessions.cpython-35.pyc | Bin 0 -> 19688 bytes .../__pycache__/status_codes.cpython-35.pyc | Bin 0 -> 3916 bytes .../__pycache__/structures.cpython-35.pyc | Bin 0 -> 4521 bytes .../requests/__pycache__/utils.cpython-35.pyc | Bin 0 -> 22051 bytes .../site-packages/requests/__version__.py | 14 + .../site-packages/requests/_internal_utils.py | 42 + .../site-packages/requests/adapters.py | 520 ++ .../python3.5/site-packages/requests/api.py | 152 + .../python3.5/site-packages/requests/auth.py | 293 + .../python3.5/site-packages/requests/certs.py | 18 + .../site-packages/requests/compat.py | 71 + .../site-packages/requests/cookies.py | 542 ++ .../site-packages/requests/exceptions.py | 122 + .../python3.5/site-packages/requests/help.py | 111 + .../python3.5/site-packages/requests/hooks.py | 34 + .../site-packages/requests/models.py | 950 ++ .../site-packages/requests/packages.py | 14 + .../site-packages/requests/sessions.py | 731 ++ .../site-packages/requests/status_codes.py | 91 + .../site-packages/requests/structures.py | 105 + .../python3.5/site-packages/requests/utils.py | 904 ++ .../DESCRIPTION.rst | 25 + .../setuptools-36.2.0.dist-info/INSTALLER | 1 + .../setuptools-36.2.0.dist-info/METADATA | 57 + .../setuptools-36.2.0.dist-info/RECORD | 155 + .../setuptools-36.2.0.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 64 + .../setuptools-36.2.0.dist-info/metadata.json | 1 + .../setuptools-36.2.0.dist-info/top_level.txt | 3 + .../setuptools-36.2.0.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 160 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 5960 bytes .../__pycache__/archive_util.cpython-35.pyc | Bin 0 -> 5473 bytes .../__pycache__/config.cpython-35.pyc | Bin 0 -> 14647 bytes .../__pycache__/dep_util.cpython-35.pyc | Bin 0 -> 857 bytes .../__pycache__/depends.cpython-35.pyc | Bin 0 -> 5629 bytes .../__pycache__/dist.cpython-35.pyc | Bin 0 -> 36589 bytes .../__pycache__/extension.cpython-35.pyc | Bin 0 -> 2059 bytes .../__pycache__/glob.cpython-35.pyc | Bin 0 -> 4147 bytes .../__pycache__/launch.cpython-35.pyc | Bin 0 -> 880 bytes .../__pycache__/lib2to3_ex.cpython-35.pyc | Bin 0 -> 2555 bytes .../__pycache__/monkey.cpython-35.pyc | Bin 0 -> 5480 bytes .../__pycache__/msvc.cpython-35.pyc | Bin 0 -> 37060 bytes .../__pycache__/namespaces.cpython-35.pyc | Bin 0 -> 3857 bytes .../__pycache__/package_index.cpython-35.pyc | Bin 0 -> 35449 bytes .../__pycache__/py26compat.cpython-35.pyc | Bin 0 -> 1063 bytes .../__pycache__/py27compat.cpython-35.pyc | Bin 0 -> 813 bytes .../__pycache__/py31compat.cpython-35.pyc | Bin 0 -> 1972 bytes .../__pycache__/py33compat.cpython-35.pyc | Bin 0 -> 1289 bytes .../__pycache__/py36compat.cpython-35.pyc | Bin 0 -> 2353 bytes .../__pycache__/sandbox.cpython-35.pyc | Bin 0 -> 16918 bytes .../__pycache__/site-patch.cpython-35.pyc | Bin 0 -> 1662 bytes .../__pycache__/ssl_support.cpython-35.pyc | Bin 0 -> 7160 bytes .../__pycache__/unicode_utils.cpython-35.pyc | Bin 0 -> 1212 bytes .../__pycache__/version.cpython-35.pyc | Bin 0 -> 297 bytes .../windows_support.cpython-35.pyc | Bin 0 -> 1029 bytes .../site-packages/setuptools/archive_util.py | 173 + .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 17 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 734 bytes .../command/__pycache__/alias.cpython-35.pyc | Bin 0 -> 2605 bytes .../__pycache__/bdist_egg.cpython-35.pyc | Bin 0 -> 14943 bytes .../__pycache__/bdist_rpm.cpython-35.pyc | Bin 0 -> 1831 bytes .../__pycache__/bdist_wininst.cpython-35.pyc | Bin 0 -> 979 bytes .../__pycache__/build_clib.cpython-35.pyc | Bin 0 -> 2578 bytes .../__pycache__/build_ext.cpython-35.pyc | Bin 0 -> 10929 bytes .../__pycache__/build_py.cpython-35.pyc | Bin 0 -> 9254 bytes .../__pycache__/develop.cpython-35.pyc | Bin 0 -> 6952 bytes .../__pycache__/easy_install.cpython-35.pyc | Bin 0 -> 69791 bytes .../__pycache__/egg_info.cpython-35.pyc | Bin 0 -> 22754 bytes .../__pycache__/install.cpython-35.pyc | Bin 0 -> 4233 bytes .../install_egg_info.cpython-35.pyc | Bin 0 -> 2593 bytes .../__pycache__/install_lib.cpython-35.pyc | Bin 0 -> 4272 bytes .../install_scripts.cpython-35.pyc | Bin 0 -> 2442 bytes .../__pycache__/py36compat.cpython-35.pyc | Bin 0 -> 4914 bytes .../__pycache__/register.cpython-35.pyc | Bin 0 -> 584 bytes .../command/__pycache__/rotate.cpython-35.pyc | Bin 0 -> 2750 bytes .../__pycache__/saveopts.cpython-35.pyc | Bin 0 -> 949 bytes .../command/__pycache__/sdist.cpython-35.pyc | Bin 0 -> 6641 bytes .../command/__pycache__/setopt.cpython-35.pyc | Bin 0 -> 4923 bytes .../command/__pycache__/test.cpython-35.pyc | Bin 0 -> 8360 bytes .../command/__pycache__/upload.cpython-35.pyc | Bin 0 -> 1427 bytes .../__pycache__/upload_docs.cpython-35.pyc | Bin 0 -> 6672 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 472 + .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_clib.py | 98 + .../setuptools/command/build_ext.py | 328 + .../setuptools/command/build_py.py | 270 + .../setuptools/command/develop.py | 214 + .../setuptools/command/easy_install.py | 2301 +++++ .../setuptools/command/egg_info.py | 697 ++ .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 62 + .../setuptools/command/install_lib.py | 121 + .../setuptools/command/install_scripts.py | 65 + .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/py36compat.py | 136 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 66 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 206 + .../setuptools/command/setopt.py | 149 + .../site-packages/setuptools/command/test.py | 254 + .../setuptools/command/upload.py | 42 + .../setuptools/command/upload_docs.py | 206 + .../site-packages/setuptools/config.py | 548 ++ .../site-packages/setuptools/dep_util.py | 23 + .../site-packages/setuptools/depends.py | 186 + .../site-packages/setuptools/dist.py | 981 +++ .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 4 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 303 bytes .../site-packages/setuptools/glob.py | 176 + .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 62 + .../site-packages/setuptools/monkey.py | 197 + .../site-packages/setuptools/msvc.py | 1293 +++ .../site-packages/setuptools/namespaces.py | 107 + .../site-packages/setuptools/package_index.py | 1115 +++ .../site-packages/setuptools/py26compat.py | 31 + .../site-packages/setuptools/py27compat.py | 28 + .../site-packages/setuptools/py31compat.py | 56 + .../site-packages/setuptools/py33compat.py | 45 + .../site-packages/setuptools/py36compat.py | 82 + .../site-packages/setuptools/sandbox.py | 495 ++ .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 74 + .../site-packages/setuptools/ssl_support.py | 255 + .../site-packages/setuptools/unicode_utils.py | 44 + .../site-packages/setuptools/version.py | 6 + .../setuptools/windows_support.py | 29 + .../urllib3-1.21.1.dist-info/DESCRIPTION.rst | 978 +++ .../urllib3-1.21.1.dist-info/INSTALLER | 1 + .../urllib3-1.21.1.dist-info/METADATA | 1006 +++ .../urllib3-1.21.1.dist-info/RECORD | 79 + .../urllib3-1.21.1.dist-info/WHEEL | 6 + .../urllib3-1.21.1.dist-info/metadata.json | 1 + .../urllib3-1.21.1.dist-info/top_level.txt | 1 + .../site-packages/urllib3/__init__.py | 97 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2608 bytes .../__pycache__/_collections.cpython-35.pyc | Bin 0 -> 11106 bytes .../__pycache__/connection.cpython-35.pyc | Bin 0 -> 9534 bytes .../__pycache__/connectionpool.cpython-35.pyc | Bin 0 -> 24719 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 10866 bytes .../urllib3/__pycache__/fields.cpython-35.pyc | Bin 0 -> 6091 bytes .../__pycache__/filepost.cpython-35.pyc | Bin 0 -> 2784 bytes .../__pycache__/poolmanager.cpython-35.pyc | Bin 0 -> 13379 bytes .../__pycache__/request.cpython-35.pyc | Bin 0 -> 5667 bytes .../__pycache__/response.cpython-35.pyc | Bin 0 -> 17231 bytes .../site-packages/urllib3/_collections.py | 314 + .../site-packages/urllib3/connection.py | 373 + .../site-packages/urllib3/connectionpool.py | 899 ++ .../site-packages/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 142 bytes .../__pycache__/appengine.cpython-35.pyc | Bin 0 -> 9280 bytes .../__pycache__/ntlmpool.cpython-35.pyc | Bin 0 -> 3465 bytes .../__pycache__/pyopenssl.cpython-35.pyc | Bin 0 -> 14963 bytes .../securetransport.cpython-35.pyc | Bin 0 -> 19282 bytes .../contrib/__pycache__/socks.cpython-35.pyc | Bin 0 -> 5064 bytes .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 159 bytes .../__pycache__/bindings.cpython-35.pyc | Bin 0 -> 11344 bytes .../__pycache__/low_level.cpython-35.pyc | Bin 0 -> 7977 bytes .../contrib/_securetransport/bindings.py | 590 ++ .../contrib/_securetransport/low_level.py | 343 + .../urllib3/contrib/appengine.py | 296 + .../site-packages/urllib3/contrib/ntlmpool.py | 112 + .../urllib3/contrib/pyopenssl.py | 452 + .../urllib3/contrib/securetransport.py | 807 ++ .../site-packages/urllib3/contrib/socks.py | 188 + .../site-packages/urllib3/exceptions.py | 246 + .../python3.5/site-packages/urllib3/fields.py | 178 + .../site-packages/urllib3/filepost.py | 94 + .../urllib3/packages/__init__.py | 5 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 278 bytes .../__pycache__/ordered_dict.cpython-35.pyc | Bin 0 -> 8860 bytes .../packages/__pycache__/six.cpython-35.pyc | Bin 0 -> 26358 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 153 bytes .../__pycache__/makefile.cpython-35.pyc | Bin 0 -> 1385 bytes .../urllib3/packages/backports/makefile.py | 53 + .../urllib3/packages/ordered_dict.py | 259 + .../site-packages/urllib3/packages/six.py | 868 ++ .../packages/ssl_match_hostname/__init__.py | 19 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 560 bytes .../_implementation.cpython-35.pyc | Bin 0 -> 3511 bytes .../ssl_match_hostname/_implementation.py | 157 + .../site-packages/urllib3/poolmanager.py | 440 + .../site-packages/urllib3/request.py | 148 + .../site-packages/urllib3/response.py | 622 ++ .../site-packages/urllib3/util/__init__.py | 54 + .../util/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1134 bytes .../__pycache__/connection.cpython-35.pyc | Bin 0 -> 3276 bytes .../util/__pycache__/request.cpython-35.pyc | Bin 0 -> 3327 bytes .../util/__pycache__/response.cpython-35.pyc | Bin 0 -> 1942 bytes .../util/__pycache__/retry.cpython-35.pyc | Bin 0 -> 12955 bytes .../util/__pycache__/selectors.cpython-35.pyc | Bin 0 -> 17723 bytes .../util/__pycache__/ssl_.cpython-35.pyc | Bin 0 -> 9339 bytes .../util/__pycache__/timeout.cpython-35.pyc | Bin 0 -> 9000 bytes .../util/__pycache__/url.cpython-35.pyc | Bin 0 -> 5523 bytes .../util/__pycache__/wait.cpython-35.pyc | Bin 0 -> 1684 bytes .../site-packages/urllib3/util/connection.py | 130 + .../site-packages/urllib3/util/request.py | 118 + .../site-packages/urllib3/util/response.py | 81 + .../site-packages/urllib3/util/retry.py | 401 + .../site-packages/urllib3/util/selectors.py | 581 ++ .../site-packages/urllib3/util/ssl_.py | 337 + .../site-packages/urllib3/util/timeout.py | 242 + .../site-packages/urllib3/util/url.py | 230 + .../site-packages/urllib3/util/wait.py | 40 + .../wheel-0.30.0a0.dist-info/DESCRIPTION.rst | 325 + .../wheel-0.30.0a0.dist-info/INSTALLER | 1 + .../wheel-0.30.0a0.dist-info/LICENSE.txt | 22 + .../wheel-0.30.0a0.dist-info/METADATA | 357 + .../wheel-0.30.0a0.dist-info/RECORD | 86 + .../wheel-0.30.0a0.dist-info/WHEEL | 6 + .../wheel-0.30.0a0.dist-info/entry_points.txt | 6 + .../wheel-0.30.0a0.dist-info/metadata.json | 1 + .../wheel-0.30.0a0.dist-info/top_level.txt | 1 + .../python3.5/site-packages/wheel/__init__.py | 2 + .../python3.5/site-packages/wheel/__main__.py | 17 + .../wheel/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 157 bytes .../wheel/__pycache__/__main__.cpython-35.pyc | Bin 0 -> 599 bytes .../wheel/__pycache__/archive.cpython-35.pyc | Bin 0 -> 2220 bytes .../__pycache__/bdist_wheel.cpython-35.pyc | Bin 0 -> 14113 bytes .../__pycache__/decorator.cpython-35.pyc | Bin 0 -> 874 bytes .../__pycache__/egg2wheel.cpython-35.pyc | Bin 0 -> 2840 bytes .../wheel/__pycache__/install.cpython-35.pyc | Bin 0 -> 15431 bytes .../wheel/__pycache__/metadata.cpython-35.pyc | Bin 0 -> 9452 bytes .../wheel/__pycache__/paths.cpython-35.pyc | Bin 0 -> 1155 bytes .../__pycache__/pep425tags.cpython-35.pyc | Bin 0 -> 5022 bytes .../wheel/__pycache__/pkginfo.cpython-35.pyc | Bin 0 -> 1598 bytes .../wheel/__pycache__/util.cpython-35.pyc | Bin 0 -> 6059 bytes .../__pycache__/wininst2wheel.cpython-35.pyc | Bin 0 -> 5867 bytes .../python3.5/site-packages/wheel/archive.py | 79 + .../site-packages/wheel/bdist_wheel.py | 473 + .../site-packages/wheel/decorator.py | 19 + .../site-packages/wheel/egg2wheel.py | 86 + .../site-packages/wheel/eggnames.txt | 87 + .../python3.5/site-packages/wheel/install.py | 481 ++ .../python3.5/site-packages/wheel/metadata.py | 333 + .../python3.5/site-packages/wheel/paths.py | 41 + .../site-packages/wheel/pep425tags.py | 182 + .../python3.5/site-packages/wheel/pkginfo.py | 44 + .../wheel/signatures/__init__.py | 106 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 3160 bytes .../__pycache__/djbec.cpython-35.pyc | Bin 0 -> 10088 bytes .../__pycache__/ed25519py.cpython-35.pyc | Bin 0 -> 1805 bytes .../__pycache__/keys.cpython-35.pyc | Bin 0 -> 4254 bytes .../site-packages/wheel/signatures/djbec.py | 270 + .../wheel/signatures/ed25519py.py | 52 + .../site-packages/wheel/signatures/keys.py | 99 + .../site-packages/wheel/test/__init__.py | 1 + .../test/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 135 bytes .../test/__pycache__/conftest.cpython-35.pyc | Bin 0 -> 1789 bytes .../__pycache__/test_basic.cpython-35.pyc | Bin 0 -> 7398 bytes .../__pycache__/test_install.cpython-35.pyc | Bin 0 -> 1890 bytes .../test/__pycache__/test_keys.cpython-35.pyc | Bin 0 -> 3055 bytes .../__pycache__/test_paths.cpython-35.pyc | Bin 0 -> 449 bytes .../__pycache__/test_ranking.cpython-35.pyc | Bin 0 -> 1639 bytes .../test_signatures.cpython-35.pyc | Bin 0 -> 1227 bytes .../__pycache__/test_tagopt.cpython-35.pyc | Bin 0 -> 7044 bytes .../test/__pycache__/test_tool.cpython-35.pyc | Bin 0 -> 1923 bytes .../__pycache__/test_wheelfile.cpython-35.pyc | Bin 0 -> 3993 bytes .../__pycache__/setup.cpython-35.pyc | Bin 0 -> 1081 bytes .../test/complex-dist/complexdist/__init__.py | 2 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 254 bytes .../wheel/test/complex-dist/setup.py | 30 + .../site-packages/wheel/test/conftest.py | 45 + .../__pycache__/setup.cpython-35.pyc | Bin 0 -> 746 bytes .../wheel/test/extension.dist/setup.py | 20 + .../__pycache__/headersdist.cpython-35.pyc | Bin 0 -> 151 bytes .../__pycache__/setup.cpython-35.pyc | Bin 0 -> 646 bytes .../wheel/test/headers.dist/header.h | 0 .../wheel/test/headers.dist/headersdist.py | 0 .../wheel/test/headers.dist/setup.py | 16 + .../wheel/test/pydist-schema.json | 362 + .../__pycache__/setup.cpython-35.pyc | Bin 0 -> 702 bytes .../wheel/test/simple.dist/setup.py | 17 + .../test/simple.dist/simpledist/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 158 bytes .../test/test-1.0-py2.py3-none-win32.whl | Bin 0 -> 5226 bytes .../site-packages/wheel/test/test_basic.py | 178 + .../site-packages/wheel/test/test_install.py | 55 + .../site-packages/wheel/test/test_keys.py | 98 + .../site-packages/wheel/test/test_paths.py | 6 + .../site-packages/wheel/test/test_ranking.py | 43 + .../wheel/test/test_signatures.py | 47 + .../site-packages/wheel/test/test_tagopt.py | 176 + .../site-packages/wheel/test/test_tool.py | 25 + .../wheel/test/test_wheelfile.py | 142 + .../site-packages/wheel/tool/__init__.py | 359 + .../tool/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 12138 bytes .../lib/python3.5/site-packages/wheel/util.py | 167 + .../site-packages/wheel/wininst2wheel.py | 216 + utils/lib/python3.5/site.py | 758 ++ utils/lib/python3.5/sre_compile.py | 1 + utils/lib/python3.5/sre_constants.py | 1 + utils/lib/python3.5/sre_parse.py | 1 + utils/lib/python3.5/stat.py | 1 + utils/lib/python3.5/struct.py | 1 + utils/lib/python3.5/tarfile.py | 1 + utils/lib/python3.5/tempfile.py | 1 + utils/lib/python3.5/token.py | 1 + utils/lib/python3.5/tokenize.py | 1 + utils/lib/python3.5/types.py | 1 + utils/lib/python3.5/warnings.py | 1 + utils/lib/python3.5/weakref.py | 1 + utils/lib64 | 1 + utils/resources/AdminEventRepresentation | 8 + utils/resources/AuthDetailsRepresentation | 4 + ...uthenticationExecutionExportRepresentation | 8 + .../AuthenticationExecutionInfoRepresentation | 12 + .../AuthenticationExecutionRepresentation | 9 + .../AuthenticationFlowRepresentation | 7 + .../AuthenticatorConfigInfoRepresentation | 4 + .../AuthenticatorConfigRepresentation | 3 + utils/resources/CertificateRepresentation | 4 + .../ClientInitialAccessCreatePresentation | 2 + .../resources/ClientInitialAccessPresentation | 6 + utils/resources/ClientMappingsRepresentation | 3 + utils/resources/ClientRepresentation | 37 + utils/resources/ClientTemplateRepresentation | 15 + utils/resources/ComponentExportRepresentation | 6 + utils/resources/ComponentRepresentation | 7 + utils/resources/ComponentTypeRepresentation | 4 + utils/resources/ConfigPropertyRepresentation | 7 + utils/resources/CredentialRepresentation | 13 + utils/resources/EventRepresentation | 9 + .../resources/FederatedIdentityRepresentation | 3 + utils/resources/GlobalRequestResult | 2 + utils/resources/GroupRepresentation | 8 + .../IdentityProviderMapperRepresentation | 5 + .../resources/IdentityProviderRepresentation | 12 + utils/resources/KeyStoreConfig | 6 + utils/resources/KeysMetadataRepresentation | 2 + ...taRepresentation-KeyMetadataRepresentation | 7 + utils/resources/ManagementPermissionReference | 3 + utils/resources/MappingsRepresentation | 2 + utils/resources/MemoryInfoRepresentation | 7 + utils/resources/MultivaluedHashMap | 3 + utils/resources/PartialImportRepresentation | 7 + .../PasswordPolicyTypeRepresentation | 5 + utils/resources/PolicyRepresentation | 10 + utils/resources/ProfileInfoRepresentation | 2 + utils/resources/ProtocolMapperRepresentation | 7 + utils/resources/ProviderRepresentation | 2 + .../resources/RealmEventsConfigRepresentation | 6 + utils/resources/RealmRepresentation | 83 + .../RequiredActionProviderRepresentation | 6 + utils/resources/ResourceOwnerRepresentation | 2 + utils/resources/ResourceRepresentation | 9 + utils/resources/ResourceServerRepresentation | 8 + utils/resources/RoleRepresentation | 8 + utils/resources/RoleRepresentation-Composites | 2 + utils/resources/RolesRepresentation | 2 + utils/resources/ScopeMappingRepresentation | 4 + utils/resources/ScopeRepresentation | 5 + utils/resources/ServerInfoRepresentation | 14 + utils/resources/SpiInfoRepresentation | 2 + utils/resources/SynchronizationResult | 6 + utils/resources/SystemInfoRepresentation | 18 + utils/resources/UserConsentRepresentation | 6 + .../UserFederationMapperRepresentation | 5 + .../UserFederationProviderRepresentation | 8 + utils/resources/UserRepresentation | 22 + utils/resources/UserSessionRepresentation | 7 + 1367 files changed, 210740 insertions(+), 1 deletion(-) create mode 100644 Gopkg.lock create mode 100644 Gopkg.toml create mode 100644 client/client_test.go create mode 100644 client/common.go create mode 100644 client/definitions.go create mode 100644 client/realms.go create mode 100644 client/users.go create mode 100644 utils/.idea/misc.xml create mode 100644 utils/.idea/modules.xml create mode 100644 utils/.idea/utils.iml create mode 100644 utils/.idea/workspace.xml create mode 100644 utils/bin/activate create mode 100644 utils/bin/activate.csh create mode 100644 utils/bin/activate.fish create mode 100644 utils/bin/activate_this.py create mode 100755 utils/bin/chardetect create mode 100755 utils/bin/easy_install create mode 100755 utils/bin/easy_install-3.5 create mode 100755 utils/bin/pip create mode 100755 utils/bin/pip3 create mode 100755 utils/bin/pip3.5 create mode 120000 utils/bin/python create mode 100755 utils/bin/python-config create mode 100755 utils/bin/python3 create mode 120000 utils/bin/python3.5 create mode 100755 utils/bin/wheel create mode 100755 utils/file_parser.py create mode 100755 utils/html_parser.py create mode 120000 utils/include/python3.5m create mode 120000 utils/lib/python3.5/__future__.py create mode 100644 utils/lib/python3.5/__pycache__/__future__.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/_bootlocale.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/_collections_abc.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/_weakrefset.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/abc.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/base64.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/bisect.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/codecs.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/copy.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/copyreg.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/fnmatch.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/functools.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/genericpath.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/hashlib.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/heapq.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/hmac.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/imp.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/io.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/keyword.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/linecache.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/locale.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/operator.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/os.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/posixpath.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/random.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/re.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/reprlib.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/shutil.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/site.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/sre_compile.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/sre_constants.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/sre_parse.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/stat.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/struct.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/tarfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/tempfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/token.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/tokenize.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/types.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/warnings.cpython-35.pyc create mode 100644 utils/lib/python3.5/__pycache__/weakref.cpython-35.pyc create mode 120000 utils/lib/python3.5/_bootlocale.py create mode 120000 utils/lib/python3.5/_collections_abc.py create mode 120000 utils/lib/python3.5/_dummy_thread.py create mode 120000 utils/lib/python3.5/_weakrefset.py create mode 120000 utils/lib/python3.5/abc.py create mode 120000 utils/lib/python3.5/base64.py create mode 120000 utils/lib/python3.5/bisect.py create mode 120000 utils/lib/python3.5/codecs.py create mode 120000 utils/lib/python3.5/collections create mode 120000 utils/lib/python3.5/config-3.5m create mode 120000 utils/lib/python3.5/copy.py create mode 120000 utils/lib/python3.5/copyreg.py create mode 100644 utils/lib/python3.5/distutils/__init__.py create mode 100644 utils/lib/python3.5/distutils/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/distutils/distutils.cfg create mode 120000 utils/lib/python3.5/encodings create mode 120000 utils/lib/python3.5/fnmatch.py create mode 120000 utils/lib/python3.5/functools.py create mode 120000 utils/lib/python3.5/genericpath.py create mode 120000 utils/lib/python3.5/hashlib.py create mode 120000 utils/lib/python3.5/heapq.py create mode 120000 utils/lib/python3.5/hmac.py create mode 120000 utils/lib/python3.5/imp.py create mode 120000 utils/lib/python3.5/importlib create mode 120000 utils/lib/python3.5/io.py create mode 120000 utils/lib/python3.5/keyword.py create mode 120000 utils/lib/python3.5/lib-dynload create mode 120000 utils/lib/python3.5/linecache.py create mode 120000 utils/lib/python3.5/locale.py create mode 100644 utils/lib/python3.5/no-global-site-packages.txt create mode 120000 utils/lib/python3.5/ntpath.py create mode 120000 utils/lib/python3.5/operator.py create mode 100644 utils/lib/python3.5/orig-prefix.txt create mode 120000 utils/lib/python3.5/os.py create mode 120000 utils/lib/python3.5/plat-linux create mode 120000 utils/lib/python3.5/posixpath.py create mode 120000 utils/lib/python3.5/random.py create mode 120000 utils/lib/python3.5/re.py create mode 120000 utils/lib/python3.5/reprlib.py create mode 120000 utils/lib/python3.5/rlcompleter.py create mode 120000 utils/lib/python3.5/shutil.py create mode 100644 utils/lib/python3.5/site-packages/__pycache__/easy_install.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/bs4/__init__.py create mode 100644 utils/lib/python3.5/site-packages/bs4/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/__pycache__/dammit.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/__pycache__/diagnose.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/__pycache__/element.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/__pycache__/testing.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/__init__.py create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/__pycache__/_html5lib.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/__pycache__/_lxml.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/_html5lib.py create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/_htmlparser.py create mode 100644 utils/lib/python3.5/site-packages/bs4/builder/_lxml.py create mode 100644 utils/lib/python3.5/site-packages/bs4/dammit.py create mode 100644 utils/lib/python3.5/site-packages/bs4/diagnose.py create mode 100644 utils/lib/python3.5/site-packages/bs4/element.py create mode 100644 utils/lib/python3.5/site-packages/bs4/testing.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__init__.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_builder_registry.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_docs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_html5lib.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_lxml.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_soup.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_tree.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/test_builder_registry.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/test_docs.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/test_html5lib.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/test_htmlparser.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/test_lxml.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/test_soup.py create mode 100644 utils/lib/python3.5/site-packages/bs4/tests/test_tree.py create mode 100644 utils/lib/python3.5/site-packages/certifi-2017.4.17.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/certifi-2017.4.17.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/certifi-2017.4.17.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/certifi-2017.4.17.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/certifi-2017.4.17.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/certifi-2017.4.17.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/certifi-2017.4.17.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/certifi/__init__.py create mode 100644 utils/lib/python3.5/site-packages/certifi/__main__.py create mode 100644 utils/lib/python3.5/site-packages/certifi/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/certifi/__pycache__/__main__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/certifi/__pycache__/core.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/certifi/cacert.pem create mode 100644 utils/lib/python3.5/site-packages/certifi/core.py create mode 100644 utils/lib/python3.5/site-packages/certifi/old_root.pem create mode 100644 utils/lib/python3.5/site-packages/certifi/weak.pem create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/entry_points.txt create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/chardet-3.0.4.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/chardet/__init__.py create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/big5freq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/big5prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/chardistribution.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/charsetgroupprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/charsetprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/codingstatemachine.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/cp949prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/enums.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/escprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/escsm.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/eucjpprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/euckrfreq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/euckrprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/euctwfreq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/euctwprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/gb2312freq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/gb2312prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/hebrewprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/jisfreq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/jpcntx.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/langbulgarianmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/langcyrillicmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/langgreekmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/langhebrewmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/langhungarianmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/langthaimodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/langturkishmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/latin1prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/mbcharsetprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/mbcsgroupprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/mbcssm.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/sbcharsetprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/sbcsgroupprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/sjisprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/universaldetector.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/utf8prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/__pycache__/version.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/big5freq.py create mode 100644 utils/lib/python3.5/site-packages/chardet/big5prober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/chardistribution.py create mode 100644 utils/lib/python3.5/site-packages/chardet/charsetgroupprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/charsetprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/cli/__init__.py create mode 100644 utils/lib/python3.5/site-packages/chardet/cli/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/cli/__pycache__/chardetect.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/chardet/cli/chardetect.py create mode 100644 utils/lib/python3.5/site-packages/chardet/codingstatemachine.py create mode 100644 utils/lib/python3.5/site-packages/chardet/compat.py create mode 100644 utils/lib/python3.5/site-packages/chardet/cp949prober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/enums.py create mode 100644 utils/lib/python3.5/site-packages/chardet/escprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/escsm.py create mode 100644 utils/lib/python3.5/site-packages/chardet/eucjpprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/euckrfreq.py create mode 100644 utils/lib/python3.5/site-packages/chardet/euckrprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/euctwfreq.py create mode 100644 utils/lib/python3.5/site-packages/chardet/euctwprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/gb2312freq.py create mode 100644 utils/lib/python3.5/site-packages/chardet/gb2312prober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/hebrewprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/jisfreq.py create mode 100644 utils/lib/python3.5/site-packages/chardet/jpcntx.py create mode 100644 utils/lib/python3.5/site-packages/chardet/langbulgarianmodel.py create mode 100644 utils/lib/python3.5/site-packages/chardet/langcyrillicmodel.py create mode 100644 utils/lib/python3.5/site-packages/chardet/langgreekmodel.py create mode 100644 utils/lib/python3.5/site-packages/chardet/langhebrewmodel.py create mode 100644 utils/lib/python3.5/site-packages/chardet/langhungarianmodel.py create mode 100644 utils/lib/python3.5/site-packages/chardet/langthaimodel.py create mode 100644 utils/lib/python3.5/site-packages/chardet/langturkishmodel.py create mode 100644 utils/lib/python3.5/site-packages/chardet/latin1prober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/mbcharsetprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/mbcsgroupprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/mbcssm.py create mode 100644 utils/lib/python3.5/site-packages/chardet/sbcharsetprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/sbcsgroupprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/sjisprober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/universaldetector.py create mode 100644 utils/lib/python3.5/site-packages/chardet/utf8prober.py create mode 100644 utils/lib/python3.5/site-packages/chardet/version.py create mode 100644 utils/lib/python3.5/site-packages/easy_install.py create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/pbr.json create mode 100644 utils/lib/python3.5/site-packages/idna-2.5.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/idna/__init__.py create mode 100644 utils/lib/python3.5/site-packages/idna/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/idna/__pycache__/codec.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/idna/__pycache__/compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/idna/__pycache__/core.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/idna/__pycache__/idnadata.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/idna/__pycache__/intranges.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/idna/__pycache__/uts46data.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/idna/codec.py create mode 100644 utils/lib/python3.5/site-packages/idna/compat.py create mode 100644 utils/lib/python3.5/site-packages/idna/core.py create mode 100644 utils/lib/python3.5/site-packages/idna/idnadata.py create mode 100644 utils/lib/python3.5/site-packages/idna/intranges.py create mode 100644 utils/lib/python3.5/site-packages/idna/uts46data.py create mode 100644 utils/lib/python3.5/site-packages/lxml-3.8.0.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/lxml-3.8.0.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/lxml-3.8.0.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/lxml-3.8.0.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/lxml-3.8.0.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/lxml-3.8.0.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/lxml-3.8.0.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/lxml/ElementInclude.py create mode 100644 utils/lib/python3.5/site-packages/lxml/__init__.py create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/ElementInclude.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/_elementpath.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/builder.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/cssselect.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/doctestcompare.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/pyclasslookup.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/sax.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/__pycache__/usedoctest.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/_elementpath.py create mode 100644 utils/lib/python3.5/site-packages/lxml/builder.py create mode 100644 utils/lib/python3.5/site-packages/lxml/cssselect.py create mode 100644 utils/lib/python3.5/site-packages/lxml/doctestcompare.py create mode 100755 utils/lib/python3.5/site-packages/lxml/etree.cpython-35m-x86_64-linux-gnu.so create mode 100644 utils/lib/python3.5/site-packages/lxml/html/ElementSoup.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__init__.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/ElementSoup.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/_diffcommand.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/_html5builder.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/_setmixin.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/builder.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/clean.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/defs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/diff.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/formfill.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/html5parser.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/soupparser.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/__pycache__/usedoctest.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/html/_diffcommand.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/_html5builder.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/_setmixin.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/builder.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/clean.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/defs.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/diff.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/formfill.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/html5parser.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/soupparser.py create mode 100644 utils/lib/python3.5/site-packages/lxml/html/usedoctest.py create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/__init__.py create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/c14n.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/config.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/dtdvalid.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/etree_defs.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/etreepublic.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/htmlparser.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libexslt/exslt.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libexslt/exsltconfig.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libexslt/exsltexports.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/DOCBparser.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/HTMLparser.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/HTMLtree.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/SAX.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/SAX2.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/c14n.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/catalog.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/chvalid.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/debugXML.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/dict.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/encoding.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/entities.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/globals.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/hash.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/list.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/nanoftp.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/nanohttp.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/parser.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/parserInternals.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/relaxng.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/schemasInternals.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/schematron.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/threads.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/tree.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/uri.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/valid.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xinclude.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xlink.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlIO.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlautomata.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlerror.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlexports.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlmemory.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlmodule.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlreader.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlregexp.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlsave.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlschemas.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlschemastypes.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlstring.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlunicode.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlversion.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xmlwriter.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xpath.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xpathInternals.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxml/xpointer.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/attributes.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/documents.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/extensions.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/extra.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/functions.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/imports.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/keys.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/namespaces.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/numbersInternals.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/pattern.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/preproc.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/security.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/templates.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/transform.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/variables.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/xslt.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/xsltInternals.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/xsltconfig.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/xsltexports.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/xsltlocale.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/libxslt/xsltutils.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/lxml-version.h create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/relaxng.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/schematron.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/tree.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/uri.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/xinclude.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/xmlerror.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/xmlparser.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/xmlschema.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/xpath.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/includes/xslt.pxd create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/__init__.py create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/rng/iso-schematron.rng create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl create mode 100644 utils/lib/python3.5/site-packages/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt create mode 100644 utils/lib/python3.5/site-packages/lxml/lxml.etree.h create mode 100644 utils/lib/python3.5/site-packages/lxml/lxml.etree_api.h create mode 100755 utils/lib/python3.5/site-packages/lxml/objectify.cpython-35m-x86_64-linux-gnu.so create mode 100644 utils/lib/python3.5/site-packages/lxml/pyclasslookup.py create mode 100644 utils/lib/python3.5/site-packages/lxml/sax.py create mode 100644 utils/lib/python3.5/site-packages/lxml/usedoctest.py create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/entry_points.txt create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/pip-9.0.1.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/pip/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/__main__.py create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/__main__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/basecommand.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/baseparser.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/cmdoptions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/download.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/exceptions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/index.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/locations.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/pep425tags.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/status_codes.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/__pycache__/wheel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/appdirs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/distro.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/ipaddress.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/ordereddict.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/pyparsing.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/re-vendor.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/retrying.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/__pycache__/six.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/appdirs.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/win32.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__pycache__/misc.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__pycache__/shutil.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__pycache__/sysconfig.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/__pycache__/tarfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/misc.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/shutil.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/sysconfig.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/_backport/tarfile.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/compat.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/database.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/index.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/locators.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/markers.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/resources.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/util.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/version.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/distro.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/_ihatexml.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/_inputstream.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/_tokenizer.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/_utils.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/constants.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/html5parser.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/__pycache__/serializer.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_ihatexml.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_inputstream.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_tokenizer.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/__pycache__/_base.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/__pycache__/datrie.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/__pycache__/py.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/_base.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/datrie.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_trie/py.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/_utils.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/constants.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/base.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/lint.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/__pycache__/whitespace.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/base.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/lint.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/optionaltags.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/sanitizer.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/filters/whitespace.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/html5parser.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/serializer.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treeadapters/sax.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/base.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/base.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/dom.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/etree.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/base.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/base.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/dom.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/etree.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/ipaddress.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/__pycache__/linklockfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/__pycache__/pidlockfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/__pycache__/sqlitelockfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/__pycache__/symlinklockfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/linklockfile.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/mkdirlockfile.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/pidlockfile.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/sqlitelockfile.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/lockfile/symlinklockfile.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/ordereddict.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/_compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/_compat.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/markers.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/utils.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/packaging/version.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/__pycache__/bar.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/__pycache__/counter.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/__pycache__/helpers.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/__pycache__/spinner.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/bar.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/counter.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/helpers.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/progress/spinner.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/pyparsing.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/re-vendor.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/api.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/models.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/adapters.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/api.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/auth.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/cacert.pem create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/certs.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/compat.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/cookies.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/hooks.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/models.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/big5freq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/big5prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/chardetect.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/chardistribution.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/charsetgroupprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/charsetprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/codingstatemachine.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/constants.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/cp949prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/escprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/escsm.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/eucjpprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/euckrfreq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/euckrprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/euctwfreq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/euctwprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/gb2312freq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/gb2312prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/hebrewprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/jisfreq.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/jpcntx.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/langbulgarianmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/langcyrillicmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/langgreekmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/langhebrewmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/langhungarianmodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/langthaimodel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/latin1prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/mbcharsetprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/mbcsgroupprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/mbcssm.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/sbcharsetprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/sbcsgroupprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/sjisprober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/universaldetector.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/__pycache__/utf8prober.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/big5freq.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/big5prober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/chardetect.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/chardistribution.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/charsetgroupprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/charsetprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/codingstatemachine.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/compat.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/constants.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/cp949prober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/escprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/escsm.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/eucjpprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/euckrfreq.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/euckrprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/euctwfreq.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/euctwprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/gb2312freq.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/gb2312prober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/hebrewprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/jisfreq.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/jpcntx.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/langbulgarianmodel.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/langcyrillicmodel.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/langgreekmodel.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/langhebrewmodel.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/langhungarianmodel.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/langthaimodel.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/latin1prober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/mbcharsetprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/mbcsgroupprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/mbcssm.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/sbcharsetprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/sbcsgroupprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/sjisprober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/universaldetector.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/chardet/utf8prober.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/_collections.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/connection.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/connectionpool.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/exceptions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/fields.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/filepost.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/poolmanager.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/request.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/__pycache__/response.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/_collections.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/connection.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__pycache__/appengine.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__pycache__/ntlmpool.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__pycache__/pyopenssl.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__pycache__/socks.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/appengine.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/ntlmpool.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/contrib/socks.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/exceptions.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/fields.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/filepost.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/__pycache__/ordered_dict.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/__pycache__/six.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/ordered_dict.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/six.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/poolmanager.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/request.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/response.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/connection.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/request.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/response.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/retry.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/ssl_.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/timeout.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/__pycache__/url.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/connection.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/request.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/response.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/retry.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/timeout.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/packages/urllib3/util/url.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/sessions.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/structures.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/requests/utils.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/retrying.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/six.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 utils/lib/python3.5/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 utils/lib/python3.5/site-packages/pip/basecommand.py create mode 100644 utils/lib/python3.5/site-packages/pip/baseparser.py create mode 100644 utils/lib/python3.5/site-packages/pip/cmdoptions.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/check.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/completion.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/download.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/freeze.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/hash.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/help.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/install.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/list.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/search.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/show.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/uninstall.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/__pycache__/wheel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/commands/check.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/completion.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/download.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/freeze.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/hash.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/help.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/install.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/list.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/search.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/show.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/uninstall.py create mode 100644 utils/lib/python3.5/site-packages/pip/commands/wheel.py create mode 100644 utils/lib/python3.5/site-packages/pip/compat/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/compat/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/compat/__pycache__/dictconfig.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/compat/dictconfig.py create mode 100644 utils/lib/python3.5/site-packages/pip/download.py create mode 100644 utils/lib/python3.5/site-packages/pip/exceptions.py create mode 100644 utils/lib/python3.5/site-packages/pip/index.py create mode 100644 utils/lib/python3.5/site-packages/pip/locations.py create mode 100644 utils/lib/python3.5/site-packages/pip/models/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/models/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/models/__pycache__/index.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/models/index.py create mode 100644 utils/lib/python3.5/site-packages/pip/operations/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/operations/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/operations/__pycache__/check.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/operations/__pycache__/freeze.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/operations/check.py create mode 100644 utils/lib/python3.5/site-packages/pip/operations/freeze.py create mode 100644 utils/lib/python3.5/site-packages/pip/pep425tags.py create mode 100644 utils/lib/python3.5/site-packages/pip/req/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/req/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/req/__pycache__/req_file.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/req/__pycache__/req_install.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/req/__pycache__/req_set.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/req/__pycache__/req_uninstall.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/req/req_file.py create mode 100644 utils/lib/python3.5/site-packages/pip/req/req_install.py create mode 100644 utils/lib/python3.5/site-packages/pip/req/req_set.py create mode 100644 utils/lib/python3.5/site-packages/pip/req/req_uninstall.py create mode 100644 utils/lib/python3.5/site-packages/pip/status_codes.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/appdirs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/build.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/deprecation.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/encoding.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/filesystem.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/glibc.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/hashes.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/logging.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/outdated.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/packaging.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/setuptools_build.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/__pycache__/ui.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/utils/appdirs.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/build.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/deprecation.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/encoding.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/filesystem.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/glibc.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/hashes.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/logging.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/outdated.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/packaging.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/setuptools_build.py create mode 100644 utils/lib/python3.5/site-packages/pip/utils/ui.py create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/__pycache__/bazaar.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/__pycache__/git.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/__pycache__/mercurial.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/__pycache__/subversion.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/bazaar.py create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/git.py create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/mercurial.py create mode 100644 utils/lib/python3.5/site-packages/pip/vcs/subversion.py create mode 100644 utils/lib/python3.5/site-packages/pip/wheel.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/__pycache__/py31compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/__pycache__/appdirs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/appdirs.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/_vendor/six.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/extern/__init__.py create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/pkg_resources/py31compat.py create mode 100644 utils/lib/python3.5/site-packages/requests-2.18.1.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/requests-2.18.1.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/requests-2.18.1.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/requests-2.18.1.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/requests-2.18.1.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/requests-2.18.1.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/requests-2.18.1.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/requests/__init__.py create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/__version__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/_internal_utils.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/adapters.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/api.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/auth.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/certs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/cookies.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/exceptions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/help.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/hooks.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/models.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/packages.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/sessions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/status_codes.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/structures.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__pycache__/utils.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/requests/__version__.py create mode 100644 utils/lib/python3.5/site-packages/requests/_internal_utils.py create mode 100644 utils/lib/python3.5/site-packages/requests/adapters.py create mode 100644 utils/lib/python3.5/site-packages/requests/api.py create mode 100644 utils/lib/python3.5/site-packages/requests/auth.py create mode 100644 utils/lib/python3.5/site-packages/requests/certs.py create mode 100644 utils/lib/python3.5/site-packages/requests/compat.py create mode 100644 utils/lib/python3.5/site-packages/requests/cookies.py create mode 100644 utils/lib/python3.5/site-packages/requests/exceptions.py create mode 100644 utils/lib/python3.5/site-packages/requests/help.py create mode 100644 utils/lib/python3.5/site-packages/requests/hooks.py create mode 100644 utils/lib/python3.5/site-packages/requests/models.py create mode 100644 utils/lib/python3.5/site-packages/requests/packages.py create mode 100644 utils/lib/python3.5/site-packages/requests/sessions.py create mode 100644 utils/lib/python3.5/site-packages/requests/status_codes.py create mode 100644 utils/lib/python3.5/site-packages/requests/structures.py create mode 100644 utils/lib/python3.5/site-packages/requests/utils.py create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/dependency_links.txt create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/entry_points.txt create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/setuptools-36.2.0.dist-info/zip-safe create mode 100644 utils/lib/python3.5/site-packages/setuptools/__init__.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/archive_util.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/config.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/dep_util.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/depends.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/dist.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/extension.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/glob.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/launch.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/monkey.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/msvc.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/namespaces.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/package_index.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/py26compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/py27compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/py31compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/py33compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/py36compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/sandbox.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/site-patch.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/ssl_support.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/unicode_utils.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/version.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/__pycache__/windows_support.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/archive_util.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/cli-32.exe create mode 100644 utils/lib/python3.5/site-packages/setuptools/cli-64.exe create mode 100644 utils/lib/python3.5/site-packages/setuptools/cli.exe create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__init__.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/alias.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/build_clib.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/build_ext.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/build_py.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/develop.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/easy_install.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/egg_info.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/install.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/install_lib.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/install_scripts.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/py36compat.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/register.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/rotate.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/saveopts.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/sdist.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/setopt.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/test.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/upload.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/__pycache__/upload_docs.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/alias.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/bdist_egg.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/bdist_rpm.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/bdist_wininst.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/build_clib.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/build_ext.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/build_py.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/develop.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/easy_install.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/egg_info.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/install.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/install_egg_info.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/install_lib.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/install_scripts.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/launcher manifest.xml create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/py36compat.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/register.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/rotate.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/saveopts.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/sdist.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/setopt.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/test.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/upload.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/command/upload_docs.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/config.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/dep_util.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/depends.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/dist.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/extension.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/extern/__init__.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/extern/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/setuptools/glob.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/gui-32.exe create mode 100644 utils/lib/python3.5/site-packages/setuptools/gui-64.exe create mode 100644 utils/lib/python3.5/site-packages/setuptools/gui.exe create mode 100644 utils/lib/python3.5/site-packages/setuptools/launch.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/lib2to3_ex.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/monkey.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/msvc.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/namespaces.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/package_index.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/py26compat.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/py27compat.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/py31compat.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/py33compat.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/py36compat.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/sandbox.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/script (dev).tmpl create mode 100644 utils/lib/python3.5/site-packages/setuptools/script.tmpl create mode 100644 utils/lib/python3.5/site-packages/setuptools/site-patch.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/ssl_support.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/unicode_utils.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/version.py create mode 100644 utils/lib/python3.5/site-packages/setuptools/windows_support.py create mode 100644 utils/lib/python3.5/site-packages/urllib3-1.21.1.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/urllib3-1.21.1.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/urllib3-1.21.1.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/urllib3-1.21.1.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/urllib3-1.21.1.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/urllib3-1.21.1.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/urllib3-1.21.1.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/urllib3/__init__.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/_collections.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/connection.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/connectionpool.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/exceptions.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/fields.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/filepost.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/poolmanager.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/request.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/__pycache__/response.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/_collections.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/connection.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/connectionpool.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/__init__.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/__pycache__/appengine.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/__pycache__/ntlmpool.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/__pycache__/pyopenssl.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/__pycache__/securetransport.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/__pycache__/socks.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/_securetransport/__init__.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/_securetransport/bindings.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/_securetransport/low_level.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/appengine.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/ntlmpool.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/pyopenssl.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/securetransport.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/contrib/socks.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/exceptions.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/fields.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/filepost.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/__init__.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/__pycache__/ordered_dict.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/__pycache__/six.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/backports/__init__.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/backports/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/backports/__pycache__/makefile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/backports/makefile.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/ordered_dict.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/six.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/ssl_match_hostname/__init__.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/poolmanager.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/request.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/response.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__init__.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/connection.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/request.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/response.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/retry.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/selectors.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/ssl_.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/timeout.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/url.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/__pycache__/wait.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/connection.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/request.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/response.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/retry.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/selectors.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/ssl_.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/timeout.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/url.py create mode 100644 utils/lib/python3.5/site-packages/urllib3/util/wait.py create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/DESCRIPTION.rst create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/INSTALLER create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/LICENSE.txt create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/METADATA create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/RECORD create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/WHEEL create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/entry_points.txt create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/metadata.json create mode 100644 utils/lib/python3.5/site-packages/wheel-0.30.0a0.dist-info/top_level.txt create mode 100644 utils/lib/python3.5/site-packages/wheel/__init__.py create mode 100644 utils/lib/python3.5/site-packages/wheel/__main__.py create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/__main__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/archive.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/bdist_wheel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/decorator.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/egg2wheel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/install.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/metadata.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/paths.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/pep425tags.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/pkginfo.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/util.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/__pycache__/wininst2wheel.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/archive.py create mode 100644 utils/lib/python3.5/site-packages/wheel/bdist_wheel.py create mode 100644 utils/lib/python3.5/site-packages/wheel/decorator.py create mode 100644 utils/lib/python3.5/site-packages/wheel/egg2wheel.py create mode 100644 utils/lib/python3.5/site-packages/wheel/eggnames.txt create mode 100644 utils/lib/python3.5/site-packages/wheel/install.py create mode 100644 utils/lib/python3.5/site-packages/wheel/metadata.py create mode 100644 utils/lib/python3.5/site-packages/wheel/paths.py create mode 100644 utils/lib/python3.5/site-packages/wheel/pep425tags.py create mode 100644 utils/lib/python3.5/site-packages/wheel/pkginfo.py create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/__init__.py create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/__pycache__/djbec.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/__pycache__/ed25519py.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/__pycache__/keys.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/djbec.py create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/ed25519py.py create mode 100644 utils/lib/python3.5/site-packages/wheel/signatures/keys.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__init__.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/conftest.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_basic.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_install.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_keys.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_paths.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_ranking.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_signatures.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_tagopt.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_tool.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/__pycache__/test_wheelfile.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/complex-dist/__pycache__/setup.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/complex-dist/complexdist/__init__.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/complex-dist/complexdist/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/complex-dist/setup.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/conftest.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/extension.dist/__pycache__/setup.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/extension.dist/setup.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/headers.dist/__pycache__/headersdist.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/headers.dist/__pycache__/setup.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/headers.dist/header.h create mode 100644 utils/lib/python3.5/site-packages/wheel/test/headers.dist/headersdist.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/headers.dist/setup.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/pydist-schema.json create mode 100644 utils/lib/python3.5/site-packages/wheel/test/simple.dist/__pycache__/setup.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/simple.dist/setup.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/simple.dist/simpledist/__init__.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/simple.dist/simpledist/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test-1.0-py2.py3-none-win32.whl create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_basic.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_install.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_keys.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_paths.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_ranking.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_signatures.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_tagopt.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_tool.py create mode 100644 utils/lib/python3.5/site-packages/wheel/test/test_wheelfile.py create mode 100644 utils/lib/python3.5/site-packages/wheel/tool/__init__.py create mode 100644 utils/lib/python3.5/site-packages/wheel/tool/__pycache__/__init__.cpython-35.pyc create mode 100644 utils/lib/python3.5/site-packages/wheel/util.py create mode 100644 utils/lib/python3.5/site-packages/wheel/wininst2wheel.py create mode 100644 utils/lib/python3.5/site.py create mode 120000 utils/lib/python3.5/sre_compile.py create mode 120000 utils/lib/python3.5/sre_constants.py create mode 120000 utils/lib/python3.5/sre_parse.py create mode 120000 utils/lib/python3.5/stat.py create mode 120000 utils/lib/python3.5/struct.py create mode 120000 utils/lib/python3.5/tarfile.py create mode 120000 utils/lib/python3.5/tempfile.py create mode 120000 utils/lib/python3.5/token.py create mode 120000 utils/lib/python3.5/tokenize.py create mode 120000 utils/lib/python3.5/types.py create mode 120000 utils/lib/python3.5/warnings.py create mode 120000 utils/lib/python3.5/weakref.py create mode 120000 utils/lib64 create mode 100644 utils/resources/AdminEventRepresentation create mode 100644 utils/resources/AuthDetailsRepresentation create mode 100644 utils/resources/AuthenticationExecutionExportRepresentation create mode 100644 utils/resources/AuthenticationExecutionInfoRepresentation create mode 100644 utils/resources/AuthenticationExecutionRepresentation create mode 100644 utils/resources/AuthenticationFlowRepresentation create mode 100644 utils/resources/AuthenticatorConfigInfoRepresentation create mode 100644 utils/resources/AuthenticatorConfigRepresentation create mode 100644 utils/resources/CertificateRepresentation create mode 100644 utils/resources/ClientInitialAccessCreatePresentation create mode 100644 utils/resources/ClientInitialAccessPresentation create mode 100644 utils/resources/ClientMappingsRepresentation create mode 100644 utils/resources/ClientRepresentation create mode 100644 utils/resources/ClientTemplateRepresentation create mode 100644 utils/resources/ComponentExportRepresentation create mode 100644 utils/resources/ComponentRepresentation create mode 100644 utils/resources/ComponentTypeRepresentation create mode 100644 utils/resources/ConfigPropertyRepresentation create mode 100644 utils/resources/CredentialRepresentation create mode 100644 utils/resources/EventRepresentation create mode 100644 utils/resources/FederatedIdentityRepresentation create mode 100644 utils/resources/GlobalRequestResult create mode 100644 utils/resources/GroupRepresentation create mode 100644 utils/resources/IdentityProviderMapperRepresentation create mode 100644 utils/resources/IdentityProviderRepresentation create mode 100644 utils/resources/KeyStoreConfig create mode 100644 utils/resources/KeysMetadataRepresentation create mode 100644 utils/resources/KeysMetadataRepresentation-KeyMetadataRepresentation create mode 100644 utils/resources/ManagementPermissionReference create mode 100644 utils/resources/MappingsRepresentation create mode 100644 utils/resources/MemoryInfoRepresentation create mode 100644 utils/resources/MultivaluedHashMap create mode 100644 utils/resources/PartialImportRepresentation create mode 100644 utils/resources/PasswordPolicyTypeRepresentation create mode 100644 utils/resources/PolicyRepresentation create mode 100644 utils/resources/ProfileInfoRepresentation create mode 100644 utils/resources/ProtocolMapperRepresentation create mode 100644 utils/resources/ProviderRepresentation create mode 100644 utils/resources/RealmEventsConfigRepresentation create mode 100644 utils/resources/RealmRepresentation create mode 100644 utils/resources/RequiredActionProviderRepresentation create mode 100644 utils/resources/ResourceOwnerRepresentation create mode 100644 utils/resources/ResourceRepresentation create mode 100644 utils/resources/ResourceServerRepresentation create mode 100644 utils/resources/RoleRepresentation create mode 100644 utils/resources/RoleRepresentation-Composites create mode 100644 utils/resources/RolesRepresentation create mode 100644 utils/resources/ScopeMappingRepresentation create mode 100644 utils/resources/ScopeRepresentation create mode 100644 utils/resources/ServerInfoRepresentation create mode 100644 utils/resources/SpiInfoRepresentation create mode 100644 utils/resources/SynchronizationResult create mode 100644 utils/resources/SystemInfoRepresentation create mode 100644 utils/resources/UserConsentRepresentation create mode 100644 utils/resources/UserFederationMapperRepresentation create mode 100644 utils/resources/UserFederationProviderRepresentation create mode 100644 utils/resources/UserRepresentation create mode 100644 utils/resources/UserSessionRepresentation diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 0000000..35bd097 --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,51 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/davecgh/go-spew" + packages = ["spew"] + revision = "346938d642f2ec3594ed81d874461961cd0faa76" + version = "v1.1.0" + +[[projects]] + name = "github.com/pkg/errors" + packages = ["."] + revision = "645ef00459ed84a119197bfb8d8205042c6df63d" + version = "v0.8.0" + +[[projects]] + name = "github.com/pmezard/go-difflib" + packages = ["difflib"] + revision = "792786c7400a136282c1664665ae0a8db921c6c2" + version = "v1.0.0" + +[[projects]] + name = "github.com/stretchr/testify" + packages = ["assert","require"] + revision = "69483b4bd14f5845b5a1e55bca19e954e827f1d0" + version = "v1.1.4" + +[[projects]] + branch = "master" + name = "golang.org/x/net" + packages = ["idna","publicsuffix"] + revision = "66aacef3dd8a676686c7ae3716979581e8b03c47" + +[[projects]] + branch = "master" + name = "golang.org/x/text" + packages = ["internal/gen","internal/triegen","internal/ucd","secure/bidirule","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable"] + revision = "bd91bbf73e9a4a801adbfb97133c992678533126" + +[[projects]] + name = "gopkg.in/h2non/gentleman.v2" + packages = [".","context","middleware","mux","plugin","plugins/body","plugins/bodytype","plugins/cookies","plugins/headers","plugins/multipart","plugins/query","plugins/timeout","plugins/url","utils"] + revision = "306092e612855f1ce485d8bd35361a0d10fac40f" + version = "v2.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "a3cc4fb82e0ff60bd971bed49992ef0a7aba2bfe6896479cd1b551afbcc17282" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 0000000..4c9711f --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,34 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + name = "github.com/pkg/errors" + version = "0.8.0" + +[[constraint]] + name = "github.com/stretchr/testify" + version = "1.1.4" + +[[constraint]] + name = "gopkg.in/h2non/gentleman.v2" + version = "2.0.0" diff --git a/README.md b/README.md index 1b85b61..bc1f55b 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# keycloak-client \ No newline at end of file +## Basic keycloak client in go + +This repo provides a basic keycloak client in go, and utilities to parse the html docs into usable schema files because I wasn't good enough to make maven give me ascii documentation. I should try again at some point. It uses swagger, so it SHOULD be doable, it was just easier at that time to write an html parser to quickly prototype something. diff --git a/client/client_test.go b/client/client_test.go new file mode 100644 index 0000000..2fd68cc --- /dev/null +++ b/client/client_test.go @@ -0,0 +1,81 @@ +package client + +import ( + "testing" + "time" + "github.com/stretchr/testify/require" + "fmt" + "crypto/cipher" + "crypto/aes" +) + +type setivable interface { + cipher.BlockMode + SetIV([]byte) +} + + +func Test_Poop(t *testing.T) { + var k []byte = make([]byte, 16) + var iv []byte = k + b, e := aes.NewCipher(k) + if e != nil { + fmt.Println(e) + return + } + var c = cipher.NewCBCEncrypter(b, iv) + switch cp := c.(type) { + case setivable: + fmt.Println("Haha!") + cp.SetIV(k) + case cipher.BlockMode: + fmt.Println("Hoho!") + } +} + +func initTest(t *testing.T) Client { + var config HttpConfig = HttpConfig{ + Addr: "http://127.0.0.1:8080", + Username: "admin", + Password: "admin", + Timeout: time.Second * 5, + } + var client Client + { + var err error + client, err = NewHttpClient(config) + require.Nil(t, err, "Failed to create client") + } + return client +} + +func TestClient_getToken(t *testing.T) { + var genClient Client = initTest(t) + var httpClient *client = genClient.(*client) + var err error = httpClient.getToken() + require.Nil(t, err, "Failed to get token") + fmt.Println(httpClient.accessToken) +} + +func TestClient_GetRealms(t *testing.T) { + var client Client = initTest(t) + var realms []map[string]interface{} + { + var err error + realms, err = client.GetRealms() + require.Nil(t, err, "Failed to get realms") + } + fmt.Println(realms) +} + +func TestClient_GetUsers(t *testing.T) { + var client Client = initTest(t) + var users []UserRepresentation + { + var err error + users, err = client.GetUsers("master") + require.Nil(t, err, "Failed to get users") + } + fmt.Println(users[0]) +} + diff --git a/client/common.go b/client/common.go new file mode 100644 index 0000000..6af83c8 --- /dev/null +++ b/client/common.go @@ -0,0 +1,143 @@ +package client + +import ( + "fmt" + "net/url" + "github.com/pkg/errors" + "time" + "net/http" + "gopkg.in/h2non/gentleman.v2" + "gopkg.in/h2non/gentleman.v2/plugins/timeout" + //"gopkg.in/h2non/gentleman.v2/plugins/multipart" +) + + +type Client interface { + GetRealms() ([]map[string]interface{}, error) + GetUsers(realm string) ([]UserRepresentation, error) +} + +type HttpConfig struct { + Addr string + Username string + Password string + Timeout time.Duration +} + +type client struct { + username string + password string + accessToken string + httpClient *gentleman.Client +} + + +func NewHttpClient(config HttpConfig) (Client, error) { + var u *url.URL + { + var err error + u, err = url.Parse(config.Addr) + if err != nil { + return nil, errors.Wrap(err, "Parse failed") + } + } + + if u.Scheme != "http" { + var m string = fmt.Sprint("Unsupported protocol %s. Your address must start with http://", u.Scheme) + return nil, errors.New(m) + } + + var httpClient *gentleman.Client = gentleman.New() + { + httpClient = httpClient.URL(u.String()) + httpClient = httpClient.Use(timeout.Request(config.Timeout)) + } + + return &client{ + username: config.Username, + password: config.Password, + httpClient: httpClient, + }, nil +} + +func (c *client) getToken() error { + var req *gentleman.Request + { + var authPath string = "/auth/realms/master/protocol/openid-connect/token" + //var formData multipart.FormData = multipart.FormData{ + // Data: map[string]multipart.Values{ + // "username": multipart.Values{c.username}, + // "password": multipart.Values{c.password}, + // "grant_type": multipart.Values{"password"}, + // "client_id": multipart.Values{"admin-cli"}, + // }, + //} + req = c.httpClient.Post() + req = req.SetHeader("Content-Type", "application/x-www-form-urlencoded") + req = req.Path(authPath) + req = req.Type("urlencoded") + req = req.BodyString(fmt.Sprintf("username=%s&password=%s&grant_type=password&client_id=admin-cli",c.username,c.password)) + } + + var resp *gentleman.Response + { + var err error + resp, err = req.Do() + if err != nil { + return errors.Wrap(err, "Failed to get the token response") + } + } + defer resp.Close() + + var unmarshalledBody map[string]interface{} + { + var err error + err = resp.JSON(&unmarshalledBody) + if err != nil { + return errors.Wrap(err, "Failed to unmarshal response json") + } + } + + var accessToken interface{} + { + var ok bool + accessToken, ok = unmarshalledBody["access_token"] + if !ok { + return errors.New("No access token in reponse body") + } + } + + c.accessToken = accessToken.(string) + + return nil +} + +func (c *client) do(path string) (*gentleman.Response, error) { + var req *gentleman.Request = c.httpClient.Get() + { + req = req.Path(path) + req = req.SetHeader("Authorization", fmt.Sprintf("Bearer %s", c.accessToken)) + } + var resp *gentleman.Response + { + var err error + resp, err = req.Do() + if err != nil { + return nil, errors.Wrap(err, "Failed to get the response") + } + switch resp.StatusCode { + case http.StatusUnauthorized: + var err = c.getToken() + //This induces a potential infinite loop, where a new token gets requested and the + //process gets delayed so much it expires before the recursion. + //It is decided that should this happen, the machine would be considered to be in terrible shape + //and the loop wouldn't be the biggest problem. + if err != nil { + return nil, errors.Wrap(err, "Failed to get token") + } + return c.do(path) + default: + return resp, nil + } + } +} \ No newline at end of file diff --git a/client/definitions.go b/client/definitions.go new file mode 100644 index 0000000..23478e2 --- /dev/null +++ b/client/definitions.go @@ -0,0 +1,660 @@ +package client + +type AdminEventRepresentation struct { + AuthDetails *AuthDetailsRepresentation `json:"authDetails,omitempty"` + Error *string `json:"error,omitempty"` + OperationType *string `json:"operationType,omitempty"` + RealmId *string `json:"realmId,omitempty"` + Representation *string `json:"representation,omitempty"` + ResourcePath *string `json:"resourcePath,omitempty"` + ResourceType *string `json:"resourceType,omitempty"` + Time *int64 `json:"time,omitempty"` +} + +type AuthDetailsRepresentation struct { + ClientId *string `json:"clientId,omitempty"` + IpAddress *string `json:"ipAddress,omitempty"` + RealmId *string `json:"realmId,omitempty"` + UserId *string `json:"userId,omitempty"` +} + +type AuthenticationExecutionExportRepresentation struct { + Authenticator *string `json:"authenticator,omitempty"` + AuthenticatorConfig *string `json:"authenticatorConfig,omitempty"` + AuthenticatorFlow *bool `json:"authenticatorFlow,omitempty"` + AutheticatorFlow *bool `json:"autheticatorFlow,omitempty"` + FlowAlias *string `json:"flowAlias,omitempty"` + Priority *int32 `json:"priority,omitempty"` + Requirement *string `json:"requirement,omitempty"` + UserSetupAllowed *bool `json:"userSetupAllowed,omitempty"` +} + +type AuthenticationExecutionInfoRepresentation struct { + Alias *string `json:"alias,omitempty"` + AuthenticationConfig *string `json:"authenticationConfig,omitempty"` + AuthenticationFlow *bool `json:"authenticationFlow,omitempty"` + Configurable *bool `json:"configurable,omitempty"` + DisplayName *string `json:"displayName,omitempty"` + FlowId *string `json:"flowId,omitempty"` + Id *string `json:"id,omitempty"` + Index *int32 `json:"index,omitempty"` + Level *int32 `json:"level,omitempty"` + ProviderId *string `json:"providerId,omitempty"` + Requirement *string `json:"requirement,omitempty"` + RequirementChoices *[]string `json:"requirementChoices,omitempty"` +} + +type AuthenticationExecutionRepresentation struct { + Authenticator *string `json:"authenticator,omitempty"` + AuthenticatorConfig *string `json:"authenticatorConfig,omitempty"` + AuthenticatorFlow *bool `json:"authenticatorFlow,omitempty"` + AutheticatorFlow *bool `json:"autheticatorFlow,omitempty"` + FlowId *string `json:"flowId,omitempty"` + Id *string `json:"id,omitempty"` + ParentFlow *string `json:"parentFlow,omitempty"` + Priority *int32 `json:"priority,omitempty"` + Requirement *string `json:"requirement,omitempty"` +} + +type AuthenticationFlowRepresentation struct { + Alias *string `json:"alias,omitempty"` + AuthenticationExecutions *AuthenticationExecutionExportRepresentation `json:"authenticationExecutions,omitempty"` + BuiltIn *bool `json:"builtIn,omitempty"` + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` + ProviderId *string `json:"providerId,omitempty"` + TopLevel *bool `json:"topLevel,omitempty"` +} + +type AuthenticatorConfigInfoRepresentation struct { + HelpText *string `json:"helpText,omitempty"` + Name *string `json:"name,omitempty"` + Properties *ConfigPropertyRepresentation `json:"properties,omitempty"` + ProviderId *string `json:"providerId,omitempty"` +} + +type AuthenticatorConfigRepresentation struct { + Alias *string `json:"alias,omitempty"` + Config *map[string]interface{} `json:"config,omitempty"` + Id *string `json:"id,omitempty"` +} + +type CertificateRepresentation struct { + Certificate *string `json:"certificate,omitempty"` + Kid *string `json:"kid,omitempty"` + PrivateKey *string `json:"privateKey,omitempty"` + PublicKey *string `json:"publicKey,omitempty"` +} + +type ClientInitialAccessCreatePresentation struct { + Count *int32 `json:"count,omitempty"` + Expiration *int32 `json:"expiration,omitempty"` +} + +type ClientInitialAccessPresentation struct { + Count *int32 `json:"count,omitempty"` + Expiration *int32 `json:"expiration,omitempty"` + Id *string `json:"id,omitempty"` + RemainingCount *int32 `json:"remainingCount,omitempty"` + Timestamp *int32 `json:"timestamp,omitempty"` + Token *string `json:"token,omitempty"` +} + +type ClientMappingsRepresentation struct { + Client *string `json:"client,omitempty"` + Id *string `json:"id,omitempty"` + Mappings *RoleRepresentation `json:"mappings,omitempty"` +} + +type ClientRepresentation struct { + Access *map[string]interface{} `json:"access,omitempty"` + AdminUrl *string `json:"adminUrl,omitempty"` + Attributes *map[string]interface{} `json:"attributes,omitempty"` + AuthorizationServicesEnabled *bool `json:"authorizationServicesEnabled,omitempty"` + AuthorizationSettings *ResourceServerRepresentation `json:"authorizationSettings,omitempty"` + BaseUrl *string `json:"baseUrl,omitempty"` + BearerOnly *bool `json:"bearerOnly,omitempty"` + ClientAuthenticatorType *string `json:"clientAuthenticatorType,omitempty"` + ClientId *string `json:"clientId,omitempty"` + ClientTemplate *string `json:"clientTemplate,omitempty"` + ConsentRequired *bool `json:"consentRequired,omitempty"` + DefaultRoles *[]string `json:"defaultRoles,omitempty"` + Description *string `json:"description,omitempty"` + DirectAccessGrantsEnabled *bool `json:"directAccessGrantsEnabled,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + FrontchannelLogout *bool `json:"frontchannelLogout,omitempty"` + FullScopeAllowed *bool `json:"fullScopeAllowed,omitempty"` + Id *string `json:"id,omitempty"` + ImplicitFlowEnabled *bool `json:"implicitFlowEnabled,omitempty"` + Name *string `json:"name,omitempty"` + NodeReRegistrationTimeout *int32 `json:"nodeReRegistrationTimeout,omitempty"` + NotBefore *int32 `json:"notBefore,omitempty"` + Protocol *string `json:"protocol,omitempty"` + ProtocolMappers *ProtocolMapperRepresentation `json:"protocolMappers,omitempty"` + PublicClient *bool `json:"publicClient,omitempty"` + RedirectUris *[]string `json:"redirectUris,omitempty"` + RegisteredNodes *map[string]interface{} `json:"registeredNodes,omitempty"` + RegistrationAccessToken *string `json:"registrationAccessToken,omitempty"` + RootUrl *string `json:"rootUrl,omitempty"` + Secret *string `json:"secret,omitempty"` + ServiceAccountsEnabled *bool `json:"serviceAccountsEnabled,omitempty"` + StandardFlowEnabled *bool `json:"standardFlowEnabled,omitempty"` + SurrogateAuthRequired *bool `json:"surrogateAuthRequired,omitempty"` + UseTemplateConfig *bool `json:"useTemplateConfig,omitempty"` + UseTemplateMappers *bool `json:"useTemplateMappers,omitempty"` + UseTemplateScope *bool `json:"useTemplateScope,omitempty"` + WebOrigins *[]string `json:"webOrigins,omitempty"` +} + +type ClientTemplateRepresentation struct { + Attributes *map[string]interface{} `json:"attributes,omitempty"` + BearerOnly *bool `json:"bearerOnly,omitempty"` + ConsentRequired *bool `json:"consentRequired,omitempty"` + Description *string `json:"description,omitempty"` + DirectAccessGrantsEnabled *bool `json:"directAccessGrantsEnabled,omitempty"` + FrontchannelLogout *bool `json:"frontchannelLogout,omitempty"` + FullScopeAllowed *bool `json:"fullScopeAllowed,omitempty"` + Id *string `json:"id,omitempty"` + ImplicitFlowEnabled *bool `json:"implicitFlowEnabled,omitempty"` + Name *string `json:"name,omitempty"` + Protocol *string `json:"protocol,omitempty"` + ProtocolMappers *ProtocolMapperRepresentation `json:"protocolMappers,omitempty"` + PublicClient *bool `json:"publicClient,omitempty"` + ServiceAccountsEnabled *bool `json:"serviceAccountsEnabled,omitempty"` + StandardFlowEnabled *bool `json:"standardFlowEnabled,omitempty"` +} + +type ComponentExportRepresentation struct { + Config *MultivaluedHashMap `json:"config,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + ProviderId *string `json:"providerId,omitempty"` + SubComponents *MultivaluedHashMap `json:"subComponents,omitempty"` + SubType *string `json:"subType,omitempty"` +} + +type ComponentRepresentation struct { + Config *MultivaluedHashMap `json:"config,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + ParentId *string `json:"parentId,omitempty"` + ProviderId *string `json:"providerId,omitempty"` + ProviderType *string `json:"providerType,omitempty"` + SubType *string `json:"subType,omitempty"` +} + +type ComponentTypeRepresentation struct { + HelpText *string `json:"helpText,omitempty"` + Id *string `json:"id,omitempty"` + Metadata *map[string]interface{} `json:"metadata,omitempty"` + Properties *ConfigPropertyRepresentation `json:"properties,omitempty"` +} + +type ConfigPropertyRepresentation struct { + DefaultValue *map[string]interface{} `json:"defaultValue,omitempty"` + HelpText *string `json:"helpText,omitempty"` + Label *string `json:"label,omitempty"` + Name *string `json:"name,omitempty"` + Options *[]string `json:"options,omitempty"` + Secret *bool `json:"secret,omitempty"` + Type *string `json:"type,omitempty"` +} + +type CredentialRepresentation struct { + Algorithm *string `json:"algorithm,omitempty"` + Config *MultivaluedHashMap `json:"config,omitempty"` + Counter *int32 `json:"counter,omitempty"` + CreatedDate *int64 `json:"createdDate,omitempty"` + Device *string `json:"device,omitempty"` + Digits *int32 `json:"digits,omitempty"` + HashIterations *int32 `json:"hashIterations,omitempty"` + HashedSaltedValue *string `json:"hashedSaltedValue,omitempty"` + Period *int32 `json:"period,omitempty"` + Salt *string `json:"salt,omitempty"` + Temporary *bool `json:"temporary,omitempty"` + Type *string `json:"type,omitempty"` + Value *string `json:"value,omitempty"` +} + +type EventRepresentation struct { + ClientId *string `json:"clientId,omitempty"` + Details *map[string]interface{} `json:"details,omitempty"` + Error *string `json:"error,omitempty"` + IpAddress *string `json:"ipAddress,omitempty"` + RealmId *string `json:"realmId,omitempty"` + SessionId *string `json:"sessionId,omitempty"` + Time *int64 `json:"time,omitempty"` + Type *string `json:"type,omitempty"` + UserId *string `json:"userId,omitempty"` +} + +type FederatedIdentityRepresentation struct { + IdentityProvider *string `json:"identityProvider,omitempty"` + UserId *string `json:"userId,omitempty"` + UserName *string `json:"userName,omitempty"` +} + +type GlobalRequestResult struct { + FailedRequests *[]string `json:"failedRequests,omitempty"` + SuccessRequests *[]string `json:"successRequests,omitempty"` +} + +type GroupRepresentation struct { + Access *map[string]interface{} `json:"access,omitempty"` + Attributes *map[string]interface{} `json:"attributes,omitempty"` + ClientRoles *map[string]interface{} `json:"clientRoles,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Path *string `json:"path,omitempty"` + RealmRoles *[]string `json:"realmRoles,omitempty"` + SubGroups *GroupRepresentation `json:"subGroups,omitempty"` +} + +type IdentityProviderMapperRepresentation struct { + Config *map[string]interface{} `json:"config,omitempty"` + Id *string `json:"id,omitempty"` + IdentityProviderAlias *string `json:"identityProviderAlias,omitempty"` + IdentityProviderMapper *string `json:"identityProviderMapper,omitempty"` + Name *string `json:"name,omitempty"` +} + +type IdentityProviderRepresentation struct { + AddReadTokenRoleOnCreate *bool `json:"addReadTokenRoleOnCreate,omitempty"` + Alias *string `json:"alias,omitempty"` + Config *map[string]interface{} `json:"config,omitempty"` + DisplayName *string `json:"displayName,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + FirstBrokerLoginFlowAlias *string `json:"firstBrokerLoginFlowAlias,omitempty"` + InternalId *string `json:"internalId,omitempty"` + LinkOnly *bool `json:"linkOnly,omitempty"` + PostBrokerLoginFlowAlias *string `json:"postBrokerLoginFlowAlias,omitempty"` + ProviderId *string `json:"providerId,omitempty"` + StoreToken *bool `json:"storeToken,omitempty"` + TrustEmail *bool `json:"trustEmail,omitempty"` +} + +type KeysMetadataRepresentation struct { + Active *map[string]interface{} `json:"active,omitempty"` + Keys *KeysMetadataRepresentation_KeyMetadataRepresentation `json:"keys,omitempty"` +} + +type KeysMetadataRepresentation_KeyMetadataRepresentation struct { + Certificate *string `json:"certificate,omitempty"` + Kid *string `json:"kid,omitempty"` + ProviderId *string `json:"providerId,omitempty"` + ProviderPriority *int64 `json:"providerPriority,omitempty"` + PublicKey *string `json:"publicKey,omitempty"` + Status *string `json:"status,omitempty"` + Type *string `json:"type,omitempty"` +} + +type KeyStoreConfig struct { + Format *string `json:"format,omitempty"` + KeyAlias *string `json:"keyAlias,omitempty"` + KeyPassword *string `json:"keyPassword,omitempty"` + RealmAlias *string `json:"realmAlias,omitempty"` + RealmCertificate *bool `json:"realmCertificate,omitempty"` + StorePassword *string `json:"storePassword,omitempty"` +} + +type ManagementPermissionReference struct { + Enabled *bool `json:"enabled,omitempty"` + Resource *string `json:"resource,omitempty"` + ScopePermissions *map[string]interface{} `json:"scopePermissions,omitempty"` +} + +type MappingsRepresentation struct { + ClientMappings *map[string]interface{} `json:"clientMappings,omitempty"` + RealmMappings *RoleRepresentation `json:"realmMappings,omitempty"` +} + +type MemoryInfoRepresentation struct { + Free *int64 `json:"free,omitempty"` + FreeFormated *string `json:"freeFormated,omitempty"` + FreePercentage *int64 `json:"freePercentage,omitempty"` + Total *int64 `json:"total,omitempty"` + TotalFormated *string `json:"totalFormated,omitempty"` + Used *int64 `json:"used,omitempty"` + UsedFormated *string `json:"usedFormated,omitempty"` +} + +type MultivaluedHashMap struct { + Empty *bool `json:"empty,omitempty"` + LoadFactor *int32 `json:"loadFactor,omitempty"` + Threshold *int32 `json:"threshold,omitempty"` +} + +type PartialImportRepresentation struct { + Clients *ClientRepresentation `json:"clients,omitempty"` + Groups *GroupRepresentation `json:"groups,omitempty"` + IdentityProviders *IdentityProviderRepresentation `json:"identityProviders,omitempty"` + IfResourceExists *string `json:"ifResourceExists,omitempty"` + Policy *string `json:"policy,omitempty"` + Roles *RolesRepresentation `json:"roles,omitempty"` + Users *UserRepresentation `json:"users,omitempty"` +} + +type PasswordPolicyTypeRepresentation struct { + ConfigType *string `json:"configType,omitempty"` + DefaultValue *string `json:"defaultValue,omitempty"` + DisplayName *string `json:"displayName,omitempty"` + Id *string `json:"id,omitempty"` + MultipleSupported *bool `json:"multipleSupported,omitempty"` +} + +type PolicyRepresentation struct { + Config *map[string]interface{} `json:"config,omitempty"` + DecisionStrategy *string `json:"decisionStrategy,omitempty"` + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` + Logic *string `json:"logic,omitempty"` + Name *string `json:"name,omitempty"` + Policies *[]string `json:"policies,omitempty"` + Resources *[]string `json:"resources,omitempty"` + Scopes *[]string `json:"scopes,omitempty"` + Type *string `json:"type,omitempty"` +} + +type ProfileInfoRepresentation struct { + DisabledFeatures *[]string `json:"disabledFeatures,omitempty"` + Name *string `json:"name,omitempty"` +} + +type ProtocolMapperRepresentation struct { + Config *map[string]interface{} `json:"config,omitempty"` + ConsentRequired *bool `json:"consentRequired,omitempty"` + ConsentText *string `json:"consentText,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Protocol *string `json:"protocol,omitempty"` + ProtocolMapper *string `json:"protocolMapper,omitempty"` +} + +type ProviderRepresentation struct { + OperationalInfo *map[string]interface{} `json:"operationalInfo,omitempty"` + Order *int32 `json:"order,omitempty"` +} + +type RealmEventsConfigRepresentation struct { + AdminEventsDetailsEnabled *bool `json:"adminEventsDetailsEnabled,omitempty"` + AdminEventsEnabled *bool `json:"adminEventsEnabled,omitempty"` + EnabledEventTypes *[]string `json:"enabledEventTypes,omitempty"` + EventsEnabled *bool `json:"eventsEnabled,omitempty"` + EventsExpiration *int64 `json:"eventsExpiration,omitempty"` + EventsListeners *[]string `json:"eventsListeners,omitempty"` +} + +type RealmRepresentation struct { + AccessCodeLifespan *int32 `json:"accessCodeLifespan,omitempty"` + AccessCodeLifespanLogin *int32 `json:"accessCodeLifespanLogin,omitempty"` + AccessCodeLifespanUserAction *int32 `json:"accessCodeLifespanUserAction,omitempty"` + AccessTokenLifespan *int32 `json:"accessTokenLifespan,omitempty"` + AccessTokenLifespanForImplicitFlow *int32 `json:"accessTokenLifespanForImplicitFlow,omitempty"` + AccountTheme *string `json:"accountTheme,omitempty"` + ActionTokenGeneratedByAdminLifespan *int32 `json:"actionTokenGeneratedByAdminLifespan,omitempty"` + ActionTokenGeneratedByUserLifespan *int32 `json:"actionTokenGeneratedByUserLifespan,omitempty"` + AdminEventsDetailsEnabled *bool `json:"adminEventsDetailsEnabled,omitempty"` + AdminEventsEnabled *bool `json:"adminEventsEnabled,omitempty"` + AdminTheme *string `json:"adminTheme,omitempty"` + Attributes *map[string]interface{} `json:"attributes,omitempty"` + AuthenticationFlows *AuthenticationFlowRepresentation `json:"authenticationFlows,omitempty"` + AuthenticatorConfig *AuthenticatorConfigRepresentation `json:"authenticatorConfig,omitempty"` + BrowserFlow *string `json:"browserFlow,omitempty"` + BrowserSecurityHeaders *map[string]interface{} `json:"browserSecurityHeaders,omitempty"` + BruteForceProtected *bool `json:"bruteForceProtected,omitempty"` + ClientAuthenticationFlow *string `json:"clientAuthenticationFlow,omitempty"` + ClientScopeMappings *map[string]interface{} `json:"clientScopeMappings,omitempty"` + ClientTemplates *ClientTemplateRepresentation `json:"clientTemplates,omitempty"` + Clients *ClientRepresentation `json:"clients,omitempty"` + Components *MultivaluedHashMap `json:"components,omitempty"` + DefaultGroups *[]string `json:"defaultGroups,omitempty"` + DefaultLocale *string `json:"defaultLocale,omitempty"` + DefaultRoles *[]string `json:"defaultRoles,omitempty"` + DirectGrantFlow *string `json:"directGrantFlow,omitempty"` + DisplayName *string `json:"displayName,omitempty"` + DisplayNameHtml *string `json:"displayNameHtml,omitempty"` + DockerAuthenticationFlow *string `json:"dockerAuthenticationFlow,omitempty"` + DuplicateEmailsAllowed *bool `json:"duplicateEmailsAllowed,omitempty"` + EditUsernameAllowed *bool `json:"editUsernameAllowed,omitempty"` + EmailTheme *string `json:"emailTheme,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + EnabledEventTypes *[]string `json:"enabledEventTypes,omitempty"` + EventsEnabled *bool `json:"eventsEnabled,omitempty"` + EventsExpiration *int64 `json:"eventsExpiration,omitempty"` + EventsListeners *[]string `json:"eventsListeners,omitempty"` + FailureFactor *int32 `json:"failureFactor,omitempty"` + FederatedUsers *UserRepresentation `json:"federatedUsers,omitempty"` + Groups *GroupRepresentation `json:"groups,omitempty"` + Id *string `json:"id,omitempty"` + IdentityProviderMappers *IdentityProviderMapperRepresentation `json:"identityProviderMappers,omitempty"` + IdentityProviders *IdentityProviderRepresentation `json:"identityProviders,omitempty"` + InternationalizationEnabled *bool `json:"internationalizationEnabled,omitempty"` + KeycloakVersion *string `json:"keycloakVersion,omitempty"` + LoginTheme *string `json:"loginTheme,omitempty"` + LoginWithEmailAllowed *bool `json:"loginWithEmailAllowed,omitempty"` + MaxDeltaTimeSeconds *int32 `json:"maxDeltaTimeSeconds,omitempty"` + MaxFailureWaitSeconds *int32 `json:"maxFailureWaitSeconds,omitempty"` + MinimumQuickLoginWaitSeconds *int32 `json:"minimumQuickLoginWaitSeconds,omitempty"` + NotBefore *int32 `json:"notBefore,omitempty"` + OfflineSessionIdleTimeout *int32 `json:"offlineSessionIdleTimeout,omitempty"` + OtpPolicyAlgorithm *string `json:"otpPolicyAlgorithm,omitempty"` + OtpPolicyDigits *int32 `json:"otpPolicyDigits,omitempty"` + OtpPolicyInitialCounter *int32 `json:"otpPolicyInitialCounter,omitempty"` + OtpPolicyLookAheadWindow *int32 `json:"otpPolicyLookAheadWindow,omitempty"` + OtpPolicyPeriod *int32 `json:"otpPolicyPeriod,omitempty"` + OtpPolicyType *string `json:"otpPolicyType,omitempty"` + PasswordPolicy *string `json:"passwordPolicy,omitempty"` + PermanentLockout *bool `json:"permanentLockout,omitempty"` + ProtocolMappers *ProtocolMapperRepresentation `json:"protocolMappers,omitempty"` + QuickLoginCheckMilliSeconds *int64 `json:"quickLoginCheckMilliSeconds,omitempty"` + Realm *string `json:"realm,omitempty"` + RegistrationAllowed *bool `json:"registrationAllowed,omitempty"` + RegistrationEmailAsUsername *bool `json:"registrationEmailAsUsername,omitempty"` + RegistrationFlow *string `json:"registrationFlow,omitempty"` + RememberMe *bool `json:"rememberMe,omitempty"` + RequiredActions *RequiredActionProviderRepresentation `json:"requiredActions,omitempty"` + ResetCredentialsFlow *string `json:"resetCredentialsFlow,omitempty"` + ResetPasswordAllowed *bool `json:"resetPasswordAllowed,omitempty"` + RevokeRefreshToken *bool `json:"revokeRefreshToken,omitempty"` + Roles *RolesRepresentation `json:"roles,omitempty"` + ScopeMappings *ScopeMappingRepresentation `json:"scopeMappings,omitempty"` + SmtpServer *map[string]interface{} `json:"smtpServer,omitempty"` + SslRequired *string `json:"sslRequired,omitempty"` + SsoSessionIdleTimeout *int32 `json:"ssoSessionIdleTimeout,omitempty"` + SsoSessionMaxLifespan *int32 `json:"ssoSessionMaxLifespan,omitempty"` + SupportedLocales *[]string `json:"supportedLocales,omitempty"` + UserFederationMappers *UserFederationMapperRepresentation `json:"userFederationMappers,omitempty"` + UserFederationProviders *UserFederationProviderRepresentation `json:"userFederationProviders,omitempty"` + Users *UserRepresentation `json:"users,omitempty"` + VerifyEmail *bool `json:"verifyEmail,omitempty"` + WaitIncrementSeconds *int32 `json:"waitIncrementSeconds,omitempty"` +} + +type RequiredActionProviderRepresentation struct { + Alias *string `json:"alias,omitempty"` + Config *map[string]interface{} `json:"config,omitempty"` + DefaultAction *bool `json:"defaultAction,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + Name *string `json:"name,omitempty"` + ProviderId *string `json:"providerId,omitempty"` +} + +type ResourceOwnerRepresentation struct { + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` +} + +type ResourceRepresentation struct { + Id *string `json:"id,omitempty"` + Icon_uri *string `json:"icon_uri,omitempty"` + Name *string `json:"name,omitempty"` + Owner *ResourceOwnerRepresentation `json:"owner,omitempty"` + Policies *PolicyRepresentation `json:"policies,omitempty"` + Scopes *ScopeRepresentation `json:"scopes,omitempty"` + Type *string `json:"type,omitempty"` + TypedScopes *ScopeRepresentation `json:"typedScopes,omitempty"` + Uri *string `json:"uri,omitempty"` +} + +type ResourceServerRepresentation struct { + AllowRemoteResourceManagement *bool `json:"allowRemoteResourceManagement,omitempty"` + ClientId *string `json:"clientId,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Policies *PolicyRepresentation `json:"policies,omitempty"` + PolicyEnforcementMode *string `json:"policyEnforcementMode,omitempty"` + Resources *ResourceRepresentation `json:"resources,omitempty"` + Scopes *ScopeRepresentation `json:"scopes,omitempty"` +} + +type RoleRepresentation struct { + ClientRole *bool `json:"clientRole,omitempty"` + Composite *bool `json:"composite,omitempty"` + Composites *RoleRepresentation_Composites `json:"composites,omitempty"` + ContainerId *string `json:"containerId,omitempty"` + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + ScopeParamRequired *bool `json:"scopeParamRequired,omitempty"` +} + +type RoleRepresentation_Composites struct { + Client *map[string]interface{} `json:"client,omitempty"` + Realm *[]string `json:"realm,omitempty"` +} + +type RolesRepresentation struct { + Client *map[string]interface{} `json:"client,omitempty"` + Realm *RoleRepresentation `json:"realm,omitempty"` +} + +type ScopeMappingRepresentation struct { + Client *string `json:"client,omitempty"` + ClientTemplate *string `json:"clientTemplate,omitempty"` + Roles *[]string `json:"roles,omitempty"` + Self *string `json:"self,omitempty"` +} + +type ScopeRepresentation struct { + IconUri *string `json:"iconUri,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Policies *PolicyRepresentation `json:"policies,omitempty"` + Resources *ResourceRepresentation `json:"resources,omitempty"` +} + +type ServerInfoRepresentation struct { + BuiltinProtocolMappers *map[string]interface{} `json:"builtinProtocolMappers,omitempty"` + ClientImporters *map[string]interface{} `json:"clientImporters,omitempty"` + ClientInstallations *map[string]interface{} `json:"clientInstallations,omitempty"` + ComponentTypes *map[string]interface{} `json:"componentTypes,omitempty"` + Enums *map[string]interface{} `json:"enums,omitempty"` + IdentityProviders *map[string]interface{} `json:"identityProviders,omitempty"` + MemoryInfo *MemoryInfoRepresentation `json:"memoryInfo,omitempty"` + PasswordPolicies *PasswordPolicyTypeRepresentation `json:"passwordPolicies,omitempty"` + ProfileInfo *ProfileInfoRepresentation `json:"profileInfo,omitempty"` + ProtocolMapperTypes *map[string]interface{} `json:"protocolMapperTypes,omitempty"` + Providers *map[string]interface{} `json:"providers,omitempty"` + SocialProviders *map[string]interface{} `json:"socialProviders,omitempty"` + SystemInfo *SystemInfoRepresentation `json:"systemInfo,omitempty"` + Themes *map[string]interface{} `json:"themes,omitempty"` +} + +type SpiInfoRepresentation struct { + Internal *bool `json:"internal,omitempty"` + Providers *map[string]interface{} `json:"providers,omitempty"` +} + +type SynchronizationResult struct { + Added *int32 `json:"added,omitempty"` + Failed *int32 `json:"failed,omitempty"` + Ignored *bool `json:"ignored,omitempty"` + Removed *int32 `json:"removed,omitempty"` + Status *string `json:"status,omitempty"` + Updated *int32 `json:"updated,omitempty"` +} + +type SystemInfoRepresentation struct { + FileEncoding *string `json:"fileEncoding,omitempty"` + JavaHome *string `json:"javaHome,omitempty"` + JavaRuntime *string `json:"javaRuntime,omitempty"` + JavaVendor *string `json:"javaVendor,omitempty"` + JavaVersion *string `json:"javaVersion,omitempty"` + JavaVm *string `json:"javaVm,omitempty"` + JavaVmVersion *string `json:"javaVmVersion,omitempty"` + OsArchitecture *string `json:"osArchitecture,omitempty"` + OsName *string `json:"osName,omitempty"` + OsVersion *string `json:"osVersion,omitempty"` + ServerTime *string `json:"serverTime,omitempty"` + Uptime *string `json:"uptime,omitempty"` + UptimeMillis *int64 `json:"uptimeMillis,omitempty"` + UserDir *string `json:"userDir,omitempty"` + UserLocale *string `json:"userLocale,omitempty"` + UserName *string `json:"userName,omitempty"` + UserTimezone *string `json:"userTimezone,omitempty"` + Version *string `json:"version,omitempty"` +} + +type UserConsentRepresentation struct { + ClientId *string `json:"clientId,omitempty"` + CreatedDate *int64 `json:"createdDate,omitempty"` + GrantedClientRoles *map[string]interface{} `json:"grantedClientRoles,omitempty"` + GrantedProtocolMappers *map[string]interface{} `json:"grantedProtocolMappers,omitempty"` + GrantedRealmRoles *[]string `json:"grantedRealmRoles,omitempty"` + LastUpdatedDate *int64 `json:"lastUpdatedDate,omitempty"` +} + +type UserFederationMapperRepresentation struct { + Config *map[string]interface{} `json:"config,omitempty"` + FederationMapperType *string `json:"federationMapperType,omitempty"` + FederationProviderDisplayName *string `json:"federationProviderDisplayName,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` +} + +type UserFederationProviderRepresentation struct { + ChangedSyncPeriod *int32 `json:"changedSyncPeriod,omitempty"` + Config *map[string]interface{} `json:"config,omitempty"` + DisplayName *string `json:"displayName,omitempty"` + FullSyncPeriod *int32 `json:"fullSyncPeriod,omitempty"` + Id *string `json:"id,omitempty"` + LastSync *int32 `json:"lastSync,omitempty"` + Priority *int32 `json:"priority,omitempty"` + ProviderName *string `json:"providerName,omitempty"` +} + +type UserRepresentation struct { + Access *map[string]interface{} `json:"access,omitempty"` + Attributes *map[string]interface{} `json:"attributes,omitempty"` + ClientConsents *UserConsentRepresentation `json:"clientConsents,omitempty"` + ClientRoles *map[string]interface{} `json:"clientRoles,omitempty"` + CreatedTimestamp *int64 `json:"createdTimestamp,omitempty"` + Credentials *CredentialRepresentation `json:"credentials,omitempty"` + DisableableCredentialTypes *[]string `json:"disableableCredentialTypes,omitempty"` + Email *string `json:"email,omitempty"` + EmailVerified *bool `json:"emailVerified,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + FederatedIdentities *FederatedIdentityRepresentation `json:"federatedIdentities,omitempty"` + FederationLink *string `json:"federationLink,omitempty"` + FirstName *string `json:"firstName,omitempty"` + Groups *[]string `json:"groups,omitempty"` + Id *string `json:"id,omitempty"` + LastName *string `json:"lastName,omitempty"` + Origin *string `json:"origin,omitempty"` + RealmRoles *[]string `json:"realmRoles,omitempty"` + RequiredActions *[]string `json:"requiredActions,omitempty"` + Self *string `json:"self,omitempty"` + ServiceAccountClientId *string `json:"serviceAccountClientId,omitempty"` + Username *string `json:"username,omitempty"` +} + +type UserSessionRepresentation struct { + Clients *map[string]interface{} `json:"clients,omitempty"` + Id *string `json:"id,omitempty"` + IpAddress *string `json:"ipAddress,omitempty"` + LastAccess *int64 `json:"lastAccess,omitempty"` + Start *int64 `json:"start,omitempty"` + UserId *string `json:"userId,omitempty"` + Username *string `json:"username,omitempty"` +} + diff --git a/client/realms.go b/client/realms.go new file mode 100644 index 0000000..0c95250 --- /dev/null +++ b/client/realms.go @@ -0,0 +1,29 @@ +package client + + +import ( + "github.com/pkg/errors" + gentleman "gopkg.in/h2non/gentleman.v2" + "encoding/json" +) + +func (c *client) GetRealms() ([]map[string]interface{}, error) { + var getRealms_Path string = "/auth/admin/realms" + var resp *gentleman.Response + { + var err error + resp, err = c.do(getRealms_Path) + if err != nil { + return nil, errors.Wrap(err, "Get Realms failed.") + } + } + var result []map[string]interface{} + { + var err error + err = json.Unmarshal(resp.Bytes(), &result) + if err != nil { + return nil, errors.Wrap(err, "Get Realms failed to unmarshal response.") + } + } + return result, nil +} diff --git a/client/users.go b/client/users.go new file mode 100644 index 0000000..2859663 --- /dev/null +++ b/client/users.go @@ -0,0 +1,29 @@ +package client + +import ( + "fmt" + "gopkg.in/h2non/gentleman.v2" + "github.com/pkg/errors" + "encoding/json" +) + +func (c *client)GetUsers(realm string) ([]UserRepresentation, error) { + var getUsers_Path string = fmt.Sprintf("/auth/admin/realms/%s/users", realm) + var resp *gentleman.Response + { + var err error + resp, err = c.do(getUsers_Path) + if err != nil { + return nil, errors.Wrap(err, "Get Realms failed.") + } + } + var result []UserRepresentation + { + var err error + err = json.Unmarshal(resp.Bytes(), &result) + if err != nil { + return nil, errors.Wrap(err, "Get Users failed to unmarshal response.") + } + } + return result, nil +} \ No newline at end of file diff --git a/utils/.idea/misc.xml b/utils/.idea/misc.xml new file mode 100644 index 0000000..d8e6b49 --- /dev/null +++ b/utils/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/utils/.idea/modules.xml b/utils/.idea/modules.xml new file mode 100644 index 0000000..2213c52 --- /dev/null +++ b/utils/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/utils/.idea/utils.iml b/utils/.idea/utils.iml new file mode 100644 index 0000000..2e70106 --- /dev/null +++ b/utils/.idea/utils.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/utils/.idea/workspace.xml b/utils/.idea/workspace.xml new file mode 100644 index 0000000..fad9dca --- /dev/null +++ b/utils/.idea/workspace.xml @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + print + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1500550169408 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/utils/bin/activate b/utils/bin/activate new file mode 100644 index 0000000..f4e7699 --- /dev/null +++ b/utils/bin/activate @@ -0,0 +1,78 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + unset -f pydoc >/dev/null 2>&1 + + # reset old environment variables + # ! [ -z ${VAR+_} ] returns true if VAR is declared at all + if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then + PATH="$_OLD_VIRTUAL_PATH" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then + PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null + fi + + if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then + PS1="$_OLD_VIRTUAL_PS1" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "${1-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +if ! [ -z "${PYTHONHOME+_}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then + _OLD_VIRTUAL_PS1="$PS1" + if [ "x" != x ] ; then + PS1="$PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" + fi + export PS1 +fi + +# Make sure to unalias pydoc if it's already there +alias pydoc 2>/dev/null >/dev/null && unalias pydoc + +pydoc () { + python -m pydoc "$@" +} + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null +fi diff --git a/utils/bin/activate.csh b/utils/bin/activate.csh new file mode 100644 index 0000000..ac3fc9e --- /dev/null +++ b/utils/bin/activate.csh @@ -0,0 +1,36 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . + +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; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + + +if ("" != "") then + set env_name = "" +else + set env_name = `basename "$VIRTUAL_ENV"` +endif + +# Could be in a non-interactive environment, +# in which case, $prompt is undefined and we wouldn't +# care about the prompt anyway. +if ( $?prompt ) then + set _OLD_VIRTUAL_PROMPT="$prompt" + set prompt = "[$env_name] $prompt" +endif + +unset env_name + +alias pydoc python -m pydoc + +rehash + diff --git a/utils/bin/activate.fish b/utils/bin/activate.fish new file mode 100644 index 0000000..048f66c --- /dev/null +++ b/utils/bin/activate.fish @@ -0,0 +1,76 @@ +# This file must be used using `. bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. +# Do not run it directly. + +function deactivate -d 'Exit virtualenv mode and return to the normal 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 an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. + set -l fish_function_path + + # Erase virtualenv's `fish_prompt` and restore the original. + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + end + + set -e VIRTUAL_ENV + + if test "$argv[1]" != 'nondestructive' + # Self-destruct! + functions -e pydoc + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV "/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils" + +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 + +function pydoc + python -m pydoc $argv +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # Copy the current `fish_prompt` function as `_old_fish_prompt`. + functions -c fish_prompt _old_fish_prompt + + function fish_prompt + # Save the current $status, for fish_prompts that display it. + set -l old_status $status + + # Prompt override provided? + # If not, just prepend the environment name. + if test -n "" + printf '%s%s' "" (set_color normal) + else + printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV") + end + + # Restore the original $status + echo "exit $old_status" | source + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/utils/bin/activate_this.py b/utils/bin/activate_this.py new file mode 100644 index 0000000..f18193b --- /dev/null +++ b/utils/bin/activate_this.py @@ -0,0 +1,34 @@ +"""By using execfile(this_file, dict(__file__=this_file)) you will +activate this virtualenv environment. + +This can be used when you must use an existing Python interpreter, not +the virtualenv bin/python +""" + +try: + __file__ +except NameError: + raise AssertionError( + "You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))") +import sys +import os + +old_os_path = os.environ.get('PATH', '') +os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path +base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if sys.platform == 'win32': + site_packages = os.path.join(base, 'Lib', 'site-packages') +else: + site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages') +prev_sys_path = list(sys.path) +import site +site.addsitedir(site_packages) +sys.real_prefix = sys.prefix +sys.prefix = base +# Move the added items to the front of the path: +new_sys_path = [] +for item in list(sys.path): + if item not in prev_sys_path: + new_sys_path.append(item) + sys.path.remove(item) +sys.path[:0] = new_sys_path diff --git a/utils/bin/chardetect b/utils/bin/chardetect new file mode 100755 index 0000000..e45a6d4 --- /dev/null +++ b/utils/bin/chardetect @@ -0,0 +1,11 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from chardet.cli.chardetect import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/utils/bin/easy_install b/utils/bin/easy_install new file mode 100755 index 0000000..0bb770d --- /dev/null +++ b/utils/bin/easy_install @@ -0,0 +1,11 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/utils/bin/easy_install-3.5 b/utils/bin/easy_install-3.5 new file mode 100755 index 0000000..0bb770d --- /dev/null +++ b/utils/bin/easy_install-3.5 @@ -0,0 +1,11 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/utils/bin/pip b/utils/bin/pip new file mode 100755 index 0000000..2a0f09d --- /dev/null +++ b/utils/bin/pip @@ -0,0 +1,11 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/utils/bin/pip3 b/utils/bin/pip3 new file mode 100755 index 0000000..2a0f09d --- /dev/null +++ b/utils/bin/pip3 @@ -0,0 +1,11 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/utils/bin/pip3.5 b/utils/bin/pip3.5 new file mode 100755 index 0000000..2a0f09d --- /dev/null +++ b/utils/bin/pip3.5 @@ -0,0 +1,11 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/utils/bin/python b/utils/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/utils/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/utils/bin/python-config b/utils/bin/python-config new file mode 100755 index 0000000..4449dab --- /dev/null +++ b/utils/bin/python-config @@ -0,0 +1,78 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python + +import sys +import getopt +import sysconfig + +valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', + 'ldflags', 'help'] + +if sys.version_info >= (3, 2): + valid_opts.insert(-1, 'extension-suffix') + valid_opts.append('abiflags') +if sys.version_info >= (3, 3): + valid_opts.append('configdir') + + +def exit_with_usage(code=1): + sys.stderr.write("Usage: {0} [{1}]\n".format( + sys.argv[0], '|'.join('--'+opt for opt in valid_opts))) + sys.exit(code) + +try: + opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) +except getopt.error: + exit_with_usage() + +if not opts: + exit_with_usage() + +pyver = sysconfig.get_config_var('VERSION') +getvar = sysconfig.get_config_var + +opt_flags = [flag for (flag, val) in opts] + +if '--help' in opt_flags: + exit_with_usage(code=0) + +for opt in opt_flags: + if opt == '--prefix': + print(sysconfig.get_config_var('prefix')) + + elif opt == '--exec-prefix': + print(sysconfig.get_config_var('exec_prefix')) + + elif opt in ('--includes', '--cflags'): + flags = ['-I' + sysconfig.get_path('include'), + '-I' + sysconfig.get_path('platinclude')] + if opt == '--cflags': + flags.extend(getvar('CFLAGS').split()) + print(' '.join(flags)) + + elif opt in ('--libs', '--ldflags'): + abiflags = getattr(sys, 'abiflags', '') + libs = ['-lpython' + pyver + abiflags] + libs += getvar('LIBS').split() + libs += getvar('SYSLIBS').split() + # add the prefix/lib/pythonX.Y/config dir, but only if there is no + # shared library in prefix/lib/. + if opt == '--ldflags': + if not getvar('Py_ENABLE_SHARED'): + libs.insert(0, '-L' + getvar('LIBPL')) + if not getvar('PYTHONFRAMEWORK'): + libs.extend(getvar('LINKFORSHARED').split()) + print(' '.join(libs)) + + elif opt == '--extension-suffix': + ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') + if ext_suffix is None: + ext_suffix = sysconfig.get_config_var('SO') + print(ext_suffix) + + elif opt == '--abiflags': + if not getattr(sys, 'abiflags', None): + exit_with_usage() + print(sys.abiflags) + + elif opt == '--configdir': + print(sysconfig.get_config_var('LIBPL')) diff --git a/utils/bin/python3 b/utils/bin/python3 new file mode 100755 index 0000000000000000000000000000000000000000..b6eb71c3e0ff4657340724cb9391fa56b49df698 GIT binary patch literal 11224 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 literal 0 HcmV?d00001 diff --git a/utils/bin/python3.5 b/utils/bin/python3.5 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/utils/bin/python3.5 @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/utils/bin/wheel b/utils/bin/wheel new file mode 100755 index 0000000..7d68eb3 --- /dev/null +++ b/utils/bin/wheel @@ -0,0 +1,11 @@ +#!/root/cloudtrust/go/src/github.com/elca-kairos-py/keycloak/utils/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from wheel.tool import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/utils/file_parser.py b/utils/file_parser.py new file mode 100755 index 0000000..abd72d9 --- /dev/null +++ b/utils/file_parser.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 + +import sys +import re + +#Parameter required or optional +OPT_TOKEN = 'optional' +REQ_TOKEN = 'required' +REQ_TOKENS = set([OPT_TOKEN,REQ_TOKEN]) + +#Direct Type tokens (directly mapped to golang) +DIRECT_INT_TYPE_TOKENS = set(['int16','int32','int64']) + +#Typed Arrays +STL_OPEN_TOKEN = '<' +STL_CLOSE_TOKEN = '>' +ARRAY_TOKEN = 'array' + +#Type tokens +MAP_TYPE_TOKEN = 'Map' +INT_TYPE_TOKEN = 'integer' +BOOL_TYPE_TOKEN = 'boolean' +STRING_TYPE_TOKEN = 'string' +ENUM_TYPE_TOKEN = 'enum' +TYPE_TOKENS = set([MAP_TYPE_TOKEN,INT_TYPE_TOKEN,BOOL_TYPE_TOKEN,STRING_TYPE_TOKEN, ENUM_TYPE_TOKEN]) + +MAP_TOKEN_TO_GO = { + MAP_TYPE_TOKEN:"map[string]interface{}", + BOOL_TYPE_TOKEN:"bool", + STRING_TYPE_TOKEN:"string", + ENUM_TYPE_TOKEN:"string", +} + +def panic(*args): + eprint(*args) + sys.exit(1) + +def eprint(*args): + print(*args, file=sys.stderr) + +def to_go_array(go_type): + return "[]%s" % go_type + +def is_req(split_line): + req = split_line.pop(0) + if req not in REQ_TOKENS: + panic("Token %s does not match requirement tokens" % req) + if req == REQ_TOKEN: + return True + return False + +def get_type(split_line): + token = split_line.pop(0) + if token in TYPE_TOKENS: + if token == INT_TYPE_TOKEN: + token = split_line.pop() + if token not in DIRECT_INT_TYPE_TOKENS: + panic("%s is wrong int type!" % token) + return token + return MAP_TOKEN_TO_GO[token] + if token == STL_OPEN_TOKEN: + return to_go_array(get_type(split_line)) + return token + +def parse_line(split_line): + field_name = split_line.pop(0) + if field_name == type: + field_name = "typ" + exported_field_name = field_name[0].upper() + field_name[1:] + required = is_req(split_line) + go_type = get_type(split_line) + if required: + res = """\t%s *%s `json:"%s"`\n""" % (exported_field_name,go_type,field_name) + else: + res = """\t%s *%s `json:"%s,omitempty"`\n""" % (exported_field_name,go_type,field_name) + return res + + +def main(): + if len(sys.argv) < 2: + eprint("Usage : %s file" % sys.argv[0]) + return + res = "type %s struct { \n" % sys.argv[1] + with open(sys.argv[1], 'r') as table: + for line in table.readlines(): + res += parse_line([x for x in re.split('\s+|\(|\)',line) if x]) + res += "}\n" + print(res) + +if __name__ == "__main__": + main() diff --git a/utils/html_parser.py b/utils/html_parser.py new file mode 100755 index 0000000..633be1f --- /dev/null +++ b/utils/html_parser.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 + +from bs4 import BeautifulSoup +import requests + +keycloak_doc = requests.get("http://www.keycloak.org/docs-api/3.2/rest-api/index.html").text + +soup = BeautifulSoup(keycloak_doc, "lxml") + +for div in soup.body.find_all('div'): + if div.h2: + if div.h2.string == "Definitions": + definitions=div.div + break + +for div in definitions.find_all('div'): + name = div.h3.string + print("\n",name,"\n") + #print(div) + with open("./resources/{}".format(name), "w") as f : + try: + for tr in div.table.tbody.find_all('tr'): + tds = tr.find_all('td') + field_name = tds[0].p.strong.string + field_req = tds[0].p.em.string + if tds[1].p.string: + field_type = tds[1].p.string + else: + field_type = tds[1].p.a.string + if field_req not in set(['optional','required']): + field_req = 'optional' + print(field_name + ' ' + field_req + ' ' + field_type) + f.write(field_name + ' ' + field_req + ' ' + field_type + '\n') + + except : + print("WARNING!!!", name) + +#print(definitions.find_all('div')[-1]) diff --git a/utils/include/python3.5m b/utils/include/python3.5m new file mode 120000 index 0000000..f39ee13 --- /dev/null +++ b/utils/include/python3.5m @@ -0,0 +1 @@ +/usr/include/python3.5m \ No newline at end of file diff --git a/utils/lib/python3.5/__future__.py b/utils/lib/python3.5/__future__.py new file mode 120000 index 0000000..b6ab033 --- /dev/null +++ b/utils/lib/python3.5/__future__.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/__future__.py \ No newline at end of file diff --git a/utils/lib/python3.5/__pycache__/__future__.cpython-35.pyc b/utils/lib/python3.5/__pycache__/__future__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bfbb52a0c6084af60fb537316e650670b552de1 GIT binary patch literal 4361 zcmbtXTaz0{6>jZa>WXTu80}hloYi$rEOD;)v%2QOPTGK6Q?9q(U z(_>q%JWv(*G5i8v`5k)YY5xLGe5XgVEA6f+2c%L@&*{^r&+R*XbaQ9N`DbPC#ql-9 z{>2tPMa&=Jm)tHeCK+=v7MNUNa+S$7CfAwVU~-emEhdX>SY$3%9X2d5RbV$=@Lggq zShtxA?j7c0!!C2N=Q4A#?Fw_T^D1+TOkQKI!{i=wFR`!WbtZ4Hzv8qT?E4kwZZoyb z3g{dt|xn?PMn5;5Yw3IzdsWEw%DaTT-Tgp8q?=yADQf@HGS-1Q^3^o|+C_mPc z#{)hYiA2deLBxZ|kH-^Xf_|uYD57C1hKlZ0`kALSl z9G@d4OsZ8&j1~VqFM0F#{St3aOb|yR?5I%TFkY&Z_!ALHVPZX9AX+gb>f+BKvFhYR`r>b>e+@!%oO!K=w^ zq8*La`5pHzU_0!z&kDYKj;&K~)(^UMuUUUyZ_@cC5h9YM3NQ7Qu}>d{2Jo>e@mTZH zAV3644|!sA5Dib%$^~`noyI|PZpgCsWyd)iL2c6~$xu6; z;J2wt2#FQmPYoZ7Dfi>Z1W^jkY(tU);#rUg@#k!%Jt9nEIEuI82-q7d5h0(ls0coR zg^`jx_rWkWj@0pFGLLOyMC8LTMAi>QlJLAtWDzxQV(5feCX*Q13%O%uMzKsPPIaiv znKaxlTQJkgSxxuLP=Bdlpk|Rf_WOYu1S*teKA<{cvnd(HX^5&o!AejK3CCG=OSKs} zLJ!liiVS&)$o(`3;Wj=Um2G8$KHyN1paQz=dq++qF%EnxQ#rfDM5-$1y%ChN z+TfX>D4uFior~5UtvkX1y$Bwl5y5p9R#0~CRVzv%?yp6NQ1fvLV2*`BOi3FtnIIB6 zKuK_JOND}v1>&&ny?y)EDv*%njmQsEscQ41t0TCw6`zDOzX23VBiReDNq`^dGW?WfZx6 zwhN^rgDR4_dv+y_0&<-f27nCmakkqRT2DQZct_1=N6p#p$w3ekPi9x)cW<7P9s;3~ z<11(yj`3pw<1{>?;V(3>0u3uPtkJN=e6XE-Rxo>nUqXXI$AN|dBRUD&cc3Mpe!_Mi zG|zhwnxnU{oe0g*VH9y4JF~4E0{$8V(ubaO${~Kq&oO*gVBaz3VX|T;cwMy<9LgZ1 z&?>Law&M9UJ1dU!%XPN1lt1OQ*;=B)fqOaUo!`Fhm6I)ViYEX3ooV!2?BCzibR3(S zAI7OP8d+5v#YVMnA&f%lYvmbiW&pK%n6L{#Qb;i5D zbrkL!;Pb+p30NSw7IrFXzb@X>0bZCo|!X;JbXWs%gx?0KjWc~Wl|HkOk*<7kyP z2?JD^Ja6WBUUvUuzU_J6rXtK%^mRJ&1`Qw4@G%Vp(1n4L%PQN#B-z5SUD#gV-r6o& z>M`ZlG2v#mMvdZZ-S&;gt3+A1J>oI>=9oZuT%>`p)he&+TX^c9(y&d#&+^xN$*$Wa zDp{84Jxe4cU*b8h{v@B}OJ@YqE0#_-Tzpn37o)8j^Rxc9T~>qJ%L3`tT*EU3K5tk-83+>5Xnq&n==!Xw|#D`eXMx zreD=t_0B;Le`pSx&Gy%zUIX>$S?^h=?mcciZ_wW&_eZC+gD<=7=CfYiYdm?{?)2P` zPnW)K^#15|dk4MxlX`1uOpGjut(y4e7fgZt8v(VjK4pP9`tB--J7RtUmkQi zFT8`U_vPcG=Hfx8N_Tthrxp&Hke~?@nh>Dr=GBz{n(|*$>TAM~CL}DN%!1C=@vSd1 ltp4FHIFfHLY^<&pmcPZ-osA73f9bojcWVQD#g!j6{s#i*YL@^2 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/_bootlocale.cpython-35.pyc b/utils/lib/python3.5/__pycache__/_bootlocale.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..680f53ffc8f6af9f87f7bb9aced69a8773db20c3 GIT binary patch literal 1091 zcmZuw%}(4f5FTeCyX+4tlooLdr#2F74*gLjDq0HkNDoWZvX_vJy^D9VaWr;>g4#>r zW%?9-g`RWmiC5^U>dpzIF_{(~)*Z#Hj_~gkVz#sVU>yZ7PhQ1=;07F6s z+<}C_kc`@PVCaBgFm1qe0eAy08Q=%tWG@1D;fkCWA>DG` zj4|unymvlHAHi3<*Sg;$+JV1x@q5pk%T&&z#MAjm3*)J=XU>F|s5nZ5H&;BTDc6E~ zk?~||1ZF4*J#8X1dDea|=b1u74x^&F8cKC@&)=dOoMb0VjdPhE z$ILG1v$I2EpN3v0FaT2qm(>Go41DM4+Pe5o*$nHz!V`lPfWe#v$D%oNIk08 zKLK63^fwGpDHFtr%DKT@n_!{>jd3uM<}4reV>J&%5=Yy!NTSl)SrN=cLGIBk$c;>N zkjT;NmqAvTGnKyRzY4+;1*}Q>Sy8T0Ce-t>Kx&{!sSz@rSTSi^6EJKM-qmXN?rPnj zh1C^60`Q%|H_{a$SW(%s@uqCIW~(Ck4w7;Kmn_%{YiL@_GOf_i3k1;UvWIEk(IJs^ zbrA@117-oHBx?pU2WUyEtj`91ymV>iq7zS6Q}& dW$SJIPwms12R>9Ve~%2pc<)*Z?Q7~mRRh9 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 Z$`A1h$JbE$O7M1Sqz6~2k?DcN{{x~0xorRd literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/_weakrefset.cpython-35.pyc b/utils/lib/python3.5/__pycache__/_weakrefset.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7453704246714eb6865c43027c2aa571b3fd75b1 GIT binary patch literal 8468 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/abc.cpython-35.pyc b/utils/lib/python3.5/__pycache__/abc.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66cf942c1132f8dc330c831fa7254f8117af7722 GIT binary patch literal 7912 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/base64.cpython-35.pyc b/utils/lib/python3.5/__pycache__/base64.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ada32673590ce647ff92bd92ebef26be2280ea25 GIT binary patch literal 18458 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 E1344{vj6}9 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/bisect.cpython-35.pyc b/utils/lib/python3.5/__pycache__/bisect.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3873f2a4b5cd5030bba5d89588c162f1f8951e98 GIT binary patch literal 2881 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/copy.cpython-35.pyc b/utils/lib/python3.5/__pycache__/copy.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab5c1729e80870a0f0dcde30a3e208dd5c17864d GIT binary patch literal 8154 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/copyreg.cpython-35.pyc b/utils/lib/python3.5/__pycache__/copyreg.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..350a0ad00bdfa89f2cd4aa08b15098093db3bc2b GIT binary patch literal 4599 zcmZu!&5s*N6|d@U_t+lKM<(B!WYfDO%UUG%B0>~kvLxDM*#itwCcBdiikfzJ+0)~m zZl|i98INXIiG&;C#0|j-A#r0RPG}GO4cusn6Q>-xatXip+8>i4w!2(i_3G8D_wjqL z&Mqv}|9N)cHivPI;Gs3Lk5u_;B2DGa(Inj?aj zQfz{tN|Y}#<%m&LsEUvq>56caEBbYz9}6kvlk}2!9MwcrXTmw5Y$871918D*)Lj|R$kk?O{&io7_je{#)Bvyv)K zO&+8n=CdyG)Ym6;VGG=eYSw)izaUjJDDa<*M!wtCqOG$&dB@TpGJ%AGk(XR=8OXRk| zE2t%g)|=Ma{uQkv$QI+o-C@cdZD)P9ziqrwZ?H4qu30B zJlyhgBGVQGYTBD~S;r^!Z7!8M@F$!%7mp~z&pLk=x`rkH{aIUQS>6tlY#2dRCU5t$ zw$Wj`7w22UPAklI+A0Zy>-`|snYlg~wfkxW@}S=y=5b=$N!+=4qdgeqTUq*@)_2=s zHW+EuYoV3cfnvtg(FobVx9&7#NaOUOe-fNkdJ!E`sd$S@Cn~#iN?4L$zfp?s~5*rEw`hAd6`T(MTfZEZ$#{jbD+gg?wmq$UGRGvo2nhB$Pw^xSl*LrY0OS3F6jc>E--i^m68#X|?K z&>zSg+d2Y$NU>hNzz5f{YQ5>My&{DcHQ(Wa}o{7^Qrg|!8NAP{1Qc6G!d@7wfYAzOwcLBSaV5~$Y zY{omlui#)iI-|~3V1hi?`a&u4XZPR{tPgtd~g$s z%tvShy!fQNBrBE+udZ23c!PIKTQ18j`HZRS;29oo&d;I!UtK(q)iy$vf&EKF9&PnU1b= zYKMY{J1Wf$EtvU+7iJnLktd@TuW61?YtK$wxcyx+&+$_)OodQ;zK=3%d~ip%(4XqK zf)~;kAG}UT!a7Erm&y2$lQA%ZQtqd|m_&U^<5BJIEO3nrAX^S23Fsj7*FyIr4NV2Q8an4TUjBcFXfNR9X7$21(zG zvfY$<5dBXS5GnE=Dw8FsI8ZJ9R7a>mX=9|I5Gg9f!y?Ui zzYqD8H~>7?O#M5`2taqTDDLtZW6ca^Y^NfVtM9}{tASPqzE6x}JyulE&8bM9>L@nM zW?ZSZn*3J4$;ldQ4BubV7vahJ12o0F@9(OhuT>Y$ZvnL{{#A3;04Hc#6F4>JOHv!S zracO&+HfrCZ4(Qgop};MwDvipX8w>_`K}=v_8%?vqL0ME-8oh*}%?js? z!l9w#0a~Al{&Ub8!XwcDCQ8S4<&tIF%W?^rxFl<68`8Bd%S+a2n-J3mqU!H~ehOd& zUKGn5$NxYFRRC}czD|+I$=R{{Qe@wtD-=4ZB`j%faM_I@E;BgRNQxPXP*ev<@H_=Z zeZ*->VM~L|7gOaR()Kz9Gl&qXzh#aU4sTBX=f^QvRtVrgRDWYCmsk-LSmGEJuUsXr zJiAJJH0Sm&JXAeIA-nG6+5~S7vq-h{Ih;Cv{rdHn`zL6?qZ|w$)vlDQt~ zZ$qqN1=Znmq<9q}OVX}-ghJ6pm<)0AxJ4um?ONF2e#}#}jp;w&G4G-gaD|I-l7>8u zuY-SAo*K7x`G!AC6WTK@1Fp|(Tb9C8+uFk1WP`Jxz!%82D8qhCB_lZx+k9q6@-183 zrYo8yZkIMBtL}`=bsH|W-n92W`aGTJ7+7=MV4n9WuDZE0ITcBi23z}AXI7#rX|np5 zh1L*jt2h(uR^O)H56~3LNAw@k)wAj7k785>F!v35u( zb|XHkCK=u)Tv1&uJ@R9sFjOeGsN9w;*IKGKTw7LwJr%oQFFTEz>oneL*bTRF%Z0M= Iw$f<)53s;6LI3~& literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/fnmatch.cpython-35.pyc b/utils/lib/python3.5/__pycache__/fnmatch.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70fc0d8566bb753534b93007d11bf98ae731f6f9 GIT binary patch literal 3178 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 B$5a3S literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/genericpath.cpython-35.pyc b/utils/lib/python3.5/__pycache__/genericpath.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..826dcfdc15924bbeba6a52fc9fe1fe9d63305af6 GIT binary patch literal 3979 zcmcIn%W@mX6}>Zf5(Gt2l10;wla6AQHMR^yb`&R$@+whcX(Pu1Q?g;JriL>OaEQUo zsJkHpC~_0WsmdQ@mrXXQO8&w5joGHM@Gp4fb9+b#qQz9AR6zE{?e~42zSvw_YkhhB z;>Ya`qJPrTXBGUf(Dc7RBBDO1Ly=2~LwztM?^55Ts6tVdq8deYiW(F(DO#bZMbRon zZHm@txJrGjImgR>kE5`7ofj~VUFUf{^Vq(@+nL8X7x*;hao|NhpLv{oi7#RvSG>fx zGmpD2^Igp2(oMdd`8A4OW-*wD09zEjVtEMgDn;M1JOps5=e;)nQ|mW@*%w(ZRbb*Q z)gsKs<17^>6XQ%tVfKSmWT_M%^jh1QNHZfQT8b!EGBnAoBgF1LPYRvOFdoDqwndXf zY7vj~Oc@*?MUdwz%T*j0*&0mJu)JxYvN5J(eY}O2j;a# zMO{u~ZFJEbN&|7n(sDTNm>XNJfmt2TWl@VYfXO>R^mxz_po!&gs)}jRQl6 zFU5zyIUH`I=?=(jgACDuLx)74JLEh}FH_aHG-{FZ$Z;G*NAKg*p^vOxEA#DLsg3w- zUqUA(0+F+oOX*><2hvOwY<)LKV9PXRdCCBHbo1B+={c| ztT`*r!dxy!7v{Q!&g|kd<~nj{*H3tj>$Sm(dha2dJpdG6b)^B#G&+D#ex^EHr7@pxxgD%Kwd>#D0T7wtJJO1 z=>i^-A|BYhU<0QJMd&qF_woGBxX*rR(;+2kH`(@Z7@D>Lu2TLt;tI zCc1B+ouwv+I{VLtI@@YF&JP$QocWCt(UHoWSRxz17wm)UkestzMq+O!GTq@oz2;N~BqX_kfDMQHse;@w^nFA0!#@H``t1vJ5s@Lvkt9uR^6?0IwZa(#ly0ECQ#f(q zgr{SS^WYAe=A0zAPF1Ikzb)sybHNF1mhkv-v-Y`y4$N=>3N$4exs-k1j=($^ad?FD z`Q|hDYCg*Zr>)qV3@i#+Fp_D=k3SNg@rlzG7*j`L#A#-~Bl!gA%6F`d#X&r9Kd`YquX?kQpPS;>RYOoF6TU`Pu@ppnv+T#{H(MYeZ<`bs}fBkPM&m7+Fa z&z&e!8RR$mApb@kex^B(mesKy!Wcgl%v;C&1I!|rkV>3DE~$4<23^jtqnb@UOw|bP z;WcIaRqSk?4)I^5QI*u+nL*xe9yMtCfDRixH$vR}jrVXD^)IG58IhBmqJQQYPSLte zQC^06*|nVkf}z~;9u9o`36j^!i)oa{dtvt)3j31*; zt0nNcvzSM%A)iQvdWaMHxK2gF^Wzes0>(SdsUg$ox`>Bqrm)N&ae@I@q?hWvE7!O} zyN;LLcvpVLUt%20#2$_q=VsRVil4driYc z1i6<+a@t=lXUa|!SC`z{$y;l?r}DE{@iiL;hh?}&zYIc+b*GN_UPqL--4?i4obNj4 zTwo~Sht)qDy@q_Ul zJ6^Hl_`QTW(C$Jhcu*sF@G^odBKn=(`H%zf3r1{EV}F7zrm?8!)$ZTjoxgciU-Lwu zhQQhsc1AtShDHG>xXzv#2^i;}F;~^Rb2~`iz?yi<^Kc?+%#=$RED~{AR_zNs*IvD7 z#X3%rb3jM9#i*iY7Z)qLvs~Kh9G3M%M2hzPqUrk_U%v0v`c3}f!@Z&k;dH;gk2Oa1 zoA|b8s7)C2w42WR;l2zm*)M^R(?Y?zjyfF8tvj#bbx`kN+}kJ`z8__w z?=Kf&z8@qBh8TKn@vAuB6&GHLu}yL6EB377SH)tAV)Rpt88!y&@k(@c*{9IYMT&cBJ+wJyByJr9D;2Y?jYj1u7=mUs6 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/hashlib.cpython-35.pyc b/utils/lib/python3.5/__pycache__/hashlib.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0205496ba902a5cbbfc09ffb206f1c66cf2b405c GIT binary patch literal 7892 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/heapq.cpython-35.pyc b/utils/lib/python3.5/__pycache__/heapq.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35e8b35e4997cd69dc2cbcc519cc141ed2be9de9 GIT binary patch literal 15089 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 H0P=qU+q(2j literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/hmac.cpython-35.pyc b/utils/lib/python3.5/__pycache__/hmac.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca588c1bf801266aab5a30806956d6d712431bc9 GIT binary patch literal 5178 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 Y`7v$M0H=lw=nOKQYtFSwt#VHN55nrs-~a#s literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/imp.cpython-35.pyc b/utils/lib/python3.5/__pycache__/imp.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e70fd9dff2bcc99d077bdbfa736f191a3079f5e5 GIT binary patch literal 10502 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/io.cpython-35.pyc b/utils/lib/python3.5/__pycache__/io.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a056155b22cf72b3085750cb9291b98cbda2162 GIT binary patch literal 3505 zcmb_f&2k&Z5pED9Kr8`L6eUa4??@MmDGI3aPYwyoMbac4mTgiYB{N=EYCYH)03+`1 zz%#p~psVr{d4xPc&Z)cwt~sgl205jBW&w~@(jl$@g|7MO>G`_*>)yqkRx9}D=Gu>Y zEr5T)mCsEaZ{yGYy#gQrLX;H_(Cq6K0Z#0rQT zAXY)#1hEGFn-Jo`TOe*jQiTvL`0+f1XbQ)l(0aN6;R2*J2y2kmA*@5X2;m~64G0^M z1`r02En?k(o zE`+y1tV8$-d?W6WH-AC@=7A2}0dXJXJiNXO@2Zt>9W@@1v!t=$H12_1hj)nlKJGmv z=V`Cu_8v_39^&33iUjQ~yS+z~y~iN$!)pez0q-hMdGi~P0mvrE7RVKl%g|eZy+5x( z_ypubr})Gv{!&!V-r(92$W`dgO?4h$)%k1X?58Ib=hKbH{2vPdF9(t-%~CCjM6#jL z7fMLWa$J5f$_F}QD$Awm@t9UMv$>HxWdojxL}mRpLjys#P)V*briU_Py&{WqMF%Yt zvZpdB&<0w>xxc0z1UtFABG*Hvdv18xIc5VT4L9*%L}v*C@8W$t&RLgR$>M}t%MOos zanfdodEm`^Rn$=N3@l;gCE7MS(z)DZ1AQqkq}fE%+}&@`cgr#zSUKc|JJem7UrKZX z-4y5`Lr2-AQRrTO=D+@^85Ts|gLc}~{$EW+oXv36qbHs$k z3v*_R;ZU0#G4|C3UWcLc05CZFZ*rNr%e}7z@`PWOlgojM2N+qNSY`>uh+V3D;No=! zbT9#p@iqLCbw|0+;4CT!Dv^iB2&L;Hi`%nX(1nr=0Xi||0J(O2%6fRxBGTQW*ONwy z5}F6)&~)7n1r3?NrwAtec{aUigEDD@8Hi0bv3iDKr*uu`CzukNQ%a_5XD_%i%wHFH zb`l{l!I%-3Mcz#?`4kR6qT^kS5i`;bC35vbCZqP$mlNFA>BM_XY-!xlxGV*qVW-Dq ztPI5O>cY0!F2xz6iaEnbJC;nG#!RT}c`8$FMm`@@3CMl-!wMK}veVpP<`0hp3Iefb;&geqhxOplq5Gy^P!+L^r$|7` z8I=c?V?OB&lqA(tu`4v6eVrleU4tl(Tk@XT&$A6@gFMKDFU788g~cJa>|Bm6wZY-! z7$!jQoc}He_Vy2UUVZm6+I@9!uzwPr9)|ltz!=+c>}RpYN>`cd0@#?a^Y9|UzT{|* zd45}7()GA}qx;lOxkIL?#g&!To`6MUzJF0kk$!USj6FlNx=U9gax|)K+hVKPz&=8z zhT2+%ylw|?|NTv&u&G>NpigkMNZD4OR<$k+>&8(pw1s}nV}%5D$c zLOYW=X{EeCrXL^zi8&RY?wFWuaktvz*Y4ew*=wHSW8#Ix60_Jdwz}ogRX@fnyNQm^ z9l2av9nVwJ$2CvFabwz6#x>vF#`Urw$BPqIj+d`fcQ*G8W;XW?Xf{7_&F0G7wTf}z zYm6RCP*Xi3W*)#1e@nit+kk790PhN{-|uKDFf@wG3&@GVX_SO1~$o@5x|{ zzv+ioxAA8mppdAFFL-poy|3Uqkb57)7r)buIa5WIqm9~lF^Z^?qi7sNk*@+AH>2p6 zf+yupHBx$9kIJ0Yqe$pDiv9-X5gKvgKRdOKk1P zB<9c0vHNTLd^qZ0ZKFCr?-aR8Y$s9O-+s~YHSl@+%Z}3R;mE=K1Gz-bHY;Hxl{t4c z`Kvvj_nw=(1b&^wJreg(U<{^&G!JQY>Y*P!rZqC~E&fVOzZ%FQ+Q1Zi5Xee&o%0_@ z%}M!y)mnX}(s19K)n=tR_oszMwNb5A@VoG|`oMi# Pb1RirWp!??vRe5sxEaQJ literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/keyword.cpython-35.pyc b/utils/lib/python3.5/__pycache__/keyword.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ded8f0f5ea558900ea6dcaf534428c9b05ed245 GIT binary patch literal 1987 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 PD-~+x#-+y1#>f8$pCZ8G literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/locale.cpython-35.pyc b/utils/lib/python3.5/__pycache__/locale.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44f107e26ace0e6b17932c9c37cea0ae3f938e33 GIT binary patch literal 36575 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 Nc|3>U^7r!Ze*iEcddUC) literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/os.cpython-35.pyc b/utils/lib/python3.5/__pycache__/os.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d36dc21ed485be13454fd8eae81e83de1b4dcc1c GIT binary patch literal 31314 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

x^tM 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 aBFfgB)zIgl<_qBQqBZx@LfWX+^nU>Ubex3% literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/shutil.cpython-35.pyc b/utils/lib/python3.5/__pycache__/shutil.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..878d9d9bf2840e9fa9fd2a678cafd1a98a3d5335 GIT binary patch literal 32686 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 H#_#>#C9Ke% literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/site.cpython-35.pyc b/utils/lib/python3.5/__pycache__/site.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8f230455cd6a360e6616525ce8cd78f8b74d99c GIT binary patch literal 22506 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/sre_compile.cpython-35.pyc b/utils/lib/python3.5/__pycache__/sre_compile.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..246bb73af33d101e4e63b50c19680f7ed435b838 GIT binary patch literal 10967 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/sre_constants.cpython-35.pyc b/utils/lib/python3.5/__pycache__/sre_constants.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a91c8a17cc121fb718d3a26b001f4417356307e3 GIT binary patch literal 5988 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 USZ1W_7`}g`j%WINwq`E=f6M#xkpKVy literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/stat.cpython-35.pyc b/utils/lib/python3.5/__pycache__/stat.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..336e00866eaf77f5db73bafeee5d913ada78dc57 GIT binary patch literal 4209 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/types.cpython-35.pyc b/utils/lib/python3.5/__pycache__/types.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dc245909dd57ec00fdbcf3fd6eb7af710e36ebc GIT binary patch literal 8787 zcmb7K%WoV(Dx^i20q zO*Xq{t9wKZApyZkc>u`<$swm)0_3#FB?y850fOuyK#)`ZfCl!Ila9IWDZk%WGtCi2 zYVD?~rXF8CzGr>)mCnu2H-5db@`ZOvssB||-#p4Ukg_#fsX(a?a!UoaiY?Vap`rpu zJw>~%!ioxQ^#tt>%RyBIHFmM3I_}-ANp(i56}3An)w)zIwcC*DoC;=CFe}qGrK_o) zn0e+^P**`ix)xNp!1fLbSQ=$4w8+Bl8Ma%u1I*MUEb=F|>MRN15<7R71$;$XR;9eg z@(#MrO7)y{SyEnCqlOC4t6x~^v*ea?P~2-MeaFHVV&AWD%3xld?_7{k7i84Mae4Pu zslG^IasOWm{8y{5Xir0y-KKIXUO-+~Gj)zgaV zT$(hVQNfaWin+h3f@Kw~2z4&2+rg>|)&%`ELH~^j>%OHrS0?4FYPY32*8qK11?L3% zoIrnD1?ws}FOzMk;1v~IU^%=_TyK)rZSLo8>*C>08#lv#l!R{L?}wS&Pqo_}Msa>U zO5A)jKvRC-&s|@K$(7sQ_oZtvLU zOtpfM#q7JWzuyh~_o!WF#_CBka*3>t3@Z0WmSAmfKO-qlpWF6!mN|@+QI?)T{=!cG zlK@kMeA#Thvjj#`dKTGpb8(FuNZCbXAv6&NK}>-$5l>Nu9jJg=4(PYl& zAZw|;y3%j5{HRJ*wjMc?0acFqCCOnQez2uOKZoGEz1Yt(H|_31DcoR$Ek`{+hI$OM zDA|GL0BA7K=|D#uupj2W3~6tJQu6~H4xm?_G_`7lLzIhZ*U!SNaP|&@tWyskhCQ#F z2BX5^=)z92DQXCD>q&TE=J*~FC8w2r!D?C!OH%-PgyKh9kTyb(e?*C1dOASnrzDqL~g4-IZ*WvA%R;Uv{2adCWQ1z;rnUe zru~=DzR_^;eG=wFon-FSk|`U;1P=UOxZ#reEo0i=x}FaQacG8JE5Wb15pCls9F{e% zk)atUEP=;c4aTBV0vLF%DxiMi4hI2b27u{cG(l(paYGYKGa+G=cZU06lDh{mk*=SN zWR@%C7O%MI)FW4i`{{!)XuBWv-6TCW7Fd+iZU7ro8m!hrf>*bR0ipwaA<^!Mg)DxazE*X#i9ol=?!Bb=W&{1=Dwf#d9L+3 zrfOC75`Hx8pk86N%5069=>CxbID@u#ki>$ixu#XOn~?ftyJoE*Emjt-MQa@;O~@Vx z@_SATzC;6r4x;|>W6I{uFaJP97p)aVd3IDT<^q<0V*IB1`Mk7zPBj=J z93VqFwSy>0LR~l<*r_uY9v)}Ss{p=-lyRs63+BO?MXQ2Tvnuu(M-!sQ&dEn(eFG^Q zAv<;+@gy=1l*z?zJay=-vfVhV;;9}vpS3A(6CUZro9xWe*9#WJHG(_3sDd+6ZWxDX zsaU&d?D!UK`}>f~s5{I<-+}ymlA`2NR;6w11i5Jf@*8sJsq1+=U>IOLuWf9`r_?F@ zBk!`Fjs|(EH*iFN|9}sS`&G_5akzM*ME!mU$BPcv!Tm51?K7Si$KKcJaEE#igJ6^k z<*9bFr?%^URCbHkMtk66h)kEHdf$&X;K0GjGu_w}<}5dKw9ptyng_}pmZyONILx3- zCPcWBP19g(lHUQ0p+ba^?T^= z!~D0#JKOHjfbiol(-u-jX@~uQE%D@BWdT(jcqrh6bkyJq0d`Fba>%aY*-HRenX1Zh z{^1}sXRKHsc0qROF;}*WRnLnuzY7%y>QHDLbe?ysHCs4+NF4G^@*s?h8P5yS9(<{J z*nNGVBiLFrKyT9&y<-8@-^8Y&-wpie%go+j_AO+c3c!zPHQlu+iE__-2#BnSOj&jQ z*~`|VefZjmiqoD9D&3F@#?crH-R_`3tc4U&-)92WHiDGM*3w~2y}Uxl944dx#U;D z0(>e_IBQUV)P~cx6&U`Jd`S#X4%5}!tJ5ezO94PlgEMf@f*C${9f?5BK~jLR1_NDxr?JCw)ly8IFZ z4DeS+U}6gld%hY1veg$55VTH0V8#fL{`+GXoTB(+=+>O3$<&M+XqpWp2;XL@&FnkO z-emR`Gjd0NpV<-pq(ma>OUPoRjJ|Diu4b(_7VFI_{%Xyt^!CtEejIZHDffu2q40L(@s^0^Jo&qgVeyCV#~z4VhaL-Xqos}Y(e-9EfY_R zEpsZIRUO0!>#8%a!iK~F=NJJ*Gz@Vt?g5dp6@@Su%Lx80sSe^}YtW>##gcbBgmw1e zM}4Mo!G@tGW%%*eLE1vfK0;nDtgvYjx|*D&qW0>N*;=y>U);~p(K}5YmW4W$9BRo#@xd4|Q?~vgdKkz_0+?Yr7%MnCj&I`~ zK>ZWaI9zpj_65}1oT6k6WsvDM$M9-5y*TX3Up~KnmHzF)*qU_g9Ct~W#N!50{|FQP zGiMYWt;2IK?m{N&@uJF)zf3{{Dr32gCnhuroP_{Y#1^x#Wf{|aj0Zo)z<)t{$+9y1 z z&hp$2N@b&+pU%3$DN#XG#a9_h$zzG9$)B2`UX2F zW}5ugBziH^)1nQaqA;IC^jBpAq^lPo*kqzhMn9@WC(&CK7LM%>hoMe)(^kCl_t1g=7=clAfl&ToL1&scKgEw7j)jX5luiui@^dsGqn#dn`fD_ z;VGk43IE-&TAXxo_5glwxd4=wV%15`!m|@9t!f26HKooW#9(43z-J({z`mx zq6jugd^`J*V2P?6|By5Gf*o*lED&1icMXkk4F^x2Ahb6aQ=Kh%?6g&rO+tKXFs9&b zQ~wlew;KBQ@KelhO%Ua2uYVtHBH57D)a%FoPNpvs?hLStV;~I*WuD*d74_0jDC*@T zB7?0;;ULnR6}7zs{&pPFj!!M5@sVFp%#7WS|HBI67b=?}(ARAT9>R*#s2sjhQoa3d zoPyZdd+qU{);jh$roMK$Z$YSeYs^Q%=Nk7uy9LHb^$x-QkZp574}0sS!z3@3P}w_3 zlXz4%HPDop6^kay2v_y?vgj~`j;BV)>rz0ZDidN!WL)Nb;OnDGKZ--vWSkThFs>iz zERP{xNm_88I7xHAE2H~53^79{m0lRfQfYW1pNNKJMU@oDa0UBpf=s(P&tX)3ED^bS}e;G?3Quw`e)FZ!Bs0>!m^A%vGc< zq>Q)R9TDFzFHOvWyd3_Ct{XPO=+NIF&|HJqRkl&bb}VD&T6ST#zf)MpUB%xv z-i@Oy$J6QHy(*MP{06*n4KTK~DHo8Ul8rKX6g78J{3ii;>_3q=&Lbw@<6_WB2KM39 zp1A|B8z=V1I(;}IRIv~-NXEwqpEBK9yekdclLrua%ryEii@Eg2%yKG z!Y(9FmYB`E=1}R>Z_)K(V`uetnBNWan`NL@K=Hn@6Q^D1i|2J#?}Yo^P(KeMFKzPB zAfau2iObhZA=5BLxZX@DeVa;OL8cjS5JeXOL3GZn#2_B@@#KRH&(P+*^gT*t_7h|{ zwPxh~1LB51oN7oor|}MGuh`2dv#kQ5oVU)P6`^=F%Qq5x(OH{WcAHBpZxd$ajph&k EA6Q+SS^xk5 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/__pycache__/warnings.cpython-35.pyc b/utils/lib/python3.5/__pycache__/warnings.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e19c6ee21a287482a766a35202ca44682b025aa GIT binary patch literal 13092 zcmc&)U2GiJb-uHI++FUH6e&@nq}ZcBOKX!$rH<`JmQ|^uWvfVN*Hl7zV`VVh8B$9w zXQ(?viMtU~AX1VhZIT8pnzT(&v~PVV3bf5rg91fgi#`_Uy!J_XGElS+27>nc&Yjs^ zNo)$VC_3cay>sXOo_l`2bM73i*Q6E3cruqVh`08&h6cc@^bV)kayha;(PxaaMSoQ!P}+V~v#`qd6MZm5;V{>2pGP zlkDViQMF1^j{Z?N#cm(xRSW$eQr@(BjA>w?8IHw#MZM!4R^AalAoZ*25o%-9S>+v- z8W{4J^5!Iu!Hz5MgyhltN#%V?@)-LC<-I6*3~4Lxl;klaCVg6YXSiA}V>(+H%FlBB zoZJj1aZY(Ju?t3Afv=J}Q^()i>2}(k zI2n)bh7ZyJk32 zi>tx3D#Qh0hL04sMmCyl8@c`)?}p))9f$S<-HCnM&8Wg6*Tw?;H*M|jbltXZch>D* zxNCPiTYhu7QB3lnT2hK)&(}IBN(Z`#c_(ARwW2 zuYtSmC#7yD@PjZZup}w)>Ccotj4nR;XiQ>Tg`M8wmfu5lcWZGs?sTKYZfEWF&n)i9zQ5XhZ84*FbEl^Z7@~?h znnI#-HLGIPas?}Iow4dxn`_`ThI<^hY{)l|0nJk4g0VqsrPd2-cE2c_l9QcUQ#~jJ zQEAYH`z7_T#LY3yz`EGM)!-QRBQN{mazDVMD3)EpR_d?Gh8EN#CHoCcD7!xU1_vr) z*NXk-joqLfcfiotCc}!OTL=o0>Ib61zOh1K+nHVUfP$g<;b zKO85ia1YvU`>x*_+wfyPC6%}L+WrnlONvpfJ3EarO#`4OnUI3|5R(}si52OieBdUU z@2q=ojDYaEn z(JLxOc||tDQnO(8uURSvwUOqjD54uu1FC=U3W5UC;*~3}#8EqR;?_e2~NOV!9&PkN`@;;A!dtm$or%bTw#ip z#v%8guv0gK$cNf;1KST`-LpFZcAXlm+lfS*Wvoqkg&Ktv6-Ag(il&2+D|5~MdWSh7BLt}wG(v$>aMmA^AhW% z5chU`7H6BCjHUBT^4O?k+;Kh6F?3DFU=?;~O01iWG0a5xeMDEu=%TAma~@}yJfo;+ zgkQpK6jhCC>ZEld{d)m+;)K`$H7GlVO3!y5QqS`nu`lBMWLKXVI?*4d0E7%5W{O@$bwX7FI$)}jz zZ~+)U@G{Yjnknc1-)oeNQUAwE;r~ateE-lx^Qf;%EKQdM$3Ilj#&0tWbcf`{J0Z^Tk?cl0Z&cPK@t;MXDE z1RR3%@yY;ig2Oifiy#81l~YzQCuUlytuduPcLdjHnCME4} zhxefszUX#$eWN%^P#aJrLZf6VRS1!@y&D5|dX1cUQ2@r>epcj3pk*#;8i~r6Ao7O* z1B=!SfMMMd0tyZIniu8%I_~HMk_{!o3sJSy*K_JJ5Q)s)!0T(*yS}TRvH_VDOjk2+ zN3;k`ru274#AAi1SjpDYIeB^Ww%`#VrcW zhwF!#B85_cuPr!rrIAl+&U=FJgqZ#L0phcFBj2;vdUhzU?HwJq0q9{|?7Mz<2Ur6W zENG&-r0O_ERRBlU9OvGy+f7mBnB#b1+i?z@{%dIKa)O+G4Pa2Sq|JHr%H!t72*Fuz zuSLFFy7PhBw^VO})Xy02-WY&2JSH&SZDs9)%lapX2g!9v#YfsC`m?On4?zX|qtaJ% z>NZ;PUPTGWvD`m?Gqtk|tJ%_xf%YzG&IX{l>cFWpWRV#s#T^*kSW|d3-3E}g;OdPi z$stX6Xn}JG*&Y&af-gQt#!Z?pX=$u+Y;YUTa zpQm#Ij|6~xe@sDQX`wJMj2E0Epmfk#99E!X`l86Aj(G)?jYsi~^gj{~!ww$hGgQHO z3l3Bazzk50N@$G00`?R$`!^L=i11hMEm#F)xVcwM^;~ePUgDLRY1KA`U|s!Jr3`^t&Dq^|rfbzt$k&(iHo4#-CJ* zJ*RfSHVvsgoJ#yXLMhG5&Lc7T%+ zq4)waAU~uCd%l7kiGDaBtK0yohL zU=c!CNOQMq5UpTa8)brM1@9hY*vZ$7kkr}n@%}_N^rlDyNO~It4X;qpY z7VU7rq}h~80m@Q9N%V%S?HSmP*DH;38Z(*v@|WC&{u7r z^9k)ta;Pd2tNDbAqJK1#%haW!VHD@>WcDJ11*6SV+0_knkrc&KP6|F8z@)N_4vZYW zCNK4RC-7*35qJ!B3==$lQ*u%%VKB#y;ZIFmL)ux}jnmc_&>Ha^0fuMTQyvpYtd4kU zt>PAa@Wgr!GZ6y*F79X^35A!8I1MqK0xO=#P2%@3o=)QF7=CBucM`vvEe9-0#l~A$ z^fWT$A2DOFXAofUCgMCHq*j7D$iq7KZ>+!;yYRyA`f#odx?0zC>^t;Q#DUkWa6OIs zN-%aC!4p?vW*%tK={A#!p%ns!Alw?ljc_>K9f)IT-D!uOpNzLdB1s8WqPQr7n26WY z$}E|7I+4S`0mpTu-k)PRDI}{|+QHLc*<^{qvbld|+4}%D=a{Fxt0;YuY>7vRA@YMd z_iAbt4~*Wvc>}vH=rZv4V%rcwz@!)YQE)y6E$)Zi`~Hv==^TmMWT9(rdrM{qv-D+5 z!r-H8`zut82u4(n9x*_&%cjdn+Ibe^A_O{yTlV%}v19@@q#|khn5+k) zDx1s&Bh39W^$to5q%(24@NEGXC^RCv&LADwVH2Pua~L+uq!IoB4tl>qc_!wuRP=4C z1;B(&9Q)+cI{HUx396w9088-hQ*}_X_qvK}X+OtMY3a^c!kxH2f^x)};jDkE;t7s? z@26^YH8=&0H6d!JENTaXPZIiId}y=}gBf)j`fzhf;1Dv0SWH+}B&+MsSjgaU4#PNl+9NDfIhK zEIMqM))Csmx&3k)ke-!E|1~EK`-fr^kS?nT9geX8Guy<8N|h%_)Us6-%QiwvF`_|K z4-v3{4ju!pq6bv#U%H9Vjc*SQ7Upe)47c4L;z>Z zku7lwk_v&9$Y@g3Zh#o0NR5CiOv>xDskbZZ&PF#}1GvLUiDPhFl1Iy=2<+wSq>Nyr zKm~Cx?&~jd^eUW@G-RkLfsOHD+)Lm^d#mf;_q!tFiM0odULSU=YX`q7LX|jf`v#RfvF4PtXH&&{kgQ?+U*I$-us$$cW`-Iy#t> zoD=Au2yzhxO(})pg5X#R=WWQdBvaqe><}S7=G8hBfsrNHG*Mjo31_sj_f2Z6r8~V; zqCbM{SJnQw+OMhoy4s&m5240n>d{LU@;F4G4+HD)u_BB?_c*h_qCZv-ah`2zzHcGV znu5vr3dh^fH8=seYhgNgB%MB1@8A0v;1@%oF3@vHioatqh>10q)n(2RE%DREY;aI9 zsWveutU{<^v6WFVe`8_&(1Bmq4p4&cfCi*}JQ)U$s@xg#7MbYKpk@Nr% zhY8klK`f8s^7!ky;lxabm>NlYNVW}q9+Eznax!hRh(qXeQ941C7JY7xbP@m!aybQsSDsK7`+4Y{WDMR@ zgh01w9TOL)y)se!>X%p<;U#5)Rqrt;YO$Vbr8F4N!@*V=+Kh?~2jx7~$dpY|`(QVSJ1MZ`iE+2< zu62DmuGJf8*_a+`wULuYo1@)l&l70`D$}5a7{DdT<7ilahLz}5>9?4yB0*3l^jf)Y zAZM1XF-`_mTR4P?+2k-QN+KRB_wr-h5sAW6WB#24)TIhM2Jf^gK5GrC4r&e{xR9$u zwVgoe3A``nN@!EH3Wb_AMYSnUREYH7%z-F-$e!!@yZ~y9l5caw?4o+SiaWZ5J=0XwEE}q0ImK=bfiJN(Ai6Oj#Du*Yz1uz z4GEbot2unMW8Iqp;)T3krK}-}8~}Tvj#7^3_LYXk&k;%{Bm!<-z4pQK&E^@Qc&wfHOugLf9WgP0U$lf z`GEs!o5#$7Ngva|5Z*=e=7^Kk_8UdB{%>OF5y@iw0FJ?Lvh~l+%YKVeNuov+(haU|Lcm+-|~O-6UW2iS7WZsY8oUKzrO_yC4(DuVp&aHqpVWVmgRuo!3VM%*&RogM+$ zyE|bZXKemnCuX>vGMV<6p6A~}$$44`jk9Njn0M*n+R={R?jUFx4cy~F*O1@cE~5G9 z$lZx|wTbMzGE5t%>fyHijHe9g&sslYQMdpe3Cm$GI+D+Y7>bnMw2$rs)BniCGg36| z_fV=I5b-bbQv~?!|3wq&E~Q}8=90s;O}`z3gd;<94EY#B4o*^1kOConiY($0na(== z=0WJ05e-`qKCRtGNo-8Y2#GOU))zwe=(50E(DCPajhzN~(u05VB;zvV%3wyetH_5zx5wj{_1&)Yhv)}B{{atW+>!O1O`#K0t)(mBp&2>l zh6Hw&Mel%1C3MZ->$oFIoWZOJS3uQ52N5SD9-qYs=b(Ctcc6NqgGCil2h-In^nbRJ zl4KB=39+plb-+bt(Xc585lxoG4@-uOD#uSDnT6sL*!beCX=oaKX-LXD=_1+o2KJVb zbL_@i2NCa{&8VuKMuJ{#UYxh_Wu6PZfHXxNQk`FPWR#YzUGoQ10StJ61uT&IBcm)Q z<&4}nV0y+JvrgmZjiob0vB|+QKs14Kyhh&W(%%N9WhX{7nkX}>x-SnjYPn*ahVg*C z8u?)GdE=2sqXKT(#4a+xN(`)s{Q$tkp2CD+mw;jk%>lXL(eR81VOd6+Ze&%AaWUAJ zu~1Y-8-#QbQiWb5Pap^&t_;cvl2;m~<^H%?{#&>3?Th{nCeW{#mA{4WQ%dKe3+JLn zKR0jVyx_ZdD`yY-cbKa(`5u$=OlSga4AbbQt#1sRJ;Ge-3 zKIbSKCbJ2L60=Gl5S~UO5D%3gRzKi2eM>2rT!gbBOd#+#%*JK*-YF@V-W7B%ccZx6 zKXTm-81N8=g5|d32c5QmtIhTB;+n_{bRi-hE};XU2rLN0f)PM}asj&}Y%&MqVkwaq zVwbkS+8a^B!eLREo>>ZSvRkl~Ige6Sf8ja4lu0?x@N{YfGBzsu`{+P_m5J>AB68Tp z)Ppex+#CZZP$TVxV=yp>+KNEsrcxPMT1RAO6Yh8_5-R&ShL8c4JL$| zdW^{{Ov+3c4mXFdSD51|rX1PHp@<0-Vijt*{-k8kj>xBA%hq%jt&B1nM&SR<7#Z*T zN9^RsOt?}FCPl!Q$t@-%OES(D>1PK?{iYlht(p%2leza1VFV{GLA&B(V4j(zuUcaf zk3-=dG6WwE*1mkO^$t6`zRpLuh<;o%DT=IQ? z&trG7kSNEwdC6(?_Vo1h|M&m?yZ7k$cAG-YyUsUR+s_!$7`XyZ6IZG)=sb!Rw za#E^ksa8rYr&KGgmeZ=0QOgp;wOmlGqFOF0i%+Iiv!q&M zYI#hx%4)f6S~IFSu9nATY}5~^-G?%0Zt=wT1yF)yvKlzu(8S4=OjK?qRl5Xg$QfY(1ddakX(sZXCvq!^$}# zH;zQzkDzs$Z({diU-xO;ILcS?#-zH3+2LzOEmn^8zP9AnHf`;$y4r2mUEAC0c01a) zS3BCix$CcY+Owt7t@Vayw>r*N)3s5nwe3c$+jLuQ+pqbJPTTIR+BdJ=w14Bmv(J}G z>%QN8er|4idwaHPM(F6ZImf*_*LAxdizhFj=UnM$T)#>om{@cDZA=5RsCTy7elV6a zctIM?LAI+qJG;T;m0Gh|TWPvC`SsRr*A0qEb^P@R47qc-s@+!Su3L57no|v5P)P-O zg1qSZ!9?{{-_-)a%Ud<=Ea(g-q_ZqiEYc`~Np^qD-M!kV6V{sE)dk+nv&gYWDV~BC z9AfXU)S6pvU;mQy;+-2VQ0fGQ)keG4Z1mhZ?!+IyogeRQ6fS5OWQa0F3IpkaVnDhv zN!>?dR((^cRdf^b`T(6la6)8QYEZQyHP#EtEvk)@S}yUC#mYfFftU3DsAS`F*{*MS zey3%>vyC|d-?O;h0WGZ5n>Ej~x7Qo>b=zySwwg8H1p(OX*GDyeN5-kyD_B3rZV8m< z?d^`%B!UcIZ-yBIx7&U`P& z#&hAk*{oTy|dMH>=hT-?nlsh zyWR2auf11?oRbeJmDeF$-m@sah52KC7*s&lPZ2uQtGERLpwwnjp%HZhtc9kYG8HE!A!Pr|K79oztC;KUZ&dwj5uBdgj(TbDplx ztu_4ht(Dn&r#0s`>$N90YYpA;p6u?ob;IAk1^E?WFowt9~yEHqoKw%zS&b#}hl!Th|7vv}rKWh^LEt1`K(6wrQkRf>q{|EVSXg!IS>nRq3mVA(|H@)QysZk$A zbCB+=Yy=s;L_f@K(=29CR8rDGA7jHqEKZ>~kIUmXWu*boIQ|u_hpZ!oBi58PVL+VP z3u3&|ByyfMTT+l)+-f zTBu}#EJVMni8ZcwwVHrmNgK#cUW%Wc)#6WVeUj>N8Js@_6KupIV-m2tu1v47~TiYFkO+UeY0#pJS z>GS5tLdKygnS?qF5)b1!!+q^q3q2sUtHxqLyC!uZqMXU4a;b^wseBp#>S&2Sq_9i4 zykn4?BXp~X_4`ni(6IQQrL6?@YP2ouP^@Ccu@1#5#vJQt6qAm12zN2;SVspj?^uUM zhIMyH#w;rr<|ItO$bh2-39}6r*)c_(4!dwhIS)x^jPS5>j!S(~xs$XBofFD=L|R}Q zKB^pB>KN^$a!yJ8h;klN&S|M*Wc)v)oKMN%c*|MkoReF}lv7d8<5I^Pr@7;$yJOjf3k`Z;Nd|FmQ3?E<= zNK6r$)wEi}%TlT;2E#p5Bc!`8g|P?|Ohp;-D3$BBr zquubU)w48$&QkCX8IHKIvf9z z&f9A+6wWxY6e0`oqB8SdK|zrTLqPz>1ZfsrC14w1u4kko0+#|fO^jIWgUZi{;b59l zAz;uSSulLVSkvvbV6xhE+YTtmnBdUQK@KE^wjd2NKo{}$N;*hwYhzPj`9?dcYXxEpj-?_6RW@sP$}w1F-DMXy6s5Gn>(5oQ;_ytA0VTa zacX`o$Zd7;*M(Nh0H0ov+T1oO@CEdd`9TOh&pL$=b*6dmD!zHt9m>jC-?i^7| zLUmN`0;PTlLj~z>r)%(^F$pub+3(`MmqTGDyWce9{xOM>)Z%H{_%dRel!RCaVf{V$ zoyRkRWH3T(_V#fulstH?TKxm`>!0DnBZ{D!Z$da5a{nQo>nA4h2lsMi+&{*3wjUh$!TW%7 zPlW8wyxbPY0xehHdP2Pk69WGMA-DmZ03_@JqcYEnzmK&`srftS)e^uLZs`MEtSTdt zvV_E|WR2`i!-q9Y{u!cV6xC(wo$l_R5%7a347C-l8 zpyMUhjitmm2}k?a0iZ!-cqgp82w=%;sc>h(OwR*cywQ`O&(5SOeCdPHZf2)f-`m} zrPatLP))yJnx|l**1Fw(M7=RgPf&4R5uFCy?W@;}xH2Rp7zpx?yIR|7`g&h7N<&rs zHD>D_MiI%ZNy;qRCaFxScXSjb;i;I3C=Y0a)p2>7C`LdY%dPKTQ`XLl(j{S}^Fld7 zb-;ijFJK^~oC~BDe1*vSigo9LTB7~(rPtp;xrd>+0>V&+IwDhMQxFhXcZZ~i^!j_w zoBoXfe>`0N-pnY#g-v77(|9NbeSi4@gg|6}_p<=~sUgtqVbJ@5{-ofBQga!zGAlml z$OjqN*xo<#+>6J(6B2HZh5YA-uBF!wCjO|=!-EzMfaBv_Pt8Huw)Q< zOMTs~Z{nRRE&_=z{_r^tJIk3OSyD%~1hZiiCsw=LX*ls1b?qYkfG7IiB6ty}xn9Fl zGKsaCUa76QcD>VV!r>$KOvIfC*@PgKUZOvV5s9`p;aj_cW;okG3#ODH5e{3Qtc|%T z$eA(rF(}5t720TNch&nT39NuZl_*Z(-kjWrlagm*D*IJ%lnHU)g93_O1h}veBcDis zyafOv+fT&jX*3MW4|e)Ft^xTmElRle&?u-49%FDbcs91TsnA9+)y`+675=vv8E?Yi z*iTeSTEmFS#XHk`9KG1E4f62zD9Ydhij^)7#ePacQ?mWfAe3qAh=FpX;U112+ZqIu z#6)}A+d(k`%-xv;OqvJyFLuUK`xvbEj9Bm2#d?=!W4{|E0qxl3>gpOxh?ki~JYWVv zxQFf_qoLFnsnF2qCv&kTu3}b3f%c>1GFwNOUz*)B5MZHKPeM;yGa&Xc*bh0Ykb-kK zQgZ?|u{BM!(51YB%e#vrbY6fTz|apqg4)PR&F%|+JH(wfL0};ii#Ra8n#o@oLtF-* z$Bo4pDe#eVMr(3``UJoi`IWMMfKJ|E>j9_@(;*n9T zkvv?-3*NZGrUWi33ur#YQi8| zR`iN~hhHzTa9Jc)ywn&IlE?w=e2;T1XLI@T(Q*<0viMglr%{%2sq)yw1ilqephPGZyVlQf=y6}Xh7U$)P3BIH;tsq%)XI=Fn#T-!1E$< z4-MJH;w1K~p^-+r-rRy1vum(UcVV__7}wp7qyz>G`_Lp6OBu$pSjk}uX~fFK2DH6i zyDJ8I#}*UXnD#ZBsd%#?$>dGAi^;8F?+Ryu9WEM1csP8^q_|+FU&dYwcoD`br|HkV z4pHWX=6hs?pT#J2D8ju2lngcdwJ@lKaXlX!jl{Oc9eB=S+1L7UV;l`mW>sUm4aNpz zH9N>kuh|}gA#R8d@#^a|8~CASWSw;BokHP5nn8<*hKH6xEdsjA@w>M;t#>Rgv)ybeMfMSWRb~2$m2@l5cy-n zPL6B?WF3(**{#Jo8sptsNF>X~K(?cUY!74|iR4M7>G8IU58jISn_jIYQg!{|gVnI>-yo12vV(fMTX z!~Zp#3{M^2HzY{g_{E{~TMKi{BYALkl!Gqpi#=~0h&JD~YmU>9U4KoRi9skof1PX_ z=4CtEZTkMZw(JzKyETn$b!XKKf^bK-+icX$7D+zY+45yXaCGxL%$ z!r%d9r-<6-E@jc`R@2NQ>~BOaHacqEa4_XaKABn6p}0La+*Y>`dupU)UROxXD=1*w zLZH9{OcLc1Ck81S_nLQ8lKMsk$wsl7*a#IN9!C`>FCH=G^V?!_VRxLEy2iH648ETH z%pk5u^OF6B9QhZ-JOI1U3ij7R+H|_p;Yg2>K}-jWEs-eT zk5EYzHf#3vr7eb`d#6U=dpL)TN9Du6gpZeOc{H$nh)tSi(}qwktQG_6Rges7RkRvH zg|uRf0Q4A*NLu9T9pZ?mP^`(rZygKwQGN?lo#S?2(CP1`)E#WsOw2Xxkxb2A5ITcW zp@EgG_An$PTnCCJiXrp`mQ{FROx4lL zsnM{xd2qOI@Z~w&AvHZ3#_EP>Xz+3=$E9Maup)fLjmEqU$%zcFsSDnYh4~G^nJg``bIN$(T<-owPDo39 zl5ca$W?84wCCel;hNmr=_?Xr?WujV^leA)%6T;yWC7$(-{bxoW>GwG^l8y>}_TgEL zNIBEejj4ziyHl0Wp?{;+RaBiHz2vd8oRje!eM z8m5XxHQgId70a3rq>2&w#HxdNGDwNeB&p)Gm`a9D={tt$VV$Hn1)5hzfOHFO-y=vg zw#YnjW_Wt9gxQl9j>%vh4}%O~xPkHp^1=X%p)QjIj?z4XNnn#HhHQ+Jz{rVX@k}%l z6#$(Jlj8$PU`gZxSOQ^^y60FE2`6|kSzpBPqWcekktKBg6JkV^jBMaBI6(E?D?|;d;mQdlw^@B_r?}N$_+gwOue6)_sBQiL1lP675#0dlSr-%Wc5FhBrF;?XX zp`}!qB0jMvMV!{eQy&3^F@6C|cu3Y{2t<L_JWp8P*?YB@{S)25Vx= z1bGaGB)InzuD%Gq(kNRd>=oNGnf`^RevD1iFq;~Y@0)Qpb+1$@CsJkcPC3k`4qLHR z3?7B7M2PIGlG*bg2}Y!n;~c8&GM>*F@jK{kB9iowBcZmhj%4?Ljfo-Lw>XHqzC>cADrpJxVz}P>0EL+!vwm@Cq9Gv; zd<7Db*?W$gErC2picq7%t`pDLhe7oF zatEOgSO|z!ICM3UjuwL^3>4HbGYQ6;Q~@z+;s*1qT|$9Gt@w3yHmtA^zcQh`p_Sw_ z|3-8jM1?DfZOf7~dx)Aqb_ot5FWlk&aTySpgJA}Q4w6ZO(7I1DAbOQwmss3pK}C{e zKr|fbFz?Y~jm$Be{768N8eI}Gh?fY@EWVYCIMp**9!It#gPcbmS6Z?i#R-1HKZI*@ z<#M@D&P=3VgkMpP;Rtn< z9C2Xpq6w#dBsp>)T@kpI_%0&5_Yna_AT~Z9gg9<|J_skf5z38@2!S|ooQEyZK_Rvr zQtlzOf#W=!t^9yn9qyOx#!Km=W1LsBT7+8fsJEjw^DIm-&$J z=y7~-dmC{sNM4?*jv|m|pHOs0`5fYm=Owjr-hP~!UHp06k zS^|(^q|_WCj?MzHF9N4>5C|O@xEr-r#BD;}SZg(Ee5+oeq) z$CH@_I>(vzP1FQKaW*-cFh?>wzGm&qtH{wIjEeF0ynu(t&m-iUq=%TS!TUCF=rtZ~ zq0^3XH%mO-#9?s4c}>?^Jj7(qFrjw~yT|!_41*^p?G1MDkeQ~>N0LA;;lvqRY>^9( zQt2(6z;9zX#C#by#;GbT`_^PT8ISC9U)bk%?QoL@hLRD(am?-O1AIcEc?p;7a~a?h z{4fG2pX5~R9f;;VTYa^?+6nR@@yMxA$^MJ1!eJkIVUTUK9e0PjPTClIs26r%pskAn z+G{8eD@mIXav{jdi^o9GVkMLr9Q**w`S5)Z4b%85WmWtgzr}1(^nx zeb|b)f;$JeB9z?FJ?XOSu;%F}hIo0hd5R(4$%J~s^HPHe0WKWJ@~)vEw(wt8z-VgY zIblY;#dE-@nIr&8*#ZT1+q=ber7n(YORn@!foshL? zy0d6|l-MH+s`L@yZU9r1a5#AaT__(SDT7N8#js63qM!{J;I~xgBuf*{4?RxA2jFo! zQGbxISj(VpHiE{{A6P^waU1OR@4iD^u5u^3!R6ZzhRc41Vf00)Ej|{Xd4tc}0Lw^> ztE>$YVq`fAE`?AB5gOzi*GJC(Q^cwGk?ASW-$|=C5!0XPF&d`~F?}+e;*7dMpIDhO z61%Srq3^~Z`a(+j<*^k~UxKYqh^S20bvI`R(F9|0JVq1m$4DXpqOT!5`q)5{!IK1+ z801~YFC#z`MbB$0F5x`{u*oQ+xV1=$sZ} zX28)xHgC_|k{{RzZ3ygbqEv-45~e0vgUm{&(-hGcWiW*71}RSNzrg8}F%`(IkJO9+ zuM1$ji7STS349rb0F(rdJS!)_A}lMMs!l}B&`maqe*|{n z6H`^0fI>uzzpEO--lA*m)S@oq#>S-Q(=B?;2uJ^ z{JjD51j2^sxLC<2Ny>CMJ|&b#+JSEcRKIm{;A{!BrpZ$Rr&xmiY$f=QS{%@$6Ar?z z23BKO9c|*yA|WRtwNoOBFpo3r1g4}qFU#u?-J&MECLkPXeaf}sk9OuS+ zGy4J>gO$b5%zR$K<^2Z=pcll|`@4{f^-oAoU@02DB3g`1fM^0pk7Oto)IFGO=)^?N zhqP`{=TFDHL9-am49Sf574@ilBIHr|x#Sy$3%4 zuP6Hn{7q-aU_2kQPT;hC&gxAiL=pJ_ z@biba+=;1_F`?#j=>l-_An%H>=x2cYm< z2`p2G(&fpCJfb*-sq9qlNUmI*%2$rbrd;f^jeJcY&ipi+@p#Ar@;hwi7ujg>$?qG$ z;R&C>RCS5X6hWA*IYfm8_4J2q{v8(MyoXckVr|PW=mZCDZ22UfaQB)%z<%^BO}dt# sjDis|%lz`qMe?%u2#Q?p`O-9g4g&vD{8 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/_bootlocale.py b/utils/lib/python3.5/_bootlocale.py new file mode 120000 index 0000000..83c9424 --- /dev/null +++ b/utils/lib/python3.5/_bootlocale.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/_bootlocale.py \ No newline at end of file diff --git a/utils/lib/python3.5/_collections_abc.py b/utils/lib/python3.5/_collections_abc.py new file mode 120000 index 0000000..0e4b41f --- /dev/null +++ b/utils/lib/python3.5/_collections_abc.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/_collections_abc.py \ No newline at end of file diff --git a/utils/lib/python3.5/_dummy_thread.py b/utils/lib/python3.5/_dummy_thread.py new file mode 120000 index 0000000..7917de0 --- /dev/null +++ b/utils/lib/python3.5/_dummy_thread.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/_dummy_thread.py \ No newline at end of file diff --git a/utils/lib/python3.5/_weakrefset.py b/utils/lib/python3.5/_weakrefset.py new file mode 120000 index 0000000..d1d5a57 --- /dev/null +++ b/utils/lib/python3.5/_weakrefset.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/_weakrefset.py \ No newline at end of file diff --git a/utils/lib/python3.5/abc.py b/utils/lib/python3.5/abc.py new file mode 120000 index 0000000..1f42e72 --- /dev/null +++ b/utils/lib/python3.5/abc.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/abc.py \ No newline at end of file diff --git a/utils/lib/python3.5/base64.py b/utils/lib/python3.5/base64.py new file mode 120000 index 0000000..1ddaaac --- /dev/null +++ b/utils/lib/python3.5/base64.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/base64.py \ No newline at end of file diff --git a/utils/lib/python3.5/bisect.py b/utils/lib/python3.5/bisect.py new file mode 120000 index 0000000..ab10c0d --- /dev/null +++ b/utils/lib/python3.5/bisect.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/bisect.py \ No newline at end of file diff --git a/utils/lib/python3.5/codecs.py b/utils/lib/python3.5/codecs.py new file mode 120000 index 0000000..0ab8747 --- /dev/null +++ b/utils/lib/python3.5/codecs.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/codecs.py \ No newline at end of file diff --git a/utils/lib/python3.5/collections b/utils/lib/python3.5/collections new file mode 120000 index 0000000..98877bb --- /dev/null +++ b/utils/lib/python3.5/collections @@ -0,0 +1 @@ +/usr/lib64/python3.5/collections \ No newline at end of file diff --git a/utils/lib/python3.5/config-3.5m b/utils/lib/python3.5/config-3.5m new file mode 120000 index 0000000..d2d1192 --- /dev/null +++ b/utils/lib/python3.5/config-3.5m @@ -0,0 +1 @@ +/usr/lib64/python3.5/config-3.5m \ No newline at end of file diff --git a/utils/lib/python3.5/copy.py b/utils/lib/python3.5/copy.py new file mode 120000 index 0000000..28a7fab --- /dev/null +++ b/utils/lib/python3.5/copy.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/copy.py \ No newline at end of file diff --git a/utils/lib/python3.5/copyreg.py b/utils/lib/python3.5/copyreg.py new file mode 120000 index 0000000..af3fcc5 --- /dev/null +++ b/utils/lib/python3.5/copyreg.py @@ -0,0 +1 @@ +/usr/lib64/python3.5/copyreg.py \ No newline at end of file diff --git a/utils/lib/python3.5/distutils/__init__.py b/utils/lib/python3.5/distutils/__init__.py new file mode 100644 index 0000000..29fc1da --- /dev/null +++ b/utils/lib/python3.5/distutils/__init__.py @@ -0,0 +1,101 @@ +import os +import sys +import warnings +import imp +import opcode # opcode is not a virtualenv module, so we can use it to find the stdlib + # Important! To work on pypy, this must be a module that resides in the + # lib-python/modified-x.y.z directory + +dirname = os.path.dirname + +distutils_path = os.path.join(os.path.dirname(opcode.__file__), 'distutils') +if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)): + warnings.warn( + "The virtualenv distutils package at %s appears to be in the same location as the system distutils?") +else: + __path__.insert(0, distutils_path) + real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ('', '', imp.PKG_DIRECTORY)) + # Copy the relevant attributes + try: + __revision__ = real_distutils.__revision__ + except AttributeError: + pass + __version__ = real_distutils.__version__ + +from distutils import dist, sysconfig + +try: + basestring +except NameError: + basestring = str + +## patch build_ext (distutils doesn't know how to get the libs directory +## path on windows - it hardcodes the paths around the patched sys.prefix) + +if sys.platform == 'win32': + from distutils.command.build_ext import build_ext as old_build_ext + class build_ext(old_build_ext): + def finalize_options (self): + if self.library_dirs is None: + self.library_dirs = [] + elif isinstance(self.library_dirs, basestring): + self.library_dirs = self.library_dirs.split(os.pathsep) + + self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs")) + old_build_ext.finalize_options(self) + + from distutils.command import build_ext as build_ext_module + build_ext_module.build_ext = build_ext + +## distutils.dist patches: + +old_find_config_files = dist.Distribution.find_config_files +def find_config_files(self): + found = old_find_config_files(self) + system_distutils = os.path.join(distutils_path, 'distutils.cfg') + #if os.path.exists(system_distutils): + # found.insert(0, system_distutils) + # What to call the per-user config file + if os.name == 'posix': + user_filename = ".pydistutils.cfg" + else: + user_filename = "pydistutils.cfg" + user_filename = os.path.join(sys.prefix, user_filename) + if os.path.isfile(user_filename): + for item in list(found): + if item.endswith('pydistutils.cfg'): + found.remove(item) + found.append(user_filename) + return found +dist.Distribution.find_config_files = find_config_files + +## distutils.sysconfig patches: + +old_get_python_inc = sysconfig.get_python_inc +def sysconfig_get_python_inc(plat_specific=0, prefix=None): + if prefix is None: + prefix = sys.real_prefix + return old_get_python_inc(plat_specific, prefix) +sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__ +sysconfig.get_python_inc = sysconfig_get_python_inc + +old_get_python_lib = sysconfig.get_python_lib +def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + if standard_lib and prefix is None: + prefix = sys.real_prefix + return old_get_python_lib(plat_specific, standard_lib, prefix) +sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__ +sysconfig.get_python_lib = sysconfig_get_python_lib + +old_get_config_vars = sysconfig.get_config_vars +def sysconfig_get_config_vars(*args): + real_vars = old_get_config_vars(*args) + if sys.platform == 'win32': + lib_dir = os.path.join(sys.real_prefix, "libs") + if isinstance(real_vars, dict) and 'LIBDIR' not in real_vars: + real_vars['LIBDIR'] = lib_dir # asked for all + elif isinstance(real_vars, list) and 'LIBDIR' in args: + real_vars = real_vars + [lib_dir] # asked for list + return real_vars +sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__ +sysconfig.get_config_vars = sysconfig_get_config_vars diff --git a/utils/lib/python3.5/distutils/__pycache__/__init__.cpython-35.pyc b/utils/lib/python3.5/distutils/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8d326e3ce7889a28e6956dd0e321bf7257f94dc GIT binary patch literal 3179 zcma)8-ESMm5uZICKShd^6v;}gB#dLlrawfZX^IvI`ehqNkU%Z00In}67N@(VeAMxd z**(gZDnHpkUkViHWB-Ey?LV}yed@o^r~YP-q-5oxJ?V~fvopK1Gr!;LUF&pOKmYsm z`Cq$4|DsFRCgfk^HcvdF82^G&qF^Zt3dBP1QQ$4)3I&yg>{H;AA{tj|T%(}2kn0Np z8lT1udV{GvdV_hIi=h^&ChM2(a{+p1kD+6a^gl>>G+v>&!p0(#q}nv@a0Kk{kx&&H zuTt#u4xoyw{LjiRjo^eBdvw|%)uZtm1#9#yTPI(w({YQm;OluN=np)+LBWRGT8+~8 zXtGJcCQY^|*dlS-Aa#wzvuqo_+s^kP`>OXTxJKm+g2o?ETz6srO>jyZlwPOF4h0{Q zcoHMF7QKZUTl|pTAdx$6HCTP*tUktOc1V3p63UFyA-ccyzXMSN9wM#yyqvXlODq(2R#w}`B+vRGMp=1k z3N^Wy=vTp}yjVak7qB$&tk18u37;s>M#+(_zD%;ue=-oZc{oebSgKb=#6d4Eu%YC| z4g_GbWC7#fVVJ7`{8zA9U)Nz0iMc2LR&hVXZT^JEIf&utblf0)osOJF5@mO&5cAQ( zu|hwdzm6+ZfG}0YI^1DgP6Bpec^;}Wor)%nTXRM+1&S3Kx7m~_0^l7CD*Kw_3H)!8 zLo?_E?KC;mp*}@+w6U$kB$+9~EK;_07#d{?on*+3nWjl$z1-OPG%Q{iHMKQZDqUEg z71kf;NoFfZr(Mx1OyyLoQS!=ma-?#ZP}>_NS(qkgO6F58ok6~Rqtek2q`C3@XEfA# zUJRo&pT&iqnPPa94~>q7M@jKwcDNVilc7qZ@cwa_=-k|&o(_-IDa^y;p~KY>8~WK# zhtt#IMV@`W_r-8o_MwzXmK0L%O;7a(7W)jhY2!hnE81dRYrdsl-CyFB$}gq$j)SC9t1$`2e{cD+vn&pJW$(D?5kY4Lbh{{c4eKXpEmz8E z*M1c67nsv*<3Rw_rr#A!uO_wutqnkIO>~52&_!H+zW8@p@*8+TCP7o~3!7a2aanth zDU2c1?_ePI2Nkzvy#@!n&WSrxg)9*dh)3vdooN~t(o9v9jFL!y1k0#nx_P(xA;v zC=PWjxj+5?;lug>{`2tHIeZQ>!tE{&pYJEQ&7bioIrbO2;27A&-xqJFz^8)ixlAOG z%5`LB9k>KS;$sA6-!bd(dR%828-)zbm)Y%wo%&X?8I9TWgCgU?MDs&&>pkn<{ zADN)(nlsN5)Ugz|{j0!u|6O2QTKGH6WSDJ?j4p6}9f;;zKj1a)mytL+HeQB0!_i@E zC7DcvT0V{PSUD=&Iu>=rb(}^+Wx`6ScQA=?TVBqN|%G0iKrRZ zn!B)W@>0!x5Wlpo;2hNVp$x7sr{|++0+8-4&kNVi^*Woa{m3lnE$tTJw;!QJxsVW{ zYYbo#oLAqav%UqTW1+1}8Rrpi=8_3BR`txR(mcLog3jZ6Zrg^h3F8~93T zt$YP5Co1ZJ|6Jhk?JgEuCokdV3BX&*Z}GI9r^GTf1vG$WPz?7RT>-_R1Pq52XatxR zcm|lta9wOX?p+No@9%VeA>;be#ao<8Y}_PLenm9B zIB7LevmbRogx-4-s~@1!38nU1?L;zO(aqBMY9EJnZ$lm0P~Hx$QRQ)XIOwE0s{f?= ZzfgtsI6t*s4Mv}_#Kg&(@ol!lJ^{hXOuGO8 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/DESCRIPTION.rst b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/DESCRIPTION.rst new file mode 100644 index 0000000..30379a1 --- /dev/null +++ b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/DESCRIPTION.rst @@ -0,0 +1,3 @@ +Beautiful Soup sits atop an HTML or XML parser, providing Pythonic idioms for iterating, searching, and modifying the parse tree. + + diff --git a/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/INSTALLER b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/METADATA b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/METADATA new file mode 100644 index 0000000..cc2f64b --- /dev/null +++ b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/METADATA @@ -0,0 +1,28 @@ +Metadata-Version: 2.0 +Name: beautifulsoup4 +Version: 4.6.0 +Summary: Screen-scraping library +Home-page: http://www.crummy.com/software/BeautifulSoup/bs4/ +Author: Leonard Richardson +Author-email: leonardr@segfault.org +License: MIT +Download-URL: http://www.crummy.com/software/BeautifulSoup/bs4/download/ +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Text Processing :: Markup :: HTML +Classifier: Topic :: Text Processing :: Markup :: XML +Classifier: Topic :: Text Processing :: Markup :: SGML +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Provides-Extra: html5lib +Requires-Dist: html5lib; extra == 'html5lib' +Provides-Extra: lxml +Requires-Dist: lxml; extra == 'lxml' + +Beautiful Soup sits atop an HTML or XML parser, providing Pythonic idioms for iterating, searching, and modifying the parse tree. + + diff --git a/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/RECORD b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/RECORD new file mode 100644 index 0000000..2cd9fbd --- /dev/null +++ b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/RECORD @@ -0,0 +1,41 @@ +beautifulsoup4-4.6.0.dist-info/DESCRIPTION.rst,sha256=HReC3om4K1XIgRKEVjgzdTEKfTTE3F83hEHkQQJwuU0,132 +beautifulsoup4-4.6.0.dist-info/METADATA,sha256=MygZZNNKIcXfK60bDPVe3zpyJeyqRoTy1PBE2uqb4TY,1109 +beautifulsoup4-4.6.0.dist-info/RECORD,, +beautifulsoup4-4.6.0.dist-info/WHEEL,sha256=dXGL5yz26tu5uNsUy9EBoBYhrvMYqmFH9Vm82OQUT-8,95 +beautifulsoup4-4.6.0.dist-info/metadata.json,sha256=5165aEwyWzVfTK8Rs17tqfMof2bpgGLGbjGAo24oFNc,1110 +beautifulsoup4-4.6.0.dist-info/top_level.txt,sha256=H8VT-IuPWLzQqwG9_eChjXDJ1z0H9RRebdSR90Bjnkw,4 +bs4/__init__.py,sha256=tO59vxn6pDf_-5iy_a_rG65rDph3TyY7wKqRu9zNQ_4,20394 +bs4/dammit.py,sha256=T91drgzqXmIrH---Qm5tG_jvOqv1QaYdJPOt9lRJucw,29910 +bs4/diagnose.py,sha256=k_dyxYqq52gaikV1hfiwh0_PoWGbx2fsnjm5IAMS7PA,6773 +bs4/element.py,sha256=2EZ_aM5jWf7tREyxXjvziW23Q59tSijCacC8-hfyx5M,68798 +bs4/testing.py,sha256=GEdA91wNzzJ5XewPEgz1oCzDT1ihT-UYphgah2CyXDM,30800 +bs4/builder/__init__.py,sha256=ECq2riLT2cie_wig7cTgMQU6YAuZ6cjZTFKWJC1st7g,11552 +bs4/builder/_html5lib.py,sha256=LZeT3YMgTWWKzydl48fkbwdB6IQC3nV67Ej_nbmJrcs,16688 +bs4/builder/_htmlparser.py,sha256=7ytwx-cp8Ju4nVvZqsUtL7bGNv0c3KgT44lbnyqQvHk,11609 +bs4/builder/_lxml.py,sha256=xPBXWAVfqRvWlAYoykIGVmp8JhhADxriYrXfmEjSqNE,9470 +bs4/tests/__init__.py,sha256=bdUBDE750n7qNEfue7-3a1fBaUxJlvZMkvJvZa-lbYs,27 +bs4/tests/test_builder_registry.py,sha256=pllfRpArh9TYhjjRUiu1wITr9Ryyv4hiaAtRjij-k4E,5582 +bs4/tests/test_docs.py,sha256=FXfz2bGL4Xe0q6duwpmg9hmFiZuU4DVJPNZ0hTb6aH4,1067 +bs4/tests/test_html5lib.py,sha256=MYtpDf9mkYxHUNxBeRVmwqG5E0-R2b_NlpX3lOW30Zs,4907 +bs4/tests/test_htmlparser.py,sha256=22Ivw1wno80DD3j7NxZhc8rrBKSfgwBaAH4tzYIT7lM,1191 +bs4/tests/test_lxml.py,sha256=7ge3DMNPQIBibALPWvqn-hAdOBUCoQAVOHIu8rQhSFg,2379 +bs4/tests/test_soup.py,sha256=ugOafuY7DoCZFaxjMoBivnYNE_Iz0CRN2ZPkChLy6VY,20313 +bs4/tests/test_tree.py,sha256=psSal7EQIeDEoimz_DVloKKG1D_8CSAFJY-Yvov2bx0,78204 +beautifulsoup4-4.6.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +bs4/__pycache__/testing.cpython-35.pyc,, +bs4/tests/__pycache__/test_builder_registry.cpython-35.pyc,, +bs4/tests/__pycache__/test_docs.cpython-35.pyc,, +bs4/builder/__pycache__/__init__.cpython-35.pyc,, +bs4/__pycache__/diagnose.cpython-35.pyc,, +bs4/builder/__pycache__/_htmlparser.cpython-35.pyc,, +bs4/builder/__pycache__/_html5lib.cpython-35.pyc,, +bs4/builder/__pycache__/_lxml.cpython-35.pyc,, +bs4/tests/__pycache__/__init__.cpython-35.pyc,, +bs4/tests/__pycache__/test_tree.cpython-35.pyc,, +bs4/tests/__pycache__/test_html5lib.cpython-35.pyc,, +bs4/__pycache__/__init__.cpython-35.pyc,, +bs4/__pycache__/element.cpython-35.pyc,, +bs4/__pycache__/dammit.cpython-35.pyc,, +bs4/tests/__pycache__/test_lxml.cpython-35.pyc,, +bs4/tests/__pycache__/test_soup.cpython-35.pyc,, +bs4/tests/__pycache__/test_htmlparser.cpython-35.pyc,, diff --git a/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/WHEEL b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/WHEEL new file mode 100644 index 0000000..a68f088 --- /dev/null +++ b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0.a0) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/metadata.json b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/metadata.json new file mode 100644 index 0000000..830af35 --- /dev/null +++ b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/metadata.json @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Text Processing :: Markup :: HTML", "Topic :: Text Processing :: Markup :: XML", "Topic :: Text Processing :: Markup :: SGML", "Topic :: Software Development :: Libraries :: Python Modules"], "download_url": "http://www.crummy.com/software/BeautifulSoup/bs4/download/", "extensions": {"python.details": {"contacts": [{"email": "leonardr@segfault.org", "name": "Leonard Richardson", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://www.crummy.com/software/BeautifulSoup/bs4/"}}}, "extras": ["html5lib", "lxml"], "generator": "bdist_wheel (0.30.0.a0)", "license": "MIT", "metadata_version": "2.0", "name": "beautifulsoup4", "run_requires": [{"extra": "html5lib", "requires": ["html5lib"]}, {"extra": "lxml", "requires": ["lxml"]}], "summary": "Screen-scraping library", "version": "4.6.0"} \ No newline at end of file diff --git a/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/top_level.txt b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/top_level.txt new file mode 100644 index 0000000..1315442 --- /dev/null +++ b/utils/lib/python3.5/site-packages/beautifulsoup4-4.6.0.dist-info/top_level.txt @@ -0,0 +1 @@ +bs4 diff --git a/utils/lib/python3.5/site-packages/bs4/__init__.py b/utils/lib/python3.5/site-packages/bs4/__init__.py new file mode 100644 index 0000000..62e9e5d --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/__init__.py @@ -0,0 +1,529 @@ +"""Beautiful Soup +Elixir and Tonic +"The Screen-Scraper's Friend" +http://www.crummy.com/software/BeautifulSoup/ + +Beautiful Soup uses a pluggable XML or HTML parser to parse a +(possibly invalid) document into a tree representation. Beautiful Soup +provides methods and Pythonic idioms that make it easy to navigate, +search, and modify the parse tree. + +Beautiful Soup works with Python 2.7 and up. It works better if lxml +and/or html5lib is installed. + +For more than you ever wanted to know about Beautiful Soup, see the +documentation: +http://www.crummy.com/software/BeautifulSoup/bs4/doc/ + +""" + +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +__author__ = "Leonard Richardson (leonardr@segfault.org)" +__version__ = "4.6.0" +__copyright__ = "Copyright (c) 2004-2017 Leonard Richardson" +__license__ = "MIT" + +__all__ = ['BeautifulSoup'] + +import os +import re +import traceback +import warnings + +from .builder import builder_registry, ParserRejectedMarkup +from .dammit import UnicodeDammit +from .element import ( + CData, + Comment, + DEFAULT_OUTPUT_ENCODING, + Declaration, + Doctype, + NavigableString, + PageElement, + ProcessingInstruction, + ResultSet, + SoupStrainer, + Tag, + ) + +# The very first thing we do is give a useful error if someone is +# running this code under Python 3 without converting it. +'You are trying to run the Python 2 version of Beautiful Soup under Python 3. This will not work.'!='You need to convert the code, either by installing it (`python setup.py install`) or by running 2to3 (`2to3 -w bs4`).' + +class BeautifulSoup(Tag): + """ + This class defines the basic interface called by the tree builders. + + These methods will be called by the parser: + reset() + feed(markup) + + The tree builder may call these methods from its feed() implementation: + handle_starttag(name, attrs) # See note about return value + handle_endtag(name) + handle_data(data) # Appends to the current data node + endData(containerClass=NavigableString) # Ends the current data node + + No matter how complicated the underlying parser is, you should be + able to build a tree using 'start tag' events, 'end tag' events, + 'data' events, and "done with data" events. + + If you encounter an empty-element tag (aka a self-closing tag, + like HTML's
tag), call handle_starttag and then + handle_endtag. + """ + ROOT_TAG_NAME = '[document]' + + # If the end-user gives no indication which tree builder they + # want, look for one with these features. + DEFAULT_BUILDER_FEATURES = ['html', 'fast'] + + ASCII_SPACES = '\x20\x0a\x09\x0c\x0d' + + NO_PARSER_SPECIFIED_WARNING = "No parser was explicitly specified, so I'm using the best available %(markup_type)s parser for this system (\"%(parser)s\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n\nThe code that caused this warning is on line %(line_number)s of the file %(filename)s. To get rid of this warning, change code that looks like this:\n\n BeautifulSoup(YOUR_MARKUP})\n\nto this:\n\n BeautifulSoup(YOUR_MARKUP, \"%(parser)s\")\n" + + def __init__(self, markup="", features=None, builder=None, + parse_only=None, from_encoding=None, exclude_encodings=None, + **kwargs): + """The Soup object is initialized as the 'root tag', and the + provided markup (which can be a string or a file-like object) + is fed into the underlying parser.""" + + if 'convertEntities' in kwargs: + warnings.warn( + "BS4 does not respect the convertEntities argument to the " + "BeautifulSoup constructor. Entities are always converted " + "to Unicode characters.") + + if 'markupMassage' in kwargs: + del kwargs['markupMassage'] + warnings.warn( + "BS4 does not respect the markupMassage argument to the " + "BeautifulSoup constructor. The tree builder is responsible " + "for any necessary markup massage.") + + if 'smartQuotesTo' in kwargs: + del kwargs['smartQuotesTo'] + warnings.warn( + "BS4 does not respect the smartQuotesTo argument to the " + "BeautifulSoup constructor. Smart quotes are always converted " + "to Unicode characters.") + + if 'selfClosingTags' in kwargs: + del kwargs['selfClosingTags'] + warnings.warn( + "BS4 does not respect the selfClosingTags argument to the " + "BeautifulSoup constructor. The tree builder is responsible " + "for understanding self-closing tags.") + + if 'isHTML' in kwargs: + del kwargs['isHTML'] + warnings.warn( + "BS4 does not respect the isHTML argument to the " + "BeautifulSoup constructor. Suggest you use " + "features='lxml' for HTML and features='lxml-xml' for " + "XML.") + + def deprecated_argument(old_name, new_name): + if old_name in kwargs: + warnings.warn( + 'The "%s" argument to the BeautifulSoup constructor ' + 'has been renamed to "%s."' % (old_name, new_name)) + value = kwargs[old_name] + del kwargs[old_name] + return value + return None + + parse_only = parse_only or deprecated_argument( + "parseOnlyThese", "parse_only") + + from_encoding = from_encoding or deprecated_argument( + "fromEncoding", "from_encoding") + + if from_encoding and isinstance(markup, str): + warnings.warn("You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.") + from_encoding = None + + if len(kwargs) > 0: + arg = list(kwargs.keys()).pop() + raise TypeError( + "__init__() got an unexpected keyword argument '%s'" % arg) + + if builder is None: + original_features = features + if isinstance(features, str): + features = [features] + if features is None or len(features) == 0: + features = self.DEFAULT_BUILDER_FEATURES + builder_class = builder_registry.lookup(*features) + if builder_class is None: + raise FeatureNotFound( + "Couldn't find a tree builder with the features you " + "requested: %s. Do you need to install a parser library?" + % ",".join(features)) + builder = builder_class() + if not (original_features == builder.NAME or + original_features in builder.ALTERNATE_NAMES): + if builder.is_xml: + markup_type = "XML" + else: + markup_type = "HTML" + + caller = traceback.extract_stack()[0] + filename = caller[0] + line_number = caller[1] + warnings.warn(self.NO_PARSER_SPECIFIED_WARNING % dict( + filename=filename, + line_number=line_number, + parser=builder.NAME, + markup_type=markup_type)) + + self.builder = builder + self.is_xml = builder.is_xml + self.known_xml = self.is_xml + self.builder.soup = self + + self.parse_only = parse_only + + if hasattr(markup, 'read'): # It's a file-type object. + markup = markup.read() + elif len(markup) <= 256 and ( + (isinstance(markup, bytes) and not b'<' in markup) + or (isinstance(markup, str) and not '<' in markup) + ): + # Print out warnings for a couple beginner problems + # involving passing non-markup to Beautiful Soup. + # Beautiful Soup will still parse the input as markup, + # just in case that's what the user really wants. + if (isinstance(markup, str) + and not os.path.supports_unicode_filenames): + possible_filename = markup.encode("utf8") + else: + possible_filename = markup + is_file = False + try: + is_file = os.path.exists(possible_filename) + except Exception as e: + # This is almost certainly a problem involving + # characters not valid in filenames on this + # system. Just let it go. + pass + if is_file: + if isinstance(markup, str): + markup = markup.encode("utf8") + warnings.warn( + '"%s" looks like a filename, not markup. You should' + ' probably open this file and pass the filehandle into' + ' Beautiful Soup.' % markup) + self._check_markup_is_url(markup) + + for (self.markup, self.original_encoding, self.declared_html_encoding, + self.contains_replacement_characters) in ( + self.builder.prepare_markup( + markup, from_encoding, exclude_encodings=exclude_encodings)): + self.reset() + try: + self._feed() + break + except ParserRejectedMarkup: + pass + + # Clear out the markup and remove the builder's circular + # reference to this object. + self.markup = None + self.builder.soup = None + + def __copy__(self): + copy = type(self)( + self.encode('utf-8'), builder=self.builder, from_encoding='utf-8' + ) + + # Although we encoded the tree to UTF-8, that may not have + # been the encoding of the original markup. Set the copy's + # .original_encoding to reflect the original object's + # .original_encoding. + copy.original_encoding = self.original_encoding + return copy + + def __getstate__(self): + # Frequently a tree builder can't be pickled. + d = dict(self.__dict__) + if 'builder' in d and not self.builder.picklable: + d['builder'] = None + return d + + @staticmethod + def _check_markup_is_url(markup): + """ + Check if markup looks like it's actually a url and raise a warning + if so. Markup can be unicode or str (py2) / bytes (py3). + """ + if isinstance(markup, bytes): + space = b' ' + cant_start_with = (b"http:", b"https:") + elif isinstance(markup, str): + space = ' ' + cant_start_with = ("http:", "https:") + else: + return + + if any(markup.startswith(prefix) for prefix in cant_start_with): + if not space in markup: + if isinstance(markup, bytes): + decoded_markup = markup.decode('utf-8', 'replace') + else: + decoded_markup = markup + warnings.warn( + '"%s" looks like a URL. Beautiful Soup is not an' + ' HTTP client. You should probably use an HTTP client like' + ' requests to get the document behind the URL, and feed' + ' that document to Beautiful Soup.' % decoded_markup + ) + + def _feed(self): + # Convert the document to Unicode. + self.builder.reset() + + self.builder.feed(self.markup) + # Close out any unfinished strings and close all the open tags. + self.endData() + while self.currentTag.name != self.ROOT_TAG_NAME: + self.popTag() + + def reset(self): + Tag.__init__(self, self, self.builder, self.ROOT_TAG_NAME) + self.hidden = 1 + self.builder.reset() + self.current_data = [] + self.currentTag = None + self.tagStack = [] + self.preserve_whitespace_tag_stack = [] + self.pushTag(self) + + def new_tag(self, name, namespace=None, nsprefix=None, **attrs): + """Create a new tag associated with this soup.""" + return Tag(None, self.builder, name, namespace, nsprefix, attrs) + + def new_string(self, s, subclass=NavigableString): + """Create a new NavigableString associated with this soup.""" + return subclass(s) + + def insert_before(self, successor): + raise NotImplementedError("BeautifulSoup objects don't support insert_before().") + + def insert_after(self, successor): + raise NotImplementedError("BeautifulSoup objects don't support insert_after().") + + def popTag(self): + tag = self.tagStack.pop() + if self.preserve_whitespace_tag_stack and tag == self.preserve_whitespace_tag_stack[-1]: + self.preserve_whitespace_tag_stack.pop() + #print "Pop", tag.name + if self.tagStack: + self.currentTag = self.tagStack[-1] + return self.currentTag + + def pushTag(self, tag): + #print "Push", tag.name + if self.currentTag: + self.currentTag.contents.append(tag) + self.tagStack.append(tag) + self.currentTag = self.tagStack[-1] + if tag.name in self.builder.preserve_whitespace_tags: + self.preserve_whitespace_tag_stack.append(tag) + + def endData(self, containerClass=NavigableString): + if self.current_data: + current_data = ''.join(self.current_data) + # If whitespace is not preserved, and this string contains + # nothing but ASCII spaces, replace it with a single space + # or newline. + if not self.preserve_whitespace_tag_stack: + strippable = True + for i in current_data: + if i not in self.ASCII_SPACES: + strippable = False + break + if strippable: + if '\n' in current_data: + current_data = '\n' + else: + current_data = ' ' + + # Reset the data collector. + self.current_data = [] + + # Should we add this string to the tree at all? + if self.parse_only and len(self.tagStack) <= 1 and \ + (not self.parse_only.text or \ + not self.parse_only.search(current_data)): + return + + o = containerClass(current_data) + self.object_was_parsed(o) + + def object_was_parsed(self, o, parent=None, most_recent_element=None): + """Add an object to the parse tree.""" + parent = parent or self.currentTag + previous_element = most_recent_element or self._most_recent_element + + next_element = previous_sibling = next_sibling = None + if isinstance(o, Tag): + next_element = o.next_element + next_sibling = o.next_sibling + previous_sibling = o.previous_sibling + if not previous_element: + previous_element = o.previous_element + + o.setup(parent, previous_element, next_element, previous_sibling, next_sibling) + + self._most_recent_element = o + parent.contents.append(o) + + if parent.next_sibling: + # This node is being inserted into an element that has + # already been parsed. Deal with any dangling references. + index = len(parent.contents)-1 + while index >= 0: + if parent.contents[index] is o: + break + index -= 1 + else: + raise ValueError( + "Error building tree: supposedly %r was inserted " + "into %r after the fact, but I don't see it!" % ( + o, parent + ) + ) + if index == 0: + previous_element = parent + previous_sibling = None + else: + previous_element = previous_sibling = parent.contents[index-1] + if index == len(parent.contents)-1: + next_element = parent.next_sibling + next_sibling = None + else: + next_element = next_sibling = parent.contents[index+1] + + o.previous_element = previous_element + if previous_element: + previous_element.next_element = o + o.next_element = next_element + if next_element: + next_element.previous_element = o + o.next_sibling = next_sibling + if next_sibling: + next_sibling.previous_sibling = o + o.previous_sibling = previous_sibling + if previous_sibling: + previous_sibling.next_sibling = o + + def _popToTag(self, name, nsprefix=None, inclusivePop=True): + """Pops the tag stack up to and including the most recent + instance of the given tag. If inclusivePop is false, pops the tag + stack up to but *not* including the most recent instqance of + the given tag.""" + #print "Popping to %s" % name + if name == self.ROOT_TAG_NAME: + # The BeautifulSoup object itself can never be popped. + return + + most_recently_popped = None + + stack_size = len(self.tagStack) + for i in range(stack_size - 1, 0, -1): + t = self.tagStack[i] + if (name == t.name and nsprefix == t.prefix): + if inclusivePop: + most_recently_popped = self.popTag() + break + most_recently_popped = self.popTag() + + return most_recently_popped + + def handle_starttag(self, name, namespace, nsprefix, attrs): + """Push a start tag on to the stack. + + If this method returns None, the tag was rejected by the + SoupStrainer. You should proceed as if the tag had not occurred + in the document. For instance, if this was a self-closing tag, + don't call handle_endtag. + """ + + # print "Start tag %s: %s" % (name, attrs) + self.endData() + + if (self.parse_only and len(self.tagStack) <= 1 + and (self.parse_only.text + or not self.parse_only.search_tag(name, attrs))): + return None + + tag = Tag(self, self.builder, name, namespace, nsprefix, attrs, + self.currentTag, self._most_recent_element) + if tag is None: + return tag + if self._most_recent_element: + self._most_recent_element.next_element = tag + self._most_recent_element = tag + self.pushTag(tag) + return tag + + def handle_endtag(self, name, nsprefix=None): + #print "End tag: " + name + self.endData() + self._popToTag(name, nsprefix) + + def handle_data(self, data): + self.current_data.append(data) + + def decode(self, pretty_print=False, + eventual_encoding=DEFAULT_OUTPUT_ENCODING, + formatter="minimal"): + """Returns a string or Unicode representation of this document. + To get Unicode, pass None for encoding.""" + + if self.is_xml: + # Print the XML declaration + encoding_part = '' + if eventual_encoding != None: + encoding_part = ' encoding="%s"' % eventual_encoding + prefix = '\n' % encoding_part + else: + prefix = '' + if not pretty_print: + indent_level = None + else: + indent_level = 0 + return prefix + super(BeautifulSoup, self).decode( + indent_level, eventual_encoding, formatter) + +# Alias to make it easier to type import: 'from bs4 import _soup' +_s = BeautifulSoup +_soup = BeautifulSoup + +class BeautifulStoneSoup(BeautifulSoup): + """Deprecated interface to an XML parser.""" + + def __init__(self, *args, **kwargs): + kwargs['features'] = 'xml' + warnings.warn( + 'The BeautifulStoneSoup class is deprecated. Instead of using ' + 'it, pass features="xml" into the BeautifulSoup constructor.') + super(BeautifulStoneSoup, self).__init__(*args, **kwargs) + + +class StopParsing(Exception): + pass + +class FeatureNotFound(ValueError): + pass + + +#By default, act as an HTML pretty-printer. +if __name__ == '__main__': + import sys + soup = BeautifulSoup(sys.stdin) + print(soup.prettify()) diff --git a/utils/lib/python3.5/site-packages/bs4/__pycache__/__init__.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b6f5c8fcaf9fb110f7df8cd7d861f522284caef GIT binary patch literal 15413 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/__pycache__/dammit.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/__pycache__/dammit.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0dcca2420203e1c705d9840332ab3acf54cb5b9 GIT binary patch literal 20530 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 A;Q#;t literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/__pycache__/element.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/__pycache__/element.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7ad23b705bf7636db2de49b4c1bce75103c3cfc GIT binary patch literal 51512 zcmeIbdz@Uyb>DgWF+C6TU(=AcsdG-9I(2IE=;+9WA6t6qm-DIMYeCoF z0QZNvqD(pnszFdBOa;|+u#gIh+_?L6P)sNHnV^_S?z2HLo7@is#R0p|1Pi&~%3x3& z3{q863y$V~EXng0n@?iLi5(59Yb|zdP#d?j>xdl-s^bgqs1>XZl#~wUrtWKJo;xxB z4WY=%sZ@L7Sfg2Q-k4iH7xBB?tS>fN1Ix|x(~o`wgb7-iGtqsOlv4Ajm@HR@D|&>W z83Z2>g7XO;eJoISzm^Jarh-eUO=Vk899gKBqrzgNRwy@{Vg1~4vsP%7 zuha_7#X`BU*t}Q^3+ETZ!ntzg^0jhUEmRh-ER~z}bM*!4>#L-ysXFUbrBPRkHNCS6{tRzjUE|@xZxS z8DN}WUWgW#mmWTFE_(PtZJ~Ch)@aTw-DnS#ReLK_FbUGFjU|hkIkd1?DKA7%%-G|% zSIsD?W|$+-sZ=<~PdKDtSiuOvX0FJUIhAe?Erp9qwXk`ko#W$XEu2cbkCfEDOma~M z?VPLRI_04vg7lW`_Dr~zyNVu@KLPYGSG1F$#-OEx2@?`g%>-{Ss*Os}m+kc@>9=U9 zT&Y!$Bz<|ZB1F-jD3I=FxuOpd+$5hMxI7euyM#a>3LOT<&|$A-gT`aJj}tuAl^~rY z*wz(kn75f6H@mO-^kz0FrB#S-GQmy$bCXp#HTwucp3bCj^M5QXaKaD#%41ntb?xl68FI(;+23qdQ=O_0i`Hm36Fjp=Qv zVf)wGz6y+H;_?CE5Vw>{T}Dc!D~r|T1>NUMrK`*31@|UY&RxZJ${ypzU0jA2`E;n~ zp8nJzIjjVm2>SX{-Kde0Y47!&_x|$2a_z->^WyBqatLDeP>08l6ryIiQJtzOfV0&xa!si%zz0GfZ z^+@4Dtx*f>l}>v_kf2P3R|TNL;`u_kaD^`m&GLnPQDL7T0J!#bNZQQENP)i>FV-4` zrxKDo<%f#$EWSPaeJiZ$;{OIl{_U%_1%f=V0I;>J!;aYuRp>U3x zK~||9$s%s7lcE{Rq9SeR&OMG%F*N3U$4!(E8u%J5|ft|pbsd0FK%bJ-V$fffG zq2elB{!g$!%oV9MD{)rh6d0N|xe5si=?w9Sahf&c9TFCUzd~vxsX^c{1R^gsnsBF; zh+NJAx9#I{*laFM*RC$tUwwRc#brC)ys=c<4Ntd9Kfb$JyWTu- zv3X_TF(V@kqQ@QfyYVyMJ?0$puc+P~Ab)G?oT08Ze)#Y0dk6o1cq)Hc2 z$q(ibAo3$fNw*>&AK}fa9%Wy5DBy&!XK(t=CVf-*59ZVt47Y;?0u)frMf{8jKyi0Gg5@9rOQox)HTg z=et;=4d`tp-}$vt{d}psq=`#dFE?w@)*#Y!B}k8@#!?&8*>vk&x522HTW95Ixag1o zWk3=^acwf!YJ@Nm7KZYe~i@r}C>(wG6B|e3)E|>ojRv4B<`9TGeo%y@jZ# z7QR|5UAqYRwmFo0v!=38jv~a{i;GnUbipuG6}y0IU^Y4|k^d#GNORNta4tQO9^;xA znHUK5uEOR2G)+Ft6@7x9TuBdOK?<2E6H8POL;lxMpdeQvW(}FV#anJ5gZ?ej6;hWI zwjiX?K!{$V$r5Qrv6bkuP;9vmJE2o(p*KUngu-gns4)sF?$LVjIr^$ZkyS)xH4zli zRV7NSqN%Hj8>Q7jG3C`*MHEzt@~XHckiN=PR;Z}nKvLW)ol|j})K#dbpw&fFQlXU6 z{SK+7P(|q;HB})%0i}B)0SFp7+P*tL|MUjH*%{P!21U~NSG?U5poe+`UD>Xnwks%- z*uQ;8fHF!S-V@aB35uljulR5>Kq;jU_Xf4SK@lAmA<8SC=H8%spM8!ZYceRJ!Sb*8 ze1A}#w$D*$-5V6|vye!iW+tc}u+OK1+H_Fl(ZAyJ`-AEO_W6OJb|5I;Z{Y(;ng@gG zLk7JEgW7{Z@u4K14<8Py@3d?m4r&hv#dlixF2jU(1=U9apr@{U#9|%|s_#x>xIY+F zAJb#;-9hzGP<`C)4_eA6g6fk=%Ev6`a8Nyx#2m7ir-JHi67#sl91W_+l9(qf=6Fzj zI*EBQs2vV29SN$>Se2ei9!~_-_n;u5ma}SD^}Rv$S<~Q<-E%?pq`og63#!it)l)(B zefElcPY2aGd-Zfsoe!!n*!?p>_5DHhMY|{84+Pbh?EXDLwHQ=iwtMoIuH{U7&8hN* z+A*g#Ytc;W{$^l16crsmr2?6k&W;}^yu6)7q)yW!K2{a5gR|8@XD!nR>ZqK2oJAcDKDJ#j57;?fIK*!aGV=4&a@b(V+heM;}UR6lbT{N zKV^EVcZpZNmI)ep(<>R@*U zC}qmLKIQ*%ga~#`nw2Za69RQv*kcSSbh_lp-7y~Qo^pC+H!UTTE(xS?ez{>iP?(h7 z#AH&Gs>+Hgnxr`Gxvo%jvEj2(pGy)V+3h9K{b~?m=+sQ%1acuwJLfQ3Evh$a=g-$G zb#mEXKoef5HxtPfWsZbiTKZ}&yio`d#1?KiiBVskZ0G7x34VPXCF1bq#^SYxp2COd zt8jn-?V3x#G)L&uhbZ9*;(mt9iD1KHnZbdv?0BlRz8g8>ELIm>#KRq0FpqMWz=)Ep zm66CPSxd148fS{lC9zBmHGB>|ySR9{fcmSu_k5R}E320QdK~~u5o$8Nz%DFdAPrg* z+G|0a((&g{KX+t){@Cfcb_Sil33eu9w8td*biFqrB32tY&2FEF_Y|%AvWH7rTHH~> z*3KTdcy#llv?3tuPrs5wZRq?WH?$o%l#J@=#*}NoKqKj1y%LmCrfxHFT}o_X(n0u4 z@)l(rUk&I{nr+@@g7AFu)+rgXK|cHud&dxTxhIeGfqx|hQzqDo!X3T1^0S-p=aS4! zcWynDZJnH}0epH$V27?Y>(FfQkkuH-7Kq%uR$~L)rsWQs z3#ND@1x@ShY`Fp9p~IFISfVlAa6)*m!A<>Yn~_qwIC;tJ7U~m!h6bPUM>d{Ty8+nR z+n0U0FkilaE{=>fWZlehW@^B7^vL_AIX@PLi(z}9&TRa8dytOSx&f4|!Q`Qt@VR_k za!Gj=M-~^VC6`%y=*o?fecRWY;Rk^Azv7Ct!Vu7d8RK+W$MevRjiexLTe|zOyAaRz z)PbJug*?O^kn}`!cW+Nx_lUf?^-ni&;eFKM`U64J2ABpMBQgm7Y&zIV-yJ=>$@&lZ zBWF?t>C-{#>U{8`^<4U7Ypx%(4bL$>d=tcXj8MEQ>Auzb3wmi|W1d!p(yxW@Cuk2b z{%Wj8RKwGXdyydShvG2Mc7P8xBWn*hrAFUC$}Kmph2^FHK#F(?Oe09}7t{->4XM^d zH{4xvKV&j|=c#3Z2M2MXvQxR*g0d6MQpDQyJ#8J{&cVxTjViNw4gKO8)dT#9>eX61 zeWliiB<-x;OD7($M2w|IQ?2ptx+#Ij1=UQ~ELU_FpShaFq;)cWbc>h_UXKNjE1ls$ zydIu4)iIGEf}_h9>|@Az+L!>34s!;K8Y4crWS{E9i&yYynUJ_-S@9U(z&#M}4NJvm zNXBf|W%Aqcqap{bI2SV*$Cumj*hxnDISh%=cudl?{lp@k9fwO-C}&ZleIn;9raI z7<2r3t5z+pDOW1BrDjQH6k(Y>`bJmyLE~U^PrH6WKdum;3z1ZiD?qSy7#~!$v z!Fclf5@Z2jKsd!0w`kf1ib55{7j3*K{(g&3_$6$XS1iRqQNx!-tMzC=&+8c;nN0FT zoDoV*red^^FW)d?o8YsXz>vk?*Zn2*-&BH;kUY|>D*IQh+lP}p$=rDGWq`vgIDR&G zR5XArMvN!$9SJ}m*k#gxYECQ1Anjqe4)Wdz0FPsMd1XRw#yPB<7`$2guObFLomSS&Dl^S?Y3iUs^@kedA!KwOd~s3U2bB zmQn}Wf`-ktsW$%>nBTSs`f&VTJ`DCqKpSo#w$3Am1Vo0Y7HA;?ZJ!X2-RumzV@8hiK;dtZESu}nHW_wo;>Vy07FZQ5n}ja17j5|Sd8`+ zM=Q&r)bvg^Dz5c1wR^qUr;Oaliv= z@Z$cBAz|gyTT*vtjJ^(xq()3~7M0DX*C{kQn@69!5xSd$ENmAA=Iwy;$mY|dJUK0e z!d|(-^@5ih1n>@b=0P2eZiimx#s)b(Zr$x>n-3l_VZl*Or>&uvr5xy=${Ph0256l? zzz@Ngz){E8-XO#4egb%wMArouRSm~ndlEN|Kp9lD5|VBG%5&w*u`P;&Ng_nr zjPJ^oT2)Im1u&|LvMq|xWte#hGA6?%UOJOLVqO#TYb>xirC;P0h8_jIT_zSlH*%?n_=>sg zvc4Iu^bi%+w}E=StdZ}>xkw_CX`!n}<{`+~3ySt&7`SXkw-~z)m(C;emLNFoQM*Gg zYU~O*)|5UPLYU^lRHJrQE9dQ;OouN-eKZ>VxiS)O`<$oLnbyW`;nb(72q^kf5n5?9 z;Oyik22K}P6vN{{@W}y#&$$FX)YKp&wv&Ly+UICrH(;ch1|S{ybTIYyaG{L$Xt&lZ zN|a%OOW07bNYEZws9&i!!zD%Z(xp%{nV%L&3?s5z`lwG2)W2h_`A`BCijXX?l3AH;wqi{hmnDG6Z$U0Fs7ImPt8kpMaR($=l9%z}3sn%Vq zVp3AlcY{$^yI~i@%oZMul=T9wgJ2$Tt03C99(bWNU@>YXMXruoVN*D@8e&Pf`9%+- z>_n<{_ibSmeaF~!xf?>?B~9v;`1g0zYB+j)>G9fUghT zl5)RYO7$Vo?H_tziBj$UmcWX<>PkX_1O^ilH0?)MB^8g8qfAs_{)Q0s$xI-<3yPK* zg{Ju-lZ~R$>n6rcJj1W4D~Og4)L`Zl;~U_%`nl#7z2D8I2;}?Nr!KE%ZqT z?KNE={!@WygrvbhF13Y8{79;`c_pB%ke(5FOA!i4Nw{<(6e6ZXsC4UiHz;Bq#VufP z8-B+eKJD1pV4TNF0)0!~^g(}r zK|(71_bM&cAM~tD=;a-jAr;as%3#-+qsiawDrZA?=Oqa|6_A|hX9kAXrW5R*6R7`? zd|Bo|u{UUVjiQjnE-3=F+a}`{ehm!`wWfxgHY*p~1@_9RPLB8p1&80Gpifj4wR~Ik zHzWiBV0y{6|HIv2iGqLH^ybYL0ZL(1TQw$2U!&5mq%D(Pw{u^ zrA8|Fz)c?aOTCK{n0uu~pS{K+hqY0ddm;rF(ltkdo5OnMQF`b7Xo~lvDINx6hFg!G zV8)2*2^p95NmR17C9B*-0kweHh>U(v2{H1y>z-WAU>M_UpXMucvi)g5XjF`ap|uulgI9?KIFC!>qTah96gD$dG1t;$54yMiYWl!A>=Fh#NIjI^U@^mRmco zU2bzM?PJ{(wuevGqUD7qmL#SUXBByIxzWV_Vu|g%A(~2N7<0|VCD-3*w!?c=g0!io zcf}l8^v6}h&t*+&Y!7>+Fq%;uqUT+yIqZ=swatbS{bHJ4Zx5WOFwyPcMOc0qAr8RdldSUqwP8FwxkA9y}AV7 z;XQpyDM5wHHZD5$z$(#o)(&0Av1$Sp5-Jj)h2iDZeDGp|lra}^n&|NR$fyq)L*e;5 zlimqzg_D}~OeuQQ1%JA=J4NY?g%XX26Y z$izsg!~E5=y1uL4eIFUz4t}rk{yleC!~Zle6hXRO4L{2J_pPX5k6~dfjJ581<>m5p z>&SHR{^@t0eR+DuKO8Kby?0OR1FuXzdFoKJeBp`PB%6Bj%*#q9{hzrLc;e+V*QU?j zH>F7Jk{8!_;^oIbeCFnvSI+D?bMM(Fr&`+|e{%PeN?@BG1F0N)-^0HHmSwJiAbjAl8`5VVs=3v{-K>#uo!tczdu~J71dj07i!p2%DONU&V3_ zB-DIP#0C>aG;g(8aVvSa9wjFjbt?O_$`{NyyTcT5 zvS6C;Yic7G^MKX^J?uaE#-*!8CDh>^QNYDI_T((S!yhM;@Fx`fc?Dv&jJr;(I2Vv! zEnn5ZxN`t+%EGz&Aidf*?Z8ji#BvktkJ>zd!xB{yFm?tVXq%w~QlxAcSrF3eqg}5} z7Ui`wHnl`fRIPL+LK4kL61CUEmd8iCUbFMC^LmZF{>iS_m^pM_kJ{^B>w1l;!y4P3U8$z_gqv$v9ME;UZfx%0fzN%9K^W)W4uIbkgl;Mu08AEG%P^ z=BU}5YNm#wc3qpD!XtOu+`gRNO1ZT@`?b7WdIKi|}zfj&z9zNyv_bC5KIF@!PQ1e_^11ccts^^lO}a|tA4ryI`HzCDys zx~^gKm-OLZRiG?-MwBtD2`kN{w1gUbNV&^IO~4=G-Ev&-O2O6<+8@h}9C`VI5kxu7h8z@fG+hT@_e$^5aw9VdQ_&VHPQ{oJYAw)ZNg+vW zan!y|9zzB?%}@zRR8qFqc8VKTc@q^k_T=H~@MrYJh<#x_9cnSaHS?53MAT3S75st%BVwIEq&9qJi9EkgVUM{!zkXvjm)?@Y9|;bP_$5W}9rl_m1F=hggg5qnB0G`G59SX{ z495S4$A)v5wT)!P*5rrA?#pM~KdWDbs`)<+jKf^fn*=qWjigS<9D@zardF3LFLt`y zsu|M_pp8=#^w?;;b>lRi2$2$5)A4$NkCeeC z>jh}p5$(LeCOoP<4e#>P5iEE6{gHI30nEABa$~7pxvcGRg>rvdIZVN%#;vkwA6LAi zRI;L7 zR6R?jzb{A_(q~&+Rzkof>fyQ`1d=#C2$*!o^4B_|Z&B*nQi;90pu8;iN~N#*vauOj zS$20)KQ2|eAD8#@!1#;R7VH2($3Tr3)!ZT0YcSek*d~TMn@Uh5Xbt{nWI#9*j|dr@ zMTHxS%LR+|ThKKZPaKp+9;`i{N^QRG>wWK>xdw2(rLSj?;!NjWi~|b`+GI-+J{y|m z#)$JKpwX(WQ|fj5s-S&p46T{)V>Gd~Yv0~zU*eH5wr=)Q+k#$V$lhLiB+*8=O_;;< zv0Ss@esPQXB-V*bVD1|e?KRdh%Cc1YE%nL>iGpk%y;26sE*F@2XMm=GnCzP&lAd8!I$B!XS#)PGI?$qgH$4`8qott~%IKQzj5}gy3KBl0T z2e$LhNdm02T)pu%RbAMjnO18@f2F&V_Mo&zwpCc)RzV`~eQ?!zgsoKlOOL$i)`tF) zw42?7L@2AvN{H!(X1xw2RT>*Yr;hZKc6k!eaA%{gGm0$RCixl0)~}FT(w!T)?*od} z?_YQ7H?_83bp5hE`dbQ~Q6Q2S{?7`2S;3bS{A~p$x>^Yu>|MoJFBmx$@B9UorDO;p zshm6`j^%R*0c*yx6ItV~6<+$k40ngQqP+yGhykW^tit_a+{gp67Rj|IkoXu?&L@!@ zYOTMq5@>=L9v#egX-pm)`f4HZA0ggm9?D`iJKtfBiEiDqxj2KQ*sw6E7@T8XV8L3O zPzyMBfD}hl`)z2;zk|kbtkW}{llNU%zd%LUrDrL72Myrs44U0M^bH!@uxUDzt|8NU z!I26_$1sm&`@}74-qHU*wOSqFEJ^hkaW-rDGSx5?Nf7O*B6>%kA<6$k?cJcuu(xvO z%5IwJ9(N~U=AuR&C$Y};rlDIW_YQvjDvAGXQiQy2vh&WZzwzV#G<*+pnO*y;_#`wk z+TR{9ptXh%?Rt6k=#lv&FSjyh&pxqAt$h2t+T5wtuTk88^tA%(L&fx9xv$l3-rS~E z5_V-9HqhR9DqPgY2~hL|4%=*_Ek3*NK2n%_8s91SRg2$hGfeV&rj4{ftF-254X%y?i=_s2 zy@S?@L3R6X|4nKz;p-$YDW<1RybTU>t#H0vvxyoq)*EgXWkbs$v74)jS`QvwtVsOy z%S{7hr7UNa62JYcWc1?tsf9{t}M z?hbQB7fHG5IG`U^|4*mDorlGpYfvvU8dKl%-~5a+PsiUL^K@qDF_z$Vl=Q2)8m+Cd zt;{U*b^9M34Ql*fYnE(oB9B^NOxfaNkB%+kY>)hz&aX>~FzsP90?(Zd;r0n1;HzP^6}^nf#8v3$`8B&a@W_wSIuy4Xz}Ri#|-rfxE*CO+zL#fQtia80^4 z8Dx1NU5%>H$iwnkSAEL-)Zy6=cYH@<4|PTAhi65Sk>g;V@CM25?}~g@KI#V8=-+f?7;?_=h^Qgrn&g~Qfn9RRj^-OSqa`Egp8WeHdcPO~@cu+lS z=mNZ6392Q7EJhy`$Nvuo)v~n|IGhWr6?+TNszJ48_fG}Y^Fj53-OuWixv7icImTS; z@zaUr2Z9@-DQ0WVH7?4+j)xsT$0L!n1hF@=nUfWppOKLUF~ir9)oX|x@pKrQS8&xt zMwGyEZfEOU$dx>HELac8u7!F52Kiiox{`npO3DqP?Jvd!i6}ISuF&B{Q)uO6B-+>_ z`%d(x&~rTw%e4Y~kh#Y=R5_S=us)J|>!ZfNtZAjb;iV42800Ck`yqpGBC)>`JcNl5H&Q%Ht- zf%?EV@{(n@PVs=o9wr1H9+Y%KCB&ai2r$wrOgvSN>J@d8lg$?K1=!kqaxpgiLEw3n z8ADa`5R_|ZzwBTE%@k*jPpxm~O^Xw{DSP-u`qXVr78|m&Dcn&NkLhtgK{0mLEAySs zT3J-w!&KP3L6w{{-`@9bftx*))q15FKCR52QP5CuT7i})+PRDMYL!)m4fw$-EiZNa z@*;FZ?G4OK+235MU0G`0NNnV=4HdUBhr;-JY7g3}E49#>b#7GF>lIi@59to77Pu-{ zql}w&SSlJSc_%5AronIQT=~Pd3p#7qsQGnCX*0FtDS3F&y}WpBhOq8;!$`Y7O`><>i8@oqldiY^SAY}#0|I7-o%?+F1;zjG3i@!?y8MJ*h+LWPLWgT-^(ehV;uvgz z9WkuV4l4d-1-(dNX&HCUcW{us8~+lcsk`Xm&8ehsZ>O=`L6)vt=}pG6C=*6u+vA=^ z5mSC7-SJ`B1jh0=AT*zj?Q%41pDaw4FSFHI=0fMEwTVYc1zt>bJXs#mGs*x|>QdMx zz%*BD^2fDm#$B5KzVC5o;Ip_=M!y`g3HyergV7K5SJLYlse?JCtk&d4OCB9eKM@a2 z=VlX?M#ULNssG&<=Jnj?k|b9{$_311&=r_%p=gU#-76pznIm_((_FaWvnd-$u3cnT zuygl_2ls2{e9(4;11ZZ-ix^NDXeHVbn&!V>QA!uMPFRg`u!&Q4fE(*b@2sl60NRhi zX5)sdCpuYqk?>&GXj=stI>Wrdb* zl@gKIQL4k-^rJMMBauvzHbkDlayf%E3swk8>__C?qDr#IgNVVr%2y$Svoa}d;HebL zRk#)EXZ+}c9bQ=tma|sl^i3wDSib=mAx#JM4?4TIg9Ymp_u6`d0n?L(IiK0zqb>7& zp@Cwf#}x+_tB1QXQ`f}n+~$DwigO<#^Snl9#mc4WEkjw$70}8&iF6;RMNXw>26jFA zJgXRI^tg(39irm)uH7n!c+tJv!)xrXOZ~~Dv&xSni?-M$y{c*d6aCw2^zdUO`lt{` zirQdgV=4Uc$^>Q6DcDqPW@A-LX(D{=JfqH#bcf*}g-H%n_f zf8}+ySFs||5zn48KVME9!*+}vY0m{$Nr0oarm;_3Z^b}Z&c7@fqd}&tO-q*19w7EO znc$Xbed(oo4X($oofx-m*L?-_XQzotlVhF~SF2sN82E@^9 zrS}(ZC{GbwKImH=fQ(e*WuD~xCXS8rm~S-4v`#8?Rh=I%FihxBo|BIB2k1t6`%C#bjEaT8k~w=G_Jny5I^`LwS?IjaoV#P;3MkEmxS_%O(gr+1|9W_c)w z@HL@jqH!Tzcj6wJB|Nu|zlWRaJK~O~6F{}2XV=8$^K{L4ycH&WavtjWk4b$SbZd{h z{@|bjhwjl|Q4JmLZAv*>+MmQ0`@L>TX(hYPaz#@F8V7--1JLFTH%v^1gOVCLrL=vI z{}TI8`Hp*EJ3>u$|rlN*^a}sCIN>&C2hskwapxTE2YZ7X%-5#&FP*tTzLJFWKU!KjE;GIQ&N> zB;y}ep4JtyukvAE^-ySJ>G}$74<$MOH5F-HGQbvflfsi%zPW0uYNgso&k~3xdFmv& z`km?+$!ttIpSDgydua3us^#p1Q-YEC%7j|*&DHhsFi*D*c*7@#B*@+j7jL+QcF*Dy z$5*lM$^mCPB^PZv#ZOZv)>40qN9QUmK6B{%6!E%(UTL*Gj7Kd1j=b|X)&8|45joUu zGF(n`wMGSgpUM+zfkMzSP?*yvDBE+v^@Yxu0Sxjsd-Uvnn`O8uhD|QQL!y*1IIf~4 z_4X$`yx5owuJ2tXoAF*#m8)eBw+@0IbKZPANRHu|F;U+Fu~u2K?+3tf(`~JS#n}#m zYq8}tt#btGobLX)g7*_7>%A87reb?xYS8~x4^3uy+kob1dL73xwuS{wV^kiJf})^l zkUY%I_30jQ>FC)V!5K5(aob729qB4e7ceJ6B>jkub(s%Hfs<){#t+rw7^0a#&2R0x zGx~6&|J;oN0<1Zh-)~ZSyd~hstBYud0aLV$)j_Y7jw+vMcr3%oc+N2;5v*x*3?y`4 z7RRo!teNZ==)kvim*8N@4koXy4ieYO7sSqoYYluaX@ijKiFqIs&%w-c-fcQuP2zZg zl>eLHuYL&zc0l@vV#r&Gp4AKL9`c&`yWy;9v>_`@T?R9saKfS+h;G5uMj-;$<=TyI z=}LN&c!nZ@&v%02+=p(NTeqII`)x}yQ6QtN%UD+KOCE3oa*k&MdHc@>q zb&b)mouLllj}p<3hD!810)r@4kZlbLJzsU~D1>@(C@b#i0s2f0hS^XrPWCj5x*dWTbc zLS)#(prow6re<01+KCcSsZDX?`V#sM3t!ELHOag#PrT^b9QvY+ky!&dhc%gh2u*JT z%h;Mn?%GPFf9G46X^p8L&2q=RTOF(&vo5D3Q8Vw4_im%+h&SugZn-@Z35hrG<3G<& zmKjX#tX?}txvCY7I!H-MrGM}1*wN70i#xC2K@AohuwG!&4&0rpA)cvqqE$uHF_6TQ zS|C{kptq|j$Jmldsr1dRimq|MwD{Gr#dc(@90_85aqqQL*ZT(~=K`x{I!vcj`eR>S zB3pO8>;aAj#w?c!SuiYZLY;OxB%mPkN^^dT<|)RhL`CAkFmE+keXOXf&Mhu3lu8my z9L@7x{nU0Mm z0<%WQhaXXvtPY@zum=!|lvd~*{#RH*R~OluL7bc9PW9B#$#1B_ZuxL#W^V-jk+_X& zm-8s4j%5h|&FYN0V^T&AQ(p9Lr zs}gKeoEaj9UnEf?w_oJm?Pu=e?_c7@dUeSLZi4i#^f>dN42BV->ARQJIYnChen*@LekU2SBVo4fvS=im=g96fta{~SVonVFsGlTX_xS3e!kr*f^2c!^hAe(UG^ z^qLwMHrli@XlnFW2uzH7qmE+INeyxOgpwB~!3Vd)XW_Z&?;- z^iR7VxA3%s69bqun2ORR_kGsFg|&sb#8WkV#sg=+@fhM!m9Ftxa>VMH#~7nzS#dFyn1Kq`tK!YeQ;U^YwDezTn3Al$^n_f?=j~aIVeGwL0)Zp5ao#W_g{XQBV!4iGXqSINStpd>Ek+;y;7X zY+o*|Lo;gf2gYy%eCT2)g7BpjvIQUD*A4jvH*G3^y@@O`*WqD9%;#Ri5|8|_#v;U8 zCc&fdCsRN}k3+$h4SJIg!e2_=T&uJ$dh=^zu_roil;_6aCO3RV8yP2#>}|sMCv_8r zIq%Jl<_fLWsSdQBo4Kic`E!h|gu#^yFF1aJ_{^~KK7!mLW5N{B8uU!NyB1+F zCn{elXu{V-O;|E=fe?4lo#T+mj(7(W8)TKYYnvZxF-Kiu=R!s!k_@y@km5T#4om1J zN`5lHx72n?3;3LNYV#ZxlF`X=L`rNA(U()#39;R|P=?>lz|rw=LJR~@}1+4iza>R{n791Oh^(yQ1y;_^B2+U~jZHdcu};CqD<~*9t{_8D+;nw$k-<%D)|4GAA2NZO>}4-LYc_h#oD7B#2qA=-mXOVCJ$hK1nrMUNnA?iY+x9nG=;2 z%S$GiSFCVA*B9VA5957js7xTR@NdS9=U4Ea~pXR=H z#uNp3#$jZeRsLTR7!^WP;eEEIpVu>Hrx0MO!PlfaXq@C<_od_6@`t^u_F1@?W$X%d zoK+l%uY2<6*?nisId%0Q%$F*{LM?)mrpm7(uXIHAuFbus15T*5NKiu6V^Mwu!S0p~ z4;GG?+!ra0H>-7%Jol~0xlw3YGTHcIE45E{@c-uv?%0t(HNMaf zTJbuFRxNa_)@^-Q4JahQF~S z%}&BWMz8TD+^U)((P70NQDEHWLEZgr1?Lo)38u|cj7Qi~zF1D|z&R8*2-heuGBd6_ z5w&)zVnn}>@Ps2I__AouB#D9zBFA|noLco3G1i%(S~bk2HeszhO1O?AsWm<5<4m47 ziH?$^qoupK(eN~i>IsDA0ffIQcI-96L2jhC3=f zH@dwLwPI*{O#9D*e{dyrxydE0>x+pvoawM8>5%%+q&?;YOfQD~o=`@e9IR!6Yv|CI z!c3ezPAIA8uZ9!M#+bOk0!(oSelYQ3+976&`YuSDV=u#I)ePmu2CAJbk}9gG^Szk9 zp3>~KxW@JTvo=TX(*&(`RCqRCtp5|$T}jZXfYvOSP6(ZQ6U}>tf>I80X}LCflz@uH z^T95p2Ax%PJ8vlFY7dLI!MwcJ^=#`|H(hXMW)foEsVL3{A>ln##+}&YB=C4UxhFQs z!7;r@350(@%@QJDq`}10VXs?squ*5UA0a8K(G|TMev`OCx+!)iki#LUohC3O_(+TF zeYf`jriT1B+Xa z_6>K%`h&rsLCo3Y$h+2sLfs=CyZ(foqm&LQE|-iG$dm ze$!myduHFzbol9(ZKM%RhyRLqw^>3CHM2@#~BOG%C`$4GwxKB-5%Z<(h)?w_L5#fs57IQilrBV1BBzY@! zU-;kg+Zx^d@+0_~rTj=2HHsONyxhW9ScbTc#v}O}&Su%W+Jw!a)!lRULKrW|^NzAQmW0K92pr5jx z#;Oq630fK}7Z=!ZgaT~0sZ&h_$D__~*d3g@x|^4PoV7|Pf>9i*ONx{25-KfrTRsqM zRq^-%raAxCs)m-67Y_zoyQ+s8HkWELjiW9pr>(o59*`2$l%7Y={@>X%SmupLwW%2< zoBr%ZC8BV&11QjOZs{uQm6Qr5`f7@Mj$sD)XR`VPbtbwyw38~7l<4tLaI(Faak(~V989B4Bp*Rx zLz)})C0@#yG`fR327*sygO6v;UooP~Xz(#wxjwkL-ah}MR23Dg`}|_^IXj`dK7Vb4 zKyq_~}#SNr6PJE+v1-rZWZ#iC~Dr0PN3$NsH*eL+F8ogiAI}8mk!ts7SGn-zuHfcf!E1L1jjKiy9ne3Y zjmN>wEIk)q%vRqKytY%Sc^lbfYd#``PTr2MiY{wKH9L7lNAw<$d+%vusp% zZBX8Mi|?Dqw)?Fz2Xrck&aJ^NVdwcXZ6di@WwDq??db9Zowj@W89)&+@;#P#9S zO_>(#=AkW*n|7wTfY(GBd_t{*JyjXFHGHGLf4E(uOPrA5z{7LJ6j-+0^j6K^m*2YnyM0`>$V0f*05E8FBob4)T zrnR}il+894+DynkR_Q0-O5IcG7WTxJr98J?7fuL~1j349atM!vsCK$uWge+{96uNB zr=3G$m6s5SmCk$mNWGdI2k;>Y2qx{|@U9~obiAc^lD1PbJynuiWL4VA&6~)4i3m!? z;Eq%b1h87MRSTzYI?F&-=I1bLi>ufkW;#=?SFsgB$QiU`wfF#C?R;*J#!;@iuXj~; z*J_pRNo}hjt^1D@mZI8nb&*}MRDwe+*dXdwme1F((>*foDwNHl!NmI3&dK=Pk26&r z=y7JU^Q_0I)|y81;`HMAY3)*KJ@>r!Qrq;?d<$;+BfbxIp%EMgIBtZ=of+30XXNqVB*N|6J{yR^m zOzF*+S!?@h;GET|NqEytq+$K)no|K179}I%e1ML3H&$3jnoo!S4T)?E7|KMGd6Px^ zNszl=djBek|AM+$m=$R9v*$Lo@|)&+s;6;c)tlyqx@DcX`bb)p?7~rPz1u5cbq-*- zRgJ7WF>d}ibyU4W)iJ5B#!_E>+w15nXL3|pJYNzvd``93I15azhy(HI+qGcD_p3Pl z5>UdaUTCQVH-Zs{R86NM#^+i1i;s4LkFPKN6*e^-X3SRWSN-_sMBjPZA)Y%#yPto zpAKG((|+30cJhWH$-h-=n)QOhEE)@8ottgO2B2PB2VsOG?~TNa{|B1#jY)#m{>jsc zsbKtFL9T|O(=c++EZk>PIH()NfLb%-Qnhw&`9gcZ41K!H3AYI;)5Z$TOb|P@5!Vyq zwe7onb+FNmIT3zDV|V;ccRWPB+-Mu`q;{qL19kcY?*pjSU98t`<#!v`t!P(&2CadY zQP!O`cpY^cb-P;WD}vEwtaW-^(m@YCh*%mvJj2cPBk`C#diGuFQf=rV)Y@$j?bcRf zIvwjNBI#A`&Fc5Dc&l=}2U&fH1}SUmt*$L`8z>-w<;%KHb=lP#yWSpea#{_TzbjbT zrf}>o$1tzmBoo^MtI>kntyI;3lkYvqXxQUu+GGW?<(uXd`;gTRPZ+x?9sP5lY1lc-`>v0 z_865#9GSRt4z;1UoncL(z5e84^F)UOI4`|9r;~MD=YLYJ>iKq7WCLAU z?4%;?Ou1T}+UthQb|Q)!R>K05yOH#?P;tFk9B1vfS;rVCX=QuF!#@i5D&JgFBQ+|H z#R8REpkd$V3#!zBz16t|*OC{-v91SszN0vI22eY7#T^^+v#Pai$k?SK1};l94EL$l zImaW5>)db0j3o-cpRZVwF=^7+eK8+DI13lC-S9pI4=ATCC5+!!g8{A!RG;ucB{fOo zqU!T$1>dJ&hyWAlcj)~A1@|jJC&!|e?tVgd8gPa*M+}*Xmv>~XVaglPxUFR3;xDZe zBBch!u!I4(4il5L>8+&8r#EvylFBHC=NumQCy3p`$&(5vFgMZfM!Va|U7qiUSuK@m z3c6{fCT5&VR`c%drZp4zXU4m~!VE?(y0UrlQhphfvAL18sVyUTN8(ff<&xvu;q1iV zFg}uG1|!23?V(+7L}DX(yHZ9o_)+3rAvJ;V%O>t7*}1$WHEyjKWg*9zy*Nx-K__N` z&q_KG%Pa<3LEQ;1M$6WkD%>BoaW`oa{%(tDy|3@EyqGSnR^DdM8)mhh;0xZ>Rj^6v zw@9}_47L`>*2`#UC9B6uO-TpH2=QV;y7j|mKc`76XWUk`(80`?=|xrC`y5+2w2MPK zA6XA#OU-0wO=-$6x9ICCTL;(>$O_Z>kR=v*wJMbglQ!5f?3$YC%7p3l1vxjVH+&YS zZs2pgQFw@zqQ(t&lrkHN3+>%iGE;aVu8%6xx3L5j`Twhq{0|B~PmoCPU-#W>9c_I) z80Wu7Fjl7oASFt2GslkKO&#s`dAUP5nOv@A1}K7@-G{SAL*zQj`KXqaTXD1=&Eb)0 z);VM{=P98!;h6_&bI@xZ4BCV7B3bx5dihWF=^*=H=b@2q>FA#;{+F>9AkfkhlS&kpc;v0M{zb-$(aUq#JsYf7Hn1|%@Ln3ZtFHhv`cZ#_2 zOlo3i%dpBD8-r|SCI%+*ve<*r4Nm-y^0vBFsFweOL2S7e2`^xF9B5gzBJ z#=`%K!duTB!}-S&2Nc^rS-iC^Upc20)bj<~#I3=vm1qt9GPmJn1aCxaO%ZW6ju;wm zbQk}g!tbNxPyMN9bZlWy``1bm>qP)h;!*XDv>g zwihTBpZTKPMb;|x!};%A7w#_TdHgh^3({eS6K|8m3YjFZ1;ee?VKrd~4%@`fa zse8RuLzpRtm5a`?p__}C!1NV>($2~oTsybCB&C-#svQ=JH+X47edPl3qFyZ#6vurT z&b~GZzpi&C$#lkuNSo282SnC(^JJ$6X7KZo&S%zg#RDa0T#@!7HLYuzUub6W-sBN511c9|Ge~;3CxNXMksh=FkXnvmO&B#{oSiefysRkt zi#`YJb4{0%WejaYw@B|^uPD*cvoFiMMk!3KMOk=ER%S$6X8F#uRYlLj7rNFuHFfpl z$up?HN}R<~tX{lG$~oG|e+nZ~)tN$3vZv&+r%j~d0D8gbL4bwr1U6&z8(Kqr-U zBew_4aLQ5AvwC-ePETxo)PKccNv$SGwo|WmQ9SESrG8euxr3xZ=6<{kW|6E$xg;^| zOpRy9@i&qkXzl6kM~^T)NLe8}`_pfR%er-v8#f-}-C$t4qz2&PLbspPY0EeuVqkA{ zb8iI0H3Zch!LXQlmsn|k6U1HE1e2Kl4ugiR4ZW3hd!xL?vKXZZr&aF9_#BL(vlV6& zgtI;kSvg_}79_BNukNQTqcoxs_)|R5lRmGLSuI6A`hG1*D}=UOvsj}f?zK?YUgg7! zwugmx2`GeWM6#ImSL4j|%4XVf2>TfkHf~hg!QeWI66g|TvX;Xla7>797$F+6W$Hop z6KOS=EQI&u{+90fxUtXt)RK$YQXD~I zux>+Bz7kYf2+px){uNLgI!pa&_Bn+BR+N)Evq;aX)(=^G*CaP&!}^iS(zX)iN#Xi~ z7a9}uCX^hX8tu~}NB4~68S&FVaWaje(#LotA7N2(jblOPm%NydAIt#B z=40)giz;rH%}^;h&DI@t3Af_7OHL}?qnyUNKBgi|=F_u1YE>$gFK9zXvz@veJ`bj~ zM^r>i!FwqyXP-LqPVP&>=cmYA2OdiTAjHsO+*~Sc$EXz9!-(u|d#lOLdZs%vIn6OG z(>IEnhr$vl1B<6uRn-$$j4s}QBRi#2<*m~V+KTml;pQwrUjA_;0^g?Sy}{I+*opN z>m4W9GLxL^Rfx~?vi>c^{aYxbhyk?>;W}CjquURXh0~Ap(zEadU>%+kRtz6Y+@OSC zBy~c+-=_r94meLmz4&5T{-_YeIB`0c*=r_ALY5)u_YQdn1|_CI1sLX9iaK9^ z;s%~3WBU~eE1T1vKV zjFVilB$PBq1gXWg-%t_=0Cp(Gyg@j&B)Bg7tO%FOLCyxCIB|s#v*`L?);p+RY%1n) zhFWwZto=++ zwRofzR0GXwlH$v$xE&__gkMhaT3aU##&ed*+m=bP>oa^iMcLXq$&KqTdt^SaSuck8 zv9Ya>+3j)i_`I{X*D!E6JkH(JgrmhjsMsG;AS`zKw+`#^h=OwpHYkvk;f96{2-7P5 z3%!tnFMLeFJ$hVEFg5JByy5<7UKK~n3wGpH3Bz^vUwxWH=5gmraV$AE4zjEHgp*oD zl>3DQ)$ivtR^HD`886?Bu4f`Olttc2Wzi~)pmiFNC+*a520Q-r0Apu-P?nO?8=8L!8Qdu6xcN1;9|35k%A(A z1|{F4xpv?%pmqkm-I>&;`PQ^rqt4J2b>sH@-TBJbHvEC{*7h z@w_*qVnlHMJm&;3EwXvy8zdf(krht4!~dGETk}T>r)x~|nsc~-MAvdj%igg~t{K%{ zuGN-g*jlb!PApry>5eI7ETQwntX-WmUNXy2L~=#<@W8+nF@x zxg`bE+B$>L>S(alF2m)pQj0Ac*%S=Wg*r%)U*yLjh(S|bG0duCygZB}%?aPcl@k_m zO;vH0%RGEgMFuTZ(vlbkP0%i_RJVTIXL8%)>}F(ry^jS`{GXn~HW{N1xu|y2fw^;hAdr%9VQ4_J^8oshwwKMCRXU2rFJsNzOTP`_a2;_9AEyq`WrXzEA?Mh>@S7- zvpD?Wgi?-Dd6Ws2PbgK%ODm~w~JowVA(=j_3aapmlg8#|P{SFY~E)d}TH%GJr}>V90^shlaf zI;Grw()NIIb}45!FXj(&#J6Vl1czR5D|OeiN)_ApUEf-&c~-;q8~$7?dE@%+?-G8C zGl|ydZCt!!`!4E}mtDKrC@(cDw`$G$%y8?_l@;6b-Np^KVP9%AymGPGa9_16O}902 zrM9~2RvTzjt2R*S)#hrg)L5^(tqJybtKr$@s_WrJ`(L(Rp_McGdPC{)AsZSE?g8?=wga(QXKT7sQG+S4ed_^lV*gxXNJY$@et^aqX?9U1_Bqw^YL%+>f`T6~~w##klL7r1{;Y+A38_Oo z&2&Rym+qEBmahG$(3d}sLM6r$dlD0g^iXifK%~31p#=h@11O+ljQ0K&4jV*q^`mD= zA4^VyJ1z``;CHIafO_0 zP)Xf$@0Dv!zkLx+>s}3PwX$w#2JBIot6iypy!;aA%dR$jtF|OGwp_mFR;{qxHl;1j zr1Cpr&AkH{Zfhd`4Xs_>9}rEtk+8e`h--V5vg@@HZZ{hCYQTayS23$yr|SCtDZIlc zvr(yZVpk%a*o*&y!(F)Ocw}a*HCiZC?Nzr>XpI*Nt2L)tVSS=dAmM~}Mm1O(nwNR| z@CqR%?+|P6XVIQ4QX^;ZcA#JjA&-fnJ*kP|iIJ&Mxn9C`^GBxeEDrz6sKuoL5NQPZ zJD^!e1N=W6NdplAypBpFeY-_LBxdtt$_Q6T_qI&kp`1O+*(-gb@jm73m-?h~AbJl< z9a8xrzj+dTL&aBiADQ8YO8L8s~PAX?!>hDv|f^tqt9UpUA zIcKE)h;lxloTsIZ4?C-zXQck9a?UB|ywvfLS>;@i`Vr;ilygz)_~2(Lcte<9QqEaNFQO=vn`H0j3kdG?oN2ETl zoPu&bCUpSER!&jsr<7Atjw5vd%2m#i)XykqSvf0G2hhsOxg+(bm2(%Yq|$nb;wYxf z+*+;Ob*Wm|SD;T^vWm7}E{O(4&R|;&=sltQIqqBJuP(Hxk{b%HOVxEP;9~7gkR$mN zcF^UPnhkKS6PCYHYgQbq=vsEM0!~)5>X`Y$ogm_TT){W^bJlC+#tMYwJ-bqNLh*ir z49auydankVPYn@L)b;R|hTSOFswboyvO=f4w1lR3wFm?cUknMnf?IfJxzWB~S)a2m zHyhR(Ux)6c2dyKZb6$x)sr~k9tzoS;ODp|8Lvu}|qERSN{ED;$msj_jp+=|`L9GHB zE%6;B2TMNLQFtdD9&*RO^Q@#QzChJ3K=6378AcMO5VBvA+jHs zKM<_G>U!m+b&L%{gi?T%a2gtlBegS@yIOCoM{bf&(}hZo7nNJOP57_=NX0~E!$zo>)%fO=jLt)h*3 zXj4!jhE)RwTc}v*OCzFh;Q^@_Wh=QDOlIv|wwPP0)v_5o_g#vwnNbbEbiG`bY>EoNxxwHa)Sc1RsKWA)N%?tHG@t=l!0{unM#LZ?90BWu zIz&xYW|h`k8z}=?pab``?y8$KhKT_510(?ln4GBpg&}o_wGbg%%^Qij2PY783}J?* zg0q)I(+y{+rByPh;vpuHEntmB z?*g9jMp3kq=)0AyU;-v!O>2W`SNN2%E}#bLehO$E&av=HH+uJJo$jh`|AKH|h_q_`5iKB0&v}C&tM{GJPS^8?B|dOTfT{s%)Hxh?xN}2~8$IcBHq9 zH|)D0ELs-Tnzw3KPFU_e*IRe&P^gFa_4_dUR%)fOS_w|Gv~GU*@=MpRSktqa%xkBv zWHMK8U$tK6SgiTElh$p|uKHyPYrB%kTw9!mo5Fh$ABlg&Q0;_GYoBlk{Z$bG`ySf+ zX%uQ`5>~+g;_3CY0aOwl@F4vC51@zxib58gQYP^sl9QIH!fLhQDifB*YHBeUH}sH` zIq026ccBRKuA;6P<}fF3eI}`gDzqS^(KYBjF)9zMiy$e@kMMDSE!>e&3O88E5B zPzISbW{XiKH0z7Z@1Xi#kZDb?G#d4DnatYS+T7Zyxth0}x&2D!KKq&{C4|*kh;Bm$ zb56sVj;J7XSM-9)VHsJyS*(;x5h-ZK*7Pc$Bz&l8DH6n)!O-c`hk+Akl7Z81oWu#k zKW=gD58=o()6>pnZadx_Ew@$aGVor;V6576R@-_TtU! zx8X7er?`1N453`i`E&#JzST+rxM$<=6#KxVM!zK>-=}%KS1W-mL12Y)6{53QqT=us zbf9gnVZ!pj5X<27U}(bM*P|-~&<>7Ix!i!b2Q)pADdV!cziYi+S{N6osM3GmLkf z5Jh#(wbs}b+$S+lO86-@q6twjVR0teO7VJY)N$Q9YvNMxqi#(K+@qGiOh{7@s&sH{ zFnps&3`F@D8Jv*lMO5N4G$cR(80-t2O;mGHO;d{2lUxPZ$?r(AT21}>B@1dcy$=Le zl`1Md*yZIa^mm6m3qBsP(PtyKINHV{E7$1SE^9w`=;MJqYE5`upQlfN4;o-<-&OTE zQ5gBQ@M3YKtl2TAN07?aGr3>{pPS9pbBi-+u?g~F2;(`sf=I^m0E$PoQ<#l+4Yep* zBbs5CQW)CGbUPH_#gO55`ZB(O9<*AV-jO6`3~>{lgJ-l&V(_D3 zhBXCuj9iWeU$`WABdFlNqX(^2srdk2QBNL;a%s$Tiz>icw~b*^CY4>UBbWfGg+LnI zSoFtO?){QmZ)~Olzda>_B+z1TgR>&fiog^qscg}MTtJxt+7c2E=rdOyk-5^W>W>q5 zPyy@_E)fpw9~xu~?}A?__`u-#)2|zYh(Cw<^e*NTMjK722bxN^s6Rx$Rd7DI64@7E zhz>EAYE_pPGSWM|zVYUE+j-bns|nstfN?_AXhiCXUBP_vg}3#b(h++L#>`s{()3(w zjcdojZLjHi$AF9nm}*A_vqg{dOn*t|L?f=>HTcz&Ejt*$gF7==?vO)$Ess4}cQq$R zh7}frN%c_~5JGC;lMME*+6~6?BPXc;dmM}~`b2Pc@Id-^Vg^BeVYCx6xB=P;xJanl ziVOe~IV4)DlRD)In-|)D_3G zehC&h1Sec+7p5Bsp=R#b_iTL?Dy3aPi1~?WCZimgo;i=_^esH8RYy@XPgrX;ui_lR z?GA-R?1GLm! zeo_>lnZfvS+D{q;(RE^&`d`M$W&}myXzh45NP-ChJgG$JRf9JK9#WCn#F{ZuC=1X? z`%I+~-KL>CI|MX(;aOhV%GCK=vyJ&l}v$>)jP^bc; zz+OJBuOp^T2PW>pZ!JMw0dxshwRjaTCkO65%!27Fkjm}c2sUqxz${`oU3&AD*su#7 z6M~Mg*?&O;pT>ZK4mt_n|DMF&Bo6!=JU$pLVGjl+oG%6?zkm~s5-RK3_XNo+xCkA1 zbR|PACFn$p!ifp|5GR6`4gC-?qua?t9qj;d;!2#mc7xbuDrjw@k=dCT7|c=nX>5B zK}I*RbHe4;2Q)@_OBC@?qtijE{BV(?JdZRMk&OCmZ^$y^7rWVjwok(rWf`jxrU?jf zZJ!EPAZLI}atr&kcUJ~MN#KNsAc(Sp6I#&3iLdP_R5Yv5+*&vQqJS|yUEcsFHdlc` z1^^zpT&b1r_QBR%@MN~g`)@UC4L1jn0~60NQb?Vd7EbJLK8ZV#z0(?R-_cx{Hcu;2 zgjAF$RwVs|SFhq;H=IR?!`9L0;YSoIU>Fqx>1n^VC+ z`#4Uzrb7&*xF^gqBK*f*2GuttwSgH2%Qeutrfl#tWG_%Lo(ta0>Lz6ejaDHX@Y(|>$Undu=#Gd#;ci!>3;N$vD`1a5dr-vc5 z5&O3Arf5phP%qn_d~MWWcoV~F7;s#sppW&VZ-!$v#@T=bM;$RRNeK}h39$UVv1tmY zTrx2NPPr9c1Kk zSZeemwZcb$UPAI6nr0Ghqp8-{clm@?G~pzwtVfVqMecAJDL75YE0_#ApZYifM@@>N z3Bu^o;0Z_1&=x(uSMUL3%bKSFd|j5qA?-*OU|g8Cts-G2Uf)*2_Nw@L&qoo5lSjt7 zC7fV1AlJ4hWD2!vfv?DPLFoKo2o3DZzy^J`nGzYM5dk4P5}g^j98+10_QEtWIyhuI z2l*-&j#V1x?PJT0^ZN2&i}93<(ylJU>L@bL#%=i2Qw$Xpge+hmLvcYCsf{d;r#Wo$ zPL&8=8a(6&>)61cgE4nUOaKO|$e|W1jJfl?BTWPM#nBkEHkyQLwr-It*UP{4Yj(pX zsNgJm$Xq>kbm8>;`QCT#FZH|gddD3YHQ_ssA;$$P3EKTdNYPBKm3Hsfkx$hv6;BFs zV5cCE?slTZFCe)Cj!_!=NQZ7#%S@9#N6d^1W|&CJ|AOm-G4uev|FF9`i6qvKkL2)VXTKiftDuXZB9TgNNAq5tG2=u>I$3HM7q;C^NMaPQl%f%vwW z!ch$NI%0cB<2yz@?))-BVipoSj_6Z?$f0(lX>)%%4wl}5;1dE7c3Tj#S?>e}Z%BTo zm`5)VCX|s1`dV;pFf_K=r-4TYgE)tG#5K3=GYDa&!;4Ld^FR7$-wJjgJ345heT*YT)k2Ak@+bZy;z8VaacAY(4{6)LXjt| zvxtjL#BTIr77EHUm2xqjSv(gU5wV@it}NunMaM-2R7n~P#ka&w7Q^gB9j6^yS@3EY zmv-$u&6)&PnEW&-q;f#$R>UuZZ%k-|r@?>403WvY;lzPKxmdk>Fre?4pO3{s55kNf z2`YvDqR&HMzV)ik(FHU2%P@WbOi5m*BLpGBO+l`hKc!lOo1}rXXbYh&dQH}ut&OZ_ zg59e%mnF}6vnypv-1Y4u*n_&2fw9*vjndtd4|r!Wz&FhFPVGty|Xt%5_@0*yBHCeqz;5$VfcucaSRfZf8bxz-d>@= zP7m)Q68oqp9!Zy?EH~`w6VibO+D8(LE4qy}*M$zr z3-kuDw~rZWOiQ>s5o{4^7~EY4O2{q+B{PFjqVWN4!R!I1O}=;df3=TCKZH14ds)oI za*2uhP{izMD<>Dl-m$F}&t1|+v)Ddzi-w`=Ni#kjwxP8Q^;cSC+D&jxch5WB{(FSW zHKNEmS|ef0$R_v`hr3 z>mzTL!SSlgpm@!CvI#ezhZQAN=SjpEG#QrCPF80 zX$31&xCFA@g(NH?%4!~Wppnn{{{gVre*TapNk-?uELT=5eR7S?W^UlN6gOU)4xjMv zA>nCrqT>P-gbeP1?6k*2GZ)QCviddWR{giUM(%Vr({Y|HT6pl>Qn`W;@mzrccD?oFoKErz=MZ3cN>i)7}G8BZ5@eGlEb5|W$j3fu5LJuX_1!WCWXJyq_^J)efvJBHsNw>VTpl zyYu+ah5&M-Q@sYYiK>(6^3!jiu}+==yJhO;Lc~uuFP1~x`L14-z?`sK;T8q{oOrZ? zW0xRCbH!T4A^)(lL^Lygq}ihx6E=Z&Zrww|-+~mu|i-fCVlhYGy$-M27zUPFJd&9Id)EQ!qNo-PezCoIu2yP7~>i6^}gTRj2{uoBuJ=?=`lW^#SSb7RkD9N;?28DdUbqg|-8HPxmJ%&|t z&7~!ZAU4V&a6F(fmT#Qzeqhd+6`{Hmt@6MUmy7m=`D4Wk3+GQwM=L0Ug{|82C7sU< z=0|$zD4v2wP1A6*FP_PVSlz09@xM;YX^-z%Vgv!`WFmNe3%qT&?+#oU9@IBmE%N}N zpusj64w?alqbv-B2eS9t4Cprq5PmFz6I-yK2k+cKq=Wrfc$sED;5YF!9{MtvM5Fbm zU=|K824{HqP>YVab_x3yoj-Q;)WUgDkQlY$K{r_QD7x)>B2uK{?IJLSi_OR$TBACi zuz4ZwyzmI|J%$m5&=(f-V(m6N;x!w2w5+ zkZbNmnDAJ&=-1Edk`wTMvCDVA<~@Udn(X@Buf6-V4oK0^(Yko3D)f>&I!aXqFp6Nv zcS$?i@Qcw@2c-TDA;tG8S~^?AryihR11k2-87iQG$}Owa_XXH@fnO* z{h!Ya4wokZ^0)D=F`b-*imQ^mC}RI7%>6Fef2?y}w_}4bz$0|$S7Y9?Q zna=%sG%zQNFfd=iNvM#49#I#kuJQa5sz8CxDvdzREK(s}P%d! zIzHiO>TbS+_ieUJLyv5j{!7F4Je*9lh#D8J-+FoWB?POgv-41ov6yw%eXCi%cVYU9 zcH_=6jdvPe@whDu{t`D^b+DqtcQao0YqMw1o_S_=KE!IUBlfBe6mtVPvAx3l)Ye28 z#g*KG{7!ULsPGfzT*#u8Mp_|qH9R4NE*j8TFw}{V&mKJ*EwcEJ#5^BR!|Bvia%yO5 zcu#T)>*5FFzfW%l>zrvkWTsV6*%sEdA}-mhdNz`&gQLsLjG`q_)pZM)%-XrBRlzWR zqA~B^#XCDN--$2eioX48Z-4LY-@mm|UTVy~c>UJfzrFFwXWrac+PJ*&lN&F;{Y~8b z)=z%_r$7Fs@4fwd8;y-;H?C}a@$KJ!`yYJfGSG|1yPR`lzI1e_?1%V8?7mql+^GY# z)Y4GSM0wOY)by5#OoG78JsAXY${GX~ za1tU=OmECb%v?c>_%eVcTuH0DY2}~fE`DzVF=&a2j9aq56;Xv*jKo7hrnzYJppixY zui!NuIExl`LVm1SPhh@SGKJ30Fqrjf*~flf*3~k1oRR$muw4lBdsz(HIXzeAky`g4 zo#280@!$UYpLF6lKgq2I5unv;UcWzv*`&Yc`|as{He%XC-d`gwe;!4&`fGR1D=%ZA z0dMdu*}9>RcW`1vDbOt2Z)i%1b96Dc$;F3NS!OF)J5JNsUPbe85Ea78 z?HDsQ6cnD0HGv=$(2yjuqt&QL0Bn*r#;b;i#utNY;`BnuQ=)D?dHnrZ9}{jMdk^l! z332>!e_VIlOCnSdw{P0Z?sWU5ckFHvaVz38Vc->+p;)=b?X2d!Ie;%1Z+9I`#D$Ib z8QunVu~el~R_SpB*qdn6EiS$FUc-YkBbr!BsB7x_5!6~BSgxqG5t#QzcuSa)UJud2 zzDo@WTzP+$x2W5-c8JH&De#tjQMY60xM&*DlLbWSDwvnhiY5Nf#1K7g_K_H6%|tRi zoE#cSOeG(}h9|p{2U5Yag9&o$&U=$50r+6#8E#$qXQa*14%!@B4329eVpuZ*2Z$!r zJffJ2tx|DxH}PS zPG5o$+z1!mhbGq!m|UE)G_|}RB~UJ-kStBOt1oC5b<_Zg0_UG67MDl|5e#8|V2W|i zZkV2tnTWWv-W;V`Ydfwn9T62-vG2v4*+}7Zur=2UgsRx{Fut(C%;Mm=_@Lb{&Yblg z95?G2Brphq3ltFw5EMU%xEi~B4B79VE;%qovDb?;Lw-ey7Z=6#mM=U9B6 z#TQt7k;Ru-{3RAY#^T3We3`{hvG{2gKf~hZSbUYmUuW?*SbUwu-)7OC7gC$zwWBC< zIDCHm#AteGVq#)!V&}xjL>l{!rY4d&QWKN-Z**c@{!32mo|u~0GqD40_TlO%+Kk}8 z6rSL}JLLWZuJc;Tv>1~X@59~6iNg~Q$(u`fsrlm!cov8MpHRT$G`m}auY&pkA?|7_ zia6^cM@d)f5|&?vgroHN_^Rd!&xW z*m!iG)Um7Ser{&Ue()eR7=1|U*wqx9iasoLbb^gU4@(`pnm)qKOxYeCV#82N>e$uv z2sbn3b##6d(YME12Vd{KF{WV$DZn6!gM{i6OkM2YhqFnaxM!j?IHo#!3_N;S7Q!el zu*PqV@5|?rpuCGLo@LRdJ0UsF!k5Vj#!*r2E%%=30~76)9=PLPf<57nBxInrg`a8z z0vq~X%ttzs#h#yyOwOM}H{0EcMn3{?p0H2>iU_FzPAi>}3BIKLpYW;c?cto)36+RH z!rysvAVhj}V919+AX={A@E1^YnN}N}UMQMS(0E1tjX}gefhV^Fgx-<|VkMK)LVOb} zLiaE=G7Y9qiU>DgLmo&0J8oC70Vi#(kG6p!SqUcw0;B8UA2c9H@!JGM&pmA38(>8I z6uaPXY9Ji8*n@_2!DCx=5hDud8A2C&Dc|##wzciklZan&qt+*xZuS4+o=+yxugw*< zm)1%*Lc_Km;NQGwr z>K0-aYG#st7cdPSPr{}N8KlK+wa)=lAETWOg3$`5=q!%lFzjZ(hRy3LwdE(KvsM-+ z>bjM~f7lGcr|QWdl_dr5FyJHwvSLNl*l412vB_yY8k>=?D+#8kjmZ(QG&V<}wB{P_ zPvLr46fK)JAr(r0s@Mg%T@a2E?r7#Ss;A`@(|MB2Gzo4DoQMzl27|JWDVo992C!}# z1u{!%0kkDqld^X(yE6GwlwVz*Ww|skQL2?p2$o3iUz#4LM3n%9n zW=}pndvf9S!pU=|PMtfwke8Nnm(AdXTWR>Yl3Wc>vgK8{aB|3-(v@rmZ_h>6moSNI zKwLhF%UdR(g}ay4>U9RaOxmg>dB0;g2%K;X2L@XRjh?+2ibQX1p+S|POBdy-cD+VA z1Q?1TM})2-#R^+AGo~=_ldK2Rr*0^l{k;bbD_m!4G^{c>5E#M+L5nX>O7+>;0U?vSVDuJGGP?s9{xu^@ZNf_Aj* zTKLBH{=s1apDe)OZj1ed?d+C7Z*QW1u<+=y#6HB+ z29iL(o(!5hG>0vWz5zmU5le^LA~6J89s3{4R?AK)6K;IyXXfYTiMzH`JUM^z%trTK7P$AbP z^-n?}IMw-z_!o$`6;^7yCy@l>i}nb_?qI#Htzuk_c8iudV`x1_=b5U1a$1&O>1kE< z=le99?`*cvr`dvTmPJSBAZ2tSZFC|pGPi`nx^FG;DGR?Jb75Lm(U1_aeN5Gt8`!=t z6Adai{#|n8RuT`00u_veoqd;@3D4x2Rua9nhNZWT+58+@q``?%y5J4J=-Qm9S9CR-XzKp(#S95w+*>NNB!$@;%Az3%#AD6E}> zdaidM*95cHhYn7HgN93Nv1M`ijQ0k{A>zH2)&LBDUZa&nZyM^qi6;3mr-?mb!J;?) zzMS4Zm-`=!7a@}M*hn|pzy5cL43YXnX)OF6144qqe(yoOEza!g3V7)d*EcwlUtuBf zt5;e3dn_cZ^!Hi&br%1K#Xn~8Pgwj@7T;p=8!Y|>i{D|4t&#Gr}_^+UF0arMrP(sN}`~ZHw?$*p?>kz|> zXKuHDOx67USg;^f+4)QVP+`Z;+AyK8uEKBDxtq4Hf3a%L5I-jY58>P?RD}B_76nYb zjRf)Q{d+=-qgKg4(qejknvQl1^67EnnaTIw97Hg5uxHQVP`8VzDDB0b9o*<1UfCKm zR2;FRz7Bn@`Z5yEiGaK_MuW}c|CxZ$VGi-^%MUjU07k!l3`U3q1CbBnq$fLq6b+3V zI4iWr6MRW~DzqRCuj*e7jod_7^tCUG)v38`sqA6JIP)@jI%rXA$XqlxNuss)FY#6R zwC(|*6+^NOKHiPZGET6TPN~GRy+HUKg0O8pq`85FEcqS)#y(yB(4hE;tWVBm_44F1 zSe`8Fl=U*@+;&zKcYrm;)y*2N!_w3Cz^WH+>Xp&GAp5-@kd^KJ20*rdZw9y|Pm<{s z9R3{?JxNrPVOyEQ?|JE80ow@E(vZR?Gz(fj6gt`X3^X!`Qga8p;Kuj3g}eULV4)gm zWnn^^-os3OWGHy-BBb9|KgprjY3m^4@3SJx! z2%0s^Fx|Pz^nZ3@>JhB$4sv~2zUHf2bh$V))-6!~4nJBX=)Yp^_gVY_i+|0cmt_21 z-1s)XjXpE}vaiTMq(gYTQ^FnjBSl1q|2R%S5kTuZN_{?|kh1fm3I2W|5P z?u#+J*g;biL`+B#KaxWgDiTEaO$I`dzm16Bpyo>R*w+e&8Q~s~u&)1vA1j}g2oCyp z%k}F^b6MIr0}E2-QQzcYH^$N{w=ycKL~?)H`*&zH^N>e0w{{e;9v(kdjAhFOPtqNz6Sl^duycN+R;&2= zQKZRZ-x~z(iMo6eKUyv^sr(Mq=0eAaPE`}Sr-diKdnZetb*u0fP60IBBaO&U`?k{h zx5gzeMzkd%7x}&z;*0{;8qMn89nKLWqJ^bXpf&ig`5*UldSVp6XPi9r_<=uFf2wvL J_}qb`{||?}b^`za literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/builder/__init__.py b/utils/lib/python3.5/site-packages/bs4/builder/__init__.py new file mode 100644 index 0000000..4d6f96d --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/builder/__init__.py @@ -0,0 +1,333 @@ +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +from collections import defaultdict +import itertools +import sys +from bs4.element import ( + CharsetMetaAttributeValue, + ContentMetaAttributeValue, + HTMLAwareEntitySubstitution, + whitespace_re + ) + +__all__ = [ + 'HTMLTreeBuilder', + 'SAXTreeBuilder', + 'TreeBuilder', + 'TreeBuilderRegistry', + ] + +# Some useful features for a TreeBuilder to have. +FAST = 'fast' +PERMISSIVE = 'permissive' +STRICT = 'strict' +XML = 'xml' +HTML = 'html' +HTML_5 = 'html5' + + +class TreeBuilderRegistry(object): + + def __init__(self): + self.builders_for_feature = defaultdict(list) + self.builders = [] + + def register(self, treebuilder_class): + """Register a treebuilder based on its advertised features.""" + for feature in treebuilder_class.features: + self.builders_for_feature[feature].insert(0, treebuilder_class) + self.builders.insert(0, treebuilder_class) + + def lookup(self, *features): + if len(self.builders) == 0: + # There are no builders at all. + return None + + if len(features) == 0: + # They didn't ask for any features. Give them the most + # recently registered builder. + return self.builders[0] + + # Go down the list of features in order, and eliminate any builders + # that don't match every feature. + features = list(features) + features.reverse() + candidates = None + candidate_set = None + while len(features) > 0: + feature = features.pop() + we_have_the_feature = self.builders_for_feature.get(feature, []) + if len(we_have_the_feature) > 0: + if candidates is None: + candidates = we_have_the_feature + candidate_set = set(candidates) + else: + # Eliminate any candidates that don't have this feature. + candidate_set = candidate_set.intersection( + set(we_have_the_feature)) + + # The only valid candidates are the ones in candidate_set. + # Go through the original list of candidates and pick the first one + # that's in candidate_set. + if candidate_set is None: + return None + for candidate in candidates: + if candidate in candidate_set: + return candidate + return None + +# The BeautifulSoup class will take feature lists from developers and use them +# to look up builders in this registry. +builder_registry = TreeBuilderRegistry() + +class TreeBuilder(object): + """Turn a document into a Beautiful Soup object tree.""" + + NAME = "[Unknown tree builder]" + ALTERNATE_NAMES = [] + features = [] + + is_xml = False + picklable = False + preserve_whitespace_tags = set() + empty_element_tags = None # A tag will be considered an empty-element + # tag when and only when it has no contents. + + # A value for these tag/attribute combinations is a space- or + # comma-separated list of CDATA, rather than a single CDATA. + cdata_list_attributes = {} + + + def __init__(self): + self.soup = None + + def reset(self): + pass + + def can_be_empty_element(self, tag_name): + """Might a tag with this name be an empty-element tag? + + The final markup may or may not actually present this tag as + self-closing. + + For instance: an HTMLBuilder does not consider a

tag to be + an empty-element tag (it's not in + HTMLBuilder.empty_element_tags). This means an empty

tag + will be presented as "

", not "

". + + The default implementation has no opinion about which tags are + empty-element tags, so a tag will be presented as an + empty-element tag if and only if it has no contents. + "" will become "", and "bar" will + be left alone. + """ + if self.empty_element_tags is None: + return True + return tag_name in self.empty_element_tags + + def feed(self, markup): + raise NotImplementedError() + + def prepare_markup(self, markup, user_specified_encoding=None, + document_declared_encoding=None): + return markup, None, None, False + + def test_fragment_to_document(self, fragment): + """Wrap an HTML fragment to make it look like a document. + + Different parsers do this differently. For instance, lxml + introduces an empty tag, and html5lib + doesn't. Abstracting this away lets us write simple tests + which run HTML fragments through the parser and compare the + results against other HTML fragments. + + This method should not be used outside of tests. + """ + return fragment + + def set_up_substitutions(self, tag): + return False + + def _replace_cdata_list_attribute_values(self, tag_name, attrs): + """Replaces class="foo bar" with class=["foo", "bar"] + + Modifies its input in place. + """ + if not attrs: + return attrs + if self.cdata_list_attributes: + universal = self.cdata_list_attributes.get('*', []) + tag_specific = self.cdata_list_attributes.get( + tag_name.lower(), None) + for attr in list(attrs.keys()): + if attr in universal or (tag_specific and attr in tag_specific): + # We have a "class"-type attribute whose string + # value is a whitespace-separated list of + # values. Split it into a list. + value = attrs[attr] + if isinstance(value, str): + values = whitespace_re.split(value) + else: + # html5lib sometimes calls setAttributes twice + # for the same tag when rearranging the parse + # tree. On the second call the attribute value + # here is already a list. If this happens, + # leave the value alone rather than trying to + # split it again. + values = value + attrs[attr] = values + return attrs + +class SAXTreeBuilder(TreeBuilder): + """A Beautiful Soup treebuilder that listens for SAX events.""" + + def feed(self, markup): + raise NotImplementedError() + + def close(self): + pass + + def startElement(self, name, attrs): + attrs = dict((key[1], value) for key, value in list(attrs.items())) + #print "Start %s, %r" % (name, attrs) + self.soup.handle_starttag(name, attrs) + + def endElement(self, name): + #print "End %s" % name + self.soup.handle_endtag(name) + + def startElementNS(self, nsTuple, nodeName, attrs): + # Throw away (ns, nodeName) for now. + self.startElement(nodeName, attrs) + + def endElementNS(self, nsTuple, nodeName): + # Throw away (ns, nodeName) for now. + self.endElement(nodeName) + #handler.endElementNS((ns, node.nodeName), node.nodeName) + + def startPrefixMapping(self, prefix, nodeValue): + # Ignore the prefix for now. + pass + + def endPrefixMapping(self, prefix): + # Ignore the prefix for now. + # handler.endPrefixMapping(prefix) + pass + + def characters(self, content): + self.soup.handle_data(content) + + def startDocument(self): + pass + + def endDocument(self): + pass + + +class HTMLTreeBuilder(TreeBuilder): + """This TreeBuilder knows facts about HTML. + + Such as which tags are empty-element tags. + """ + + preserve_whitespace_tags = HTMLAwareEntitySubstitution.preserve_whitespace_tags + empty_element_tags = set([ + # These are from HTML5. + 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', + + # These are from HTML4, removed in HTML5. + 'spacer', 'frame' + ]) + + # The HTML standard defines these attributes as containing a + # space-separated list of values, not a single value. That is, + # class="foo bar" means that the 'class' attribute has two values, + # 'foo' and 'bar', not the single value 'foo bar'. When we + # encounter one of these attributes, we will parse its value into + # a list of values if possible. Upon output, the list will be + # converted back into a string. + cdata_list_attributes = { + "*" : ['class', 'accesskey', 'dropzone'], + "a" : ['rel', 'rev'], + "link" : ['rel', 'rev'], + "td" : ["headers"], + "th" : ["headers"], + "td" : ["headers"], + "form" : ["accept-charset"], + "object" : ["archive"], + + # These are HTML5 specific, as are *.accesskey and *.dropzone above. + "area" : ["rel"], + "icon" : ["sizes"], + "iframe" : ["sandbox"], + "output" : ["for"], + } + + def set_up_substitutions(self, tag): + # We are only interested in tags + if tag.name != 'meta': + return False + + http_equiv = tag.get('http-equiv') + content = tag.get('content') + charset = tag.get('charset') + + # We are interested in tags that say what encoding the + # document was originally in. This means HTML 5-style + # tags that provide the "charset" attribute. It also means + # HTML 4-style tags that provide the "content" + # attribute and have "http-equiv" set to "content-type". + # + # In both cases we will replace the value of the appropriate + # attribute with a standin object that can take on any + # encoding. + meta_encoding = None + if charset is not None: + # HTML 5 style: + # + meta_encoding = charset + tag['charset'] = CharsetMetaAttributeValue(charset) + + elif (content is not None and http_equiv is not None + and http_equiv.lower() == 'content-type'): + # HTML 4 style: + # + tag['content'] = ContentMetaAttributeValue(content) + + return (meta_encoding is not None) + +def register_treebuilders_from(module): + """Copy TreeBuilders from the given module into this module.""" + # I'm fairly sure this is not the best way to do this. + this_module = sys.modules['bs4.builder'] + for name in module.__all__: + obj = getattr(module, name) + + if issubclass(obj, TreeBuilder): + setattr(this_module, name, obj) + this_module.__all__.append(name) + # Register the builder while we're at it. + this_module.builder_registry.register(obj) + +class ParserRejectedMarkup(Exception): + pass + +# Builders are registered in reverse order of priority, so that custom +# builder registrations will take precedence. In general, we want lxml +# to take precedence over html5lib, because it's faster. And we only +# want to use HTMLParser as a last result. +from . import _htmlparser +register_treebuilders_from(_htmlparser) +try: + from . import _html5lib + register_treebuilders_from(_html5lib) +except ImportError: + # They don't have html5lib installed. + pass +try: + from . import _lxml + register_treebuilders_from(_lxml) +except ImportError: + # They don't have lxml installed. + pass diff --git a/utils/lib/python3.5/site-packages/bs4/builder/__pycache__/__init__.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/builder/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f12995521d4000d63ba489c0f6ff4fb45c376ce8 GIT binary patch literal 9260 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/builder/__pycache__/_htmlparser.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba89d280d565b2d9767dbb456fdfe341dd4421fc GIT binary patch literal 8764 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 Da9LUQ literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/builder/_html5lib.py b/utils/lib/python3.5/site-packages/bs4/builder/_html5lib.py new file mode 100644 index 0000000..d9d468f --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/builder/_html5lib.py @@ -0,0 +1,426 @@ +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +__all__ = [ + 'HTML5TreeBuilder', + ] + +import warnings +import re +from bs4.builder import ( + PERMISSIVE, + HTML, + HTML_5, + HTMLTreeBuilder, + ) +from bs4.element import ( + NamespacedAttribute, + whitespace_re, +) +import html5lib +from html5lib.constants import ( + namespaces, + prefixes, + ) +from bs4.element import ( + Comment, + Doctype, + NavigableString, + Tag, + ) + +try: + # Pre-0.99999999 + from html5lib.treebuilders import _base as treebuilder_base + new_html5lib = False +except ImportError as e: + # 0.99999999 and up + from html5lib.treebuilders import base as treebuilder_base + new_html5lib = True + +class HTML5TreeBuilder(HTMLTreeBuilder): + """Use html5lib to build a tree.""" + + NAME = "html5lib" + + features = [NAME, PERMISSIVE, HTML_5, HTML] + + def prepare_markup(self, markup, user_specified_encoding, + document_declared_encoding=None, exclude_encodings=None): + # Store the user-specified encoding for use later on. + self.user_specified_encoding = user_specified_encoding + + # document_declared_encoding and exclude_encodings aren't used + # ATM because the html5lib TreeBuilder doesn't use + # UnicodeDammit. + if exclude_encodings: + warnings.warn("You provided a value for exclude_encoding, but the html5lib tree builder doesn't support exclude_encoding.") + yield (markup, None, None, False) + + # These methods are defined by Beautiful Soup. + def feed(self, markup): + if self.soup.parse_only is not None: + warnings.warn("You provided a value for parse_only, but the html5lib tree builder doesn't support parse_only. The entire document will be parsed.") + parser = html5lib.HTMLParser(tree=self.create_treebuilder) + + extra_kwargs = dict() + if not isinstance(markup, str): + if new_html5lib: + extra_kwargs['override_encoding'] = self.user_specified_encoding + else: + extra_kwargs['encoding'] = self.user_specified_encoding + doc = parser.parse(markup, **extra_kwargs) + + # Set the character encoding detected by the tokenizer. + if isinstance(markup, str): + # We need to special-case this because html5lib sets + # charEncoding to UTF-8 if it gets Unicode input. + doc.original_encoding = None + else: + original_encoding = parser.tokenizer.stream.charEncoding[0] + if not isinstance(original_encoding, str): + # In 0.99999999 and up, the encoding is an html5lib + # Encoding object. We want to use a string for compatibility + # with other tree builders. + original_encoding = original_encoding.name + doc.original_encoding = original_encoding + + def create_treebuilder(self, namespaceHTMLElements): + self.underlying_builder = TreeBuilderForHtml5lib( + namespaceHTMLElements, self.soup) + return self.underlying_builder + + def test_fragment_to_document(self, fragment): + """See `TreeBuilder`.""" + return '%s' % fragment + + +class TreeBuilderForHtml5lib(treebuilder_base.TreeBuilder): + + def __init__(self, namespaceHTMLElements, soup=None): + if soup: + self.soup = soup + else: + from bs4 import BeautifulSoup + self.soup = BeautifulSoup("", "html.parser") + super(TreeBuilderForHtml5lib, self).__init__(namespaceHTMLElements) + + def documentClass(self): + self.soup.reset() + return Element(self.soup, self.soup, None) + + def insertDoctype(self, token): + name = token["name"] + publicId = token["publicId"] + systemId = token["systemId"] + + doctype = Doctype.for_name_and_ids(name, publicId, systemId) + self.soup.object_was_parsed(doctype) + + def elementClass(self, name, namespace): + tag = self.soup.new_tag(name, namespace) + return Element(tag, self.soup, namespace) + + def commentClass(self, data): + return TextNode(Comment(data), self.soup) + + def fragmentClass(self): + from bs4 import BeautifulSoup + self.soup = BeautifulSoup("", "html.parser") + self.soup.name = "[document_fragment]" + return Element(self.soup, self.soup, None) + + def appendChild(self, node): + # XXX This code is not covered by the BS4 tests. + self.soup.append(node.element) + + def getDocument(self): + return self.soup + + def getFragment(self): + return treebuilder_base.TreeBuilder.getFragment(self).element + + def testSerializer(self, element): + from bs4 import BeautifulSoup + rv = [] + doctype_re = re.compile(r'^(.*?)(?: PUBLIC "(.*?)"(?: "(.*?)")?| SYSTEM "(.*?)")?$') + + def serializeElement(element, indent=0): + if isinstance(element, BeautifulSoup): + pass + if isinstance(element, Doctype): + m = doctype_re.match(element) + if m: + name = m.group(1) + if m.lastindex > 1: + publicId = m.group(2) or "" + systemId = m.group(3) or m.group(4) or "" + rv.append("""|%s""" % + (' ' * indent, name, publicId, systemId)) + else: + rv.append("|%s" % (' ' * indent, name)) + else: + rv.append("|%s" % (' ' * indent,)) + elif isinstance(element, Comment): + rv.append("|%s" % (' ' * indent, element)) + elif isinstance(element, NavigableString): + rv.append("|%s\"%s\"" % (' ' * indent, element)) + else: + if element.namespace: + name = "%s %s" % (prefixes[element.namespace], + element.name) + else: + name = element.name + rv.append("|%s<%s>" % (' ' * indent, name)) + if element.attrs: + attributes = [] + for name, value in list(element.attrs.items()): + if isinstance(name, NamespacedAttribute): + name = "%s %s" % (prefixes[name.namespace], name.name) + if isinstance(value, list): + value = " ".join(value) + attributes.append((name, value)) + + for name, value in sorted(attributes): + rv.append('|%s%s="%s"' % (' ' * (indent + 2), name, value)) + indent += 2 + for child in element.children: + serializeElement(child, indent) + serializeElement(element, 0) + + return "\n".join(rv) + +class AttrList(object): + def __init__(self, element): + self.element = element + self.attrs = dict(self.element.attrs) + def __iter__(self): + return list(self.attrs.items()).__iter__() + def __setitem__(self, name, value): + # If this attribute is a multi-valued attribute for this element, + # turn its value into a list. + list_attr = HTML5TreeBuilder.cdata_list_attributes + if (name in list_attr['*'] + or (self.element.name in list_attr + and name in list_attr[self.element.name])): + # A node that is being cloned may have already undergone + # this procedure. + if not isinstance(value, list): + value = whitespace_re.split(value) + self.element[name] = value + def items(self): + return list(self.attrs.items()) + def keys(self): + return list(self.attrs.keys()) + def __len__(self): + return len(self.attrs) + def __getitem__(self, name): + return self.attrs[name] + def __contains__(self, name): + return name in list(self.attrs.keys()) + + +class Element(treebuilder_base.Node): + def __init__(self, element, soup, namespace): + treebuilder_base.Node.__init__(self, element.name) + self.element = element + self.soup = soup + self.namespace = namespace + + def appendChild(self, node): + string_child = child = None + if isinstance(node, str): + # Some other piece of code decided to pass in a string + # instead of creating a TextElement object to contain the + # string. + string_child = child = node + elif isinstance(node, Tag): + # Some other piece of code decided to pass in a Tag + # instead of creating an Element object to contain the + # Tag. + child = node + elif node.element.__class__ == NavigableString: + string_child = child = node.element + node.parent = self + else: + child = node.element + node.parent = self + + if not isinstance(child, str) and child.parent is not None: + node.element.extract() + + if (string_child and self.element.contents + and self.element.contents[-1].__class__ == NavigableString): + # We are appending a string onto another string. + # TODO This has O(n^2) performance, for input like + # "aaa..." + old_element = self.element.contents[-1] + new_element = self.soup.new_string(old_element + string_child) + old_element.replace_with(new_element) + self.soup._most_recent_element = new_element + else: + if isinstance(node, str): + # Create a brand new NavigableString from this string. + child = self.soup.new_string(node) + + # Tell Beautiful Soup to act as if it parsed this element + # immediately after the parent's last descendant. (Or + # immediately after the parent, if it has no children.) + if self.element.contents: + most_recent_element = self.element._last_descendant(False) + elif self.element.next_element is not None: + # Something from further ahead in the parse tree is + # being inserted into this earlier element. This is + # very annoying because it means an expensive search + # for the last element in the tree. + most_recent_element = self.soup._last_descendant() + else: + most_recent_element = self.element + + self.soup.object_was_parsed( + child, parent=self.element, + most_recent_element=most_recent_element) + + def getAttributes(self): + if isinstance(self.element, Comment): + return {} + return AttrList(self.element) + + def setAttributes(self, attributes): + + if attributes is not None and len(attributes) > 0: + + converted_attributes = [] + for name, value in list(attributes.items()): + if isinstance(name, tuple): + new_name = NamespacedAttribute(*name) + del attributes[name] + attributes[new_name] = value + + self.soup.builder._replace_cdata_list_attribute_values( + self.name, attributes) + for name, value in list(attributes.items()): + self.element[name] = value + + # The attributes may contain variables that need substitution. + # Call set_up_substitutions manually. + # + # The Tag constructor called this method when the Tag was created, + # but we just set/changed the attributes, so call it again. + self.soup.builder.set_up_substitutions(self.element) + attributes = property(getAttributes, setAttributes) + + def insertText(self, data, insertBefore=None): + text = TextNode(self.soup.new_string(data), self.soup) + if insertBefore: + self.insertBefore(text, insertBefore) + else: + self.appendChild(text) + + def insertBefore(self, node, refNode): + index = self.element.index(refNode.element) + if (node.element.__class__ == NavigableString and self.element.contents + and self.element.contents[index-1].__class__ == NavigableString): + # (See comments in appendChild) + old_node = self.element.contents[index-1] + new_str = self.soup.new_string(old_node + node.element) + old_node.replace_with(new_str) + else: + self.element.insert(index, node.element) + node.parent = self + + def removeChild(self, node): + node.element.extract() + + def reparentChildren(self, new_parent): + """Move all of this tag's children into another tag.""" + # print "MOVE", self.element.contents + # print "FROM", self.element + # print "TO", new_parent.element + + element = self.element + new_parent_element = new_parent.element + # Determine what this tag's next_element will be once all the children + # are removed. + final_next_element = element.next_sibling + + new_parents_last_descendant = new_parent_element._last_descendant(False, False) + if len(new_parent_element.contents) > 0: + # The new parent already contains children. We will be + # appending this tag's children to the end. + new_parents_last_child = new_parent_element.contents[-1] + new_parents_last_descendant_next_element = new_parents_last_descendant.next_element + else: + # The new parent contains no children. + new_parents_last_child = None + new_parents_last_descendant_next_element = new_parent_element.next_element + + to_append = element.contents + if len(to_append) > 0: + # Set the first child's previous_element and previous_sibling + # to elements within the new parent + first_child = to_append[0] + if new_parents_last_descendant: + first_child.previous_element = new_parents_last_descendant + else: + first_child.previous_element = new_parent_element + first_child.previous_sibling = new_parents_last_child + if new_parents_last_descendant: + new_parents_last_descendant.next_element = first_child + else: + new_parent_element.next_element = first_child + if new_parents_last_child: + new_parents_last_child.next_sibling = first_child + + # Find the very last element being moved. It is now the + # parent's last descendant. It has no .next_sibling and + # its .next_element is whatever the previous last + # descendant had. + last_childs_last_descendant = to_append[-1]._last_descendant(False, True) + + last_childs_last_descendant.next_element = new_parents_last_descendant_next_element + if new_parents_last_descendant_next_element: + # TODO: This code has no test coverage and I'm not sure + # how to get html5lib to go through this path, but it's + # just the other side of the previous line. + new_parents_last_descendant_next_element.previous_element = last_childs_last_descendant + last_childs_last_descendant.next_sibling = None + + for child in to_append: + child.parent = new_parent_element + new_parent_element.contents.append(child) + + # Now that this element has no children, change its .next_element. + element.contents = [] + element.next_element = final_next_element + + # print "DONE WITH MOVE" + # print "FROM", self.element + # print "TO", new_parent_element + + def cloneNode(self): + tag = self.soup.new_tag(self.element.name, self.namespace) + node = Element(tag, self.soup, self.namespace) + for key,value in self.attributes: + node.attributes[key] = value + return node + + def hasContent(self): + return self.element.contents + + def getNameTuple(self): + if self.namespace == None: + return namespaces["html"], self.name + else: + return self.namespace, self.name + + nameTuple = property(getNameTuple) + +class TextNode(Element): + def __init__(self, element, soup): + treebuilder_base.Node.__init__(self, None) + self.element = element + self.soup = soup + + def cloneNode(self): + raise NotImplementedError diff --git a/utils/lib/python3.5/site-packages/bs4/builder/_htmlparser.py b/utils/lib/python3.5/site-packages/bs4/builder/_htmlparser.py new file mode 100644 index 0000000..907d355 --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/builder/_htmlparser.py @@ -0,0 +1,314 @@ +"""Use the HTMLParser library to parse HTML files that aren't too bad.""" + +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +__all__ = [ + 'HTMLParserTreeBuilder', + ] + +from html.parser import HTMLParser + +try: + from html.parser import HTMLParseError +except ImportError as e: + # HTMLParseError is removed in Python 3.5. Since it can never be + # thrown in 3.5, we can just define our own class as a placeholder. + class HTMLParseError(Exception): + pass + +import sys +import warnings + +# Starting in Python 3.2, the HTMLParser constructor takes a 'strict' +# argument, which we'd like to set to False. Unfortunately, +# http://bugs.python.org/issue13273 makes strict=True a better bet +# before Python 3.2.3. +# +# At the end of this file, we monkeypatch HTMLParser so that +# strict=True works well on Python 3.2.2. +major, minor, release = sys.version_info[:3] +CONSTRUCTOR_TAKES_STRICT = major == 3 and minor == 2 and release >= 3 +CONSTRUCTOR_STRICT_IS_DEPRECATED = major == 3 and minor == 3 +CONSTRUCTOR_TAKES_CONVERT_CHARREFS = major == 3 and minor >= 4 + + +from bs4.element import ( + CData, + Comment, + Declaration, + Doctype, + ProcessingInstruction, + ) +from bs4.dammit import EntitySubstitution, UnicodeDammit + +from bs4.builder import ( + HTML, + HTMLTreeBuilder, + STRICT, + ) + + +HTMLPARSER = 'html.parser' + +class BeautifulSoupHTMLParser(HTMLParser): + + def __init__(self, *args, **kwargs): + HTMLParser.__init__(self, *args, **kwargs) + + # Keep a list of empty-element tags that were encountered + # without an explicit closing tag. If we encounter a closing tag + # of this type, we'll associate it with one of those entries. + # + # This isn't a stack because we don't care about the + # order. It's a list of closing tags we've already handled and + # will ignore, assuming they ever show up. + self.already_closed_empty_element = [] + + def handle_startendtag(self, name, attrs): + # This is only called when the markup looks like + # . + + # is_startend() tells handle_starttag not to close the tag + # just because its name matches a known empty-element tag. We + # know that this is an empty-element tag and we want to call + # handle_endtag ourselves. + tag = self.handle_starttag(name, attrs, handle_empty_element=False) + self.handle_endtag(name) + + def handle_starttag(self, name, attrs, handle_empty_element=True): + # XXX namespace + attr_dict = {} + for key, value in attrs: + # Change None attribute values to the empty string + # for consistency with the other tree builders. + if value is None: + value = '' + attr_dict[key] = value + attrvalue = '""' + #print "START", name + tag = self.soup.handle_starttag(name, None, None, attr_dict) + if tag and tag.is_empty_element and handle_empty_element: + # Unlike other parsers, html.parser doesn't send separate end tag + # events for empty-element tags. (It's handled in + # handle_startendtag, but only if the original markup looked like + # .) + # + # So we need to call handle_endtag() ourselves. Since we + # know the start event is identical to the end event, we + # don't want handle_endtag() to cross off any previous end + # events for tags of this name. + self.handle_endtag(name, check_already_closed=False) + + # But we might encounter an explicit closing tag for this tag + # later on. If so, we want to ignore it. + self.already_closed_empty_element.append(name) + + def handle_endtag(self, name, check_already_closed=True): + #print "END", name + if check_already_closed and name in self.already_closed_empty_element: + # This is a redundant end tag for an empty-element tag. + # We've already called handle_endtag() for it, so just + # check it off the list. + # print "ALREADY CLOSED", name + self.already_closed_empty_element.remove(name) + else: + self.soup.handle_endtag(name) + + def handle_data(self, data): + self.soup.handle_data(data) + + def handle_charref(self, name): + # XXX workaround for a bug in HTMLParser. Remove this once + # it's fixed in all supported versions. + # http://bugs.python.org/issue13633 + if name.startswith('x'): + real_name = int(name.lstrip('x'), 16) + elif name.startswith('X'): + real_name = int(name.lstrip('X'), 16) + else: + real_name = int(name) + + try: + data = chr(real_name) + except (ValueError, OverflowError) as e: + data = "\N{REPLACEMENT CHARACTER}" + + self.handle_data(data) + + def handle_entityref(self, name): + character = EntitySubstitution.HTML_ENTITY_TO_CHARACTER.get(name) + if character is not None: + data = character + else: + data = "&%s;" % name + self.handle_data(data) + + def handle_comment(self, data): + self.soup.endData() + self.soup.handle_data(data) + self.soup.endData(Comment) + + def handle_decl(self, data): + self.soup.endData() + if data.startswith("DOCTYPE "): + data = data[len("DOCTYPE "):] + elif data == 'DOCTYPE': + # i.e. "" + data = '' + self.soup.handle_data(data) + self.soup.endData(Doctype) + + def unknown_decl(self, data): + if data.upper().startswith('CDATA['): + cls = CData + data = data[len('CDATA['):] + else: + cls = Declaration + self.soup.endData() + self.soup.handle_data(data) + self.soup.endData(cls) + + def handle_pi(self, data): + self.soup.endData() + self.soup.handle_data(data) + self.soup.endData(ProcessingInstruction) + + +class HTMLParserTreeBuilder(HTMLTreeBuilder): + + is_xml = False + picklable = True + NAME = HTMLPARSER + features = [NAME, HTML, STRICT] + + def __init__(self, *args, **kwargs): + if CONSTRUCTOR_TAKES_STRICT and not CONSTRUCTOR_STRICT_IS_DEPRECATED: + kwargs['strict'] = False + if CONSTRUCTOR_TAKES_CONVERT_CHARREFS: + kwargs['convert_charrefs'] = False + self.parser_args = (args, kwargs) + + def prepare_markup(self, markup, user_specified_encoding=None, + document_declared_encoding=None, exclude_encodings=None): + """ + :return: A 4-tuple (markup, original encoding, encoding + declared within markup, whether any characters had to be + replaced with REPLACEMENT CHARACTER). + """ + if isinstance(markup, str): + yield (markup, None, None, False) + return + + try_encodings = [user_specified_encoding, document_declared_encoding] + dammit = UnicodeDammit(markup, try_encodings, is_html=True, + exclude_encodings=exclude_encodings) + yield (dammit.markup, dammit.original_encoding, + dammit.declared_html_encoding, + dammit.contains_replacement_characters) + + def feed(self, markup): + args, kwargs = self.parser_args + parser = BeautifulSoupHTMLParser(*args, **kwargs) + parser.soup = self.soup + try: + parser.feed(markup) + except HTMLParseError as e: + warnings.warn(RuntimeWarning( + "Python's built-in HTMLParser cannot parse the given document. This is not a bug in Beautiful Soup. The best solution is to install an external parser (lxml or html5lib), and use Beautiful Soup with that parser. See http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser for help.")) + raise e + parser.already_closed_empty_element = [] + +# Patch 3.2 versions of HTMLParser earlier than 3.2.3 to use some +# 3.2.3 code. This ensures they don't treat markup like

as a +# string. +# +# XXX This code can be removed once most Python 3 users are on 3.2.3. +if major == 3 and minor == 2 and not CONSTRUCTOR_TAKES_STRICT: + import re + attrfind_tolerant = re.compile( + r'\s*((?<=[\'"\s])[^\s/>][^\s/=>]*)(\s*=+\s*' + r'(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?') + HTMLParserTreeBuilder.attrfind_tolerant = attrfind_tolerant + + locatestarttagend = re.compile(r""" + <[a-zA-Z][-.a-zA-Z0-9:_]* # tag name + (?:\s+ # whitespace before attribute name + (?:[a-zA-Z_][-.:a-zA-Z0-9_]* # attribute name + (?:\s*=\s* # value indicator + (?:'[^']*' # LITA-enclosed value + |\"[^\"]*\" # LIT-enclosed value + |[^'\">\s]+ # bare value + ) + )? + ) + )* + \s* # trailing whitespace +""", re.VERBOSE) + BeautifulSoupHTMLParser.locatestarttagend = locatestarttagend + + from html.parser import tagfind, attrfind + + def parse_starttag(self, i): + self.__starttag_text = None + endpos = self.check_for_whole_start_tag(i) + if endpos < 0: + return endpos + rawdata = self.rawdata + self.__starttag_text = rawdata[i:endpos] + + # Now parse the data between i+1 and j into a tag and attrs + attrs = [] + match = tagfind.match(rawdata, i+1) + assert match, 'unexpected call to parse_starttag()' + k = match.end() + self.lasttag = tag = rawdata[i+1:k].lower() + while k < endpos: + if self.strict: + m = attrfind.match(rawdata, k) + else: + m = attrfind_tolerant.match(rawdata, k) + if not m: + break + attrname, rest, attrvalue = m.group(1, 2, 3) + if not rest: + attrvalue = None + elif attrvalue[:1] == '\'' == attrvalue[-1:] or \ + attrvalue[:1] == '"' == attrvalue[-1:]: + attrvalue = attrvalue[1:-1] + if attrvalue: + attrvalue = self.unescape(attrvalue) + attrs.append((attrname.lower(), attrvalue)) + k = m.end() + + end = rawdata[k:endpos].strip() + if end not in (">", "/>"): + lineno, offset = self.getpos() + if "\n" in self.__starttag_text: + lineno = lineno + self.__starttag_text.count("\n") + offset = len(self.__starttag_text) \ + - self.__starttag_text.rfind("\n") + else: + offset = offset + len(self.__starttag_text) + if self.strict: + self.error("junk characters in start tag: %r" + % (rawdata[k:endpos][:20],)) + self.handle_data(rawdata[i:endpos]) + return endpos + if end.endswith('/>'): + # XHTML-style empty tag: + self.handle_startendtag(tag, attrs) + else: + self.handle_starttag(tag, attrs) + if tag in self.CDATA_CONTENT_ELEMENTS: + self.set_cdata_mode(tag) + return endpos + + def set_cdata_mode(self, elem): + self.cdata_elem = elem.lower() + self.interesting = re.compile(r'' % self.cdata_elem, re.I) + + BeautifulSoupHTMLParser.parse_starttag = parse_starttag + BeautifulSoupHTMLParser.set_cdata_mode = set_cdata_mode + + CONSTRUCTOR_TAKES_STRICT = True diff --git a/utils/lib/python3.5/site-packages/bs4/builder/_lxml.py b/utils/lib/python3.5/site-packages/bs4/builder/_lxml.py new file mode 100644 index 0000000..244d457 --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/builder/_lxml.py @@ -0,0 +1,258 @@ +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +__all__ = [ + 'LXMLTreeBuilderForXML', + 'LXMLTreeBuilder', + ] + +from io import BytesIO +from io import StringIO +import collections +from lxml import etree +from bs4.element import ( + Comment, + Doctype, + NamespacedAttribute, + ProcessingInstruction, + XMLProcessingInstruction, +) +from bs4.builder import ( + FAST, + HTML, + HTMLTreeBuilder, + PERMISSIVE, + ParserRejectedMarkup, + TreeBuilder, + XML) +from bs4.dammit import EncodingDetector + +LXML = 'lxml' + +class LXMLTreeBuilderForXML(TreeBuilder): + DEFAULT_PARSER_CLASS = etree.XMLParser + + is_xml = True + processing_instruction_class = XMLProcessingInstruction + + NAME = "lxml-xml" + ALTERNATE_NAMES = ["xml"] + + # Well, it's permissive by XML parser standards. + features = [NAME, LXML, XML, FAST, PERMISSIVE] + + CHUNK_SIZE = 512 + + # This namespace mapping is specified in the XML Namespace + # standard. + DEFAULT_NSMAPS = {'http://www.w3.org/XML/1998/namespace' : "xml"} + + def default_parser(self, encoding): + # This can either return a parser object or a class, which + # will be instantiated with default arguments. + if self._default_parser is not None: + return self._default_parser + return etree.XMLParser( + target=self, strip_cdata=False, recover=True, encoding=encoding) + + def parser_for(self, encoding): + # Use the default parser. + parser = self.default_parser(encoding) + + if isinstance(parser, collections.Callable): + # Instantiate the parser with default arguments + parser = parser(target=self, strip_cdata=False, encoding=encoding) + return parser + + def __init__(self, parser=None, empty_element_tags=None): + # TODO: Issue a warning if parser is present but not a + # callable, since that means there's no way to create new + # parsers for different encodings. + self._default_parser = parser + if empty_element_tags is not None: + self.empty_element_tags = set(empty_element_tags) + self.soup = None + self.nsmaps = [self.DEFAULT_NSMAPS] + + def _getNsTag(self, tag): + # Split the namespace URL out of a fully-qualified lxml tag + # name. Copied from lxml's src/lxml/sax.py. + if tag[0] == '{': + return tuple(tag[1:].split('}', 1)) + else: + return (None, tag) + + def prepare_markup(self, markup, user_specified_encoding=None, + exclude_encodings=None, + document_declared_encoding=None): + """ + :yield: A series of 4-tuples. + (markup, encoding, declared encoding, + has undergone character replacement) + + Each 4-tuple represents a strategy for parsing the document. + """ + # Instead of using UnicodeDammit to convert the bytestring to + # Unicode using different encodings, use EncodingDetector to + # iterate over the encodings, and tell lxml to try to parse + # the document as each one in turn. + is_html = not self.is_xml + if is_html: + self.processing_instruction_class = ProcessingInstruction + else: + self.processing_instruction_class = XMLProcessingInstruction + + if isinstance(markup, str): + # We were given Unicode. Maybe lxml can parse Unicode on + # this system? + yield markup, None, document_declared_encoding, False + + if isinstance(markup, str): + # No, apparently not. Convert the Unicode to UTF-8 and + # tell lxml to parse it as UTF-8. + yield (markup.encode("utf8"), "utf8", + document_declared_encoding, False) + + try_encodings = [user_specified_encoding, document_declared_encoding] + detector = EncodingDetector( + markup, try_encodings, is_html, exclude_encodings) + for encoding in detector.encodings: + yield (detector.markup, encoding, document_declared_encoding, False) + + def feed(self, markup): + if isinstance(markup, bytes): + markup = BytesIO(markup) + elif isinstance(markup, str): + markup = StringIO(markup) + + # Call feed() at least once, even if the markup is empty, + # or the parser won't be initialized. + data = markup.read(self.CHUNK_SIZE) + try: + self.parser = self.parser_for(self.soup.original_encoding) + self.parser.feed(data) + while len(data) != 0: + # Now call feed() on the rest of the data, chunk by chunk. + data = markup.read(self.CHUNK_SIZE) + if len(data) != 0: + self.parser.feed(data) + self.parser.close() + except (UnicodeDecodeError, LookupError, etree.ParserError) as e: + raise ParserRejectedMarkup(str(e)) + + def close(self): + self.nsmaps = [self.DEFAULT_NSMAPS] + + def start(self, name, attrs, nsmap={}): + # Make sure attrs is a mutable dict--lxml may send an immutable dictproxy. + attrs = dict(attrs) + nsprefix = None + # Invert each namespace map as it comes in. + if len(self.nsmaps) > 1: + # There are no new namespaces for this tag, but + # non-default namespaces are in play, so we need a + # separate tag stack to know when they end. + self.nsmaps.append(None) + elif len(nsmap) > 0: + # A new namespace mapping has come into play. + inverted_nsmap = dict((value, key) for key, value in list(nsmap.items())) + self.nsmaps.append(inverted_nsmap) + # Also treat the namespace mapping as a set of attributes on the + # tag, so we can recreate it later. + attrs = attrs.copy() + for prefix, namespace in list(nsmap.items()): + attribute = NamespacedAttribute( + "xmlns", prefix, "http://www.w3.org/2000/xmlns/") + attrs[attribute] = namespace + + # Namespaces are in play. Find any attributes that came in + # from lxml with namespaces attached to their names, and + # turn then into NamespacedAttribute objects. + new_attrs = {} + for attr, value in list(attrs.items()): + namespace, attr = self._getNsTag(attr) + if namespace is None: + new_attrs[attr] = value + else: + nsprefix = self._prefix_for_namespace(namespace) + attr = NamespacedAttribute(nsprefix, attr, namespace) + new_attrs[attr] = value + attrs = new_attrs + + namespace, name = self._getNsTag(name) + nsprefix = self._prefix_for_namespace(namespace) + self.soup.handle_starttag(name, namespace, nsprefix, attrs) + + def _prefix_for_namespace(self, namespace): + """Find the currently active prefix for the given namespace.""" + if namespace is None: + return None + for inverted_nsmap in reversed(self.nsmaps): + if inverted_nsmap is not None and namespace in inverted_nsmap: + return inverted_nsmap[namespace] + return None + + def end(self, name): + self.soup.endData() + completed_tag = self.soup.tagStack[-1] + namespace, name = self._getNsTag(name) + nsprefix = None + if namespace is not None: + for inverted_nsmap in reversed(self.nsmaps): + if inverted_nsmap is not None and namespace in inverted_nsmap: + nsprefix = inverted_nsmap[namespace] + break + self.soup.handle_endtag(name, nsprefix) + if len(self.nsmaps) > 1: + # This tag, or one of its parents, introduced a namespace + # mapping, so pop it off the stack. + self.nsmaps.pop() + + def pi(self, target, data): + self.soup.endData() + self.soup.handle_data(target + ' ' + data) + self.soup.endData(self.processing_instruction_class) + + def data(self, content): + self.soup.handle_data(content) + + def doctype(self, name, pubid, system): + self.soup.endData() + doctype = Doctype.for_name_and_ids(name, pubid, system) + self.soup.object_was_parsed(doctype) + + def comment(self, content): + "Handle comments as Comment objects." + self.soup.endData() + self.soup.handle_data(content) + self.soup.endData(Comment) + + def test_fragment_to_document(self, fragment): + """See `TreeBuilder`.""" + return '\n%s' % fragment + + +class LXMLTreeBuilder(HTMLTreeBuilder, LXMLTreeBuilderForXML): + + NAME = LXML + ALTERNATE_NAMES = ["lxml-html"] + + features = ALTERNATE_NAMES + [NAME, HTML, FAST, PERMISSIVE] + is_xml = False + processing_instruction_class = ProcessingInstruction + + def default_parser(self, encoding): + return etree.HTMLParser + + def feed(self, markup): + encoding = self.soup.original_encoding + try: + self.parser = self.parser_for(encoding) + self.parser.feed(markup) + self.parser.close() + except (UnicodeDecodeError, LookupError, etree.ParserError) as e: + raise ParserRejectedMarkup(str(e)) + + + def test_fragment_to_document(self, fragment): + """See `TreeBuilder`.""" + return '%s' % fragment diff --git a/utils/lib/python3.5/site-packages/bs4/dammit.py b/utils/lib/python3.5/site-packages/bs4/dammit.py new file mode 100644 index 0000000..8e399e0 --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/dammit.py @@ -0,0 +1,842 @@ +# -*- coding: utf-8 -*- +"""Beautiful Soup bonus library: Unicode, Dammit + +This library converts a bytestream to Unicode through any means +necessary. It is heavily based on code from Mark Pilgrim's Universal +Feed Parser. It works best on XML and HTML, but it does not rewrite the +XML or HTML to reflect a new encoding; that's the tree builder's job. +""" +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +__license__ = "MIT" + +import codecs +from html.entities import codepoint2name +import re +import logging +import string + +# Import a library to autodetect character encodings. +chardet_type = None +try: + # First try the fast C implementation. + # PyPI package: cchardet + import cchardet + def chardet_dammit(s): + return cchardet.detect(s)['encoding'] +except ImportError: + try: + # Fall back to the pure Python implementation + # Debian package: python-chardet + # PyPI package: chardet + import chardet + def chardet_dammit(s): + return chardet.detect(s)['encoding'] + #import chardet.constants + #chardet.constants._debug = 1 + except ImportError: + # No chardet available. + def chardet_dammit(s): + return None + +# Available from http://cjkpython.i18n.org/. +try: + import iconv_codec +except ImportError: + pass + +xml_encoding_re = re.compile( + '^<\?.*encoding=[\'"](.*?)[\'"].*\?>'.encode(), re.I) +html_meta_re = re.compile( + '<\s*meta[^>]+charset\s*=\s*["\']?([^>]*?)[ /;\'">]'.encode(), re.I) + +class EntitySubstitution(object): + + """Substitute XML or HTML entities for the corresponding characters.""" + + def _populate_class_variables(): + lookup = {} + reverse_lookup = {} + characters_for_re = [] + for codepoint, name in list(codepoint2name.items()): + character = chr(codepoint) + if codepoint != 34: + # There's no point in turning the quotation mark into + # ", unless it happens within an attribute value, which + # is handled elsewhere. + characters_for_re.append(character) + lookup[character] = name + # But we do want to turn " into the quotation mark. + reverse_lookup[name] = character + re_definition = "[%s]" % "".join(characters_for_re) + return lookup, reverse_lookup, re.compile(re_definition) + (CHARACTER_TO_HTML_ENTITY, HTML_ENTITY_TO_CHARACTER, + CHARACTER_TO_HTML_ENTITY_RE) = _populate_class_variables() + + CHARACTER_TO_XML_ENTITY = { + "'": "apos", + '"': "quot", + "&": "amp", + "<": "lt", + ">": "gt", + } + + BARE_AMPERSAND_OR_BRACKET = re.compile("([<>]|" + "&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)" + ")") + + AMPERSAND_OR_BRACKET = re.compile("([<>&])") + + @classmethod + def _substitute_html_entity(cls, matchobj): + entity = cls.CHARACTER_TO_HTML_ENTITY.get(matchobj.group(0)) + return "&%s;" % entity + + @classmethod + def _substitute_xml_entity(cls, matchobj): + """Used with a regular expression to substitute the + appropriate XML entity for an XML special character.""" + entity = cls.CHARACTER_TO_XML_ENTITY[matchobj.group(0)] + return "&%s;" % entity + + @classmethod + def quoted_attribute_value(self, value): + """Make a value into a quoted XML attribute, possibly escaping it. + + Most strings will be quoted using double quotes. + + Bob's Bar -> "Bob's Bar" + + If a string contains double quotes, it will be quoted using + single quotes. + + Welcome to "my bar" -> 'Welcome to "my bar"' + + If a string contains both single and double quotes, the + double quotes will be escaped, and the string will be quoted + using double quotes. + + Welcome to "Bob's Bar" -> "Welcome to "Bob's bar" + """ + quote_with = '"' + if '"' in value: + if "'" in value: + # The string contains both single and double + # quotes. Turn the double quotes into + # entities. We quote the double quotes rather than + # the single quotes because the entity name is + # """ whether this is HTML or XML. If we + # quoted the single quotes, we'd have to decide + # between ' and &squot;. + replace_with = """ + value = value.replace('"', replace_with) + else: + # There are double quotes but no single quotes. + # We can use single quotes to quote the attribute. + quote_with = "'" + return quote_with + value + quote_with + + @classmethod + def substitute_xml(cls, value, make_quoted_attribute=False): + """Substitute XML entities for special XML characters. + + :param value: A string to be substituted. The less-than sign + will become <, the greater-than sign will become >, + and any ampersands will become &. If you want ampersands + that appear to be part of an entity definition to be left + alone, use substitute_xml_containing_entities() instead. + + :param make_quoted_attribute: If True, then the string will be + quoted, as befits an attribute value. + """ + # Escape angle brackets and ampersands. + value = cls.AMPERSAND_OR_BRACKET.sub( + cls._substitute_xml_entity, value) + + if make_quoted_attribute: + value = cls.quoted_attribute_value(value) + return value + + @classmethod + def substitute_xml_containing_entities( + cls, value, make_quoted_attribute=False): + """Substitute XML entities for special XML characters. + + :param value: A string to be substituted. The less-than sign will + become <, the greater-than sign will become >, and any + ampersands that are not part of an entity defition will + become &. + + :param make_quoted_attribute: If True, then the string will be + quoted, as befits an attribute value. + """ + # Escape angle brackets, and ampersands that aren't part of + # entities. + value = cls.BARE_AMPERSAND_OR_BRACKET.sub( + cls._substitute_xml_entity, value) + + if make_quoted_attribute: + value = cls.quoted_attribute_value(value) + return value + + @classmethod + def substitute_html(cls, s): + """Replace certain Unicode characters with named HTML entities. + + This differs from data.encode(encoding, 'xmlcharrefreplace') + in that the goal is to make the result more readable (to those + with ASCII displays) rather than to recover from + errors. There's absolutely nothing wrong with a UTF-8 string + containg a LATIN SMALL LETTER E WITH ACUTE, but replacing that + character with "é" will make it more readable to some + people. + """ + return cls.CHARACTER_TO_HTML_ENTITY_RE.sub( + cls._substitute_html_entity, s) + + +class EncodingDetector: + """Suggests a number of possible encodings for a bytestring. + + Order of precedence: + + 1. Encodings you specifically tell EncodingDetector to try first + (the override_encodings argument to the constructor). + + 2. An encoding declared within the bytestring itself, either in an + XML declaration (if the bytestring is to be interpreted as an XML + document), or in a tag (if the bytestring is to be + interpreted as an HTML document.) + + 3. An encoding detected through textual analysis by chardet, + cchardet, or a similar external library. + + 4. UTF-8. + + 5. Windows-1252. + """ + def __init__(self, markup, override_encodings=None, is_html=False, + exclude_encodings=None): + self.override_encodings = override_encodings or [] + exclude_encodings = exclude_encodings or [] + self.exclude_encodings = set([x.lower() for x in exclude_encodings]) + self.chardet_encoding = None + self.is_html = is_html + self.declared_encoding = None + + # First order of business: strip a byte-order mark. + self.markup, self.sniffed_encoding = self.strip_byte_order_mark(markup) + + def _usable(self, encoding, tried): + if encoding is not None: + encoding = encoding.lower() + if encoding in self.exclude_encodings: + return False + if encoding not in tried: + tried.add(encoding) + return True + return False + + @property + def encodings(self): + """Yield a number of encodings that might work for this markup.""" + tried = set() + for e in self.override_encodings: + if self._usable(e, tried): + yield e + + # Did the document originally start with a byte-order mark + # that indicated its encoding? + if self._usable(self.sniffed_encoding, tried): + yield self.sniffed_encoding + + # Look within the document for an XML or HTML encoding + # declaration. + if self.declared_encoding is None: + self.declared_encoding = self.find_declared_encoding( + self.markup, self.is_html) + if self._usable(self.declared_encoding, tried): + yield self.declared_encoding + + # Use third-party character set detection to guess at the + # encoding. + if self.chardet_encoding is None: + self.chardet_encoding = chardet_dammit(self.markup) + if self._usable(self.chardet_encoding, tried): + yield self.chardet_encoding + + # As a last-ditch effort, try utf-8 and windows-1252. + for e in ('utf-8', 'windows-1252'): + if self._usable(e, tried): + yield e + + @classmethod + def strip_byte_order_mark(cls, data): + """If a byte-order mark is present, strip it and return the encoding it implies.""" + encoding = None + if isinstance(data, str): + # Unicode data cannot have a byte-order mark. + return data, encoding + if (len(data) >= 4) and (data[:2] == b'\xfe\xff') \ + and (data[2:4] != '\x00\x00'): + encoding = 'utf-16be' + data = data[2:] + elif (len(data) >= 4) and (data[:2] == b'\xff\xfe') \ + and (data[2:4] != '\x00\x00'): + encoding = 'utf-16le' + data = data[2:] + elif data[:3] == b'\xef\xbb\xbf': + encoding = 'utf-8' + data = data[3:] + elif data[:4] == b'\x00\x00\xfe\xff': + encoding = 'utf-32be' + data = data[4:] + elif data[:4] == b'\xff\xfe\x00\x00': + encoding = 'utf-32le' + data = data[4:] + return data, encoding + + @classmethod + def find_declared_encoding(cls, markup, is_html=False, search_entire_document=False): + """Given a document, tries to find its declared encoding. + + An XML encoding is declared at the beginning of the document. + + An HTML encoding is declared in a tag, hopefully near the + beginning of the document. + """ + if search_entire_document: + xml_endpos = html_endpos = len(markup) + else: + xml_endpos = 1024 + html_endpos = max(2048, int(len(markup) * 0.05)) + + declared_encoding = None + declared_encoding_match = xml_encoding_re.search(markup, endpos=xml_endpos) + if not declared_encoding_match and is_html: + declared_encoding_match = html_meta_re.search(markup, endpos=html_endpos) + if declared_encoding_match is not None: + declared_encoding = declared_encoding_match.groups()[0].decode( + 'ascii', 'replace') + if declared_encoding: + return declared_encoding.lower() + return None + +class UnicodeDammit: + """A class for detecting the encoding of a *ML document and + converting it to a Unicode string. If the source encoding is + windows-1252, can replace MS smart quotes with their HTML or XML + equivalents.""" + + # This dictionary maps commonly seen values for "charset" in HTML + # meta tags to the corresponding Python codec names. It only covers + # values that aren't in Python's aliases and can't be determined + # by the heuristics in find_codec. + CHARSET_ALIASES = {"macintosh": "mac-roman", + "x-sjis": "shift-jis"} + + ENCODINGS_WITH_SMART_QUOTES = [ + "windows-1252", + "iso-8859-1", + "iso-8859-2", + ] + + def __init__(self, markup, override_encodings=[], + smart_quotes_to=None, is_html=False, exclude_encodings=[]): + self.smart_quotes_to = smart_quotes_to + self.tried_encodings = [] + self.contains_replacement_characters = False + self.is_html = is_html + self.log = logging.getLogger(__name__) + self.detector = EncodingDetector( + markup, override_encodings, is_html, exclude_encodings) + + # Short-circuit if the data is in Unicode to begin with. + if isinstance(markup, str) or markup == '': + self.markup = markup + self.unicode_markup = str(markup) + self.original_encoding = None + return + + # The encoding detector may have stripped a byte-order mark. + # Use the stripped markup from this point on. + self.markup = self.detector.markup + + u = None + for encoding in self.detector.encodings: + markup = self.detector.markup + u = self._convert_from(encoding) + if u is not None: + break + + if not u: + # None of the encodings worked. As an absolute last resort, + # try them again with character replacement. + + for encoding in self.detector.encodings: + if encoding != "ascii": + u = self._convert_from(encoding, "replace") + if u is not None: + self.log.warning( + "Some characters could not be decoded, and were " + "replaced with REPLACEMENT CHARACTER." + ) + self.contains_replacement_characters = True + break + + # If none of that worked, we could at this point force it to + # ASCII, but that would destroy so much data that I think + # giving up is better. + self.unicode_markup = u + if not u: + self.original_encoding = None + + def _sub_ms_char(self, match): + """Changes a MS smart quote character to an XML or HTML + entity, or an ASCII character.""" + orig = match.group(1) + if self.smart_quotes_to == 'ascii': + sub = self.MS_CHARS_TO_ASCII.get(orig).encode() + else: + sub = self.MS_CHARS.get(orig) + if type(sub) == tuple: + if self.smart_quotes_to == 'xml': + sub = '&#x'.encode() + sub[1].encode() + ';'.encode() + else: + sub = '&'.encode() + sub[0].encode() + ';'.encode() + else: + sub = sub.encode() + return sub + + def _convert_from(self, proposed, errors="strict"): + proposed = self.find_codec(proposed) + if not proposed or (proposed, errors) in self.tried_encodings: + return None + self.tried_encodings.append((proposed, errors)) + markup = self.markup + # Convert smart quotes to HTML if coming from an encoding + # that might have them. + if (self.smart_quotes_to is not None + and proposed in self.ENCODINGS_WITH_SMART_QUOTES): + smart_quotes_re = b"([\x80-\x9f])" + smart_quotes_compiled = re.compile(smart_quotes_re) + markup = smart_quotes_compiled.sub(self._sub_ms_char, markup) + + try: + #print "Trying to convert document to %s (errors=%s)" % ( + # proposed, errors) + u = self._to_unicode(markup, proposed, errors) + self.markup = u + self.original_encoding = proposed + except Exception as e: + #print "That didn't work!" + #print e + return None + #print "Correct encoding: %s" % proposed + return self.markup + + def _to_unicode(self, data, encoding, errors="strict"): + '''Given a string and its encoding, decodes the string into Unicode. + %encoding is a string recognized by encodings.aliases''' + return str(data, encoding, errors) + + @property + def declared_html_encoding(self): + if not self.is_html: + return None + return self.detector.declared_encoding + + def find_codec(self, charset): + value = (self._codec(self.CHARSET_ALIASES.get(charset, charset)) + or (charset and self._codec(charset.replace("-", ""))) + or (charset and self._codec(charset.replace("-", "_"))) + or (charset and charset.lower()) + or charset + ) + if value: + return value.lower() + return None + + def _codec(self, charset): + if not charset: + return charset + codec = None + try: + codecs.lookup(charset) + codec = charset + except (LookupError, ValueError): + pass + return codec + + + # A partial mapping of ISO-Latin-1 to HTML entities/XML numeric entities. + MS_CHARS = {b'\x80': ('euro', '20AC'), + b'\x81': ' ', + b'\x82': ('sbquo', '201A'), + b'\x83': ('fnof', '192'), + b'\x84': ('bdquo', '201E'), + b'\x85': ('hellip', '2026'), + b'\x86': ('dagger', '2020'), + b'\x87': ('Dagger', '2021'), + b'\x88': ('circ', '2C6'), + b'\x89': ('permil', '2030'), + b'\x8A': ('Scaron', '160'), + b'\x8B': ('lsaquo', '2039'), + b'\x8C': ('OElig', '152'), + b'\x8D': '?', + b'\x8E': ('#x17D', '17D'), + b'\x8F': '?', + b'\x90': '?', + b'\x91': ('lsquo', '2018'), + b'\x92': ('rsquo', '2019'), + b'\x93': ('ldquo', '201C'), + b'\x94': ('rdquo', '201D'), + b'\x95': ('bull', '2022'), + b'\x96': ('ndash', '2013'), + b'\x97': ('mdash', '2014'), + b'\x98': ('tilde', '2DC'), + b'\x99': ('trade', '2122'), + b'\x9a': ('scaron', '161'), + b'\x9b': ('rsaquo', '203A'), + b'\x9c': ('oelig', '153'), + b'\x9d': '?', + b'\x9e': ('#x17E', '17E'), + b'\x9f': ('Yuml', ''),} + + # A parochial partial mapping of ISO-Latin-1 to ASCII. Contains + # horrors like stripping diacritical marks to turn á into a, but also + # contains non-horrors like turning “ into ". + MS_CHARS_TO_ASCII = { + b'\x80' : 'EUR', + b'\x81' : ' ', + b'\x82' : ',', + b'\x83' : 'f', + b'\x84' : ',,', + b'\x85' : '...', + b'\x86' : '+', + b'\x87' : '++', + b'\x88' : '^', + b'\x89' : '%', + b'\x8a' : 'S', + b'\x8b' : '<', + b'\x8c' : 'OE', + b'\x8d' : '?', + b'\x8e' : 'Z', + b'\x8f' : '?', + b'\x90' : '?', + b'\x91' : "'", + b'\x92' : "'", + b'\x93' : '"', + b'\x94' : '"', + b'\x95' : '*', + b'\x96' : '-', + b'\x97' : '--', + b'\x98' : '~', + b'\x99' : '(TM)', + b'\x9a' : 's', + b'\x9b' : '>', + b'\x9c' : 'oe', + b'\x9d' : '?', + b'\x9e' : 'z', + b'\x9f' : 'Y', + b'\xa0' : ' ', + b'\xa1' : '!', + b'\xa2' : 'c', + b'\xa3' : 'GBP', + b'\xa4' : '$', #This approximation is especially parochial--this is the + #generic currency symbol. + b'\xa5' : 'YEN', + b'\xa6' : '|', + b'\xa7' : 'S', + b'\xa8' : '..', + b'\xa9' : '', + b'\xaa' : '(th)', + b'\xab' : '<<', + b'\xac' : '!', + b'\xad' : ' ', + b'\xae' : '(R)', + b'\xaf' : '-', + b'\xb0' : 'o', + b'\xb1' : '+-', + b'\xb2' : '2', + b'\xb3' : '3', + b'\xb4' : ("'", 'acute'), + b'\xb5' : 'u', + b'\xb6' : 'P', + b'\xb7' : '*', + b'\xb8' : ',', + b'\xb9' : '1', + b'\xba' : '(th)', + b'\xbb' : '>>', + b'\xbc' : '1/4', + b'\xbd' : '1/2', + b'\xbe' : '3/4', + b'\xbf' : '?', + b'\xc0' : 'A', + b'\xc1' : 'A', + b'\xc2' : 'A', + b'\xc3' : 'A', + b'\xc4' : 'A', + b'\xc5' : 'A', + b'\xc6' : 'AE', + b'\xc7' : 'C', + b'\xc8' : 'E', + b'\xc9' : 'E', + b'\xca' : 'E', + b'\xcb' : 'E', + b'\xcc' : 'I', + b'\xcd' : 'I', + b'\xce' : 'I', + b'\xcf' : 'I', + b'\xd0' : 'D', + b'\xd1' : 'N', + b'\xd2' : 'O', + b'\xd3' : 'O', + b'\xd4' : 'O', + b'\xd5' : 'O', + b'\xd6' : 'O', + b'\xd7' : '*', + b'\xd8' : 'O', + b'\xd9' : 'U', + b'\xda' : 'U', + b'\xdb' : 'U', + b'\xdc' : 'U', + b'\xdd' : 'Y', + b'\xde' : 'b', + b'\xdf' : 'B', + b'\xe0' : 'a', + b'\xe1' : 'a', + b'\xe2' : 'a', + b'\xe3' : 'a', + b'\xe4' : 'a', + b'\xe5' : 'a', + b'\xe6' : 'ae', + b'\xe7' : 'c', + b'\xe8' : 'e', + b'\xe9' : 'e', + b'\xea' : 'e', + b'\xeb' : 'e', + b'\xec' : 'i', + b'\xed' : 'i', + b'\xee' : 'i', + b'\xef' : 'i', + b'\xf0' : 'o', + b'\xf1' : 'n', + b'\xf2' : 'o', + b'\xf3' : 'o', + b'\xf4' : 'o', + b'\xf5' : 'o', + b'\xf6' : 'o', + b'\xf7' : '/', + b'\xf8' : 'o', + b'\xf9' : 'u', + b'\xfa' : 'u', + b'\xfb' : 'u', + b'\xfc' : 'u', + b'\xfd' : 'y', + b'\xfe' : 'b', + b'\xff' : 'y', + } + + # A map used when removing rogue Windows-1252/ISO-8859-1 + # characters in otherwise UTF-8 documents. + # + # Note that \x81, \x8d, \x8f, \x90, and \x9d are undefined in + # Windows-1252. + WINDOWS_1252_TO_UTF8 = { + 0x80 : b'\xe2\x82\xac', # € + 0x82 : b'\xe2\x80\x9a', # ‚ + 0x83 : b'\xc6\x92', # ƒ + 0x84 : b'\xe2\x80\x9e', # „ + 0x85 : b'\xe2\x80\xa6', # … + 0x86 : b'\xe2\x80\xa0', # † + 0x87 : b'\xe2\x80\xa1', # ‡ + 0x88 : b'\xcb\x86', # ˆ + 0x89 : b'\xe2\x80\xb0', # ‰ + 0x8a : b'\xc5\xa0', # Š + 0x8b : b'\xe2\x80\xb9', # ‹ + 0x8c : b'\xc5\x92', # Œ + 0x8e : b'\xc5\xbd', # Ž + 0x91 : b'\xe2\x80\x98', # ‘ + 0x92 : b'\xe2\x80\x99', # ’ + 0x93 : b'\xe2\x80\x9c', # “ + 0x94 : b'\xe2\x80\x9d', # ” + 0x95 : b'\xe2\x80\xa2', # • + 0x96 : b'\xe2\x80\x93', # – + 0x97 : b'\xe2\x80\x94', # — + 0x98 : b'\xcb\x9c', # ˜ + 0x99 : b'\xe2\x84\xa2', # ™ + 0x9a : b'\xc5\xa1', # š + 0x9b : b'\xe2\x80\xba', # › + 0x9c : b'\xc5\x93', # œ + 0x9e : b'\xc5\xbe', # ž + 0x9f : b'\xc5\xb8', # Ÿ + 0xa0 : b'\xc2\xa0', #   + 0xa1 : b'\xc2\xa1', # ¡ + 0xa2 : b'\xc2\xa2', # ¢ + 0xa3 : b'\xc2\xa3', # £ + 0xa4 : b'\xc2\xa4', # ¤ + 0xa5 : b'\xc2\xa5', # ¥ + 0xa6 : b'\xc2\xa6', # ¦ + 0xa7 : b'\xc2\xa7', # § + 0xa8 : b'\xc2\xa8', # ¨ + 0xa9 : b'\xc2\xa9', # © + 0xaa : b'\xc2\xaa', # ª + 0xab : b'\xc2\xab', # « + 0xac : b'\xc2\xac', # ¬ + 0xad : b'\xc2\xad', # ­ + 0xae : b'\xc2\xae', # ® + 0xaf : b'\xc2\xaf', # ¯ + 0xb0 : b'\xc2\xb0', # ° + 0xb1 : b'\xc2\xb1', # ± + 0xb2 : b'\xc2\xb2', # ² + 0xb3 : b'\xc2\xb3', # ³ + 0xb4 : b'\xc2\xb4', # ´ + 0xb5 : b'\xc2\xb5', # µ + 0xb6 : b'\xc2\xb6', # ¶ + 0xb7 : b'\xc2\xb7', # · + 0xb8 : b'\xc2\xb8', # ¸ + 0xb9 : b'\xc2\xb9', # ¹ + 0xba : b'\xc2\xba', # º + 0xbb : b'\xc2\xbb', # » + 0xbc : b'\xc2\xbc', # ¼ + 0xbd : b'\xc2\xbd', # ½ + 0xbe : b'\xc2\xbe', # ¾ + 0xbf : b'\xc2\xbf', # ¿ + 0xc0 : b'\xc3\x80', # À + 0xc1 : b'\xc3\x81', # Á + 0xc2 : b'\xc3\x82', #  + 0xc3 : b'\xc3\x83', # à + 0xc4 : b'\xc3\x84', # Ä + 0xc5 : b'\xc3\x85', # Å + 0xc6 : b'\xc3\x86', # Æ + 0xc7 : b'\xc3\x87', # Ç + 0xc8 : b'\xc3\x88', # È + 0xc9 : b'\xc3\x89', # É + 0xca : b'\xc3\x8a', # Ê + 0xcb : b'\xc3\x8b', # Ë + 0xcc : b'\xc3\x8c', # Ì + 0xcd : b'\xc3\x8d', # Í + 0xce : b'\xc3\x8e', # Î + 0xcf : b'\xc3\x8f', # Ï + 0xd0 : b'\xc3\x90', # Ð + 0xd1 : b'\xc3\x91', # Ñ + 0xd2 : b'\xc3\x92', # Ò + 0xd3 : b'\xc3\x93', # Ó + 0xd4 : b'\xc3\x94', # Ô + 0xd5 : b'\xc3\x95', # Õ + 0xd6 : b'\xc3\x96', # Ö + 0xd7 : b'\xc3\x97', # × + 0xd8 : b'\xc3\x98', # Ø + 0xd9 : b'\xc3\x99', # Ù + 0xda : b'\xc3\x9a', # Ú + 0xdb : b'\xc3\x9b', # Û + 0xdc : b'\xc3\x9c', # Ü + 0xdd : b'\xc3\x9d', # Ý + 0xde : b'\xc3\x9e', # Þ + 0xdf : b'\xc3\x9f', # ß + 0xe0 : b'\xc3\xa0', # à + 0xe1 : b'\xa1', # á + 0xe2 : b'\xc3\xa2', # â + 0xe3 : b'\xc3\xa3', # ã + 0xe4 : b'\xc3\xa4', # ä + 0xe5 : b'\xc3\xa5', # å + 0xe6 : b'\xc3\xa6', # æ + 0xe7 : b'\xc3\xa7', # ç + 0xe8 : b'\xc3\xa8', # è + 0xe9 : b'\xc3\xa9', # é + 0xea : b'\xc3\xaa', # ê + 0xeb : b'\xc3\xab', # ë + 0xec : b'\xc3\xac', # ì + 0xed : b'\xc3\xad', # í + 0xee : b'\xc3\xae', # î + 0xef : b'\xc3\xaf', # ï + 0xf0 : b'\xc3\xb0', # ð + 0xf1 : b'\xc3\xb1', # ñ + 0xf2 : b'\xc3\xb2', # ò + 0xf3 : b'\xc3\xb3', # ó + 0xf4 : b'\xc3\xb4', # ô + 0xf5 : b'\xc3\xb5', # õ + 0xf6 : b'\xc3\xb6', # ö + 0xf7 : b'\xc3\xb7', # ÷ + 0xf8 : b'\xc3\xb8', # ø + 0xf9 : b'\xc3\xb9', # ù + 0xfa : b'\xc3\xba', # ú + 0xfb : b'\xc3\xbb', # û + 0xfc : b'\xc3\xbc', # ü + 0xfd : b'\xc3\xbd', # ý + 0xfe : b'\xc3\xbe', # þ + } + + MULTIBYTE_MARKERS_AND_SIZES = [ + (0xc2, 0xdf, 2), # 2-byte characters start with a byte C2-DF + (0xe0, 0xef, 3), # 3-byte characters start with E0-EF + (0xf0, 0xf4, 4), # 4-byte characters start with F0-F4 + ] + + FIRST_MULTIBYTE_MARKER = MULTIBYTE_MARKERS_AND_SIZES[0][0] + LAST_MULTIBYTE_MARKER = MULTIBYTE_MARKERS_AND_SIZES[-1][1] + + @classmethod + def detwingle(cls, in_bytes, main_encoding="utf8", + embedded_encoding="windows-1252"): + """Fix characters from one encoding embedded in some other encoding. + + Currently the only situation supported is Windows-1252 (or its + subset ISO-8859-1), embedded in UTF-8. + + The input must be a bytestring. If you've already converted + the document to Unicode, you're too late. + + The output is a bytestring in which `embedded_encoding` + characters have been converted to their `main_encoding` + equivalents. + """ + if embedded_encoding.replace('_', '-').lower() not in ( + 'windows-1252', 'windows_1252'): + raise NotImplementedError( + "Windows-1252 and ISO-8859-1 are the only currently supported " + "embedded encodings.") + + if main_encoding.lower() not in ('utf8', 'utf-8'): + raise NotImplementedError( + "UTF-8 is the only currently supported main encoding.") + + byte_chunks = [] + + chunk_start = 0 + pos = 0 + while pos < len(in_bytes): + byte = in_bytes[pos] + if not isinstance(byte, int): + # Python 2.x + byte = ord(byte) + if (byte >= cls.FIRST_MULTIBYTE_MARKER + and byte <= cls.LAST_MULTIBYTE_MARKER): + # This is the start of a UTF-8 multibyte character. Skip + # to the end. + for start, end, size in cls.MULTIBYTE_MARKERS_AND_SIZES: + if byte >= start and byte <= end: + pos += size + break + elif byte >= 0x80 and byte in cls.WINDOWS_1252_TO_UTF8: + # We found a Windows-1252 character! + # Save the string up to this point as a chunk. + byte_chunks.append(in_bytes[chunk_start:pos]) + + # Now translate the Windows-1252 character into UTF-8 + # and add it as another, one-byte chunk. + byte_chunks.append(cls.WINDOWS_1252_TO_UTF8[byte]) + pos += 1 + chunk_start = pos + else: + # Go on to the next character. + pos += 1 + if chunk_start == 0: + # The string is unchanged. + return in_bytes + else: + # Store the final chunk. + byte_chunks.append(in_bytes[chunk_start:]) + return b''.join(byte_chunks) + diff --git a/utils/lib/python3.5/site-packages/bs4/diagnose.py b/utils/lib/python3.5/site-packages/bs4/diagnose.py new file mode 100644 index 0000000..1254861 --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/diagnose.py @@ -0,0 +1,219 @@ +"""Diagnostic functions, mainly for use when doing tech support.""" + +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +__license__ = "MIT" + +import cProfile +from io import StringIO +from html.parser import HTMLParser +import bs4 +from bs4 import BeautifulSoup, __version__ +from bs4.builder import builder_registry + +import os +import pstats +import random +import tempfile +import time +import traceback +import sys +import cProfile + +def diagnose(data): + """Diagnostic suite for isolating common problems.""" + print("Diagnostic running on Beautiful Soup %s" % __version__) + print("Python version %s" % sys.version) + + basic_parsers = ["html.parser", "html5lib", "lxml"] + for name in basic_parsers: + for builder in builder_registry.builders: + if name in builder.features: + break + else: + basic_parsers.remove(name) + print(( + "I noticed that %s is not installed. Installing it may help." % + name)) + + if 'lxml' in basic_parsers: + basic_parsers.append(["lxml", "xml"]) + try: + from lxml import etree + print("Found lxml version %s" % ".".join(map(str,etree.LXML_VERSION))) + except ImportError as e: + print ( + "lxml is not installed or couldn't be imported.") + + + if 'html5lib' in basic_parsers: + try: + import html5lib + print("Found html5lib version %s" % html5lib.__version__) + except ImportError as e: + print ( + "html5lib is not installed or couldn't be imported.") + + if hasattr(data, 'read'): + data = data.read() + elif os.path.exists(data): + print('"%s" looks like a filename. Reading data from the file.' % data) + with open(data) as fp: + data = fp.read() + elif data.startswith("http:") or data.startswith("https:"): + print('"%s" looks like a URL. Beautiful Soup is not an HTTP client.' % data) + print("You need to use some other library to get the document behind the URL, and feed that document to Beautiful Soup.") + return + print() + + for parser in basic_parsers: + print("Trying to parse your markup with %s" % parser) + success = False + try: + soup = BeautifulSoup(data, parser) + success = True + except Exception as e: + print("%s could not parse the markup." % parser) + traceback.print_exc() + if success: + print("Here's what %s did with the markup:" % parser) + print(soup.prettify()) + + print("-" * 80) + +def lxml_trace(data, html=True, **kwargs): + """Print out the lxml events that occur during parsing. + + This lets you see how lxml parses a document when no Beautiful + Soup code is running. + """ + from lxml import etree + for event, element in etree.iterparse(StringIO(data), html=html, **kwargs): + print(("%s, %4s, %s" % (event, element.tag, element.text))) + +class AnnouncingParser(HTMLParser): + """Announces HTMLParser parse events, without doing anything else.""" + + def _p(self, s): + print(s) + + def handle_starttag(self, name, attrs): + self._p("%s START" % name) + + def handle_endtag(self, name): + self._p("%s END" % name) + + def handle_data(self, data): + self._p("%s DATA" % data) + + def handle_charref(self, name): + self._p("%s CHARREF" % name) + + def handle_entityref(self, name): + self._p("%s ENTITYREF" % name) + + def handle_comment(self, data): + self._p("%s COMMENT" % data) + + def handle_decl(self, data): + self._p("%s DECL" % data) + + def unknown_decl(self, data): + self._p("%s UNKNOWN-DECL" % data) + + def handle_pi(self, data): + self._p("%s PI" % data) + +def htmlparser_trace(data): + """Print out the HTMLParser events that occur during parsing. + + This lets you see how HTMLParser parses a document when no + Beautiful Soup code is running. + """ + parser = AnnouncingParser() + parser.feed(data) + +_vowels = "aeiou" +_consonants = "bcdfghjklmnpqrstvwxyz" + +def rword(length=5): + "Generate a random word-like string." + s = '' + for i in range(length): + if i % 2 == 0: + t = _consonants + else: + t = _vowels + s += random.choice(t) + return s + +def rsentence(length=4): + "Generate a random sentence-like string." + return " ".join(rword(random.randint(4,9)) for i in range(length)) + +def rdoc(num_elements=1000): + """Randomly generate an invalid HTML document.""" + tag_names = ['p', 'div', 'span', 'i', 'b', 'script', 'table'] + elements = [] + for i in range(num_elements): + choice = random.randint(0,3) + if choice == 0: + # New tag. + tag_name = random.choice(tag_names) + elements.append("<%s>" % tag_name) + elif choice == 1: + elements.append(rsentence(random.randint(1,4))) + elif choice == 2: + # Close a tag. + tag_name = random.choice(tag_names) + elements.append("" % tag_name) + return "" + "\n".join(elements) + "" + +def benchmark_parsers(num_elements=100000): + """Very basic head-to-head performance benchmark.""" + print("Comparative parser benchmark on Beautiful Soup %s" % __version__) + data = rdoc(num_elements) + print("Generated a large invalid HTML document (%d bytes)." % len(data)) + + for parser in ["lxml", ["lxml", "html"], "html5lib", "html.parser"]: + success = False + try: + a = time.time() + soup = BeautifulSoup(data, parser) + b = time.time() + success = True + except Exception as e: + print("%s could not parse the markup." % parser) + traceback.print_exc() + if success: + print("BS4+%s parsed the markup in %.2fs." % (parser, b-a)) + + from lxml import etree + a = time.time() + etree.HTML(data) + b = time.time() + print("Raw lxml parsed the markup in %.2fs." % (b-a)) + + import html5lib + parser = html5lib.HTMLParser() + a = time.time() + parser.parse(data) + b = time.time() + print("Raw html5lib parsed the markup in %.2fs." % (b-a)) + +def profile(num_elements=100000, parser="lxml"): + + filehandle = tempfile.NamedTemporaryFile() + filename = filehandle.name + + data = rdoc(num_elements) + vars = dict(bs4=bs4, data=data, parser=parser) + cProfile.runctx('bs4.BeautifulSoup(data, parser)' , vars, vars, filename) + + stats = pstats.Stats(filename) + # stats.strip_dirs() + stats.sort_stats("cumulative") + stats.print_stats('_html5lib|bs4', 50) + +if __name__ == '__main__': + diagnose(sys.stdin.read()) diff --git a/utils/lib/python3.5/site-packages/bs4/element.py b/utils/lib/python3.5/site-packages/bs4/element.py new file mode 100644 index 0000000..a4a750d --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/element.py @@ -0,0 +1,1808 @@ +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +__license__ = "MIT" + +import collections +import re +import shlex +import sys +import warnings +from bs4.dammit import EntitySubstitution + +DEFAULT_OUTPUT_ENCODING = "utf-8" +PY3K = (sys.version_info[0] > 2) + +whitespace_re = re.compile("\s+") + +def _alias(attr): + """Alias one attribute name to another for backward compatibility""" + @property + def alias(self): + return getattr(self, attr) + + @alias.setter + def alias(self): + return setattr(self, attr) + return alias + + +class NamespacedAttribute(str): + + def __new__(cls, prefix, name, namespace=None): + if name is None: + obj = str.__new__(cls, prefix) + elif prefix is None: + # Not really namespaced. + obj = str.__new__(cls, name) + else: + obj = str.__new__(cls, prefix + ":" + name) + obj.prefix = prefix + obj.name = name + obj.namespace = namespace + return obj + +class AttributeValueWithCharsetSubstitution(str): + """A stand-in object for a character encoding specified in HTML.""" + +class CharsetMetaAttributeValue(AttributeValueWithCharsetSubstitution): + """A generic stand-in for the value of a meta tag's 'charset' attribute. + + When Beautiful Soup parses the markup '', the + value of the 'charset' attribute will be one of these objects. + """ + + def __new__(cls, original_value): + obj = str.__new__(cls, original_value) + obj.original_value = original_value + return obj + + def encode(self, encoding): + return encoding + + +class ContentMetaAttributeValue(AttributeValueWithCharsetSubstitution): + """A generic stand-in for the value of a meta tag's 'content' attribute. + + When Beautiful Soup parses the markup: + + + The value of the 'content' attribute will be one of these objects. + """ + + CHARSET_RE = re.compile("((^|;)\s*charset=)([^;]*)", re.M) + + def __new__(cls, original_value): + match = cls.CHARSET_RE.search(original_value) + if match is None: + # No substitution necessary. + return str.__new__(str, original_value) + + obj = str.__new__(cls, original_value) + obj.original_value = original_value + return obj + + def encode(self, encoding): + def rewrite(match): + return match.group(1) + encoding + return self.CHARSET_RE.sub(rewrite, self.original_value) + +class HTMLAwareEntitySubstitution(EntitySubstitution): + + """Entity substitution rules that are aware of some HTML quirks. + + Specifically, the contents of + +Hello, world! + + +''' + soup = self.soup(html) + self.assertEqual("text/javascript", soup.find('script')['type']) + + def test_comment(self): + # Comments are represented as Comment objects. + markup = "

foobaz

" + self.assertSoupEquals(markup) + + soup = self.soup(markup) + comment = soup.find(text="foobar") + self.assertEqual(comment.__class__, Comment) + + # The comment is properly integrated into the tree. + foo = soup.find(text="foo") + self.assertEqual(comment, foo.next_element) + baz = soup.find(text="baz") + self.assertEqual(comment, baz.previous_element) + + def test_preserved_whitespace_in_pre_and_textarea(self): + """Whitespace must be preserved in
 and "
+        self.assertSoupEquals(pre_markup)
+        self.assertSoupEquals(textarea_markup)
+
+        soup = self.soup(pre_markup)
+        self.assertEqual(soup.pre.prettify(), pre_markup)
+
+        soup = self.soup(textarea_markup)
+        self.assertEqual(soup.textarea.prettify(), textarea_markup)
+
+        soup = self.soup("")
+        self.assertEqual(soup.textarea.prettify(), "")
+
+    def test_nested_inline_elements(self):
+        """Inline elements can be nested indefinitely."""
+        b_tag = "Inside a B tag"
+        self.assertSoupEquals(b_tag)
+
+        nested_b_tag = "

A nested tag

" + self.assertSoupEquals(nested_b_tag) + + double_nested_b_tag = "

A doubly nested tag

" + self.assertSoupEquals(nested_b_tag) + + def test_nested_block_level_elements(self): + """Block elements can be nested.""" + soup = self.soup('

Foo

') + blockquote = soup.blockquote + self.assertEqual(blockquote.p.b.string, 'Foo') + self.assertEqual(blockquote.b.string, 'Foo') + + def test_correctly_nested_tables(self): + """One table can go inside another one.""" + markup = ('' + '' + "') + + self.assertSoupEquals( + markup, + '
Here's another table:" + '' + '' + '
foo
Here\'s another table:' + '
foo
' + '
') + + self.assertSoupEquals( + "" + "" + "
Foo
Bar
Baz
") + + def test_deeply_nested_multivalued_attribute(self): + # html5lib can set the attributes of the same tag many times + # as it rearranges the tree. This has caused problems with + # multivalued attributes. + markup = '
' + soup = self.soup(markup) + self.assertEqual(["css"], soup.div.div['class']) + + def test_multivalued_attribute_on_html(self): + # html5lib uses a different API to set the attributes ot the + # tag. This has caused problems with multivalued + # attributes. + markup = '' + soup = self.soup(markup) + self.assertEqual(["a", "b"], soup.html['class']) + + def test_angle_brackets_in_attribute_values_are_escaped(self): + self.assertSoupEquals('', '') + + def test_entities_in_attributes_converted_to_unicode(self): + expect = '

' + self.assertSoupEquals('

', expect) + self.assertSoupEquals('

', expect) + self.assertSoupEquals('

', expect) + self.assertSoupEquals('

', expect) + + def test_entities_in_text_converted_to_unicode(self): + expect = '

pi\N{LATIN SMALL LETTER N WITH TILDE}ata

' + self.assertSoupEquals("

piñata

", expect) + self.assertSoupEquals("

piñata

", expect) + self.assertSoupEquals("

piñata

", expect) + self.assertSoupEquals("

piñata

", expect) + + def test_quot_entity_converted_to_quotation_mark(self): + self.assertSoupEquals("

I said "good day!"

", + '

I said "good day!"

') + + def test_out_of_range_entity(self): + expect = "\N{REPLACEMENT CHARACTER}" + self.assertSoupEquals("�", expect) + self.assertSoupEquals("�", expect) + self.assertSoupEquals("�", expect) + + def test_multipart_strings(self): + "Mostly to prevent a recurrence of a bug in the html5lib treebuilder." + soup = self.soup("

\nfoo

") + self.assertEqual("p", soup.h2.string.next_element.name) + self.assertEqual("p", soup.p.name) + self.assertConnectedness(soup) + + def test_empty_element_tags(self): + """Verify consistent handling of empty-element tags, + no matter how they come in through the markup. + """ + self.assertSoupEquals('


', "


") + self.assertSoupEquals('


', "


") + + def test_head_tag_between_head_and_body(self): + "Prevent recurrence of a bug in the html5lib treebuilder." + content = """ + + foo + +""" + soup = self.soup(content) + self.assertNotEqual(None, soup.html.body) + self.assertConnectedness(soup) + + def test_multiple_copies_of_a_tag(self): + "Prevent recurrence of a bug in the html5lib treebuilder." + content = """ + + + + + +""" + soup = self.soup(content) + self.assertConnectedness(soup.article) + + def test_basic_namespaces(self): + """Parsers don't need to *understand* namespaces, but at the + very least they should not choke on namespaces or lose + data.""" + + markup = b'4' + soup = self.soup(markup) + self.assertEqual(markup, soup.encode()) + html = soup.html + self.assertEqual('http://www.w3.org/1999/xhtml', soup.html['xmlns']) + self.assertEqual( + 'http://www.w3.org/1998/Math/MathML', soup.html['xmlns:mathml']) + self.assertEqual( + 'http://www.w3.org/2000/svg', soup.html['xmlns:svg']) + + def test_multivalued_attribute_value_becomes_list(self): + markup = b'' + soup = self.soup(markup) + self.assertEqual(['foo', 'bar'], soup.a['class']) + + # + # Generally speaking, tests below this point are more tests of + # Beautiful Soup than tests of the tree builders. But parsers are + # weird, so we run these tests separately for every tree builder + # to detect any differences between them. + # + + def test_can_parse_unicode_document(self): + # A seemingly innocuous document... but it's in Unicode! And + # it contains characters that can't be represented in the + # encoding found in the declaration! The horror! + markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + self.assertEqual('Sacr\xe9 bleu!', soup.body.string) + + def test_soupstrainer(self): + """Parsers should be able to work with SoupStrainers.""" + strainer = SoupStrainer("b") + soup = self.soup("A bold statement", + parse_only=strainer) + self.assertEqual(soup.decode(), "bold") + + def test_single_quote_attribute_values_become_double_quotes(self): + self.assertSoupEquals("", + '') + + def test_attribute_values_with_nested_quotes_are_left_alone(self): + text = """a""" + self.assertSoupEquals(text) + + def test_attribute_values_with_double_nested_quotes_get_quoted(self): + text = """a""" + soup = self.soup(text) + soup.foo['attr'] = 'Brawls happen at "Bob\'s Bar"' + self.assertSoupEquals( + soup.foo.decode(), + """a""") + + def test_ampersand_in_attribute_value_gets_escaped(self): + self.assertSoupEquals('', + '') + + self.assertSoupEquals( + 'foo', + 'foo') + + def test_escaped_ampersand_in_attribute_value_is_left_alone(self): + self.assertSoupEquals('') + + def test_entities_in_strings_converted_during_parsing(self): + # Both XML and HTML entities are converted to Unicode characters + # during parsing. + text = "

<<sacré bleu!>>

" + expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

" + self.assertSoupEquals(text, expected) + + def test_smart_quotes_converted_on_the_way_in(self): + # Microsoft smart quotes are converted to Unicode characters during + # parsing. + quote = b"

\x91Foo\x92

" + soup = self.soup(quote) + self.assertEqual( + soup.p.string, + "\N{LEFT SINGLE QUOTATION MARK}Foo\N{RIGHT SINGLE QUOTATION MARK}") + + def test_non_breaking_spaces_converted_on_the_way_in(self): + soup = self.soup("  ") + self.assertEqual(soup.a.string, "\N{NO-BREAK SPACE}" * 2) + + def test_entities_converted_on_the_way_out(self): + text = "

<<sacré bleu!>>

" + expected = "

<<sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!>>

".encode("utf-8") + soup = self.soup(text) + self.assertEqual(soup.p.encode("utf-8"), expected) + + def test_real_iso_latin_document(self): + # Smoke test of interrelated functionality, using an + # easy-to-understand document. + + # Here it is in Unicode. Note that it claims to be in ISO-Latin-1. + unicode_html = '

Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!

' + + # That's because we're going to encode it into ISO-Latin-1, and use + # that to test. + iso_latin_html = unicode_html.encode("iso-8859-1") + + # Parse the ISO-Latin-1 HTML. + soup = self.soup(iso_latin_html) + # Encode it to UTF-8. + result = soup.encode("utf-8") + + # What do we expect the result to look like? Well, it would + # look like unicode_html, except that the META tag would say + # UTF-8 instead of ISO-Latin-1. + expected = unicode_html.replace("ISO-Latin-1", "utf-8") + + # And, of course, it would be in UTF-8, not Unicode. + expected = expected.encode("utf-8") + + # Ta-da! + self.assertEqual(result, expected) + + def test_real_shift_jis_document(self): + # Smoke test to make sure the parser can handle a document in + # Shift-JIS encoding, without choking. + shift_jis_html = ( + b'
'
+            b'\x82\xb1\x82\xea\x82\xcdShift-JIS\x82\xc5\x83R\x81[\x83f'
+            b'\x83B\x83\x93\x83O\x82\xb3\x82\xea\x82\xbd\x93\xfa\x96{\x8c'
+            b'\xea\x82\xcc\x83t\x83@\x83C\x83\x8b\x82\xc5\x82\xb7\x81B'
+            b'
') + unicode_html = shift_jis_html.decode("shift-jis") + soup = self.soup(unicode_html) + + # Make sure the parse tree is correctly encoded to various + # encodings. + self.assertEqual(soup.encode("utf-8"), unicode_html.encode("utf-8")) + self.assertEqual(soup.encode("euc_jp"), unicode_html.encode("euc_jp")) + + def test_real_hebrew_document(self): + # A real-world test to make sure we can convert ISO-8859-9 (a + # Hebrew encoding) to UTF-8. + hebrew_document = b'Hebrew (ISO 8859-8) in Visual Directionality

Hebrew (ISO 8859-8) in Visual Directionality

\xed\xe5\xec\xf9' + soup = self.soup( + hebrew_document, from_encoding="iso8859-8") + # Some tree builders call it iso8859-8, others call it iso-8859-9. + # That's not a difference we really care about. + assert soup.original_encoding in ('iso8859-8', 'iso-8859-8') + self.assertEqual( + soup.encode('utf-8'), + hebrew_document.decode("iso8859-8").encode("utf-8")) + + def test_meta_tag_reflects_current_encoding(self): + # Here's the tag saying that a document is + # encoded in Shift-JIS. + meta_tag = ('') + + # Here's a document incorporating that meta tag. + shift_jis_html = ( + '\n%s\n' + '' + 'Shift-JIS markup goes here.') % meta_tag + soup = self.soup(shift_jis_html) + + # Parse the document, and the charset is seemingly unaffected. + parsed_meta = soup.find('meta', {'http-equiv': 'Content-type'}) + content = parsed_meta['content'] + self.assertEqual('text/html; charset=x-sjis', content) + + # But that value is actually a ContentMetaAttributeValue object. + self.assertTrue(isinstance(content, ContentMetaAttributeValue)) + + # And it will take on a value that reflects its current + # encoding. + self.assertEqual('text/html; charset=utf8', content.encode("utf8")) + + # For the rest of the story, see TestSubstitutions in + # test_tree.py. + + def test_html5_style_meta_tag_reflects_current_encoding(self): + # Here's the tag saying that a document is + # encoded in Shift-JIS. + meta_tag = ('') + + # Here's a document incorporating that meta tag. + shift_jis_html = ( + '\n%s\n' + '' + 'Shift-JIS markup goes here.') % meta_tag + soup = self.soup(shift_jis_html) + + # Parse the document, and the charset is seemingly unaffected. + parsed_meta = soup.find('meta', id="encoding") + charset = parsed_meta['charset'] + self.assertEqual('x-sjis', charset) + + # But that value is actually a CharsetMetaAttributeValue object. + self.assertTrue(isinstance(charset, CharsetMetaAttributeValue)) + + # And it will take on a value that reflects its current + # encoding. + self.assertEqual('utf8', charset.encode("utf8")) + + def test_tag_with_no_attributes_can_have_attributes_added(self): + data = self.soup("text") + data.a['foo'] = 'bar' + self.assertEqual('text', data.a.decode()) + +class XMLTreeBuilderSmokeTest(object): + + def test_pickle_and_unpickle_identity(self): + # Pickling a tree, then unpickling it, yields a tree identical + # to the original. + tree = self.soup("foo") + dumped = pickle.dumps(tree, 2) + loaded = pickle.loads(dumped) + self.assertEqual(loaded.__class__, BeautifulSoup) + self.assertEqual(loaded.decode(), tree.decode()) + + def test_docstring_generated(self): + soup = self.soup("") + self.assertEqual( + soup.encode(), b'\n') + + def test_xml_declaration(self): + markup = b"""\n""" + soup = self.soup(markup) + self.assertEqual(markup, soup.encode("utf8")) + + def test_processing_instruction(self): + markup = b"""\n""" + soup = self.soup(markup) + self.assertEqual(markup, soup.encode("utf8")) + + def test_real_xhtml_document(self): + """A real XHTML document should come out *exactly* the same as it went in.""" + markup = b""" + + +Hello. +Goodbye. +""" + soup = self.soup(markup) + self.assertEqual( + soup.encode("utf-8"), markup) + + def test_formatter_processes_script_tag_for_xml_documents(self): + doc = """ + +""" + soup = BeautifulSoup(doc, "lxml-xml") + # lxml would have stripped this while parsing, but we can add + # it later. + soup.script.string = 'console.log("< < hey > > ");' + encoded = soup.encode() + self.assertTrue(b"< < hey > >" in encoded) + + def test_can_parse_unicode_document(self): + markup = 'Sacr\N{LATIN SMALL LETTER E WITH ACUTE} bleu!' + soup = self.soup(markup) + self.assertEqual('Sacr\xe9 bleu!', soup.root.string) + + def test_popping_namespaced_tag(self): + markup = 'b2012-07-02T20:33:42Zcd' + soup = self.soup(markup) + self.assertEqual( + str(soup.rss), markup) + + def test_docstring_includes_correct_encoding(self): + soup = self.soup("") + self.assertEqual( + soup.encode("latin1"), + b'\n') + + def test_large_xml_document(self): + """A large XML document should come out the same as it went in.""" + markup = (b'\n' + + b'0' * (2**12) + + b'') + soup = self.soup(markup) + self.assertEqual(soup.encode("utf-8"), markup) + + + def test_tags_are_empty_element_if_and_only_if_they_are_empty(self): + self.assertSoupEquals("

", "

") + self.assertSoupEquals("

foo

") + + def test_namespaces_are_preserved(self): + markup = 'This tag is in the a namespaceThis tag is in the b namespace' + soup = self.soup(markup) + root = soup.root + self.assertEqual("http://example.com/", root['xmlns:a']) + self.assertEqual("http://example.net/", root['xmlns:b']) + + def test_closing_namespaced_tag(self): + markup = '

20010504

' + soup = self.soup(markup) + self.assertEqual(str(soup.p), markup) + + def test_namespaced_attributes(self): + markup = '' + soup = self.soup(markup) + self.assertEqual(str(soup.foo), markup) + + def test_namespaced_attributes_xml_namespace(self): + markup = 'bar' + soup = self.soup(markup) + self.assertEqual(str(soup.foo), markup) + + def test_find_by_prefixed_name(self): + doc = """ +foo + bar + baz + +""" + soup = self.soup(doc) + + # There are three tags. + self.assertEqual(3, len(soup.find_all('tag'))) + + # But two of them are ns1:tag and one of them is ns2:tag. + self.assertEqual(2, len(soup.find_all('ns1:tag'))) + self.assertEqual(1, len(soup.find_all('ns2:tag'))) + + self.assertEqual(1, len(soup.find_all('ns2:tag', key='value'))) + self.assertEqual(3, len(soup.find_all(['ns1:tag', 'ns2:tag']))) + + def test_copy_tag_preserves_namespace(self): + xml = """ +""" + + soup = self.soup(xml) + tag = soup.document + duplicate = copy.copy(tag) + + # The two tags have the same namespace prefix. + self.assertEqual(tag.prefix, duplicate.prefix) + + +class HTML5TreeBuilderSmokeTest(HTMLTreeBuilderSmokeTest): + """Smoke test for a tree builder that supports HTML5.""" + + def test_real_xhtml_document(self): + # Since XHTML is not HTML5, HTML5 parsers are not tested to handle + # XHTML documents in any particular way. + pass + + def test_html_tags_have_namespace(self): + markup = "" + soup = self.soup(markup) + self.assertEqual("http://www.w3.org/1999/xhtml", soup.a.namespace) + + def test_svg_tags_have_namespace(self): + markup = '' + soup = self.soup(markup) + namespace = "http://www.w3.org/2000/svg" + self.assertEqual(namespace, soup.svg.namespace) + self.assertEqual(namespace, soup.circle.namespace) + + + def test_mathml_tags_have_namespace(self): + markup = '5' + soup = self.soup(markup) + namespace = 'http://www.w3.org/1998/Math/MathML' + self.assertEqual(namespace, soup.math.namespace) + self.assertEqual(namespace, soup.msqrt.namespace) + + def test_xml_declaration_becomes_comment(self): + markup = '' + soup = self.soup(markup) + self.assertTrue(isinstance(soup.contents[0], Comment)) + self.assertEqual(soup.contents[0], '?xml version="1.0" encoding="utf-8"?') + self.assertEqual("html", soup.contents[0].next_element.name) + +def skipIf(condition, reason): + def nothing(test, *args, **kwargs): + return None + + def decorator(test_item): + if condition: + return nothing + else: + return test_item + + return decorator diff --git a/utils/lib/python3.5/site-packages/bs4/tests/__init__.py b/utils/lib/python3.5/site-packages/bs4/tests/__init__.py new file mode 100644 index 0000000..142c8cc --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/tests/__init__.py @@ -0,0 +1 @@ +"The beautifulsoup tests." diff --git a/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/__init__.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57552c137bb97b16a1103d46de315da3b467728f GIT binary patch literal 181 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 QY|F)pA>S~$Wn6gwzbI(rK>z>% literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_docs.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_docs.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04a2a37de1f8f7e73137c9463c683d19bbf7005d GIT binary patch literal 431 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 RHqODdo-?jmrjdut{ug2myITMN literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_htmlparser.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e822e3f93726d306e8551b32305586f12bbc091 GIT binary patch literal 1969 zcmb_cPj4GV6o0ecU9UF|jtVqLNYx&=Sfci&>d9CY6>1M)Arg?-%V_NxJDbe@VP>|- zR&olTf-ivhN_*whufU1-#*Sr5S}MUh^UHfPZ{EEBr^meu?m-+X{S;NT08eum3P z1ObpDG7ugp289Qy2aNa*s1BqZcjklgp$H%ipa>xiw-N!UE))@@5wI5`1kr_GP*)dZ z05XJIAJQJ_IU7cs7w6Jglh`VerD?QG>_uh~WO88(HL5dhq)x1sGMP8I63DD%DRpM0 zNmf-QVmdRU*Jv{gS=%$xa;vk2oDID;I;)zRUT8mgdH&7U=P3H+R?AsYT}e8@J0H{8 zx9+6_i3MrA`#MNG!)3lh!1$yX2t*I$HV__pc*`L5$uZ#*i$M|i7dqNSK}3%3fp3pdMX>lVpb9n{GEF%|k9;H5@^{b?vVT4w+oB%V zdHvW$@bRlx>-=(+U5w{4Yiz!3l))%H8PCm=F-FxIhn(WS4gaWKw*w)US)(l9W#NdP z_YlC_jNWbf=#8uQyW*oN3@Q2H%tmL(J4bJ!hivcWe58t*o25$`^N5e)u1({JW;Tl@vZozAK9#khli8bPasV;D&)^aOuId z>*re!ZalZsfoqS-_67-*_rV5m-GR#xY?p+Qz*Ce*WUgcV&GP$FB_swOZF^!d$BFUB(d%DgSS1K=8qrJ@Lc#=&g^XamxCgW`Snrdw} zj8dP9wGG_`*#@F1YSRX)%7jVd%;2=J=em(?oSVEfHY*o0?e2=U^{GaNzN;)`(D*bY z4N{~bsgUB$dOLMhvb)c7!?zEMQ#8j=dx1Y-57>Zhp5E*HzJW(?QM5R0Y#K8zgP$R> z&mfLqOaa^RZoClhx+R!xKAp_W&8xfLJEQc*ic2~g5$U_CXf(8kSdtXVZG9hWZApg&CJSR z6`Y)Va?U@RprBc58TlD(d34lM~#B%}1 zYxqi=0eAp5N(P<*J_B4DjSa93*uOTOrocAALzxC{!cGQuvS4T7RsSBCJO{gZ5E7U@ z0cVXAX3%iX&m-Bt<_R0yB-Ds z@5d_pC~U|35m!ahG-BcQ(2*Kb8M)hwo_26lMz3OLI}ZHF6%v)Ent#$fa89x~u ztl=xSQE;R)G6*G-4r7)gwh{qT6ex-!@)B3lG_^Cpvw-X^M(e;QD4M$%_B=%w$$&%{ z?a31tyh*(W*UK2(DK&ov|D&4@uQo8QTU+Nrw6(R=#>~?X{ik;wUztS_qnCi^vwDpQ z0~Zi~Q*yuaJBSKS|NL?}4x;6#7v0g!xwE&o-`nZB+smzS)FtA4f4L>^FH_v4mJXr4 z6z!|B$2;!8kDU?kuG5F$x5`^3Bwzo-n)D9dC+pj%5t~V}oP;_^cYUE3QNu z$3)1Dp9Zck5$iH~uMtkf6i(H=CVn`Gov`Bwx8LOslCu}@*H9~qD1c>He)JCSor~Xj z=NuC9hlJo^8igP#4A&Z%co7lbOH$LK?N%ogR_J@y9v89~_N}lpsv@D~?u9+ilDw-! zd(196_$WMI;N&Pgm$b`rwDYd~Y zvl1KL`Z%_y_8!rb?oLr!$5&!$pzNXx>pLF+`(>I?i1n=r5d&T!A-{jQNjM>AO^8h( zIMP%)#{A7t`5*-zlYs?ngs9xjkWBcTt*eaS?NE5lVS1%yEw2vEl@`hye=o&W+egr> zp0qrU#jlMWz|#QNaw_-66@BD^RFk;g-gd@wp~en^u$7O@M0|nISNe8QilN9?E!Y+pbQZsCtEwJJ0$3yW?2i9w*xIpgA zkeDSww67Ia&T;x~z#T{B9VZCAfluS2<4}%{G+Bojg3Gx`gb^n3zNpd>(|s3N)N zym-0M*r+#0vmZ8IHl9AOi_2t1CGP|lR8<9~yO>0A1z$;nqM0$OX0ecB6*iO6y5U#< zt!JShAL&~}&NcelO%zDZf77?HR;r71zjK=G|JQoRyAM}IjrTX?_^55@)I7(bvz?<} z%ZMAeSA0f-ZZ4>niqA>tK=M{D>n_?y=X!%<5|1a>v>s|l= literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_soup.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_soup.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a41e13439c5f1c57f5e3768b36dbe19f9c8ff21 GIT binary patch literal 23257 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_tree.cpython-35.pyc b/utils/lib/python3.5/site-packages/bs4/tests/__pycache__/test_tree.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c014abd2f4e89aa2ff9cb5329d01ffa1a6b60f94 GIT binary patch literal 92942 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 literal 0 HcmV?d00001 diff --git a/utils/lib/python3.5/site-packages/bs4/tests/test_builder_registry.py b/utils/lib/python3.5/site-packages/bs4/tests/test_builder_registry.py new file mode 100644 index 0000000..90cad82 --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/tests/test_builder_registry.py @@ -0,0 +1,147 @@ +"""Tests of the builder registry.""" + +import unittest +import warnings + +from bs4 import BeautifulSoup +from bs4.builder import ( + builder_registry as registry, + HTMLParserTreeBuilder, + TreeBuilderRegistry, +) + +try: + from bs4.builder import HTML5TreeBuilder + HTML5LIB_PRESENT = True +except ImportError: + HTML5LIB_PRESENT = False + +try: + from bs4.builder import ( + LXMLTreeBuilderForXML, + LXMLTreeBuilder, + ) + LXML_PRESENT = True +except ImportError: + LXML_PRESENT = False + + +class BuiltInRegistryTest(unittest.TestCase): + """Test the built-in registry with the default builders registered.""" + + def test_combination(self): + if LXML_PRESENT: + self.assertEqual(registry.lookup('fast', 'html'), + LXMLTreeBuilder) + + if LXML_PRESENT: + self.assertEqual(registry.lookup('permissive', 'xml'), + LXMLTreeBuilderForXML) + self.assertEqual(registry.lookup('strict', 'html'), + HTMLParserTreeBuilder) + if HTML5LIB_PRESENT: + self.assertEqual(registry.lookup('html5lib', 'html'), + HTML5TreeBuilder) + + def test_lookup_by_markup_type(self): + if LXML_PRESENT: + self.assertEqual(registry.lookup('html'), LXMLTreeBuilder) + self.assertEqual(registry.lookup('xml'), LXMLTreeBuilderForXML) + else: + self.assertEqual(registry.lookup('xml'), None) + if HTML5LIB_PRESENT: + self.assertEqual(registry.lookup('html'), HTML5TreeBuilder) + else: + self.assertEqual(registry.lookup('html'), HTMLParserTreeBuilder) + + def test_named_library(self): + if LXML_PRESENT: + self.assertEqual(registry.lookup('lxml', 'xml'), + LXMLTreeBuilderForXML) + self.assertEqual(registry.lookup('lxml', 'html'), + LXMLTreeBuilder) + if HTML5LIB_PRESENT: + self.assertEqual(registry.lookup('html5lib'), + HTML5TreeBuilder) + + self.assertEqual(registry.lookup('html.parser'), + HTMLParserTreeBuilder) + + def test_beautifulsoup_constructor_does_lookup(self): + + with warnings.catch_warnings(record=True) as w: + # This will create a warning about not explicitly + # specifying a parser, but we'll ignore it. + + # You can pass in a string. + BeautifulSoup("", features="html") + # Or a list of strings. + BeautifulSoup("", features=["html", "fast"]) + + # You'll get an exception if BS can't find an appropriate + # builder. + self.assertRaises(ValueError, BeautifulSoup, + "", features="no-such-feature") + +class RegistryTest(unittest.TestCase): + """Test the TreeBuilderRegistry class in general.""" + + def setUp(self): + self.registry = TreeBuilderRegistry() + + def builder_for_features(self, *feature_list): + cls = type('Builder_' + '_'.join(feature_list), + (object,), {'features' : feature_list}) + + self.registry.register(cls) + return cls + + def test_register_with_no_features(self): + builder = self.builder_for_features() + + # Since the builder advertises no features, you can't find it + # by looking up features. + self.assertEqual(self.registry.lookup('foo'), None) + + # But you can find it by doing a lookup with no features, if + # this happens to be the only registered builder. + self.assertEqual(self.registry.lookup(), builder) + + def test_register_with_features_makes_lookup_succeed(self): + builder = self.builder_for_features('foo', 'bar') + self.assertEqual(self.registry.lookup('foo'), builder) + self.assertEqual(self.registry.lookup('bar'), builder) + + def test_lookup_fails_when_no_builder_implements_feature(self): + builder = self.builder_for_features('foo', 'bar') + self.assertEqual(self.registry.lookup('baz'), None) + + def test_lookup_gets_most_recent_registration_when_no_feature_specified(self): + builder1 = self.builder_for_features('foo') + builder2 = self.builder_for_features('bar') + self.assertEqual(self.registry.lookup(), builder2) + + def test_lookup_fails_when_no_tree_builders_registered(self): + self.assertEqual(self.registry.lookup(), None) + + def test_lookup_gets_most_recent_builder_supporting_all_features(self): + has_one = self.builder_for_features('foo') + has_the_other = self.builder_for_features('bar') + has_both_early = self.builder_for_features('foo', 'bar', 'baz') + has_both_late = self.builder_for_features('foo', 'bar', 'quux') + lacks_one = self.builder_for_features('bar') + has_the_other = self.builder_for_features('foo') + + # There are two builders featuring 'foo' and 'bar', but + # the one that also features 'quux' was registered later. + self.assertEqual(self.registry.lookup('foo', 'bar'), + has_both_late) + + # There is only one builder featuring 'foo', 'bar', and 'baz'. + self.assertEqual(self.registry.lookup('foo', 'bar', 'baz'), + has_both_early) + + def test_lookup_fails_when_cannot_reconcile_requested_features(self): + builder1 = self.builder_for_features('foo', 'bar') + builder2 = self.builder_for_features('foo', 'baz') + self.assertEqual(self.registry.lookup('bar', 'baz'), None) diff --git a/utils/lib/python3.5/site-packages/bs4/tests/test_docs.py b/utils/lib/python3.5/site-packages/bs4/tests/test_docs.py new file mode 100644 index 0000000..5b9f677 --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/tests/test_docs.py @@ -0,0 +1,36 @@ +"Test harness for doctests." + +# pylint: disable-msg=E0611,W0142 + +__metaclass__ = type +__all__ = [ + 'additional_tests', + ] + +import atexit +import doctest +import os +#from pkg_resources import ( +# resource_filename, resource_exists, resource_listdir, cleanup_resources) +import unittest + +DOCTEST_FLAGS = ( + doctest.ELLIPSIS | + doctest.NORMALIZE_WHITESPACE | + doctest.REPORT_NDIFF) + + +# def additional_tests(): +# "Run the doc tests (README.txt and docs/*, if any exist)" +# doctest_files = [ +# os.path.abspath(resource_filename('bs4', 'README.txt'))] +# if resource_exists('bs4', 'docs'): +# for name in resource_listdir('bs4', 'docs'): +# if name.endswith('.txt'): +# doctest_files.append( +# os.path.abspath( +# resource_filename('bs4', 'docs/%s' % name))) +# kwargs = dict(module_relative=False, optionflags=DOCTEST_FLAGS) +# atexit.register(cleanup_resources) +# return unittest.TestSuite(( +# doctest.DocFileSuite(*doctest_files, **kwargs))) diff --git a/utils/lib/python3.5/site-packages/bs4/tests/test_html5lib.py b/utils/lib/python3.5/site-packages/bs4/tests/test_html5lib.py new file mode 100644 index 0000000..81fb7d3 --- /dev/null +++ b/utils/lib/python3.5/site-packages/bs4/tests/test_html5lib.py @@ -0,0 +1,130 @@ +"""Tests to ensure that the html5lib tree builder generates good trees.""" + +import warnings + +try: + from bs4.builder import HTML5TreeBuilder + HTML5LIB_PRESENT = True +except ImportError as e: + HTML5LIB_PRESENT = False +from bs4.element import SoupStrainer +from bs4.testing import ( + HTML5TreeBuilderSmokeTest, + SoupTest, + skipIf, +) + +@skipIf( + not HTML5LIB_PRESENT, + "html5lib seems not to be present, not testing its tree builder.") +class HTML5LibBuilderSmokeTest(SoupTest, HTML5TreeBuilderSmokeTest): + """See ``HTML5TreeBuilderSmokeTest``.""" + + @property + def default_builder(self): + return HTML5TreeBuilder() + + def test_soupstrainer(self): + # The html5lib tree builder does not support SoupStrainers. + strainer = SoupStrainer("b") + markup = "

A bold statement.

" + with warnings.catch_warnings(record=True) as w: + soup = self.soup(markup, parse_only=strainer) + self.assertEqual( + soup.decode(), self.document_for(markup)) + + self.assertTrue( + "the html5lib tree builder doesn't support parse_only" in + str(w[0].message)) + + def test_correctly_nested_tables(self): + """html5lib inserts tags where other parsers don't.""" + markup = ('' + '' + "') + + self.assertSoupEquals( + markup, + '
Here's another table:" + '' + '' + '
foo
Here\'s another table:' + '
foo
' + '
') + + self.assertSoupEquals( + "" + "" + "
Foo
Bar
Baz
") + + def test_xml_declaration_followed_by_doctype(self): + markup = ''' + + + + + +

foo

+ +''' + soup = self.soup(markup) + # Verify that we can reach the

tag; this means the tree is connected. + self.assertEqual(b"

foo

", soup.p.encode()) + + def test_reparented_markup(self): + markup = '

foo

\n

bar

' + soup = self.soup(markup) + self.assertEqual("

foo

\n

bar

", soup.body.decode()) + self.assertEqual(2, len(soup.find_all('p'))) + + + def test_reparented_markup_ends_with_whitespace(self): + markup = '

foo

\n

bar

\n' + soup = self.soup(markup) + self.assertEqual("

foo

\n

bar

\n", soup.body.decode()) + self.assertEqual(2, len(soup.find_all('p'))) + + def test_reparented_markup_containing_identical_whitespace_nodes(self): + """Verify that we keep the two whitespace nodes in this + document distinct when reparenting the adjacent tags. + """ + markup = '
' + soup = self.soup(markup) + space1, space2 = soup.find_all(string=' ') + tbody1, tbody2 = soup.find_all('tbody') + assert space1.next_element is tbody1 + assert tbody2.next_element is space2 + + def test_reparented_markup_containing_children(self): + markup = '' + soup = self.soup(markup) + noscript = soup.noscript + self.assertEqual("target", noscript.next_element) + target = soup.find(string='target') + + # The 'aftermath' string was duplicated; we want the second one. + final_aftermath = soup.find_all(string='aftermath')[-1] + + # The