From d14d14e7fa13a574dec0cdd9b901557df24a866e Mon Sep 17 00:00:00 2001 From: BorisKolganov Date: Wed, 25 Mar 2015 17:56:07 +0300 Subject: [PATCH] first 30/30 --- __init__.py | 0 db_api.py | 872 +++ db_api.sublime-project | 16 + db_api.sublime-workspace | 635 ++ env/.Python | 1 + env/bin/activate | 80 + env/bin/activate.csh | 42 + env/bin/activate.fish | 74 + env/bin/activate_this.py | 34 + env/bin/easy_install | 11 + env/bin/easy_install-2.7 | 11 + env/bin/pip | 11 + env/bin/pip2 | 11 + env/bin/pip2.7 | 11 + env/bin/python | Bin 0 -> 34560 bytes env/bin/python2 | 1 + env/bin/python2.7 | 1 + env/bin/uwsgi | Bin 0 -> 1149932 bytes env/include/python2.7 | 1 + env/lib/python2.7/UserDict.py | 1 + env/lib/python2.7/UserDict.pyc | Bin 0 -> 9585 bytes env/lib/python2.7/_abcoll.py | 1 + env/lib/python2.7/_abcoll.pyc | Bin 0 -> 26716 bytes env/lib/python2.7/_weakrefset.py | 1 + env/lib/python2.7/_weakrefset.pyc | Bin 0 -> 10494 bytes env/lib/python2.7/abc.py | 1 + env/lib/python2.7/abc.pyc | Bin 0 -> 6330 bytes env/lib/python2.7/codecs.py | 1 + env/lib/python2.7/codecs.pyc | Bin 0 -> 38200 bytes env/lib/python2.7/config | 1 + env/lib/python2.7/copy_reg.py | 1 + env/lib/python2.7/copy_reg.pyc | Bin 0 -> 5300 bytes env/lib/python2.7/distutils/__init__.py | 101 + env/lib/python2.7/distutils/__init__.pyc | Bin 0 -> 3736 bytes env/lib/python2.7/distutils/distutils.cfg | 6 + env/lib/python2.7/encodings | 1 + env/lib/python2.7/fnmatch.py | 1 + env/lib/python2.7/fnmatch.pyc | Bin 0 -> 3636 bytes env/lib/python2.7/genericpath.py | 1 + env/lib/python2.7/genericpath.pyc | Bin 0 -> 3433 bytes env/lib/python2.7/lib-dynload | 1 + env/lib/python2.7/linecache.py | 1 + env/lib/python2.7/linecache.pyc | Bin 0 -> 3313 bytes env/lib/python2.7/locale.py | 1 + env/lib/python2.7/locale.pyc | Bin 0 -> 50472 bytes env/lib/python2.7/no-global-site-packages.txt | 0 env/lib/python2.7/ntpath.py | 1 + env/lib/python2.7/orig-prefix.txt | 1 + env/lib/python2.7/os.py | 1 + env/lib/python2.7/os.pyc | Bin 0 -> 26458 bytes env/lib/python2.7/posixpath.py | 1 + env/lib/python2.7/posixpath.pyc | Bin 0 -> 11705 bytes env/lib/python2.7/re.py | 1 + env/lib/python2.7/re.pyc | Bin 0 -> 13451 bytes .../Flask-0.10.1-py2.7.egg-info/PKG-INFO | 58 + .../Flask-0.10.1-py2.7.egg-info/SOURCES.txt | 238 + .../dependency_links.txt | 1 + .../installed-files.txt | 148 + .../Flask-0.10.1-py2.7.egg-info/not-zip-safe | 1 + .../Flask-0.10.1-py2.7.egg-info/requires.txt | 3 + .../Flask-0.10.1-py2.7.egg-info/top_level.txt | 1 + .../Flask_MySQL-1.2-py2.7-nspkg.pth | 1 + .../Flask_MySQL-1.2-py2.7.egg-info/PKG-INFO | 17 + .../SOURCES.txt | 11 + .../dependency_links.txt | 1 + .../installed-files.txt | 11 + .../namespace_packages.txt | 1 + .../not-zip-safe | 1 + .../requires.txt | 2 + .../top_level.txt | 1 + .../Jinja2-2.7.3-py2.7.egg-info/PKG-INFO | 55 + .../Jinja2-2.7.3-py2.7.egg-info/SOURCES.txt | 126 + .../dependency_links.txt | 1 + .../entry_points.txt | 4 + .../installed-files.txt | 92 + .../Jinja2-2.7.3-py2.7.egg-info/not-zip-safe | 1 + .../Jinja2-2.7.3-py2.7.egg-info/requires.txt | 4 + .../Jinja2-2.7.3-py2.7.egg-info/top_level.txt | 1 + .../MarkupSafe-0.23-py2.7.egg-info/PKG-INFO | 119 + .../SOURCES.txt | 17 + .../dependency_links.txt | 1 + .../installed-files.txt | 18 + .../not-zip-safe | 1 + .../top_level.txt | 1 + .../PKG-INFO | 43 + .../SOURCES.txt | 60 + .../dependency_links.txt | 1 + .../installed-files.txt | 34 + .../top_level.txt | 3 + .../site-packages/MySQLdb/__init__.py | 98 + .../site-packages/MySQLdb/__init__.pyc | Bin 0 -> 4549 bytes .../site-packages/MySQLdb/connections.py | 351 ++ .../site-packages/MySQLdb/connections.pyc | Bin 0 -> 13276 bytes .../site-packages/MySQLdb/constants/CLIENT.py | 29 + .../MySQLdb/constants/CLIENT.pyc | Bin 0 -> 1001 bytes .../site-packages/MySQLdb/constants/CR.py | 30 + .../site-packages/MySQLdb/constants/CR.pyc | Bin 0 -> 1076 bytes .../site-packages/MySQLdb/constants/ER.py | 467 ++ .../site-packages/MySQLdb/constants/ER.pyc | Bin 0 -> 16789 bytes .../MySQLdb/constants/FIELD_TYPE.py | 37 + .../MySQLdb/constants/FIELD_TYPE.pyc | Bin 0 -> 1002 bytes .../site-packages/MySQLdb/constants/FLAG.py | 23 + .../site-packages/MySQLdb/constants/FLAG.pyc | Bin 0 -> 714 bytes .../MySQLdb/constants/REFRESH.py | 17 + .../MySQLdb/constants/REFRESH.pyc | Bin 0 -> 551 bytes .../MySQLdb/constants/__init__.py | 1 + .../MySQLdb/constants/__init__.pyc | Bin 0 -> 265 bytes .../site-packages/MySQLdb/converters.py | 189 + .../site-packages/MySQLdb/converters.pyc | Bin 0 -> 7186 bytes .../site-packages/MySQLdb/cursors.py | 541 ++ .../site-packages/MySQLdb/cursors.pyc | Bin 0 -> 22201 bytes .../site-packages/MySQLdb/release.py | 4 + .../site-packages/MySQLdb/release.pyc | Bin 0 -> 336 bytes .../python2.7/site-packages/MySQLdb/times.py | 126 + .../python2.7/site-packages/MySQLdb/times.pyc | Bin 0 -> 5141 bytes .../Werkzeug-0.10.1-py2.7.egg-info/PKG-INFO | 72 + .../SOURCES.txt | 288 + .../dependency_links.txt | 1 + .../installed-files.txt | 91 + .../not-zip-safe | 1 + .../top_level.txt | 1 + .../site-packages/_markerlib/__init__.py | 16 + .../site-packages/_markerlib/__init__.pyc | Bin 0 -> 1357 bytes .../site-packages/_markerlib/markers.py | 119 + .../site-packages/_markerlib/markers.pyc | Bin 0 -> 5739 bytes env/lib/python2.7/site-packages/_mysql.so | Bin 0 -> 131024 bytes .../site-packages/_mysql_exceptions.py | 87 + .../site-packages/_mysql_exceptions.pyc | Bin 0 -> 4459 bytes .../python2.7/site-packages/easy_install.py | 5 + .../python2.7/site-packages/easy_install.pyc | Bin 0 -> 367 bytes .../python2.7/site-packages/flask/__init__.py | 50 + .../site-packages/flask/__init__.pyc | Bin 0 -> 2187 bytes .../python2.7/site-packages/flask/_compat.py | 73 + .../python2.7/site-packages/flask/_compat.pyc | Bin 0 -> 3643 bytes env/lib/python2.7/site-packages/flask/app.py | 1842 ++++++ env/lib/python2.7/site-packages/flask/app.pyc | Bin 0 -> 65334 bytes .../site-packages/flask/blueprints.py | 401 ++ .../site-packages/flask/blueprints.pyc | Bin 0 -> 22808 bytes .../python2.7/site-packages/flask/config.py | 168 + .../python2.7/site-packages/flask/config.pyc | Bin 0 -> 7558 bytes env/lib/python2.7/site-packages/flask/ctx.py | 394 ++ env/lib/python2.7/site-packages/flask/ctx.pyc | Bin 0 -> 14586 bytes .../site-packages/flask/debughelpers.py | 87 + .../site-packages/flask/debughelpers.pyc | Bin 0 -> 4846 bytes .../site-packages/flask/ext/__init__.py | 29 + .../site-packages/flask/ext/__init__.pyc | Bin 0 -> 1173 bytes .../python2.7/site-packages/flask/exthook.py | 120 + .../python2.7/site-packages/flask/exthook.pyc | Bin 0 -> 4664 bytes .../python2.7/site-packages/flask/globals.py | 44 + .../python2.7/site-packages/flask/globals.pyc | Bin 0 -> 1673 bytes .../python2.7/site-packages/flask/helpers.py | 849 +++ .../python2.7/site-packages/flask/helpers.pyc | Bin 0 -> 31479 bytes env/lib/python2.7/site-packages/flask/json.py | 243 + .../python2.7/site-packages/flask/json.pyc | Bin 0 -> 9917 bytes .../python2.7/site-packages/flask/logging.py | 45 + .../python2.7/site-packages/flask/logging.pyc | Bin 0 -> 2324 bytes .../python2.7/site-packages/flask/module.py | 42 + .../python2.7/site-packages/flask/module.pyc | Bin 0 -> 1970 bytes .../python2.7/site-packages/flask/sessions.py | 332 ++ .../site-packages/flask/sessions.pyc | Bin 0 -> 14255 bytes .../python2.7/site-packages/flask/signals.py | 55 + .../python2.7/site-packages/flask/signals.pyc | Bin 0 -> 2927 bytes .../site-packages/flask/templating.py | 143 + .../site-packages/flask/templating.pyc | Bin 0 -> 5718 bytes .../python2.7/site-packages/flask/testing.py | 124 + .../python2.7/site-packages/flask/testing.pyc | Bin 0 -> 4829 bytes .../site-packages/flask/testsuite/__init__.py | 246 + .../flask/testsuite/__init__.pyc | Bin 0 -> 11692 bytes .../site-packages/flask/testsuite/appctx.py | 101 + .../site-packages/flask/testsuite/appctx.pyc | Bin 0 -> 5715 bytes .../site-packages/flask/testsuite/basic.py | 1254 ++++ .../site-packages/flask/testsuite/basic.pyc | Bin 0 -> 61748 bytes .../flask/testsuite/blueprints.py | 790 +++ .../flask/testsuite/blueprints.pyc | Bin 0 -> 41103 bytes .../site-packages/flask/testsuite/config.py | 299 + .../site-packages/flask/testsuite/config.pyc | Bin 0 -> 13578 bytes .../flask/testsuite/deprecations.py | 24 + .../flask/testsuite/deprecations.pyc | Bin 0 -> 1083 bytes .../site-packages/flask/testsuite/examples.py | 38 + .../flask/testsuite/examples.pyc | Bin 0 -> 1403 bytes .../site-packages/flask/testsuite/ext.py | 134 + .../site-packages/flask/testsuite/ext.pyc | Bin 0 -> 7365 bytes .../site-packages/flask/testsuite/helpers.py | 593 ++ .../site-packages/flask/testsuite/helpers.pyc | Bin 0 -> 29041 bytes .../flask/testsuite/regression.py | 116 + .../flask/testsuite/regression.pyc | Bin 0 -> 5975 bytes .../site-packages/flask/testsuite/reqctx.py | 185 + .../site-packages/flask/testsuite/reqctx.pyc | Bin 0 -> 7838 bytes .../site-packages/flask/testsuite/signals.py | 153 + .../site-packages/flask/testsuite/signals.pyc | Bin 0 -> 7367 bytes .../flask/testsuite/static/index.html | 1 + .../flask/testsuite/subclassing.py | 46 + .../flask/testsuite/subclassing.pyc | Bin 0 -> 2474 bytes .../flask/testsuite/templates/_macro.html | 1 + .../testsuite/templates/context_template.html | 1 + .../templates/escaping_template.html | 6 + .../flask/testsuite/templates/mail.txt | 1 + .../testsuite/templates/nested/nested.txt | 1 + .../testsuite/templates/simple_template.html | 1 + .../testsuite/templates/template_filter.html | 1 + .../testsuite/templates/template_test.html | 3 + .../flask/testsuite/templating.py | 302 + .../flask/testsuite/templating.pyc | Bin 0 -> 19325 bytes .../test_apps/blueprintapp/__init__.py | 7 + .../test_apps/blueprintapp/__init__.pyc | Bin 0 -> 466 bytes .../test_apps/blueprintapp/apps/__init__.py | 0 .../test_apps/blueprintapp/apps/__init__.pyc | Bin 0 -> 194 bytes .../blueprintapp/apps/admin/__init__.py | 15 + .../blueprintapp/apps/admin/__init__.pyc | Bin 0 -> 981 bytes .../apps/admin/static/css/test.css | 1 + .../blueprintapp/apps/admin/static/test.txt | 1 + .../apps/admin/templates/admin/index.html | 1 + .../blueprintapp/apps/frontend/__init__.py | 8 + .../blueprintapp/apps/frontend/__init__.pyc | Bin 0 -> 653 bytes .../frontend/templates/frontend/index.html | 1 + .../testsuite/test_apps/config_module_app.py | 4 + .../testsuite/test_apps/config_module_app.pyc | Bin 0 -> 368 bytes .../test_apps/config_package_app/__init__.py | 4 + .../test_apps/config_package_app/__init__.pyc | Bin 0 -> 378 bytes .../test_apps/flask_broken/__init__.py | 2 + .../test_apps/flask_broken/__init__.pyc | Bin 0 -> 272 bytes .../testsuite/test_apps/flask_broken/b.py | 0 .../testsuite/test_apps/flask_broken/b.pyc | Bin 0 -> 182 bytes .../flask_newext_package/__init__.py | 1 + .../flask_newext_package/__init__.pyc | Bin 0 -> 233 bytes .../flask_newext_package/submodule.py | 2 + .../flask_newext_package/submodule.pyc | Bin 0 -> 414 bytes .../test_apps/flask_newext_simple.py | 1 + .../test_apps/flask_newext_simple.pyc | Bin 0 -> 222 bytes .../testsuite/test_apps/flaskext/__init__.py | 0 .../testsuite/test_apps/flaskext/__init__.pyc | Bin 0 -> 185 bytes .../flaskext/oldext_package/__init__.py | 1 + .../flaskext/oldext_package/__init__.pyc | Bin 0 -> 236 bytes .../flaskext/oldext_package/submodule.py | 2 + .../flaskext/oldext_package/submodule.pyc | Bin 0 -> 420 bytes .../test_apps/flaskext/oldext_simple.py | 1 + .../test_apps/flaskext/oldext_simple.pyc | Bin 0 -> 225 bytes .../flask/testsuite/test_apps/importerror.py | 2 + .../flask/testsuite/test_apps/importerror.pyc | Bin 0 -> 209 bytes .../lib/python2.5/site-packages/SiteEgg.egg | Bin 0 -> 1218 bytes .../lib/python2.5/site-packages/site_app.py | 3 + .../lib/python2.5/site-packages/site_app.pyc | Bin 0 -> 279 bytes .../site-packages/site_package/__init__.py | 3 + .../site-packages/site_package/__init__.pyc | Bin 0 -> 292 bytes .../flask/testsuite/test_apps/main_app.py | 4 + .../flask/testsuite/test_apps/main_app.pyc | Bin 0 -> 251 bytes .../testsuite/test_apps/moduleapp/__init__.py | 7 + .../test_apps/moduleapp/__init__.pyc | Bin 0 -> 454 bytes .../test_apps/moduleapp/apps/__init__.py | 0 .../test_apps/moduleapp/apps/__init__.pyc | Bin 0 -> 191 bytes .../moduleapp/apps/admin/__init__.py | 14 + .../moduleapp/apps/admin/__init__.pyc | Bin 0 -> 882 bytes .../moduleapp/apps/admin/static/css/test.css | 1 + .../moduleapp/apps/admin/static/test.txt | 1 + .../moduleapp/apps/admin/templates/index.html | 1 + .../moduleapp/apps/frontend/__init__.py | 9 + .../moduleapp/apps/frontend/__init__.pyc | Bin 0 -> 596 bytes .../apps/frontend/templates/index.html | 1 + .../path/installed_package/__init__.py | 3 + .../path/installed_package/__init__.pyc | Bin 0 -> 274 bytes .../test_apps/subdomaintestmodule/__init__.py | 4 + .../subdomaintestmodule/__init__.pyc | Bin 0 -> 314 bytes .../subdomaintestmodule/static/hello.txt | 1 + .../site-packages/flask/testsuite/testing.py | 242 + .../site-packages/flask/testsuite/testing.pyc | Bin 0 -> 10527 bytes .../site-packages/flask/testsuite/views.py | 169 + .../site-packages/flask/testsuite/views.pyc | Bin 0 -> 10429 bytes .../python2.7/site-packages/flask/views.py | 149 + .../python2.7/site-packages/flask/views.pyc | Bin 0 -> 5537 bytes .../python2.7/site-packages/flask/wrappers.py | 184 + .../site-packages/flask/wrappers.pyc | Bin 0 -> 6992 bytes .../site-packages/flaskext/__init__.py | 0 .../site-packages/flaskext/__init__.pyc | Bin 0 -> 159 bytes .../python2.7/site-packages/flaskext/mysql.py | 55 + .../site-packages/flaskext/mysql.pyc | Bin 0 -> 2705 bytes .../itsdangerous-0.24-py2.7.egg-info/PKG-INFO | 13 + .../SOURCES.txt | 27 + .../dependency_links.txt | 1 + .../installed-files.txt | 8 + .../not-zip-safe | 1 + .../top_level.txt | 1 + .../python2.7/site-packages/itsdangerous.py | 872 +++ .../python2.7/site-packages/itsdangerous.pyc | Bin 0 -> 35734 bytes .../jedi-0.8.1-py2.7.egg-info/PKG-INFO | 224 + .../jedi-0.8.1-py2.7.egg-info/SOURCES.txt | 203 + .../dependency_links.txt | 1 + .../installed-files.txt | 89 + .../jedi-0.8.1-py2.7.egg-info/top_level.txt | 1 + .../python2.7/site-packages/jedi/__init__.py | 41 + .../python2.7/site-packages/jedi/__init__.pyc | Bin 0 -> 1805 bytes .../python2.7/site-packages/jedi/__main__.py | 43 + .../python2.7/site-packages/jedi/__main__.pyc | Bin 0 -> 1202 bytes .../site-packages/jedi/_compatibility.py | 199 + .../site-packages/jedi/_compatibility.pyc | Bin 0 -> 6858 bytes .../site-packages/jedi/api/__init__.py | 729 +++ .../site-packages/jedi/api/__init__.pyc | Bin 0 -> 28739 bytes .../site-packages/jedi/api/classes.py | 793 +++ .../site-packages/jedi/api/classes.pyc | Bin 0 -> 29838 bytes .../site-packages/jedi/api/helpers.py | 46 + .../site-packages/jedi/api/helpers.pyc | Bin 0 -> 2039 bytes .../site-packages/jedi/api/interpreter.py | 108 + .../site-packages/jedi/api/interpreter.pyc | Bin 0 -> 4739 bytes .../site-packages/jedi/api/keywords.py | 100 + .../site-packages/jedi/api/keywords.pyc | Bin 0 -> 4413 bytes .../site-packages/jedi/api/replstartup.py | 27 + .../site-packages/jedi/api/replstartup.pyc | Bin 0 -> 945 bytes .../site-packages/jedi/api/usages.py | 97 + .../site-packages/jedi/api/usages.pyc | Bin 0 -> 3775 bytes env/lib/python2.7/site-packages/jedi/cache.py | 354 ++ .../python2.7/site-packages/jedi/cache.pyc | Bin 0 -> 11955 bytes .../python2.7/site-packages/jedi/common.py | 158 + .../python2.7/site-packages/jedi/common.pyc | Bin 0 -> 7442 bytes env/lib/python2.7/site-packages/jedi/debug.py | 93 + .../python2.7/site-packages/jedi/debug.pyc | Bin 0 -> 3288 bytes .../site-packages/jedi/evaluate/__init__.py | 382 ++ .../site-packages/jedi/evaluate/__init__.pyc | Bin 0 -> 14402 bytes .../site-packages/jedi/evaluate/analysis.py | 235 + .../site-packages/jedi/evaluate/analysis.pyc | Bin 0 -> 9913 bytes .../site-packages/jedi/evaluate/cache.py | 54 + .../site-packages/jedi/evaluate/cache.pyc | Bin 0 -> 2531 bytes .../jedi/evaluate/compiled/__init__.py | 429 ++ .../jedi/evaluate/compiled/__init__.pyc | Bin 0 -> 16027 bytes .../jedi/evaluate/compiled/fake.py | 116 + .../jedi/evaluate/compiled/fake.pyc | Bin 0 -> 3825 bytes .../evaluate/compiled/fake/_functools.pym | 9 + .../jedi/evaluate/compiled/fake/_sqlite3.pym | 26 + .../jedi/evaluate/compiled/fake/_sre.pym | 99 + .../jedi/evaluate/compiled/fake/_weakref.pym | 8 + .../jedi/evaluate/compiled/fake/builtins.pym | 241 + .../jedi/evaluate/compiled/fake/datetime.pym | 4 + .../jedi/evaluate/compiled/fake/io.pym | 3 + .../jedi/evaluate/compiled/fake/posix.pym | 5 + .../site-packages/jedi/evaluate/docstrings.py | 141 + .../jedi/evaluate/docstrings.pyc | Bin 0 -> 5131 bytes .../site-packages/jedi/evaluate/dynamic.py | 153 + .../site-packages/jedi/evaluate/dynamic.pyc | Bin 0 -> 5340 bytes .../site-packages/jedi/evaluate/finder.py | 567 ++ .../site-packages/jedi/evaluate/finder.pyc | Bin 0 -> 18012 bytes .../site-packages/jedi/evaluate/helpers.py | 216 + .../site-packages/jedi/evaluate/helpers.pyc | Bin 0 -> 8870 bytes .../site-packages/jedi/evaluate/imports.py | 570 ++ .../site-packages/jedi/evaluate/imports.pyc | Bin 0 -> 22623 bytes .../site-packages/jedi/evaluate/iterable.py | 518 ++ .../site-packages/jedi/evaluate/iterable.pyc | Bin 0 -> 22580 bytes .../site-packages/jedi/evaluate/param.py | 375 ++ .../site-packages/jedi/evaluate/param.pyc | Bin 0 -> 10497 bytes .../site-packages/jedi/evaluate/precedence.py | 297 + .../jedi/evaluate/precedence.pyc | Bin 0 -> 11434 bytes .../site-packages/jedi/evaluate/recursion.py | 165 + .../site-packages/jedi/evaluate/recursion.pyc | Bin 0 -> 7230 bytes .../jedi/evaluate/representation.py | 569 ++ .../jedi/evaluate/representation.pyc | Bin 0 -> 26743 bytes .../site-packages/jedi/evaluate/stdlib.py | 131 + .../site-packages/jedi/evaluate/stdlib.pyc | Bin 0 -> 4698 bytes .../site-packages/jedi/evaluate/sys_path.py | 209 + .../site-packages/jedi/evaluate/sys_path.pyc | Bin 0 -> 8392 bytes .../site-packages/jedi/parser/__init__.py | 639 ++ .../site-packages/jedi/parser/__init__.pyc | Bin 0 -> 18119 bytes .../site-packages/jedi/parser/fast.py | 466 ++ .../site-packages/jedi/parser/fast.pyc | Bin 0 -> 14546 bytes .../jedi/parser/representation.py | 1592 +++++ .../jedi/parser/representation.pyc | Bin 0 -> 65661 bytes .../site-packages/jedi/parser/tokenize.py | 299 + .../site-packages/jedi/parser/tokenize.pyc | Bin 0 -> 9646 bytes .../site-packages/jedi/parser/user_context.py | 255 + .../jedi/parser/user_context.pyc | Bin 0 -> 9048 bytes .../site-packages/jedi/refactoring.py | 202 + .../site-packages/jedi/refactoring.pyc | Bin 0 -> 7193 bytes .../python2.7/site-packages/jedi/settings.py | 245 + .../python2.7/site-packages/jedi/settings.pyc | Bin 0 -> 3271 bytes env/lib/python2.7/site-packages/jedi/utils.py | 114 + .../python2.7/site-packages/jedi/utils.pyc | Bin 0 -> 4562 bytes .../site-packages/jinja2/__init__.py | 69 + .../site-packages/jinja2/__init__.pyc | Bin 0 -> 2451 bytes .../python2.7/site-packages/jinja2/_compat.py | 150 + .../site-packages/jinja2/_compat.pyc | Bin 0 -> 6553 bytes .../site-packages/jinja2/_stringdefs.py | 132 + .../site-packages/jinja2/_stringdefs.pyc | Bin 0 -> 208581 bytes .../python2.7/site-packages/jinja2/bccache.py | 344 ++ .../site-packages/jinja2/bccache.pyc | Bin 0 -> 14688 bytes .../site-packages/jinja2/compiler.py | 1640 ++++++ .../site-packages/jinja2/compiler.pyc | Bin 0 -> 56861 bytes .../site-packages/jinja2/constants.py | 32 + .../site-packages/jinja2/constants.pyc | Bin 0 -> 1713 bytes .../python2.7/site-packages/jinja2/debug.py | 337 ++ .../python2.7/site-packages/jinja2/debug.pyc | Bin 0 -> 11171 bytes .../site-packages/jinja2/defaults.py | 43 + .../site-packages/jinja2/defaults.pyc | Bin 0 -> 1688 bytes .../site-packages/jinja2/environment.py | 1191 ++++ .../site-packages/jinja2/environment.pyc | Bin 0 -> 47451 bytes .../site-packages/jinja2/exceptions.py | 146 + .../site-packages/jinja2/exceptions.pyc | Bin 0 -> 6641 bytes env/lib/python2.7/site-packages/jinja2/ext.py | 636 ++ .../python2.7/site-packages/jinja2/ext.pyc | Bin 0 -> 24901 bytes .../python2.7/site-packages/jinja2/filters.py | 987 ++++ .../site-packages/jinja2/filters.pyc | Bin 0 -> 35191 bytes .../python2.7/site-packages/jinja2/lexer.py | 733 +++ .../python2.7/site-packages/jinja2/lexer.pyc | Bin 0 -> 23461 bytes .../python2.7/site-packages/jinja2/loaders.py | 471 ++ .../site-packages/jinja2/loaders.pyc | Bin 0 -> 19757 bytes .../python2.7/site-packages/jinja2/meta.py | 103 + .../python2.7/site-packages/jinja2/meta.pyc | Bin 0 -> 4143 bytes .../python2.7/site-packages/jinja2/nodes.py | 914 +++ .../python2.7/site-packages/jinja2/nodes.pyc | Bin 0 -> 44905 bytes .../site-packages/jinja2/optimizer.py | 68 + .../site-packages/jinja2/optimizer.pyc | Bin 0 -> 2965 bytes .../python2.7/site-packages/jinja2/parser.py | 895 +++ .../python2.7/site-packages/jinja2/parser.pyc | Bin 0 -> 32375 bytes .../python2.7/site-packages/jinja2/runtime.py | 581 ++ .../site-packages/jinja2/runtime.pyc | Bin 0 -> 24327 bytes .../python2.7/site-packages/jinja2/sandbox.py | 368 ++ .../site-packages/jinja2/sandbox.pyc | Bin 0 -> 12324 bytes .../python2.7/site-packages/jinja2/tests.py | 149 + .../python2.7/site-packages/jinja2/tests.pyc | Bin 0 -> 5353 bytes .../jinja2/testsuite/__init__.py | 156 + .../jinja2/testsuite/__init__.pyc | Bin 0 -> 6755 bytes .../site-packages/jinja2/testsuite/api.py | 261 + .../site-packages/jinja2/testsuite/api.pyc | Bin 0 -> 13836 bytes .../jinja2/testsuite/bytecode_cache.py | 37 + .../jinja2/testsuite/bytecode_cache.pyc | Bin 0 -> 1716 bytes .../jinja2/testsuite/core_tags.py | 305 + .../jinja2/testsuite/core_tags.pyc | Bin 0 -> 18720 bytes .../site-packages/jinja2/testsuite/debug.py | 58 + .../site-packages/jinja2/testsuite/debug.pyc | Bin 0 -> 3312 bytes .../jinja2/testsuite/doctests.py | 29 + .../jinja2/testsuite/doctests.pyc | Bin 0 -> 1226 bytes .../site-packages/jinja2/testsuite/ext.py | 459 ++ .../site-packages/jinja2/testsuite/ext.pyc | Bin 0 -> 24139 bytes .../site-packages/jinja2/testsuite/filters.py | 515 ++ .../jinja2/testsuite/filters.pyc | Bin 0 -> 30839 bytes .../site-packages/jinja2/testsuite/imports.py | 141 + .../jinja2/testsuite/imports.pyc | Bin 0 -> 7071 bytes .../jinja2/testsuite/inheritance.py | 250 + .../jinja2/testsuite/inheritance.pyc | Bin 0 -> 10959 bytes .../jinja2/testsuite/lexnparse.py | 593 ++ .../jinja2/testsuite/lexnparse.pyc | Bin 0 -> 35474 bytes .../site-packages/jinja2/testsuite/loader.py | 226 + .../site-packages/jinja2/testsuite/loader.pyc | Bin 0 -> 11145 bytes .../jinja2/testsuite/regression.py | 279 + .../jinja2/testsuite/regression.pyc | Bin 0 -> 12196 bytes .../jinja2/testsuite/res/__init__.py | 0 .../jinja2/testsuite/res/__init__.pyc | Bin 0 -> 171 bytes .../testsuite/res/templates/broken.html | 3 + .../testsuite/res/templates/foo/test.html | 1 + .../testsuite/res/templates/syntaxerror.html | 4 + .../jinja2/testsuite/res/templates/test.html | 1 + .../jinja2/testsuite/security.py | 166 + .../jinja2/testsuite/security.pyc | Bin 0 -> 9041 bytes .../site-packages/jinja2/testsuite/tests.py | 93 + .../site-packages/jinja2/testsuite/tests.pyc | Bin 0 -> 5080 bytes .../site-packages/jinja2/testsuite/utils.py | 82 + .../site-packages/jinja2/testsuite/utils.pyc | Bin 0 -> 3767 bytes .../python2.7/site-packages/jinja2/utils.py | 520 ++ .../python2.7/site-packages/jinja2/utils.pyc | Bin 0 -> 20478 bytes .../python2.7/site-packages/jinja2/visitor.py | 87 + .../site-packages/jinja2/visitor.pyc | Bin 0 -> 3964 bytes .../site-packages/markupsafe/__init__.py | 298 + .../site-packages/markupsafe/__init__.pyc | Bin 0 -> 14872 bytes .../site-packages/markupsafe/_compat.py | 26 + .../site-packages/markupsafe/_compat.pyc | Bin 0 -> 1043 bytes .../site-packages/markupsafe/_constants.py | 267 + .../site-packages/markupsafe/_constants.pyc | Bin 0 -> 6386 bytes .../site-packages/markupsafe/_native.py | 46 + .../site-packages/markupsafe/_native.pyc | Bin 0 -> 1797 bytes .../site-packages/markupsafe/_speedups.c | 239 + .../site-packages/markupsafe/_speedups.so | Bin 0 -> 26724 bytes .../site-packages/markupsafe/tests.py | 179 + .../site-packages/markupsafe/tests.pyc | Bin 0 -> 10113 bytes .../pip-6.0.8.dist-info/DESCRIPTION.rst | 24 + .../pip-6.0.8.dist-info/METADATA | 52 + .../site-packages/pip-6.0.8.dist-info/RECORD | 474 ++ .../site-packages/pip-6.0.8.dist-info/WHEEL | 6 + .../pip-6.0.8.dist-info/entry_points.txt | 5 + .../pip-6.0.8.dist-info/metadata.json | 1 + .../pip-6.0.8.dist-info/pbr.json | 1 + .../pip-6.0.8.dist-info/top_level.txt | 1 + .../python2.7/site-packages/pip/__init__.py | 313 + .../python2.7/site-packages/pip/__init__.pyc | Bin 0 -> 9520 bytes .../python2.7/site-packages/pip/__main__.py | 19 + .../python2.7/site-packages/pip/__main__.pyc | Bin 0 -> 529 bytes .../site-packages/pip/_vendor/__init__.py | 93 + .../site-packages/pip/_vendor/__init__.pyc | Bin 0 -> 2425 bytes .../pip/_vendor/_markerlib/__init__.py | 16 + .../pip/_vendor/_markerlib/__init__.pyc | Bin 0 -> 1394 bytes .../pip/_vendor/_markerlib/markers.py | 119 + .../pip/_vendor/_markerlib/markers.pyc | Bin 0 -> 5804 bytes .../pip/_vendor/cachecontrol/__init__.py | 11 + .../pip/_vendor/cachecontrol/__init__.pyc | Bin 0 -> 628 bytes .../pip/_vendor/cachecontrol/adapter.py | 110 + .../pip/_vendor/cachecontrol/adapter.pyc | Bin 0 -> 3333 bytes .../pip/_vendor/cachecontrol/cache.py | 39 + .../pip/_vendor/cachecontrol/cache.pyc | Bin 0 -> 2896 bytes .../_vendor/cachecontrol/caches/__init__.py | 18 + .../_vendor/cachecontrol/caches/__init__.pyc | Bin 0 -> 659 bytes .../_vendor/cachecontrol/caches/file_cache.py | 91 + .../cachecontrol/caches/file_cache.pyc | Bin 0 -> 3508 bytes .../cachecontrol/caches/redis_cache.py | 41 + .../cachecontrol/caches/redis_cache.pyc | Bin 0 -> 2798 bytes .../pip/_vendor/cachecontrol/compat.py | 16 + .../pip/_vendor/cachecontrol/compat.pyc | Bin 0 -> 601 bytes .../pip/_vendor/cachecontrol/controller.py | 269 + .../pip/_vendor/cachecontrol/controller.pyc | Bin 0 -> 7623 bytes .../pip/_vendor/cachecontrol/filewrapper.py | 63 + .../pip/_vendor/cachecontrol/filewrapper.pyc | Bin 0 -> 2418 bytes .../pip/_vendor/cachecontrol/heuristics.py | 79 + .../pip/_vendor/cachecontrol/heuristics.pyc | Bin 0 -> 4573 bytes .../pip/_vendor/cachecontrol/serialize.py | 172 + .../pip/_vendor/cachecontrol/serialize.pyc | Bin 0 -> 6308 bytes .../pip/_vendor/cachecontrol/wrapper.py | 21 + .../pip/_vendor/cachecontrol/wrapper.pyc | Bin 0 -> 786 bytes .../pip/_vendor/certifi/__init__.py | 1 + .../pip/_vendor/certifi/__init__.pyc | Bin 0 -> 246 bytes .../pip/_vendor/certifi/__main__.py | 2 + .../pip/_vendor/certifi/__main__.pyc | Bin 0 -> 271 bytes .../pip/_vendor/certifi/cacert.pem | 5134 +++++++++++++++++ .../site-packages/pip/_vendor/certifi/core.py | 19 + .../pip/_vendor/certifi/core.pyc | Bin 0 -> 689 bytes .../pip/_vendor/colorama/__init__.py | 7 + .../pip/_vendor/colorama/__init__.pyc | Bin 0 -> 499 bytes .../pip/_vendor/colorama/ansi.py | 99 + .../pip/_vendor/colorama/ansi.pyc | Bin 0 -> 5177 bytes .../pip/_vendor/colorama/ansitowin32.py | 228 + .../pip/_vendor/colorama/ansitowin32.pyc | Bin 0 -> 10014 bytes .../pip/_vendor/colorama/initialise.py | 66 + .../pip/_vendor/colorama/initialise.pyc | Bin 0 -> 2307 bytes .../pip/_vendor/colorama/win32.py | 146 + .../pip/_vendor/colorama/win32.pyc | Bin 0 -> 4889 bytes .../pip/_vendor/colorama/winterm.py | 151 + .../pip/_vendor/colorama/winterm.pyc | Bin 0 -> 6785 bytes .../pip/_vendor/distlib/__init__.py | 23 + .../pip/_vendor/distlib/__init__.pyc | Bin 0 -> 1611 bytes .../pip/_vendor/distlib/_backport/__init__.py | 6 + .../_vendor/distlib/_backport/__init__.pyc | Bin 0 -> 496 bytes .../pip/_vendor/distlib/_backport/misc.py | 41 + .../pip/_vendor/distlib/_backport/misc.pyc | Bin 0 -> 1608 bytes .../pip/_vendor/distlib/_backport/shutil.py | 761 +++ .../pip/_vendor/distlib/_backport/shutil.pyc | Bin 0 -> 28347 bytes .../_vendor/distlib/_backport/sysconfig.cfg | 84 + .../_vendor/distlib/_backport/sysconfig.py | 788 +++ .../_vendor/distlib/_backport/sysconfig.pyc | Bin 0 -> 22456 bytes .../pip/_vendor/distlib/_backport/tarfile.py | 2607 +++++++++ .../pip/_vendor/distlib/_backport/tarfile.pyc | Bin 0 -> 86647 bytes .../pip/_vendor/distlib/compat.py | 1102 ++++ .../pip/_vendor/distlib/compat.pyc | Bin 0 -> 43888 bytes .../pip/_vendor/distlib/database.py | 1303 +++++ .../pip/_vendor/distlib/database.pyc | Bin 0 -> 52812 bytes .../pip/_vendor/distlib/index.py | 513 ++ .../pip/_vendor/distlib/index.pyc | Bin 0 -> 20971 bytes .../pip/_vendor/distlib/locators.py | 1233 ++++ .../pip/_vendor/distlib/locators.pyc | Bin 0 -> 47895 bytes .../pip/_vendor/distlib/manifest.py | 367 ++ .../pip/_vendor/distlib/manifest.pyc | Bin 0 -> 12308 bytes .../pip/_vendor/distlib/markers.py | 190 + .../pip/_vendor/distlib/markers.pyc | Bin 0 -> 9255 bytes .../pip/_vendor/distlib/metadata.py | 1058 ++++ .../pip/_vendor/distlib/metadata.pyc | Bin 0 -> 37589 bytes .../pip/_vendor/distlib/resources.py | 323 ++ .../pip/_vendor/distlib/resources.pyc | Bin 0 -> 15010 bytes .../pip/_vendor/distlib/scripts.py | 335 ++ .../pip/_vendor/distlib/scripts.pyc | Bin 0 -> 11611 bytes .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 91648 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 95232 bytes .../site-packages/pip/_vendor/distlib/util.py | 1579 +++++ .../pip/_vendor/distlib/util.pyc | Bin 0 -> 61711 bytes .../pip/_vendor/distlib/version.py | 742 +++ .../pip/_vendor/distlib/version.pyc | Bin 0 -> 29838 bytes .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 88576 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 92160 bytes .../pip/_vendor/distlib/wheel.py | 976 ++++ .../pip/_vendor/distlib/wheel.pyc | Bin 0 -> 32861 bytes .../pip/_vendor/html5lib/__init__.py | 23 + .../pip/_vendor/html5lib/__init__.pyc | Bin 0 -> 1142 bytes .../pip/_vendor/html5lib/constants.py | 3104 ++++++++++ .../pip/_vendor/html5lib/constants.pyc | Bin 0 -> 87010 bytes .../pip/_vendor/html5lib/filters/__init__.py | 0 .../pip/_vendor/html5lib/filters/__init__.pyc | Bin 0 -> 205 bytes .../pip/_vendor/html5lib/filters/_base.py | 12 + .../pip/_vendor/html5lib/filters/_base.pyc | Bin 0 -> 1336 bytes .../filters/alphabeticalattributes.py | 20 + .../filters/alphabeticalattributes.pyc | Bin 0 -> 1575 bytes .../html5lib/filters/inject_meta_charset.py | 65 + .../html5lib/filters/inject_meta_charset.pyc | Bin 0 -> 2434 bytes .../pip/_vendor/html5lib/filters/lint.py | 93 + .../pip/_vendor/html5lib/filters/lint.pyc | Bin 0 -> 3900 bytes .../_vendor/html5lib/filters/optionaltags.py | 205 + .../_vendor/html5lib/filters/optionaltags.pyc | Bin 0 -> 4658 bytes .../pip/_vendor/html5lib/filters/sanitizer.py | 12 + .../_vendor/html5lib/filters/sanitizer.pyc | Bin 0 -> 1046 bytes .../_vendor/html5lib/filters/whitespace.py | 38 + .../_vendor/html5lib/filters/whitespace.pyc | Bin 0 -> 1844 bytes .../pip/_vendor/html5lib/html5parser.py | 2713 +++++++++ .../pip/_vendor/html5lib/html5parser.pyc | Bin 0 -> 135859 bytes .../pip/_vendor/html5lib/ihatexml.py | 285 + .../pip/_vendor/html5lib/ihatexml.pyc | Bin 0 -> 16291 bytes .../pip/_vendor/html5lib/inputstream.py | 886 +++ .../pip/_vendor/html5lib/inputstream.pyc | Bin 0 -> 30180 bytes .../pip/_vendor/html5lib/sanitizer.py | 271 + .../pip/_vendor/html5lib/sanitizer.pyc | Bin 0 -> 14643 bytes .../_vendor/html5lib/serializer/__init__.py | 16 + .../_vendor/html5lib/serializer/__init__.pyc | Bin 0 -> 956 bytes .../html5lib/serializer/htmlserializer.py | 320 + .../html5lib/serializer/htmlserializer.pyc | Bin 0 -> 11767 bytes .../pip/_vendor/html5lib/tokenizer.py | 1731 ++++++ .../pip/_vendor/html5lib/tokenizer.pyc | Bin 0 -> 57353 bytes .../_vendor/html5lib/treeadapters/__init__.py | 0 .../html5lib/treeadapters/__init__.pyc | Bin 0 -> 210 bytes .../pip/_vendor/html5lib/treeadapters/sax.py | 44 + .../pip/_vendor/html5lib/treeadapters/sax.pyc | Bin 0 -> 1851 bytes .../_vendor/html5lib/treebuilders/__init__.py | 76 + .../html5lib/treebuilders/__init__.pyc | Bin 0 -> 3471 bytes .../_vendor/html5lib/treebuilders/_base.py | 377 ++ .../_vendor/html5lib/treebuilders/_base.pyc | Bin 0 -> 15825 bytes .../pip/_vendor/html5lib/treebuilders/dom.py | 227 + .../pip/_vendor/html5lib/treebuilders/dom.pyc | Bin 0 -> 13208 bytes .../_vendor/html5lib/treebuilders/etree.py | 337 ++ .../_vendor/html5lib/treebuilders/etree.pyc | Bin 0 -> 16655 bytes .../html5lib/treebuilders/etree_lxml.py | 369 ++ .../html5lib/treebuilders/etree_lxml.pyc | Bin 0 -> 16876 bytes .../_vendor/html5lib/treewalkers/__init__.py | 57 + .../_vendor/html5lib/treewalkers/__init__.pyc | Bin 0 -> 2562 bytes .../pip/_vendor/html5lib/treewalkers/_base.py | 200 + .../_vendor/html5lib/treewalkers/_base.pyc | Bin 0 -> 9741 bytes .../pip/_vendor/html5lib/treewalkers/dom.py | 46 + .../pip/_vendor/html5lib/treewalkers/dom.pyc | Bin 0 -> 2549 bytes .../pip/_vendor/html5lib/treewalkers/etree.py | 138 + .../_vendor/html5lib/treewalkers/etree.pyc | Bin 0 -> 4867 bytes .../html5lib/treewalkers/genshistream.py | 69 + .../html5lib/treewalkers/genshistream.pyc | Bin 0 -> 2629 bytes .../_vendor/html5lib/treewalkers/lxmletree.py | 204 + .../html5lib/treewalkers/lxmletree.pyc | Bin 0 -> 10465 bytes .../_vendor/html5lib/treewalkers/pulldom.py | 63 + .../_vendor/html5lib/treewalkers/pulldom.pyc | Bin 0 -> 2548 bytes .../pip/_vendor/html5lib/trie/__init__.py | 12 + .../pip/_vendor/html5lib/trie/__init__.pyc | Bin 0 -> 486 bytes .../pip/_vendor/html5lib/trie/_base.py | 37 + .../pip/_vendor/html5lib/trie/_base.pyc | Bin 0 -> 2015 bytes .../pip/_vendor/html5lib/trie/datrie.py | 44 + .../pip/_vendor/html5lib/trie/datrie.pyc | Bin 0 -> 3263 bytes .../pip/_vendor/html5lib/trie/py.py | 67 + .../pip/_vendor/html5lib/trie/py.pyc | Bin 0 -> 3459 bytes .../pip/_vendor/html5lib/utils.py | 82 + .../pip/_vendor/html5lib/utils.pyc | Bin 0 -> 3640 bytes .../site-packages/pip/_vendor/ipaddress.py | 2171 +++++++ .../site-packages/pip/_vendor/ipaddress.pyc | Bin 0 -> 77095 bytes .../pip/_vendor/lockfile/__init__.py | 326 ++ .../pip/_vendor/lockfile/__init__.pyc | Bin 0 -> 12726 bytes .../pip/_vendor/lockfile/linklockfile.py | 73 + .../pip/_vendor/lockfile/linklockfile.pyc | Bin 0 -> 3224 bytes .../pip/_vendor/lockfile/mkdirlockfile.py | 83 + .../pip/_vendor/lockfile/mkdirlockfile.pyc | Bin 0 -> 3786 bytes .../pip/_vendor/lockfile/pidlockfile.py | 193 + .../pip/_vendor/lockfile/pidlockfile.pyc | Bin 0 -> 6615 bytes .../pip/_vendor/lockfile/sqlitelockfile.py | 155 + .../pip/_vendor/lockfile/sqlitelockfile.pyc | Bin 0 -> 5108 bytes .../pip/_vendor/lockfile/symlinklockfile.py | 69 + .../pip/_vendor/lockfile/symlinklockfile.pyc | Bin 0 -> 3211 bytes .../pip/_vendor/packaging/__about__.py | 31 + .../pip/_vendor/packaging/__about__.pyc | Bin 0 -> 787 bytes .../pip/_vendor/packaging/__init__.py | 24 + .../pip/_vendor/packaging/__init__.pyc | Bin 0 -> 649 bytes .../pip/_vendor/packaging/_compat.py | 40 + .../pip/_vendor/packaging/_compat.pyc | Bin 0 -> 1396 bytes .../pip/_vendor/packaging/_structures.py | 78 + .../pip/_vendor/packaging/_structures.pyc | Bin 0 -> 4971 bytes .../pip/_vendor/packaging/specifiers.py | 772 +++ .../pip/_vendor/packaging/specifiers.pyc | Bin 0 -> 26432 bytes .../pip/_vendor/packaging/version.py | 401 ++ .../pip/_vendor/packaging/version.pyc | Bin 0 -> 16260 bytes .../pip/_vendor/pkg_resources/__init__.py | 2979 ++++++++++ .../pip/_vendor/pkg_resources/__init__.pyc | Bin 0 -> 128298 bytes .../pip/_vendor/progress/__init__.py | 123 + .../pip/_vendor/progress/__init__.pyc | Bin 0 -> 6290 bytes .../site-packages/pip/_vendor/progress/bar.py | 86 + .../pip/_vendor/progress/bar.pyc | Bin 0 -> 3644 bytes .../pip/_vendor/progress/counter.py | 49 + .../pip/_vendor/progress/counter.pyc | Bin 0 -> 2564 bytes .../pip/_vendor/progress/helpers.py | 92 + .../pip/_vendor/progress/helpers.pyc | Bin 0 -> 4503 bytes .../pip/_vendor/progress/spinner.py | 42 + .../pip/_vendor/progress/spinner.pyc | Bin 0 -> 1940 bytes .../site-packages/pip/_vendor/re-vendor.py | 34 + .../site-packages/pip/_vendor/re-vendor.pyc | Bin 0 -> 1628 bytes .../pip/_vendor/requests/__init__.py | 77 + .../pip/_vendor/requests/__init__.pyc | Bin 0 -> 2686 bytes .../pip/_vendor/requests/adapters.py | 437 ++ .../pip/_vendor/requests/adapters.pyc | Bin 0 -> 16870 bytes .../site-packages/pip/_vendor/requests/api.py | 131 + .../pip/_vendor/requests/api.pyc | Bin 0 -> 6203 bytes .../pip/_vendor/requests/auth.py | 209 + .../pip/_vendor/requests/auth.pyc | Bin 0 -> 8567 bytes .../pip/_vendor/requests/cacert.pem | 5026 ++++++++++++++++ .../pip/_vendor/requests/certs.py | 25 + .../pip/_vendor/requests/certs.pyc | Bin 0 -> 997 bytes .../pip/_vendor/requests/compat.py | 115 + .../pip/_vendor/requests/compat.pyc | Bin 0 -> 2563 bytes .../pip/_vendor/requests/cookies.py | 454 ++ .../pip/_vendor/requests/cookies.pyc | Bin 0 -> 23074 bytes .../pip/_vendor/requests/exceptions.py | 99 + .../pip/_vendor/requests/exceptions.pyc | Bin 0 -> 6367 bytes .../pip/_vendor/requests/hooks.py | 45 + .../pip/_vendor/requests/hooks.pyc | Bin 0 -> 1226 bytes .../pip/_vendor/requests/models.py | 839 +++ .../pip/_vendor/requests/models.pyc | Bin 0 -> 27652 bytes .../pip/_vendor/requests/packages/__init__.py | 3 + .../_vendor/requests/packages/__init__.pyc | Bin 0 -> 322 bytes .../requests/packages/chardet/__init__.py | 32 + .../requests/packages/chardet/__init__.pyc | Bin 0 -> 947 bytes .../requests/packages/chardet/big5freq.py | 925 +++ .../requests/packages/chardet/big5freq.pyc | Bin 0 -> 113855 bytes .../requests/packages/chardet/big5prober.py | 42 + .../requests/packages/chardet/big5prober.pyc | Bin 0 -> 1392 bytes .../requests/packages/chardet/chardetect.py | 80 + .../requests/packages/chardet/chardetect.pyc | Bin 0 -> 3196 bytes .../packages/chardet/chardistribution.py | 231 + .../packages/chardet/chardistribution.pyc | Bin 0 -> 9475 bytes .../packages/chardet/charsetgroupprober.py | 106 + .../packages/chardet/charsetgroupprober.pyc | Bin 0 -> 3065 bytes .../packages/chardet/charsetprober.py | 62 + .../packages/chardet/charsetprober.pyc | Bin 0 -> 2952 bytes .../packages/chardet/codingstatemachine.py | 61 + .../packages/chardet/codingstatemachine.pyc | Bin 0 -> 2310 bytes .../requests/packages/chardet/compat.py | 34 + .../requests/packages/chardet/compat.pyc | Bin 0 -> 709 bytes .../requests/packages/chardet/constants.py | 39 + .../requests/packages/chardet/constants.pyc | Bin 0 -> 407 bytes .../requests/packages/chardet/cp949prober.py | 44 + .../requests/packages/chardet/cp949prober.pyc | Bin 0 -> 1400 bytes .../requests/packages/chardet/escprober.py | 86 + .../requests/packages/chardet/escprober.pyc | Bin 0 -> 2894 bytes .../requests/packages/chardet/escsm.py | 242 + .../requests/packages/chardet/escsm.pyc | Bin 0 -> 7379 bytes .../requests/packages/chardet/eucjpprober.py | 90 + .../requests/packages/chardet/eucjpprober.pyc | Bin 0 -> 3303 bytes .../requests/packages/chardet/euckrfreq.py | 596 ++ .../requests/packages/chardet/euckrfreq.pyc | Bin 0 -> 88846 bytes .../requests/packages/chardet/euckrprober.py | 42 + .../requests/packages/chardet/euckrprober.pyc | Bin 0 -> 1401 bytes .../requests/packages/chardet/euctwfreq.py | 428 ++ .../requests/packages/chardet/euctwfreq.pyc | Bin 0 -> 61244 bytes .../requests/packages/chardet/euctwprober.py | 41 + .../requests/packages/chardet/euctwprober.pyc | Bin 0 -> 1401 bytes .../requests/packages/chardet/gb2312freq.py | 472 ++ .../requests/packages/chardet/gb2312freq.pyc | Bin 0 -> 68862 bytes .../requests/packages/chardet/gb2312prober.py | 41 + .../packages/chardet/gb2312prober.pyc | Bin 0 -> 1408 bytes .../requests/packages/chardet/hebrewprober.py | 283 + .../packages/chardet/hebrewprober.pyc | Bin 0 -> 4154 bytes .../requests/packages/chardet/jisfreq.py | 569 ++ .../requests/packages/chardet/jisfreq.pyc | Bin 0 -> 84078 bytes .../requests/packages/chardet/jpcntx.py | 227 + .../requests/packages/chardet/jpcntx.pyc | Bin 0 -> 26105 bytes .../packages/chardet/langbulgarianmodel.py | 229 + .../packages/chardet/langbulgarianmodel.pyc | Bin 0 -> 24960 bytes .../packages/chardet/langcyrillicmodel.py | 329 ++ .../packages/chardet/langcyrillicmodel.pyc | Bin 0 -> 30642 bytes .../packages/chardet/langgreekmodel.py | 225 + .../packages/chardet/langgreekmodel.pyc | Bin 0 -> 24647 bytes .../packages/chardet/langhebrewmodel.py | 201 + .../packages/chardet/langhebrewmodel.pyc | Bin 0 -> 23467 bytes .../packages/chardet/langhungarianmodel.py | 225 + .../packages/chardet/langhungarianmodel.pyc | Bin 0 -> 24944 bytes .../packages/chardet/langthaimodel.py | 200 + .../packages/chardet/langthaimodel.pyc | Bin 0 -> 23453 bytes .../requests/packages/chardet/latin1prober.py | 139 + .../packages/chardet/latin1prober.pyc | Bin 0 -> 3975 bytes .../packages/chardet/mbcharsetprober.py | 86 + .../packages/chardet/mbcharsetprober.pyc | Bin 0 -> 2937 bytes .../packages/chardet/mbcsgroupprober.py | 54 + .../packages/chardet/mbcsgroupprober.pyc | Bin 0 -> 1471 bytes .../requests/packages/chardet/mbcssm.py | 572 ++ .../requests/packages/chardet/mbcssm.pyc | Bin 0 -> 17736 bytes .../packages/chardet/sbcharsetprober.py | 120 + .../packages/chardet/sbcharsetprober.pyc | Bin 0 -> 3822 bytes .../packages/chardet/sbcsgroupprober.py | 69 + .../packages/chardet/sbcsgroupprober.pyc | Bin 0 -> 2156 bytes .../requests/packages/chardet/sjisprober.py | 91 + .../requests/packages/chardet/sjisprober.pyc | Bin 0 -> 3330 bytes .../packages/chardet/universaldetector.py | 170 + .../packages/chardet/universaldetector.pyc | Bin 0 -> 4580 bytes .../requests/packages/chardet/utf8prober.py | 76 + .../requests/packages/chardet/utf8prober.pyc | Bin 0 -> 2720 bytes .../requests/packages/urllib3/__init__.py | 66 + .../requests/packages/urllib3/__init__.pyc | Bin 0 -> 2961 bytes .../requests/packages/urllib3/_collections.py | 198 + .../packages/urllib3/_collections.pyc | Bin 0 -> 11362 bytes .../requests/packages/urllib3/connection.py | 262 + .../requests/packages/urllib3/connection.pyc | Bin 0 -> 9113 bytes .../packages/urllib3/connectionpool.py | 761 +++ .../packages/urllib3/connectionpool.pyc | Bin 0 -> 24728 bytes .../packages/urllib3/contrib/__init__.py | 0 .../packages/urllib3/contrib/__init__.pyc | Bin 0 -> 222 bytes .../packages/urllib3/contrib/ntlmpool.py | 114 + .../packages/urllib3/contrib/ntlmpool.pyc | Bin 0 -> 4270 bytes .../packages/urllib3/contrib/pyopenssl.py | 303 + .../packages/urllib3/contrib/pyopenssl.pyc | Bin 0 -> 11708 bytes .../requests/packages/urllib3/exceptions.py | 159 + .../requests/packages/urllib3/exceptions.pyc | Bin 0 -> 10373 bytes .../requests/packages/urllib3/fields.py | 177 + .../requests/packages/urllib3/fields.pyc | Bin 0 -> 7380 bytes .../requests/packages/urllib3/filepost.py | 93 + .../requests/packages/urllib3/filepost.pyc | Bin 0 -> 3704 bytes .../packages/urllib3/packages/__init__.py | 4 + .../packages/urllib3/packages/__init__.pyc | Bin 0 -> 350 bytes .../packages/urllib3/packages/ordered_dict.py | 259 + .../urllib3/packages/ordered_dict.pyc | Bin 0 -> 11974 bytes .../requests/packages/urllib3/packages/six.py | 385 ++ .../packages/urllib3/packages/six.pyc | Bin 0 -> 16338 bytes .../packages/ssl_match_hostname/__init__.py | 13 + .../packages/ssl_match_hostname/__init__.pyc | Bin 0 -> 585 bytes .../ssl_match_hostname/_implementation.py | 105 + .../ssl_match_hostname/_implementation.pyc | Bin 0 -> 3211 bytes .../requests/packages/urllib3/poolmanager.py | 265 + .../requests/packages/urllib3/poolmanager.pyc | Bin 0 -> 10495 bytes .../requests/packages/urllib3/request.py | 141 + .../requests/packages/urllib3/request.pyc | Bin 0 -> 6436 bytes .../requests/packages/urllib3/response.py | 333 ++ .../requests/packages/urllib3/response.pyc | Bin 0 -> 12967 bytes .../packages/urllib3/util/__init__.py | 24 + .../packages/urllib3/util/__init__.pyc | Bin 0 -> 862 bytes .../packages/urllib3/util/connection.py | 97 + .../packages/urllib3/util/connection.pyc | Bin 0 -> 3233 bytes .../requests/packages/urllib3/util/request.py | 71 + .../packages/urllib3/util/request.pyc | Bin 0 -> 2290 bytes .../packages/urllib3/util/response.py | 22 + .../packages/urllib3/util/response.pyc | Bin 0 -> 782 bytes .../requests/packages/urllib3/util/retry.py | 285 + .../requests/packages/urllib3/util/retry.pyc | Bin 0 -> 10711 bytes .../requests/packages/urllib3/util/ssl_.py | 254 + .../requests/packages/urllib3/util/ssl_.pyc | Bin 0 -> 9071 bytes .../requests/packages/urllib3/util/timeout.py | 240 + .../packages/urllib3/util/timeout.pyc | Bin 0 -> 10445 bytes .../requests/packages/urllib3/util/url.py | 212 + .../requests/packages/urllib3/util/url.pyc | Bin 0 -> 6648 bytes .../pip/_vendor/requests/sessions.py | 682 +++ .../pip/_vendor/requests/sessions.pyc | Bin 0 -> 21600 bytes .../pip/_vendor/requests/status_codes.py | 89 + .../pip/_vendor/requests/status_codes.pyc | Bin 0 -> 6029 bytes .../pip/_vendor/requests/structures.py | 104 + .../pip/_vendor/requests/structures.pyc | Bin 0 -> 6221 bytes .../pip/_vendor/requests/utils.py | 697 +++ .../pip/_vendor/requests/utils.pyc | Bin 0 -> 22275 bytes .../site-packages/pip/_vendor/retrying.py | 267 + .../site-packages/pip/_vendor/retrying.pyc | Bin 0 -> 11600 bytes .../site-packages/pip/_vendor/six.py | 838 +++ .../site-packages/pip/_vendor/six.pyc | Bin 0 -> 34154 bytes .../site-packages/pip/basecommand.py | 270 + .../site-packages/pip/basecommand.pyc | Bin 0 -> 7526 bytes .../python2.7/site-packages/pip/baseparser.py | 269 + .../site-packages/pip/baseparser.pyc | Bin 0 -> 11488 bytes .../python2.7/site-packages/pip/cmdoptions.py | 458 ++ .../site-packages/pip/cmdoptions.pyc | Bin 0 -> 9921 bytes .../site-packages/pip/commands/__init__.py | 85 + .../site-packages/pip/commands/__init__.pyc | Bin 0 -> 2820 bytes .../site-packages/pip/commands/completion.py | 68 + .../site-packages/pip/commands/completion.pyc | Bin 0 -> 2699 bytes .../site-packages/pip/commands/freeze.py | 66 + .../site-packages/pip/commands/freeze.pyc | Bin 0 -> 2661 bytes .../site-packages/pip/commands/help.py | 35 + .../site-packages/pip/commands/help.pyc | Bin 0 -> 1487 bytes .../site-packages/pip/commands/install.py | 419 ++ .../site-packages/pip/commands/install.pyc | Bin 0 -> 10941 bytes .../site-packages/pip/commands/list.py | 205 + .../site-packages/pip/commands/list.pyc | Bin 0 -> 7269 bytes .../site-packages/pip/commands/search.py | 135 + .../site-packages/pip/commands/search.pyc | Bin 0 -> 5358 bytes .../site-packages/pip/commands/show.py | 100 + .../site-packages/pip/commands/show.pyc | Bin 0 -> 4282 bytes .../site-packages/pip/commands/uninstall.py | 70 + .../site-packages/pip/commands/uninstall.pyc | Bin 0 -> 2967 bytes .../site-packages/pip/commands/unzip.py | 9 + .../site-packages/pip/commands/unzip.pyc | Bin 0 -> 704 bytes .../site-packages/pip/commands/wheel.py | 247 + .../site-packages/pip/commands/wheel.pyc | Bin 0 -> 6978 bytes .../site-packages/pip/commands/zip.py | 410 ++ .../site-packages/pip/commands/zip.pyc | Bin 0 -> 12459 bytes .../site-packages/pip/compat/__init__.py | 103 + .../site-packages/pip/compat/__init__.pyc | Bin 0 -> 3600 bytes .../site-packages/pip/compat/dictconfig.py | 565 ++ .../site-packages/pip/compat/dictconfig.pyc | Bin 0 -> 18156 bytes .../python2.7/site-packages/pip/download.py | 868 +++ .../python2.7/site-packages/pip/download.pyc | Bin 0 -> 26093 bytes .../python2.7/site-packages/pip/exceptions.py | 47 + .../site-packages/pip/exceptions.pyc | Bin 0 -> 3547 bytes env/lib/python2.7/site-packages/pip/index.py | 1200 ++++ env/lib/python2.7/site-packages/pip/index.pyc | Bin 0 -> 35559 bytes .../python2.7/site-packages/pip/locations.py | 259 + .../python2.7/site-packages/pip/locations.pyc | Bin 0 -> 6802 bytes .../site-packages/pip/models/__init__.py | 4 + .../site-packages/pip/models/__init__.pyc | Bin 0 -> 305 bytes .../site-packages/pip/models/index.py | 16 + .../site-packages/pip/models/index.pyc | Bin 0 -> 1249 bytes .../site-packages/pip/operations/__init__.py | 0 .../site-packages/pip/operations/__init__.pyc | Bin 0 -> 191 bytes .../site-packages/pip/operations/freeze.py | 111 + .../site-packages/pip/operations/freeze.pyc | Bin 0 -> 3233 bytes .../python2.7/site-packages/pip/pep425tags.py | 133 + .../site-packages/pip/pep425tags.pyc | Bin 0 -> 4321 bytes .../site-packages/pip/req/__init__.py | 9 + .../site-packages/pip/req/__init__.pyc | Bin 0 -> 505 bytes .../site-packages/pip/req/req_file.py | 137 + .../site-packages/pip/req/req_file.pyc | Bin 0 -> 3809 bytes .../site-packages/pip/req/req_install.py | 1106 ++++ .../site-packages/pip/req/req_install.pyc | Bin 0 -> 33083 bytes .../site-packages/pip/req/req_requirement.py | 43 + .../site-packages/pip/req/req_requirement.pyc | Bin 0 -> 4273 bytes .../site-packages/pip/req/req_set.py | 563 ++ .../site-packages/pip/req/req_set.pyc | Bin 0 -> 14945 bytes .../site-packages/pip/req/req_uninstall.py | 206 + .../site-packages/pip/req/req_uninstall.pyc | Bin 0 -> 8843 bytes .../site-packages/pip/status_codes.py | 8 + .../site-packages/pip/status_codes.pyc | Bin 0 -> 438 bytes .../site-packages/pip/utils/__init__.py | 864 +++ .../site-packages/pip/utils/__init__.pyc | Bin 0 -> 32958 bytes .../site-packages/pip/utils/appdirs.py | 288 + .../site-packages/pip/utils/appdirs.pyc | Bin 0 -> 10209 bytes .../site-packages/pip/utils/build.py | 42 + .../site-packages/pip/utils/build.pyc | Bin 0 -> 2034 bytes .../site-packages/pip/utils/deprecation.py | 68 + .../site-packages/pip/utils/deprecation.pyc | Bin 0 -> 2195 bytes .../site-packages/pip/utils/filesystem.py | 24 + .../site-packages/pip/utils/filesystem.pyc | Bin 0 -> 800 bytes .../site-packages/pip/utils/logging.py | 121 + .../site-packages/pip/utils/logging.pyc | Bin 0 -> 4848 bytes .../site-packages/pip/utils/outdated.py | 149 + .../site-packages/pip/utils/outdated.pyc | Bin 0 -> 5192 bytes .../python2.7/site-packages/pip/utils/ui.py | 111 + .../python2.7/site-packages/pip/utils/ui.pyc | Bin 0 -> 4978 bytes .../site-packages/pip/vcs/__init__.py | 329 ++ .../site-packages/pip/vcs/__init__.pyc | Bin 0 -> 13542 bytes .../python2.7/site-packages/pip/vcs/bazaar.py | 135 + .../site-packages/pip/vcs/bazaar.pyc | Bin 0 -> 5887 bytes .../python2.7/site-packages/pip/vcs/git.py | 215 + .../python2.7/site-packages/pip/vcs/git.pyc | Bin 0 -> 8078 bytes .../site-packages/pip/vcs/mercurial.py | 143 + .../site-packages/pip/vcs/mercurial.pyc | Bin 0 -> 6433 bytes .../site-packages/pip/vcs/subversion.py | 295 + .../site-packages/pip/vcs/subversion.pyc | Bin 0 -> 10272 bytes env/lib/python2.7/site-packages/pip/wheel.py | 621 ++ env/lib/python2.7/site-packages/pip/wheel.pyc | Bin 0 -> 19442 bytes .../site-packages/pkg_resources/__init__.py | 3033 ++++++++++ .../site-packages/pkg_resources/__init__.pyc | Bin 0 -> 129436 bytes .../pkg_resources/_vendor/__init__.py | 0 .../pkg_resources/_vendor/__init__.pyc | Bin 0 -> 205 bytes .../_vendor/packaging/__about__.py | 31 + .../_vendor/packaging/__about__.pyc | Bin 0 -> 804 bytes .../_vendor/packaging/__init__.py | 24 + .../_vendor/packaging/__init__.pyc | Bin 0 -> 666 bytes .../_vendor/packaging/_compat.py | 40 + .../_vendor/packaging/_compat.pyc | Bin 0 -> 1464 bytes .../_vendor/packaging/_structures.py | 78 + .../_vendor/packaging/_structures.pyc | Bin 0 -> 5328 bytes .../_vendor/packaging/specifiers.py | 772 +++ .../_vendor/packaging/specifiers.pyc | Bin 0 -> 27537 bytes .../_vendor/packaging/version.py | 401 ++ .../_vendor/packaging/version.pyc | Bin 0 -> 17093 bytes .../pkg_resources/tests/__init__.py | 0 .../pkg_resources/tests/__init__.pyc | Bin 0 -> 203 bytes .../pkg_resources/tests/test_pkg_resources.py | 111 + .../tests/test_pkg_resources.pyc | Bin 0 -> 6054 bytes .../pkg_resources/tests/test_resources.py | 661 +++ .../pkg_resources/tests/test_resources.pyc | Bin 0 -> 32090 bytes .../DESCRIPTION.rst | 227 + .../setuptools-12.0.5.dist-info/METADATA | 258 + .../setuptools-12.0.5.dist-info/RECORD | 178 + .../setuptools-12.0.5.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 61 + .../setuptools-12.0.5.dist-info/metadata.json | 1 + .../setuptools-12.0.5.dist-info/top_level.txt | 4 + .../setuptools-12.0.5.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 149 + .../site-packages/setuptools/__init__.pyc | Bin 0 -> 8129 bytes .../site-packages/setuptools/archive_util.py | 170 + .../site-packages/setuptools/archive_util.pyc | Bin 0 -> 6581 bytes .../site-packages/setuptools/cli-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/cli-64.exe | Bin 0 -> 74752 bytes .../site-packages/setuptools/cli-arm-32.exe | Bin 0 -> 69120 bytes .../site-packages/setuptools/cli.exe | Bin 0 -> 65536 bytes .../setuptools/command/__init__.py | 18 + .../setuptools/command/__init__.pyc | Bin 0 -> 883 bytes .../site-packages/setuptools/command/alias.py | 78 + .../setuptools/command/alias.pyc | Bin 0 -> 3403 bytes .../setuptools/command/bdist_egg.py | 479 ++ .../setuptools/command/bdist_egg.pyc | Bin 0 -> 19090 bytes .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_rpm.pyc | Bin 0 -> 2122 bytes .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/bdist_wininst.pyc | Bin 0 -> 1417 bytes .../setuptools/command/build_ext.py | 305 + .../setuptools/command/build_ext.pyc | Bin 0 -> 12543 bytes .../setuptools/command/build_py.py | 230 + .../setuptools/command/build_py.pyc | Bin 0 -> 10231 bytes .../setuptools/command/develop.py | 169 + .../setuptools/command/develop.pyc | Bin 0 -> 6259 bytes .../setuptools/command/easy_install.py | 2266 ++++++++ .../setuptools/command/easy_install.pyc | Bin 0 -> 84929 bytes .../setuptools/command/egg_info.py | 479 ++ .../setuptools/command/egg_info.pyc | Bin 0 -> 22160 bytes .../setuptools/command/install.py | 125 + .../setuptools/command/install.pyc | Bin 0 -> 5473 bytes .../setuptools/command/install_egg_info.py | 116 + .../setuptools/command/install_egg_info.pyc | Bin 0 -> 6028 bytes .../setuptools/command/install_lib.py | 118 + .../setuptools/command/install_lib.pyc | Bin 0 -> 5442 bytes .../setuptools/command/install_scripts.py | 60 + .../setuptools/command/install_scripts.pyc | Bin 0 -> 3088 bytes .../setuptools/command/launcher manifest.xml | 15 + .../setuptools/command/register.py | 10 + .../setuptools/command/register.pyc | Bin 0 -> 866 bytes .../setuptools/command/rotate.py | 61 + .../setuptools/command/rotate.pyc | Bin 0 -> 3210 bytes .../setuptools/command/saveopts.py | 22 + .../setuptools/command/saveopts.pyc | Bin 0 -> 1285 bytes .../site-packages/setuptools/command/sdist.py | 197 + .../setuptools/command/sdist.pyc | Bin 0 -> 7297 bytes .../setuptools/command/setopt.py | 150 + .../setuptools/command/setopt.pyc | Bin 0 -> 6571 bytes .../site-packages/setuptools/command/test.py | 175 + .../site-packages/setuptools/command/test.pyc | Bin 0 -> 7101 bytes .../setuptools/command/upload_docs.py | 190 + .../setuptools/command/upload_docs.pyc | Bin 0 -> 7449 bytes .../site-packages/setuptools/compat.py | 66 + .../site-packages/setuptools/compat.pyc | Bin 0 -> 4061 bytes .../site-packages/setuptools/depends.py | 215 + .../site-packages/setuptools/depends.pyc | Bin 0 -> 7864 bytes .../site-packages/setuptools/dist.py | 862 +++ .../site-packages/setuptools/dist.pyc | Bin 0 -> 36870 bytes .../site-packages/setuptools/extension.py | 57 + .../site-packages/setuptools/extension.pyc | Bin 0 -> 2959 bytes .../site-packages/setuptools/gui-32.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/gui-64.exe | Bin 0 -> 75264 bytes .../site-packages/setuptools/gui-arm-32.exe | Bin 0 -> 69120 bytes .../site-packages/setuptools/gui.exe | Bin 0 -> 65536 bytes .../site-packages/setuptools/lib2to3_ex.py | 58 + .../site-packages/setuptools/lib2to3_ex.pyc | Bin 0 -> 3472 bytes .../site-packages/setuptools/msvc9_support.py | 63 + .../setuptools/msvc9_support.pyc | Bin 0 -> 2311 bytes .../site-packages/setuptools/package_index.py | 1050 ++++ .../setuptools/package_index.pyc | Bin 0 -> 42591 bytes .../site-packages/setuptools/py26compat.py | 19 + .../site-packages/setuptools/py26compat.pyc | Bin 0 -> 1072 bytes .../site-packages/setuptools/py27compat.py | 15 + .../site-packages/setuptools/py27compat.pyc | Bin 0 -> 899 bytes .../site-packages/setuptools/py31compat.py | 52 + .../site-packages/setuptools/py31compat.pyc | Bin 0 -> 2754 bytes .../site-packages/setuptools/sandbox.py | 487 ++ .../site-packages/setuptools/sandbox.pyc | Bin 0 -> 21006 bytes .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 76 + .../site-packages/setuptools/site-patch.pyc | Bin 0 -> 1843 bytes .../site-packages/setuptools/ssl_support.py | 241 + .../site-packages/setuptools/ssl_support.pyc | Bin 0 -> 8512 bytes .../setuptools/tests/__init__.py | 323 ++ .../setuptools/tests/__init__.pyc | Bin 0 -> 15372 bytes .../setuptools/tests/contexts.py | 93 + .../setuptools/tests/contexts.pyc | Bin 0 -> 3638 bytes .../setuptools/tests/environment.py | 60 + .../setuptools/tests/environment.pyc | Bin 0 -> 2051 bytes .../setuptools/tests/fixtures.py | 27 + .../setuptools/tests/fixtures.pyc | Bin 0 -> 1262 bytes .../setuptools/tests/py26compat.py | 14 + .../setuptools/tests/py26compat.pyc | Bin 0 -> 799 bytes .../setuptools/tests/script-with-bom.py | 3 + .../setuptools/tests/script-with-bom.pyc | Bin 0 -> 235 bytes .../site-packages/setuptools/tests/server.py | 65 + .../site-packages/setuptools/tests/server.pyc | Bin 0 -> 4254 bytes .../setuptools/tests/test_bdist_egg.py | 43 + .../setuptools/tests/test_bdist_egg.pyc | Bin 0 -> 1987 bytes .../setuptools/tests/test_build_ext.py | 18 + .../setuptools/tests/test_build_ext.pyc | Bin 0 -> 1293 bytes .../setuptools/tests/test_develop.py | 103 + .../setuptools/tests/test_develop.pyc | Bin 0 -> 3453 bytes .../setuptools/tests/test_dist_info.py | 70 + .../setuptools/tests/test_dist_info.pyc | Bin 0 -> 3579 bytes .../setuptools/tests/test_easy_install.py | 547 ++ .../setuptools/tests/test_easy_install.pyc | Bin 0 -> 25081 bytes .../setuptools/tests/test_egg_info.py | 98 + .../setuptools/tests/test_egg_info.pyc | Bin 0 -> 4557 bytes .../setuptools/tests/test_find_packages.py | 170 + .../setuptools/tests/test_find_packages.pyc | Bin 0 -> 9828 bytes .../setuptools/tests/test_integration.py | 99 + .../setuptools/tests/test_integration.pyc | Bin 0 -> 4359 bytes .../setuptools/tests/test_markerlib.py | 63 + .../setuptools/tests/test_markerlib.pyc | Bin 0 -> 2888 bytes .../setuptools/tests/test_msvc9compiler.py | 179 + .../setuptools/tests/test_msvc9compiler.pyc | Bin 0 -> 7919 bytes .../setuptools/tests/test_packageindex.py | 203 + .../setuptools/tests/test_packageindex.pyc | Bin 0 -> 10726 bytes .../setuptools/tests/test_sandbox.py | 102 + .../setuptools/tests/test_sandbox.pyc | Bin 0 -> 5879 bytes .../setuptools/tests/test_sdist.py | 419 ++ .../setuptools/tests/test_sdist.pyc | Bin 0 -> 12981 bytes .../setuptools/tests/test_test.py | 91 + .../setuptools/tests/test_test.pyc | Bin 0 -> 3266 bytes .../setuptools/tests/test_upload_docs.py | 59 + .../setuptools/tests/test_upload_docs.pyc | Bin 0 -> 2339 bytes .../setuptools/tests/test_windows_wrappers.py | 183 + .../tests/test_windows_wrappers.pyc | Bin 0 -> 7914 bytes .../setuptools/tests/textwrap.py | 8 + .../setuptools/tests/textwrap.pyc | Bin 0 -> 572 bytes .../site-packages/setuptools/unicode_utils.py | 41 + .../setuptools/unicode_utils.pyc | Bin 0 -> 1649 bytes .../site-packages/setuptools/utils.py | 11 + .../site-packages/setuptools/utils.pyc | Bin 0 -> 647 bytes .../site-packages/setuptools/version.py | 1 + .../site-packages/setuptools/version.pyc | Bin 0 -> 226 bytes .../setuptools/windows_support.py | 29 + .../setuptools/windows_support.pyc | Bin 0 -> 1482 bytes .../uWSGI-2.0.9-py2.7.egg-info/PKG-INFO | 10 + .../uWSGI-2.0.9-py2.7.egg-info/SOURCES.txt | 6 + .../dependency_links.txt | 1 + .../installed-files.txt | 7 + .../uWSGI-2.0.9-py2.7.egg-info/top_level.txt | 1 + .../site-packages/uwsgidecorators.py | 414 ++ .../site-packages/uwsgidecorators.pyc | Bin 0 -> 20775 bytes .../site-packages/werkzeug/__init__.py | 154 + .../site-packages/werkzeug/__init__.pyc | Bin 0 -> 5881 bytes .../site-packages/werkzeug/_compat.py | 202 + .../site-packages/werkzeug/_compat.pyc | Bin 0 -> 11397 bytes .../site-packages/werkzeug/_internal.py | 412 ++ .../site-packages/werkzeug/_internal.pyc | Bin 0 -> 15456 bytes .../site-packages/werkzeug/_reloader.py | 273 + .../site-packages/werkzeug/_reloader.pyc | Bin 0 -> 10946 bytes .../werkzeug/contrib/__init__.py | 16 + .../werkzeug/contrib/__init__.pyc | Bin 0 -> 782 bytes .../site-packages/werkzeug/contrib/atom.py | 353 ++ .../site-packages/werkzeug/contrib/atom.pyc | Bin 0 -> 16612 bytes .../site-packages/werkzeug/contrib/cache.py | 714 +++ .../site-packages/werkzeug/contrib/cache.pyc | Bin 0 -> 30852 bytes .../site-packages/werkzeug/contrib/fixers.py | 248 + .../site-packages/werkzeug/contrib/fixers.pyc | Bin 0 -> 11903 bytes .../site-packages/werkzeug/contrib/iterio.py | 349 ++ .../site-packages/werkzeug/contrib/iterio.pyc | Bin 0 -> 14328 bytes .../werkzeug/contrib/jsrouting.py | 264 + .../werkzeug/contrib/jsrouting.pyc | Bin 0 -> 9236 bytes .../site-packages/werkzeug/contrib/limiter.py | 40 + .../werkzeug/contrib/limiter.pyc | Bin 0 -> 2033 bytes .../site-packages/werkzeug/contrib/lint.py | 334 ++ .../site-packages/werkzeug/contrib/lint.pyc | Bin 0 -> 15088 bytes .../werkzeug/contrib/profiler.py | 142 + .../werkzeug/contrib/profiler.pyc | Bin 0 -> 6448 bytes .../werkzeug/contrib/securecookie.py | 321 ++ .../werkzeug/contrib/securecookie.pyc | Bin 0 -> 11915 bytes .../werkzeug/contrib/sessions.py | 348 ++ .../werkzeug/contrib/sessions.pyc | Bin 0 -> 16023 bytes .../werkzeug/contrib/testtools.py | 71 + .../werkzeug/contrib/testtools.pyc | Bin 0 -> 3291 bytes .../werkzeug/contrib/wrappers.py | 278 + .../werkzeug/contrib/wrappers.pyc | Bin 0 -> 12080 bytes .../site-packages/werkzeug/datastructures.py | 2634 +++++++++ .../site-packages/werkzeug/datastructures.pyc | Bin 0 -> 122391 bytes .../site-packages/werkzeug/debug/__init__.py | 185 + .../site-packages/werkzeug/debug/__init__.pyc | Bin 0 -> 7905 bytes .../site-packages/werkzeug/debug/console.py | 211 + .../site-packages/werkzeug/debug/console.pyc | Bin 0 -> 10231 bytes .../site-packages/werkzeug/debug/repr.py | 280 + .../site-packages/werkzeug/debug/repr.pyc | Bin 0 -> 10925 bytes .../werkzeug/debug/shared/FONT_LICENSE | 96 + .../werkzeug/debug/shared/console.png | Bin 0 -> 507 bytes .../werkzeug/debug/shared/debugger.js | 201 + .../werkzeug/debug/shared/jquery.js | 167 + .../werkzeug/debug/shared/less.png | Bin 0 -> 191 bytes .../werkzeug/debug/shared/more.png | Bin 0 -> 200 bytes .../werkzeug/debug/shared/source.png | Bin 0 -> 818 bytes .../werkzeug/debug/shared/style.css | 113 + .../werkzeug/debug/shared/ubuntu.ttf | Bin 0 -> 70220 bytes .../site-packages/werkzeug/debug/tbtools.py | 510 ++ .../site-packages/werkzeug/debug/tbtools.pyc | Bin 0 -> 18087 bytes .../site-packages/werkzeug/exceptions.py | 617 ++ .../site-packages/werkzeug/exceptions.pyc | Bin 0 -> 24917 bytes .../site-packages/werkzeug/formparser.py | 523 ++ .../site-packages/werkzeug/formparser.pyc | Bin 0 -> 19254 bytes .../python2.7/site-packages/werkzeug/http.py | 995 ++++ .../python2.7/site-packages/werkzeug/http.pyc | Bin 0 -> 35045 bytes .../python2.7/site-packages/werkzeug/local.py | 409 ++ .../site-packages/werkzeug/local.pyc | Bin 0 -> 25603 bytes .../site-packages/werkzeug/posixemulation.py | 104 + .../site-packages/werkzeug/posixemulation.pyc | Bin 0 -> 3540 bytes .../site-packages/werkzeug/routing.py | 1664 ++++++ .../site-packages/werkzeug/routing.pyc | Bin 0 -> 66070 bytes .../site-packages/werkzeug/script.py | 315 + .../site-packages/werkzeug/script.pyc | Bin 0 -> 11824 bytes .../site-packages/werkzeug/security.py | 263 + .../site-packages/werkzeug/security.pyc | Bin 0 -> 10332 bytes .../site-packages/werkzeug/serving.py | 672 +++ .../site-packages/werkzeug/serving.pyc | Bin 0 -> 27392 bytes .../python2.7/site-packages/werkzeug/test.py | 892 +++ .../python2.7/site-packages/werkzeug/test.pyc | Bin 0 -> 35523 bytes .../site-packages/werkzeug/testapp.py | 230 + .../site-packages/werkzeug/testapp.pyc | Bin 0 -> 10510 bytes .../python2.7/site-packages/werkzeug/urls.py | 995 ++++ .../python2.7/site-packages/werkzeug/urls.pyc | Bin 0 -> 38690 bytes .../site-packages/werkzeug/useragents.py | 193 + .../site-packages/werkzeug/useragents.pyc | Bin 0 -> 6715 bytes .../python2.7/site-packages/werkzeug/utils.py | 624 ++ .../site-packages/werkzeug/utils.pyc | Bin 0 -> 24595 bytes .../site-packages/werkzeug/wrappers.py | 1823 ++++++ .../site-packages/werkzeug/wrappers.pyc | Bin 0 -> 80914 bytes .../python2.7/site-packages/werkzeug/wsgi.py | 1049 ++++ .../python2.7/site-packages/werkzeug/wsgi.pyc | Bin 0 -> 40665 bytes env/lib/python2.7/site.py | 758 +++ env/lib/python2.7/site.pyc | Bin 0 -> 24552 bytes env/lib/python2.7/sre.py | 1 + env/lib/python2.7/sre_compile.py | 1 + env/lib/python2.7/sre_compile.pyc | Bin 0 -> 11195 bytes env/lib/python2.7/sre_constants.py | 1 + env/lib/python2.7/sre_constants.pyc | Bin 0 -> 6280 bytes env/lib/python2.7/sre_parse.py | 1 + env/lib/python2.7/sre_parse.pyc | Bin 0 -> 20003 bytes env/lib/python2.7/stat.py | 1 + env/lib/python2.7/stat.pyc | Bin 0 -> 2921 bytes env/lib/python2.7/types.py | 1 + env/lib/python2.7/types.pyc | Bin 0 -> 2608 bytes env/lib/python2.7/warnings.py | 1 + env/lib/python2.7/warnings.pyc | Bin 0 -> 13531 bytes env/pip-selfcheck.json | 1 + helper.py | 84 + helper.pyc | Bin 0 -> 4168 bytes migrations/migration_db_v_0_1 | 110 + user.py | 28 + 1221 files changed, 160532 insertions(+) create mode 100644 __init__.py create mode 100644 db_api.py create mode 100644 db_api.sublime-project create mode 100644 db_api.sublime-workspace create mode 120000 env/.Python create mode 100644 env/bin/activate create mode 100644 env/bin/activate.csh create mode 100644 env/bin/activate.fish create mode 100644 env/bin/activate_this.py create mode 100755 env/bin/easy_install create mode 100755 env/bin/easy_install-2.7 create mode 100755 env/bin/pip create mode 100755 env/bin/pip2 create mode 100755 env/bin/pip2.7 create mode 100755 env/bin/python create mode 120000 env/bin/python2 create mode 120000 env/bin/python2.7 create mode 100755 env/bin/uwsgi create mode 120000 env/include/python2.7 create mode 120000 env/lib/python2.7/UserDict.py create mode 100644 env/lib/python2.7/UserDict.pyc create mode 120000 env/lib/python2.7/_abcoll.py create mode 100644 env/lib/python2.7/_abcoll.pyc create mode 120000 env/lib/python2.7/_weakrefset.py create mode 100644 env/lib/python2.7/_weakrefset.pyc create mode 120000 env/lib/python2.7/abc.py create mode 100644 env/lib/python2.7/abc.pyc create mode 120000 env/lib/python2.7/codecs.py create mode 100644 env/lib/python2.7/codecs.pyc create mode 120000 env/lib/python2.7/config create mode 120000 env/lib/python2.7/copy_reg.py create mode 100644 env/lib/python2.7/copy_reg.pyc create mode 100644 env/lib/python2.7/distutils/__init__.py create mode 100644 env/lib/python2.7/distutils/__init__.pyc create mode 100644 env/lib/python2.7/distutils/distutils.cfg create mode 120000 env/lib/python2.7/encodings create mode 120000 env/lib/python2.7/fnmatch.py create mode 100644 env/lib/python2.7/fnmatch.pyc create mode 120000 env/lib/python2.7/genericpath.py create mode 100644 env/lib/python2.7/genericpath.pyc create mode 120000 env/lib/python2.7/lib-dynload create mode 120000 env/lib/python2.7/linecache.py create mode 100644 env/lib/python2.7/linecache.pyc create mode 120000 env/lib/python2.7/locale.py create mode 100644 env/lib/python2.7/locale.pyc create mode 100644 env/lib/python2.7/no-global-site-packages.txt create mode 120000 env/lib/python2.7/ntpath.py create mode 100644 env/lib/python2.7/orig-prefix.txt create mode 120000 env/lib/python2.7/os.py create mode 100644 env/lib/python2.7/os.pyc create mode 120000 env/lib/python2.7/posixpath.py create mode 100644 env/lib/python2.7/posixpath.pyc create mode 120000 env/lib/python2.7/re.py create mode 100644 env/lib/python2.7/re.pyc create mode 100644 env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/not-zip-safe create mode 100644 env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/requires.txt create mode 100644 env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7-nspkg.pth create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/namespace_packages.txt create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/not-zip-safe create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/requires.txt create mode 100644 env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/entry_points.txt create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/not-zip-safe create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/requires.txt create mode 100644 env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/not-zip-safe create mode 100644 env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/MySQLdb/__init__.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/connections.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/connections.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/CLIENT.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/CLIENT.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/CR.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/CR.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/ER.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/ER.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/FIELD_TYPE.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/FIELD_TYPE.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/FLAG.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/FLAG.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/REFRESH.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/REFRESH.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/__init__.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/constants/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/converters.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/converters.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/cursors.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/cursors.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/release.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/release.pyc create mode 100644 env/lib/python2.7/site-packages/MySQLdb/times.py create mode 100644 env/lib/python2.7/site-packages/MySQLdb/times.pyc create mode 100644 env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/not-zip-safe create mode 100644 env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/_markerlib/__init__.py create mode 100644 env/lib/python2.7/site-packages/_markerlib/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/_markerlib/markers.py create mode 100644 env/lib/python2.7/site-packages/_markerlib/markers.pyc create mode 100755 env/lib/python2.7/site-packages/_mysql.so create mode 100644 env/lib/python2.7/site-packages/_mysql_exceptions.py create mode 100644 env/lib/python2.7/site-packages/_mysql_exceptions.pyc create mode 100644 env/lib/python2.7/site-packages/easy_install.py create mode 100644 env/lib/python2.7/site-packages/easy_install.pyc create mode 100644 env/lib/python2.7/site-packages/flask/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/_compat.py create mode 100644 env/lib/python2.7/site-packages/flask/_compat.pyc create mode 100644 env/lib/python2.7/site-packages/flask/app.py create mode 100644 env/lib/python2.7/site-packages/flask/app.pyc create mode 100644 env/lib/python2.7/site-packages/flask/blueprints.py create mode 100644 env/lib/python2.7/site-packages/flask/blueprints.pyc create mode 100644 env/lib/python2.7/site-packages/flask/config.py create mode 100644 env/lib/python2.7/site-packages/flask/config.pyc create mode 100644 env/lib/python2.7/site-packages/flask/ctx.py create mode 100644 env/lib/python2.7/site-packages/flask/ctx.pyc create mode 100644 env/lib/python2.7/site-packages/flask/debughelpers.py create mode 100644 env/lib/python2.7/site-packages/flask/debughelpers.pyc create mode 100644 env/lib/python2.7/site-packages/flask/ext/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/ext/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/exthook.py create mode 100644 env/lib/python2.7/site-packages/flask/exthook.pyc create mode 100644 env/lib/python2.7/site-packages/flask/globals.py create mode 100644 env/lib/python2.7/site-packages/flask/globals.pyc create mode 100644 env/lib/python2.7/site-packages/flask/helpers.py create mode 100644 env/lib/python2.7/site-packages/flask/helpers.pyc create mode 100644 env/lib/python2.7/site-packages/flask/json.py create mode 100644 env/lib/python2.7/site-packages/flask/json.pyc create mode 100644 env/lib/python2.7/site-packages/flask/logging.py create mode 100644 env/lib/python2.7/site-packages/flask/logging.pyc create mode 100644 env/lib/python2.7/site-packages/flask/module.py create mode 100644 env/lib/python2.7/site-packages/flask/module.pyc create mode 100644 env/lib/python2.7/site-packages/flask/sessions.py create mode 100644 env/lib/python2.7/site-packages/flask/sessions.pyc create mode 100644 env/lib/python2.7/site-packages/flask/signals.py create mode 100644 env/lib/python2.7/site-packages/flask/signals.pyc create mode 100644 env/lib/python2.7/site-packages/flask/templating.py create mode 100644 env/lib/python2.7/site-packages/flask/templating.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testing.py create mode 100644 env/lib/python2.7/site-packages/flask/testing.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/appctx.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/appctx.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/basic.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/basic.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/blueprints.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/blueprints.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/config.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/config.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/deprecations.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/deprecations.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/examples.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/examples.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/ext.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/ext.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/helpers.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/helpers.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/regression.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/regression.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/reqctx.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/reqctx.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/signals.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/signals.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/static/index.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/subclassing.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/subclassing.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/_macro.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/context_template.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/escaping_template.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/mail.txt create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/nested/nested.txt create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/simple_template.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/template_filter.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templates/template_test.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templating.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/templating.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/static/css/test.css create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/static/test.txt create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/admin/templates/admin/index.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/blueprintapp/apps/frontend/templates/frontend/index.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/config_module_app.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/config_module_app.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/config_package_app/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/config_package_app/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_broken/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_broken/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_broken/b.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_broken/b.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_package/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_package/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_package/submodule.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_package/submodule.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_simple.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flask_newext_simple.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_package/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_package/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_package/submodule.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_package/submodule.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_simple.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/flaskext/oldext_simple.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/importerror.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/importerror.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/SiteEgg.egg create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/main_app.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/main_app.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/static/css/test.css create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/static/test.txt create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/admin/templates/index.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/moduleapp/apps/frontend/templates/index.html create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/path/installed_package/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/path/installed_package/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/subdomaintestmodule/__init__.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/subdomaintestmodule/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/test_apps/subdomaintestmodule/static/hello.txt create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/testing.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/testing.pyc create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/views.py create mode 100644 env/lib/python2.7/site-packages/flask/testsuite/views.pyc create mode 100644 env/lib/python2.7/site-packages/flask/views.py create mode 100644 env/lib/python2.7/site-packages/flask/views.pyc create mode 100644 env/lib/python2.7/site-packages/flask/wrappers.py create mode 100644 env/lib/python2.7/site-packages/flask/wrappers.pyc create mode 100644 env/lib/python2.7/site-packages/flaskext/__init__.py create mode 100644 env/lib/python2.7/site-packages/flaskext/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/flaskext/mysql.py create mode 100644 env/lib/python2.7/site-packages/flaskext/mysql.pyc create mode 100644 env/lib/python2.7/site-packages/itsdangerous-0.24-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/itsdangerous-0.24-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/itsdangerous-0.24-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/itsdangerous-0.24-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/itsdangerous-0.24-py2.7.egg-info/not-zip-safe create mode 100644 env/lib/python2.7/site-packages/itsdangerous-0.24-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/itsdangerous.py create mode 100644 env/lib/python2.7/site-packages/itsdangerous.pyc create mode 100644 env/lib/python2.7/site-packages/jedi-0.8.1-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/jedi-0.8.1-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/jedi-0.8.1-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/jedi-0.8.1-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/jedi-0.8.1-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/jedi/__init__.py create mode 100644 env/lib/python2.7/site-packages/jedi/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/__main__.py create mode 100644 env/lib/python2.7/site-packages/jedi/__main__.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/_compatibility.py create mode 100644 env/lib/python2.7/site-packages/jedi/_compatibility.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/api/__init__.py create mode 100644 env/lib/python2.7/site-packages/jedi/api/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/api/classes.py create mode 100644 env/lib/python2.7/site-packages/jedi/api/classes.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/api/helpers.py create mode 100644 env/lib/python2.7/site-packages/jedi/api/helpers.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/api/interpreter.py create mode 100644 env/lib/python2.7/site-packages/jedi/api/interpreter.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/api/keywords.py create mode 100644 env/lib/python2.7/site-packages/jedi/api/keywords.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/api/replstartup.py create mode 100644 env/lib/python2.7/site-packages/jedi/api/replstartup.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/api/usages.py create mode 100644 env/lib/python2.7/site-packages/jedi/api/usages.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/cache.py create mode 100644 env/lib/python2.7/site-packages/jedi/cache.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/common.py create mode 100644 env/lib/python2.7/site-packages/jedi/common.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/debug.py create mode 100644 env/lib/python2.7/site-packages/jedi/debug.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/__init__.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/analysis.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/analysis.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/cache.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/cache.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/__init__.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/_functools.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/_sqlite3.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/_sre.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/_weakref.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/builtins.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/datetime.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/io.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/posix.pym create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/docstrings.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/docstrings.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/dynamic.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/dynamic.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/finder.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/finder.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/helpers.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/helpers.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/imports.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/imports.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/iterable.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/iterable.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/param.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/param.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/precedence.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/precedence.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/recursion.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/recursion.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/representation.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/representation.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/stdlib.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/stdlib.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/sys_path.py create mode 100644 env/lib/python2.7/site-packages/jedi/evaluate/sys_path.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/parser/__init__.py create mode 100644 env/lib/python2.7/site-packages/jedi/parser/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/parser/fast.py create mode 100644 env/lib/python2.7/site-packages/jedi/parser/fast.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/parser/representation.py create mode 100644 env/lib/python2.7/site-packages/jedi/parser/representation.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/parser/tokenize.py create mode 100644 env/lib/python2.7/site-packages/jedi/parser/tokenize.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/parser/user_context.py create mode 100644 env/lib/python2.7/site-packages/jedi/parser/user_context.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/refactoring.py create mode 100644 env/lib/python2.7/site-packages/jedi/refactoring.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/settings.py create mode 100644 env/lib/python2.7/site-packages/jedi/settings.pyc create mode 100644 env/lib/python2.7/site-packages/jedi/utils.py create mode 100644 env/lib/python2.7/site-packages/jedi/utils.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/__init__.py create mode 100644 env/lib/python2.7/site-packages/jinja2/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/_compat.py create mode 100644 env/lib/python2.7/site-packages/jinja2/_compat.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/_stringdefs.py create mode 100644 env/lib/python2.7/site-packages/jinja2/_stringdefs.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/bccache.py create mode 100644 env/lib/python2.7/site-packages/jinja2/bccache.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/compiler.py create mode 100644 env/lib/python2.7/site-packages/jinja2/compiler.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/constants.py create mode 100644 env/lib/python2.7/site-packages/jinja2/constants.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/debug.py create mode 100644 env/lib/python2.7/site-packages/jinja2/debug.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/defaults.py create mode 100644 env/lib/python2.7/site-packages/jinja2/defaults.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/environment.py create mode 100644 env/lib/python2.7/site-packages/jinja2/environment.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/exceptions.py create mode 100644 env/lib/python2.7/site-packages/jinja2/exceptions.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/ext.py create mode 100644 env/lib/python2.7/site-packages/jinja2/ext.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/filters.py create mode 100644 env/lib/python2.7/site-packages/jinja2/filters.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/lexer.py create mode 100644 env/lib/python2.7/site-packages/jinja2/lexer.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/loaders.py create mode 100644 env/lib/python2.7/site-packages/jinja2/loaders.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/meta.py create mode 100644 env/lib/python2.7/site-packages/jinja2/meta.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/nodes.py create mode 100644 env/lib/python2.7/site-packages/jinja2/nodes.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/optimizer.py create mode 100644 env/lib/python2.7/site-packages/jinja2/optimizer.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/parser.py create mode 100644 env/lib/python2.7/site-packages/jinja2/parser.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/runtime.py create mode 100644 env/lib/python2.7/site-packages/jinja2/runtime.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/sandbox.py create mode 100644 env/lib/python2.7/site-packages/jinja2/sandbox.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/tests.py create mode 100644 env/lib/python2.7/site-packages/jinja2/tests.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/__init__.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/api.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/api.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/bytecode_cache.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/bytecode_cache.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/core_tags.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/core_tags.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/debug.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/debug.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/doctests.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/doctests.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/ext.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/ext.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/filters.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/filters.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/imports.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/imports.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/inheritance.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/inheritance.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/lexnparse.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/lexnparse.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/loader.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/loader.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/regression.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/regression.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/res/__init__.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/res/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/res/templates/broken.html create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/res/templates/foo/test.html create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/res/templates/syntaxerror.html create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/res/templates/test.html create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/security.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/security.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/tests.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/tests.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/utils.py create mode 100644 env/lib/python2.7/site-packages/jinja2/testsuite/utils.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/utils.py create mode 100644 env/lib/python2.7/site-packages/jinja2/utils.pyc create mode 100644 env/lib/python2.7/site-packages/jinja2/visitor.py create mode 100644 env/lib/python2.7/site-packages/jinja2/visitor.pyc create mode 100644 env/lib/python2.7/site-packages/markupsafe/__init__.py create mode 100644 env/lib/python2.7/site-packages/markupsafe/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/markupsafe/_compat.py create mode 100644 env/lib/python2.7/site-packages/markupsafe/_compat.pyc create mode 100644 env/lib/python2.7/site-packages/markupsafe/_constants.py create mode 100644 env/lib/python2.7/site-packages/markupsafe/_constants.pyc create mode 100644 env/lib/python2.7/site-packages/markupsafe/_native.py create mode 100644 env/lib/python2.7/site-packages/markupsafe/_native.pyc create mode 100644 env/lib/python2.7/site-packages/markupsafe/_speedups.c create mode 100755 env/lib/python2.7/site-packages/markupsafe/_speedups.so create mode 100644 env/lib/python2.7/site-packages/markupsafe/tests.py create mode 100644 env/lib/python2.7/site-packages/markupsafe/tests.pyc create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/DESCRIPTION.rst create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/METADATA create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/RECORD create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/WHEEL create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/entry_points.txt create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/metadata.json create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/pbr.json create mode 100644 env/lib/python2.7/site-packages/pip-6.0.8.dist-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/pip/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/__main__.py create mode 100644 env/lib/python2.7/site-packages/pip/__main__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/_markerlib/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/_markerlib/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/_markerlib/markers.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/_markerlib/markers.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/adapter.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/cache.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/caches/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/caches/file_cache.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/compat.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/compat.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/controller.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/filewrapper.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/heuristics.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/serialize.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/cachecontrol/wrapper.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/certifi/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/certifi/__main__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/certifi/core.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/certifi/core.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/ansi.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/ansitowin32.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/initialise.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/win32.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/win32.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/colorama/winterm.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/misc.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/misc.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/shutil.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/shutil.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/sysconfig.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/sysconfig.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/tarfile.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/_backport/tarfile.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/compat.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/compat.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/database.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/database.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/index.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/index.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/locators.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/locators.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/manifest.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/markers.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/markers.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/metadata.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/resources.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/resources.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/scripts.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/util.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/version.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/version.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/constants.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/constants.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/_base.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/_base.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/lint.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/lint.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/optionaltags.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/optionaltags.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/sanitizer.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/sanitizer.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/whitespace.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/filters/whitespace.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/html5parser.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/html5parser.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/ihatexml.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/ihatexml.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/inputstream.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/inputstream.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/sanitizer.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/sanitizer.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/serializer/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/serializer/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/serializer/htmlserializer.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/serializer/htmlserializer.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/tokenizer.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/tokenizer.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treeadapters/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treeadapters/sax.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treeadapters/sax.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/_base.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/_base.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/dom.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/dom.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/etree.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/etree.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/_base.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/_base.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/dom.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/dom.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/etree.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/etree.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/genshistream.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/genshistream.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/lxmletree.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/lxmletree.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/pulldom.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/treewalkers/pulldom.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/_base.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/_base.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/datrie.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/datrie.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/py.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/trie/py.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/utils.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/html5lib/utils.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/ipaddress.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/ipaddress.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/linklockfile.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/linklockfile.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/mkdirlockfile.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/mkdirlockfile.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/pidlockfile.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/pidlockfile.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/sqlitelockfile.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/sqlitelockfile.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/symlinklockfile.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/lockfile/symlinklockfile.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/__about__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/_compat.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/_compat.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/_structures.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/specifiers.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/version.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/packaging/version.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/bar.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/bar.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/counter.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/counter.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/helpers.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/helpers.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/spinner.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/progress/spinner.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/re-vendor.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/re-vendor.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/adapters.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/adapters.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/api.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/api.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/auth.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/auth.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/cacert.pem create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/certs.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/certs.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/compat.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/compat.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/cookies.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/cookies.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/exceptions.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/hooks.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/hooks.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/models.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/models.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/big5freq.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/big5freq.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/big5prober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/big5prober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/chardetect.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/chardetect.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/chardistribution.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/chardistribution.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/charsetgroupprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/charsetgroupprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/charsetprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/charsetprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/codingstatemachine.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/codingstatemachine.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/compat.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/compat.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/constants.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/constants.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/cp949prober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/cp949prober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/escprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/escprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/escsm.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/escsm.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/eucjpprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/eucjpprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euckrfreq.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euckrfreq.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euckrprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euckrprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euctwfreq.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euctwfreq.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euctwprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/euctwprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/gb2312freq.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/gb2312freq.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/gb2312prober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/gb2312prober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/hebrewprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/hebrewprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/jisfreq.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/jisfreq.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/jpcntx.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/jpcntx.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langbulgarianmodel.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langbulgarianmodel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langcyrillicmodel.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langcyrillicmodel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langgreekmodel.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langgreekmodel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langhebrewmodel.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langhebrewmodel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langhungarianmodel.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langhungarianmodel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langthaimodel.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/langthaimodel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/latin1prober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/latin1prober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/mbcharsetprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/mbcharsetprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/mbcsgroupprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/mbcsgroupprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/mbcssm.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/mbcssm.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/sbcharsetprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/sbcharsetprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/sbcsgroupprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/sbcsgroupprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/sjisprober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/sjisprober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/universaldetector.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/universaldetector.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/utf8prober.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/chardet/utf8prober.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/_collections.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/_collections.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/connection.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/connection.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/connectionpool.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/ntlmpool.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/ntlmpool.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/exceptions.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/exceptions.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/fields.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/fields.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/filepost.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/filepost.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/ordered_dict.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/ordered_dict.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/six.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/six.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/poolmanager.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/poolmanager.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/request.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/request.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/response.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/response.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/connection.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/connection.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/request.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/request.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/response.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/response.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/retry.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/retry.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/timeout.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/timeout.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/url.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/url.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/sessions.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/sessions.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/status_codes.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/structures.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/structures.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/utils.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/requests/utils.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/retrying.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/retrying.pyc create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/six.py create mode 100644 env/lib/python2.7/site-packages/pip/_vendor/six.pyc create mode 100644 env/lib/python2.7/site-packages/pip/basecommand.py create mode 100644 env/lib/python2.7/site-packages/pip/basecommand.pyc create mode 100644 env/lib/python2.7/site-packages/pip/baseparser.py create mode 100644 env/lib/python2.7/site-packages/pip/baseparser.pyc create mode 100644 env/lib/python2.7/site-packages/pip/cmdoptions.py create mode 100644 env/lib/python2.7/site-packages/pip/cmdoptions.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/completion.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/completion.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/freeze.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/freeze.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/help.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/help.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/install.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/install.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/list.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/list.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/search.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/search.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/show.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/show.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/uninstall.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/uninstall.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/unzip.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/unzip.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/wheel.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/wheel.pyc create mode 100644 env/lib/python2.7/site-packages/pip/commands/zip.py create mode 100644 env/lib/python2.7/site-packages/pip/commands/zip.pyc create mode 100644 env/lib/python2.7/site-packages/pip/compat/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/compat/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/compat/dictconfig.py create mode 100644 env/lib/python2.7/site-packages/pip/compat/dictconfig.pyc create mode 100644 env/lib/python2.7/site-packages/pip/download.py create mode 100644 env/lib/python2.7/site-packages/pip/download.pyc create mode 100644 env/lib/python2.7/site-packages/pip/exceptions.py create mode 100644 env/lib/python2.7/site-packages/pip/exceptions.pyc create mode 100644 env/lib/python2.7/site-packages/pip/index.py create mode 100644 env/lib/python2.7/site-packages/pip/index.pyc create mode 100644 env/lib/python2.7/site-packages/pip/locations.py create mode 100644 env/lib/python2.7/site-packages/pip/locations.pyc create mode 100644 env/lib/python2.7/site-packages/pip/models/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/models/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/models/index.py create mode 100644 env/lib/python2.7/site-packages/pip/models/index.pyc create mode 100644 env/lib/python2.7/site-packages/pip/operations/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/operations/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/operations/freeze.py create mode 100644 env/lib/python2.7/site-packages/pip/operations/freeze.pyc create mode 100644 env/lib/python2.7/site-packages/pip/pep425tags.py create mode 100644 env/lib/python2.7/site-packages/pip/pep425tags.pyc create mode 100644 env/lib/python2.7/site-packages/pip/req/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/req/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/req/req_file.py create mode 100644 env/lib/python2.7/site-packages/pip/req/req_file.pyc create mode 100644 env/lib/python2.7/site-packages/pip/req/req_install.py create mode 100644 env/lib/python2.7/site-packages/pip/req/req_install.pyc create mode 100644 env/lib/python2.7/site-packages/pip/req/req_requirement.py create mode 100644 env/lib/python2.7/site-packages/pip/req/req_requirement.pyc create mode 100644 env/lib/python2.7/site-packages/pip/req/req_set.py create mode 100644 env/lib/python2.7/site-packages/pip/req/req_set.pyc create mode 100644 env/lib/python2.7/site-packages/pip/req/req_uninstall.py create mode 100644 env/lib/python2.7/site-packages/pip/req/req_uninstall.pyc create mode 100644 env/lib/python2.7/site-packages/pip/status_codes.py create mode 100644 env/lib/python2.7/site-packages/pip/status_codes.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/appdirs.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/appdirs.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/build.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/build.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/deprecation.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/deprecation.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/filesystem.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/filesystem.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/logging.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/logging.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/outdated.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/outdated.pyc create mode 100644 env/lib/python2.7/site-packages/pip/utils/ui.py create mode 100644 env/lib/python2.7/site-packages/pip/utils/ui.pyc create mode 100644 env/lib/python2.7/site-packages/pip/vcs/__init__.py create mode 100644 env/lib/python2.7/site-packages/pip/vcs/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pip/vcs/bazaar.py create mode 100644 env/lib/python2.7/site-packages/pip/vcs/bazaar.pyc create mode 100644 env/lib/python2.7/site-packages/pip/vcs/git.py create mode 100644 env/lib/python2.7/site-packages/pip/vcs/git.pyc create mode 100644 env/lib/python2.7/site-packages/pip/vcs/mercurial.py create mode 100644 env/lib/python2.7/site-packages/pip/vcs/mercurial.pyc create mode 100644 env/lib/python2.7/site-packages/pip/vcs/subversion.py create mode 100644 env/lib/python2.7/site-packages/pip/vcs/subversion.pyc create mode 100644 env/lib/python2.7/site-packages/pip/wheel.py create mode 100644 env/lib/python2.7/site-packages/pip/wheel.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/__init__.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/__about__.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/_compat.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/_structures.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/specifiers.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/_vendor/packaging/version.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/tests/__init__.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/tests/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/tests/test_pkg_resources.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/tests/test_pkg_resources.pyc create mode 100644 env/lib/python2.7/site-packages/pkg_resources/tests/test_resources.py create mode 100644 env/lib/python2.7/site-packages/pkg_resources/tests/test_resources.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/DESCRIPTION.rst create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/METADATA create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/RECORD create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/WHEEL create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/entry_points.txt create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/metadata.json create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/setuptools-12.0.5.dist-info/zip-safe create mode 100644 env/lib/python2.7/site-packages/setuptools/__init__.py create mode 100644 env/lib/python2.7/site-packages/setuptools/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/archive_util.py create mode 100644 env/lib/python2.7/site-packages/setuptools/archive_util.pyc create mode 100755 env/lib/python2.7/site-packages/setuptools/cli-32.exe create mode 100755 env/lib/python2.7/site-packages/setuptools/cli-64.exe create mode 100755 env/lib/python2.7/site-packages/setuptools/cli-arm-32.exe create mode 100755 env/lib/python2.7/site-packages/setuptools/cli.exe create mode 100644 env/lib/python2.7/site-packages/setuptools/command/__init__.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/alias.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/alias.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/bdist_egg.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/bdist_egg.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/bdist_rpm.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/bdist_rpm.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/bdist_wininst.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/bdist_wininst.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/build_ext.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/build_ext.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/build_py.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/build_py.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/develop.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/develop.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/easy_install.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/easy_install.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/egg_info.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/egg_info.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install_egg_info.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install_egg_info.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install_lib.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install_lib.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install_scripts.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/install_scripts.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/launcher manifest.xml create mode 100644 env/lib/python2.7/site-packages/setuptools/command/register.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/register.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/rotate.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/rotate.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/saveopts.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/saveopts.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/sdist.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/sdist.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/setopt.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/setopt.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/test.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/test.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/command/upload_docs.py create mode 100644 env/lib/python2.7/site-packages/setuptools/command/upload_docs.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/compat.py create mode 100644 env/lib/python2.7/site-packages/setuptools/compat.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/depends.py create mode 100644 env/lib/python2.7/site-packages/setuptools/depends.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/dist.py create mode 100644 env/lib/python2.7/site-packages/setuptools/dist.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/extension.py create mode 100644 env/lib/python2.7/site-packages/setuptools/extension.pyc create mode 100755 env/lib/python2.7/site-packages/setuptools/gui-32.exe create mode 100755 env/lib/python2.7/site-packages/setuptools/gui-64.exe create mode 100755 env/lib/python2.7/site-packages/setuptools/gui-arm-32.exe create mode 100755 env/lib/python2.7/site-packages/setuptools/gui.exe create mode 100644 env/lib/python2.7/site-packages/setuptools/lib2to3_ex.py create mode 100644 env/lib/python2.7/site-packages/setuptools/lib2to3_ex.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/msvc9_support.py create mode 100644 env/lib/python2.7/site-packages/setuptools/msvc9_support.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/package_index.py create mode 100644 env/lib/python2.7/site-packages/setuptools/package_index.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/py26compat.py create mode 100644 env/lib/python2.7/site-packages/setuptools/py26compat.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/py27compat.py create mode 100644 env/lib/python2.7/site-packages/setuptools/py27compat.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/py31compat.py create mode 100644 env/lib/python2.7/site-packages/setuptools/py31compat.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/sandbox.py create mode 100644 env/lib/python2.7/site-packages/setuptools/sandbox.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/script (dev).tmpl create mode 100644 env/lib/python2.7/site-packages/setuptools/script.tmpl create mode 100644 env/lib/python2.7/site-packages/setuptools/site-patch.py create mode 100644 env/lib/python2.7/site-packages/setuptools/site-patch.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/ssl_support.py create mode 100644 env/lib/python2.7/site-packages/setuptools/ssl_support.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/__init__.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/contexts.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/contexts.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/environment.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/environment.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/fixtures.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/fixtures.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/py26compat.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/py26compat.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/script-with-bom.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/script-with-bom.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/server.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/server.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_bdist_egg.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_bdist_egg.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_build_ext.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_build_ext.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_develop.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_develop.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_dist_info.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_dist_info.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_easy_install.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_easy_install.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_egg_info.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_egg_info.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_find_packages.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_find_packages.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_integration.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_integration.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_markerlib.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_markerlib.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_msvc9compiler.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_msvc9compiler.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_packageindex.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_packageindex.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_sandbox.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_sandbox.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_sdist.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_sdist.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_test.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_test.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_upload_docs.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_upload_docs.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_windows_wrappers.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/test_windows_wrappers.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/textwrap.py create mode 100644 env/lib/python2.7/site-packages/setuptools/tests/textwrap.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/unicode_utils.py create mode 100644 env/lib/python2.7/site-packages/setuptools/unicode_utils.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/utils.py create mode 100644 env/lib/python2.7/site-packages/setuptools/utils.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/version.py create mode 100644 env/lib/python2.7/site-packages/setuptools/version.pyc create mode 100644 env/lib/python2.7/site-packages/setuptools/windows_support.py create mode 100644 env/lib/python2.7/site-packages/setuptools/windows_support.pyc create mode 100644 env/lib/python2.7/site-packages/uWSGI-2.0.9-py2.7.egg-info/PKG-INFO create mode 100644 env/lib/python2.7/site-packages/uWSGI-2.0.9-py2.7.egg-info/SOURCES.txt create mode 100644 env/lib/python2.7/site-packages/uWSGI-2.0.9-py2.7.egg-info/dependency_links.txt create mode 100644 env/lib/python2.7/site-packages/uWSGI-2.0.9-py2.7.egg-info/installed-files.txt create mode 100644 env/lib/python2.7/site-packages/uWSGI-2.0.9-py2.7.egg-info/top_level.txt create mode 100644 env/lib/python2.7/site-packages/uwsgidecorators.py create mode 100644 env/lib/python2.7/site-packages/uwsgidecorators.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/__init__.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/_compat.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/_compat.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/_internal.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/_internal.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/_reloader.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/_reloader.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/__init__.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/atom.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/atom.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/cache.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/cache.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/fixers.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/fixers.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/iterio.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/iterio.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/jsrouting.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/jsrouting.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/limiter.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/limiter.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/lint.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/lint.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/profiler.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/profiler.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/securecookie.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/securecookie.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/sessions.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/sessions.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/testtools.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/testtools.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/wrappers.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/contrib/wrappers.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/datastructures.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/datastructures.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/__init__.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/__init__.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/console.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/console.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/repr.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/repr.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/FONT_LICENSE create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/console.png create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/debugger.js create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/jquery.js create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/less.png create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/more.png create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/source.png create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/style.css create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/shared/ubuntu.ttf create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/tbtools.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/debug/tbtools.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/exceptions.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/exceptions.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/formparser.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/formparser.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/http.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/http.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/local.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/local.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/posixemulation.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/posixemulation.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/routing.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/routing.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/script.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/script.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/security.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/security.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/serving.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/serving.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/test.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/test.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/testapp.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/testapp.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/urls.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/urls.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/useragents.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/useragents.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/utils.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/utils.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/wrappers.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/wrappers.pyc create mode 100644 env/lib/python2.7/site-packages/werkzeug/wsgi.py create mode 100644 env/lib/python2.7/site-packages/werkzeug/wsgi.pyc create mode 100644 env/lib/python2.7/site.py create mode 100644 env/lib/python2.7/site.pyc create mode 120000 env/lib/python2.7/sre.py create mode 120000 env/lib/python2.7/sre_compile.py create mode 100644 env/lib/python2.7/sre_compile.pyc create mode 120000 env/lib/python2.7/sre_constants.py create mode 100644 env/lib/python2.7/sre_constants.pyc create mode 120000 env/lib/python2.7/sre_parse.py create mode 100644 env/lib/python2.7/sre_parse.pyc create mode 120000 env/lib/python2.7/stat.py create mode 100644 env/lib/python2.7/stat.pyc create mode 120000 env/lib/python2.7/types.py create mode 100644 env/lib/python2.7/types.pyc create mode 120000 env/lib/python2.7/warnings.py create mode 100644 env/lib/python2.7/warnings.pyc create mode 100644 env/pip-selfcheck.json create mode 100644 helper.py create mode 100644 helper.pyc create mode 100644 migrations/migration_db_v_0_1 create mode 100644 user.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/db_api.py b/db_api.py new file mode 100644 index 0000000..49d436a --- /dev/null +++ b/db_api.py @@ -0,0 +1,872 @@ +from flask import Flask, request, jsonify +from flaskext.mysql import MySQL +from exceptions import KeyError +from _mysql_exceptions import IntegrityError +from helper import DoesNotExist, get_user_info, get_forum_info, get_thread_info, get_post_info, right_index +import MySQLdb + +class InvalidArg(Exception): + pass + + +mysql = MySQL() +app = Flask(__name__) +app.config['MYSQL_DATABASE_USER'] = 'root' +app.config['MYSQL_DATABASE_DB'] = 'db_api' +app.config['MYSQL_DATABASE_HOST'] = 'localhost' +mysql.init_app(app) +connection = mysql.connect() + + +"""FORUMS""" + + +@app.route('/db/api/forum/create/', methods=['POST']) +def forum_create(): + cursor = connection.cursor() + try: + data = request.get_json() + name = data['name'] + short_name = data['short_name'] + user = data['user'] + cursor.execute("""insert into forums (name, shortname, userEmail) + values (%s, %s, %s)""",(name, short_name, user)) + connection.commit() + cursor.close() + return jsonify(code=0, response={ + 'id':cursor.lastrowid, + 'name':name, + 'short_name': short_name, + 'user': user}) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=1, response='user does not exist') + except IntegrityError, e: + if e[0] == 1062: + return jsonify(code=2, response=get_forum_info(short_name, connection)) + elif e[0] == 1452: + return jsonify(code=2, response='user not found') + #except: + # return jsonify(code=2, response='bad request') + +@app.route('/db/api/forum/details/', methods=['GET']) +def forum_details(): + try: + forum = request.args['forum'] + related = request.args.getlist('related') + return jsonify(code=0, response=get_forum_info(forum, connection, related)) + except KeyError: + return ("invalid forum_details") + except DoesNotExist: + return jsonify(code=0, response="not found") + return ("forum_details") + + +@app.route('/db/api/forum/listPosts/', methods=['GET']) +def forum_listPosts(): + cursor = connection.cursor() + try: + forum = request.args['forum'] + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_date = request.args.get('since', "1970-01-01 00:00:01") + related = request.args.getlist('related') + cursor.execute("select max(createDate) from posts") + max_date = cursor.fetchone()[0] + + query = """select id from posts where forum = '{}' and + createDate between '{}' and '{}' order by createDate {} """.format(forum, since_date, max_date, order) + + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_post_info(i, connection, related)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + return ("listThreads") + return ("listPosts") + +@app.route('/db/api/forum/listThreads/', methods=['GET']) +def forum_listThreads(): + cursor = connection.cursor() + try: + forum = request.args['forum'] + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_date = request.args.get('since', "1970-01-01 00:00:01") + related = request.args.getlist('related') + cursor.execute("select max(createDate) from forums") + max_date = cursor.fetchone()[0] + + query = """select id from threads where forum = '{}' and + createDate between '{}' and '{}' order by createDate {} """.format(forum, since_date, max_date, order) + + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_thread_info(i, connection, related)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + return ("listThreads") + +@app.route('/db/api/forum/listUsers/', methods=['GET']) +def forum_listUsers(): + cursor = connection.cursor() + try: + forum = request.args['forum'] + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_id = request.args.get('since_id', 0) + related = request.args.getlist('related') + + cursor.execute("select max(id) from posts") + max_id = cursor.fetchone()[0] + query = """select distinct userEmail from posts join users on + users.email = posts.userEmail where posts.forum = '{}' and + posts.id between {} and {} order by users.name {} """.format(forum, since_id, max_id, order) + + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_user_info(i, connection)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + return ("listThreads") + + + + +"""USERS""" +@app.route('/db/api/user/create/', methods=['POST']) +def user_create(): + try: + cursor = connection.cursor() + data = request.get_json() + #for k, v in data.values(): + # data[k] = MySQLdb.escape_string(v) + name = data['name'] + username = data['username'] + email = data['email'] + about = data['about'] + isAnonymous = data.get('isAnonymous', False) + cursor.execute("""insert into users (name, username, email, about, isAnonymous) + VALUES (%s, %s, %s, %s, %s)""",(name, username, email, about, isAnonymous)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"id": cursor.lastrowid, + "name":name, + "username":username, + "email":email, + "isAnonymous":bool(isAnonymous), + "about":about + }) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5,response='user alredy exist') + #except: + # return jsonify(code=2, response='bad request') + +@app.route('/db/api/user/follow/', methods=["POST"]) +def user_follow(): + cursor = connection.cursor() + try: + data = request.get_json() + follower = data['follower'] + followee = data['followee'] + cursor.execute("insert into follows (follower, followee) VALUES (%s, %s)",(follower,followee)) + connection.commit() + cursor.close() + return jsonify(code=0, + response=get_user_info(follower, connection)) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError, e: + if e[0] == 1062: + return jsonify(code=0, response=get_user_info(follower, connection)) + elif e[0] == 1452: + return jsonify(code=2, response='user not found') + #except: + # return jsonify(code=2,response='bad request') + +@app.route('/db/api/user/unfollow/', methods=['POST']) +def user_unfollow(): + cursor = connection.cursor() + try: + data = request.get_json() + follower = data['follower'] + followee = data['followee'] + cursor.execute("delete from follows where followee = %s and follower = %s",(followee, follower)) + connection.commit() + cursor.close() + except KeyError: + return jsonify(code=2, response='invalid json') + #except: + # return jsonify(code=2,response='bad request') + return jsonify(code=0, + response=get_user_info(follower, connection)) + +@app.route('/db/api/user/details/', methods=['GET']) +def user_details(): + try: + user = request.args['user'] + return jsonify(code=0, response=get_user_info(user, connection)) + except KeyError: + return ("invalid user_details") + return ("forum_details") + +@app.route('/db/api/user/listFollowers/', methods=['GET']) +def user_listFollowers(): + try: + cursor = connection.cursor() + user = request.args['user'] + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_id = request.args.get('since_id', 0) + cursor.execute("select max(id) from users") + max_id = cursor.fetchone()[0] + query = """select follows.follower from follows join users on follows.follower = users.email and + follows.followee = '{}' + where users.id between {} and {} + order by follows.follower {} """.format(user, since_id, max_id, order) + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_user_info(i, connection)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + #except: + # return jsonify(code=2, response='bad request') + +@app.route('/db/api/user/listFollowing/', methods=['GET']) +def user_listFollowing(): + cursor = connection.cursor() + try: + user = request.args['user'] + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_id = request.args.get('since_id', 0) + cursor.execute("select max(id) from users") + max_id = cursor.fetchone()[0] + query = """select follows.followee from follows join users on follows.followee = users.email and + follows.follower = '{}' + where users.id between {} and {} + order by follows.followee {} """.format(user, since_id, max_id, order) + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_user_info(i, connection)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + +@app.route('/db/api/user/updateProfile/', methods=['POST']) +def user_update(): + cursor = connection.cursor() + try: + data = request.get_json() + name = data['name'] + user = data['user'] + about = data['about'] + cursor.execute("update users set name = %s, about = %s where email = %s",(name, about, user)) + connection.commit() + cursor.close() + return jsonify(code=0, + response=get_user_info(user, connection)) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + #except: + # return jsonify(code=2, response='bad request') + +@app.route('/db/api/user/listPosts/', methods=['GET']) +def user_listPosts(): + cursor = connection.cursor() + try: + user = request.args['user'] + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_date = request.args.get('since', "1970-01-01 00:00:01") + cursor.execute("select max(createDate) from posts") + max_date = cursor.fetchone()[0] + + query = """select id from posts where userEmail = '{}' and + createDate between '{}' and '{}' order by createDate {} """.format(user, since_date, max_date, order) + + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_post_info(i, connection)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + return ("listThreads") + + + + + + +"""Threads""" + +@app.route('/db/api/thread/create/', methods=['POST']) +def thread_create(): + cursor = connection.cursor() + try: + data = request.get_json() + date = data['date'] + user = data['user'] + slug = data['slug'] + forum = data['forum'] + title = data['title'] + closed = int(data['isClosed']) + message = data['message'] + deleted = int(bool(data.get('isDeleted'))) + + cursor.execute("""insert into threads (createDate, forum, isClosed, isDeleted, + message, slug, title, userEmail) + values (%s, %s, %s, %s, %s, + %s, %s, %s)""",(date, forum, closed, deleted, message, slug, title, user)) + connection.commit() + cursor.close() + return jsonify(code=0, response={ + 'id':cursor.lastrowid, + 'date':date, + 'forum': forum, + 'isClosed': bool(closed), + 'isDeleted': bool(deleted), + 'message': message, + 'slug': slug, + 'title': title, + 'user': user}) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + #except: + # return jsonify(code=2, response='bad request') + +@app.route("/db/api/thread/details/", methods=["GET"]) +def thread_details(): + try: + thread = request.args['thread'] + related = request.args.getlist('related') + if not all(i in ('user', 'forum') for i in related): raise InvalidArg + return jsonify(code=0, response=get_thread_info(thread, connection, related)) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=1, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + except InvalidArg: + return jsonify(code=3, response='wrong args') + #except: + # return jsonify(code=2, response='bad request') + +@app.route("/db/api/thread/subscribe/", methods=["POST"]) +def thread_subscribe(): + cursor = connection.cursor() + try: + data = request.get_json() + user = data['user'] + thread = data['thread'] + cursor.execute("insert into subscribes (userEmail, thread) VALUES (%s, %s)",(user, thread)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"thread": thread, "user": user}) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError, e: + if e[0] == 1062: + return jsonify(code=0, response={"thread": thread, "user": user}) + elif e[0] == 1452: + return jsonify(code=2, response='user or thread not found') + #except: + # return jsonify(code=2,response='bad request') + +@app.route("/db/api/thread/unsubscribe/", methods=["POST"]) +def thread_unsubscribe(): + cursor = connection.cursor() + try: + data = request.get_json() + user = data['user'] + thread = data['thread'] + cursor.execute("delete from subscribes where userEmail = %s and thread = %s",(user, thread)) + connection.commit() + cursor.close() + except KeyError: + return jsonify(code=2, response='invalid json') + #except: + # return jsonify(code=2,response='bad request') + return jsonify(code=0, + response={"thread": thread, "user": user}) + + return "unsubscribe" + +@app.route("/db/api/thread/update/", methods=['POST']) +def thread_update(): + cursor = connection.cursor() + try: + data = request.get_json() + message = data['message'] + slug = data['slug'] + thread = data['thread'] + cursor.execute("update threads set message = %s, slug = %s where id = %s",(message, slug, thread)) + connection.commit() + cursor.close() + return jsonify(code=0, + response=get_thread_info(thread, connection)) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + + +@app.route("/db/api/thread/close/", methods=['POST']) +def thread_close(): + cursor = connection.cursor() + try: + data = request.get_json() + thread = data['thread'] + cursor.execute("update threads set isClosed = 1 where id = %s",(thread,)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"thread": thread}) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/thread/open/", methods=['POST']) +def thread_open(): + cursor = connection.cursor() + try: + data = request.get_json() + thread = data['thread'] + cursor.execute("update threads set isClosed = 0 where id = %s",(thread,)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"thread": thread}) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/thread/remove/", methods=['POST']) +def thread_remove(): + cursor = connection.cursor() + try: + data = request.get_json() + thread = data['thread'] + cursor.execute("""update threads set isDeleted = 1 where id = %s""",(thread,)) + cursor.execute("""update posts set isDeleted = 1 where thread = %s""", (thread,)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"thread": thread}) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/thread/restore/", methods=['POST']) +def thread_restore(): + cursor = connection.cursor() + try: + data = request.get_json() + thread = data['thread'] + cursor.execute("""update threads set isDeleted = 0 where id = %s""",(thread,)) + cursor.execute("""update posts set isDeleted = 0 where thread = %s""", (thread,)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"thread": thread}) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/thread/vote/", methods=['POST']) +def thread_vote(): + cursor = connection.cursor() + try: + data = request.get_json() + vote = data['vote'] + thread = data['thread'] + if vote == 1: + cursor.execute("update threads set likes = likes + 1 where id = %s",(thread,)) + else: + cursor.execute("update threads set dislikes = dislikes + 1 where id = %s",(thread,)) + + connection.commit() + cursor.close() + return jsonify(code=0, + response=get_thread_info(thread, connection)) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/thread/list/", methods=['GET']) +def thread_list(): + cursor = connection.cursor() + try: + user = request.args.get('user', False) + forum = request.args.get('forum', False) + + if ((user and forum) or not (user or forum)): raise Exception('only one') + + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_date = request.args.get('since', "1970-01-01 00:00:01") + + cursor.execute("select max(createDate) from threads") + max_date = cursor.fetchone()[0] + + if user: + query = """select id from threads where userEmail = '{}' """.format(user) + else: + query = """select id from threads where forum = '{}' """.format(forum) + + query += """ and createDate between '{}' and '{}' + order by createDate {} """.format(since_date, max_date, order) + + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_thread_info(i, connection)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + return ("listThreads") + +@app.route("/db/api/thread/listPosts/", methods=['GET']) +def thread_listPosts(): + cursor = connection.cursor() + try: + thread = request.args['thread'] + + limit = request.args.get('limit', '') + sort = request.args.get('sort', 'flat') + order = request.args.get('order', 'desc') + + since_date = request.args.get('since', "1970-01-01 00:00:01") + + cursor.execute("select max(createDate) from posts") + max_date = cursor.fetchone()[0] + + + if sort == 'flat': + query = """select id from posts where thread = {}""".format(thread) + query += """ and createDate between '{}' and '{}' order by """.format(since_date, max_date) + query += 'createDate {} '.format(order) + query += "limit {}".format(limit) if limit != '' else '' + + elif sort == 'tree': + query = """select p2.id from posts as p join posts as p2 on p2.mpath + like CONCAT(p.mpath,'%') and p.parent is null and thread = {} and createDate between '{}' and '{}' + order by p.mpath {} {};""".format(thread, since_date, max_date, order, + "limit {}".format(limit) if limit != '' else '') + else: + query = """select p2.id from posts as p2 join + (select p.mpath, p.id from posts as p where parent is null {} ) as p + on p2.mpath like CONCAT(p.mpath,'%') and thread = {} and createDate between '{}' and '{}' + order by p.mpath {}""".format("limit {}".format(limit) if limit != '' else '', + thread, since_date, max_date, order) + + cursor.execute(query) + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_post_info(i, connection)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + return ("listThreads") + +"""POSTS""" +@app.route('/db/api/post/create/', methods=['POST']) +def post_create(): + cursor = connection.cursor() + try: + data = request.get_json() + + date = data["date"] + thread = data["thread"] + message = data["message"] + user = data["user"] + forum = data["forum"] + + parent = data.get("parent", None) + isApproved = data.get("isApproved", False) + isHighlighted = data.get("isHighlighted", False) + isEdited = data.get("isEdited", False) + isSpam = data.get("isSpam", False) + isDeleted = data.get("isDeleted", False) + cursor.execute("""insert into posts (createDate, forum, isHighlighted, isApproved, + isDeleted, isEdited, isSpam, message, parent, thread, userEmail) + values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s)""", + (date, forum, isHighlighted, isApproved, isDeleted, isEdited, isSpam, + message, parent, thread, user)) + lid = cursor.lastrowid + if parent: + cursor.execute("select mpath from posts where id = {}".format(parent)) + parent_mpath = cursor.fetchone()[0]+right_index(lid) + else: + parent_mpath = right_index(lid) + cursor.execute("update posts set mpath = '{}/' where id = {}".format(parent_mpath,lid)) + cursor.close() + + connection.commit() + return jsonify(code=0, response={ + 'id':lid, + "date": date, + "forum": forum, + "isApproved": isApproved, + "isDeleted": isDeleted, + "isEdited": isEdited, + "isHighlighted": isHighlighted, + "isSpam": isSpam, + "message": message, + "parent": parent, + "thread": thread, + "user": user}) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='user does not exist') + #except IntegrityError, e: + # if e[0] == 1062: + # return jsonify(code=2, response=get_post_info(short_name, connection)) + # elif e[0] == 1452: + # return jsonify(code=2, response='user not found') + #except: + # return jsonify(code=2, response='bad request') + +@app.route("/db/api/post/details/", methods=['GET']) +def post_details(): + try: + post = request.args['post'] + related = request.args.getlist('related') + return jsonify(code=0, response=get_post_info(post, connection, related)) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=1, response='does not exist') + except IntegrityError, e: + return jsonify(code=1, response='something not found') + +@app.route("/db/api/post/remove/", methods=['POST']) +def post_remove(): + cursor = connection.cursor() + try: + data = request.get_json() + post = data['post'] + cursor.execute("update posts set isDeleted = 1 where id = %s",(post,)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"post": post}) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/post/restore/", methods=['POST']) +def post_restore(): + cursor = connection.cursor() + try: + data = request.get_json() + post = data['post'] + cursor.execute("update posts set isDeleted = 0 where id = %s",(post,)) + connection.commit() + cursor.close() + return jsonify(code=0, + response={"post": post}) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/post/vote/", methods=['POST']) +def post_vote(): + cursor = connection.cursor() + try: + data = request.get_json() + vote = data['vote'] + post = data['post'] + if vote == 1: + cursor.execute("update posts set likes = likes + 1 where id = %s",(post,)) + else: + cursor.execute("update posts set dislikes = dislikes + 1 where id = %s",(post,)) + + connection.commit() + cursor.close() + return jsonify(code=0, + response=get_post_info(post, connection)) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + +@app.route("/db/api/post/update/", methods=['POST']) +def post_update(): + cursor = connection.cursor() + try: + data = request.get_json() + post = data['post'] + message = data['message'] + cursor.execute("update posts set message = %swhere id = %s",(message, post)) + connection.commit() + cursor.close() + return jsonify(code=0, + response=get_post_info(post, connection)) + except KeyError: + return jsonify(code=2, response='invalid json') + except IntegrityError: + return jsonify(code=5, response='user alredy exist') + return "thread_update" + + +@app.route("/db/api/post/list/", methods=['GET']) +def post_list(): + cursor = connection.cursor() + try: + thread = request.args.get('thread', False) + forum = request.args.get('forum', False) + + if ((thread and forum) or not (thread or forum)): raise Exception('only one') + + limit = request.args.get('limit', '') + order = request.args.get('order', 'desc') + since_date = request.args.get('since', "1970-01-01 00:00:01") + + cursor.execute("select max(createDate) from posts") + max_date = cursor.fetchone()[0] + + if thread: + query = """select id from posts where thread = {} """.format(thread) + else: + query = """select id from posts where forum = '{}' """.format(forum) + + query += """ and createDate between '{}' and '{}' order by createDate {} """.format(since_date, max_date, order) + + query += "limit {}".format(limit) if limit != '' else '' + cursor.execute(query) + + a = [] + for i in tuple(t[0] for t in cursor.fetchall()): + a.append(get_post_info(i, connection)) + cursor.close() + return jsonify(code=0, response=a) + except KeyError: + return jsonify(code=2, response='invalid json') + except DoesNotExist: + return jsonify(code=2, response='does not exist') + except IntegrityError, e: + return jsonify(code=2, response='something not found') + return ("listThreads") + +"""OTHER""" +@app.route('/db/api/clear/', methods=['POST']) +def clear(): + cursor = connection.cursor() + cursor.execute("""delete from users;"""); + connection.commit() + cursor.close() + return jsonify(code=0, response="OK") + + + +@app.route("/db/api/status/", methods=['GET']) +def status(): + cursor = connection.cursor() + cursor.execute("select count(*) from users") + count_users = cursor.fetchone()[0] + cursor.execute("select count(*) from forums") + count_forums = cursor.fetchone()[0] + cursor.execute("select count(*) from threads") + count_threads = cursor.fetchone()[0] + cursor.execute("select count(*) from posts") + count_posts = cursor.fetchone()[0] + return jsonify(code=0, response={"user":count_users, + "forum":count_forums, + "thread": count_threads, + "posts": count_posts}) + + + + +if __name__ == '__main__': + app.run(debug=True) diff --git a/db_api.sublime-project b/db_api.sublime-project new file mode 100644 index 0000000..78ccb5b --- /dev/null +++ b/db_api.sublime-project @@ -0,0 +1,16 @@ +{ + "folders": + [ + { + "follow_symlinks": true, + "path": "." + } + ], + "settings": { + "python_interpreter": "$project_path/env/bin/python", + "python_package_paths": [ + "$project_path/env/lib/python2.7/site-packages", + ] + } + +} diff --git a/db_api.sublime-workspace b/db_api.sublime-workspace new file mode 100644 index 0000000..f0f8d5c --- /dev/null +++ b/db_api.sublime-workspace @@ -0,0 +1,635 @@ +{ + "auto_complete": + { + "selected_items": + [ + [ + "In", + "IntegrityError class" + ], + [ + "_my", + "_mysql_exceptions module" + ], + [ + "co", + "connection" + ], + [ + "mysq", + "mysql" + ], + [ + "ex", + "execute" + ], + [ + "Ke", + "KeyError class" + ], + [ + "tr", + "try Try/Except" + ], + [ + "ke", + "KeyError class" + ], + [ + "user", + "username" + ], + [ + "us", + "username" + ], + [ + "a", + "about" + ], + [ + "re", + "return keyword" + ], + [ + "is", + "isAnonymous statement" + ], + [ + "f", + "format function" + ], + [ + "pr", + "print keyword" + ], + [ + "fo", + "foreign" + ], + [ + "cre", + "createDate" + ], + [ + "de", + "delete" + ], + [ + "u", + "update" + ], + [ + "c", + "current_timestamp" + ], + [ + "fla", + "flask module" + ], + [ + "i", + "import keyword" + ], + [ + "js", + "jsonify statement" + ], + [ + "mys", + "mysql" + ], + [ + "r", + "route" + ], + [ + "g", + "gameTable_row" + ], + [ + "gam", + "gameTable" + ], + [ + "b", + "bootstrap" + ], + [ + "s", + "src" + ], + [ + "fun", + "fun Function" + ], + [ + "ma", + "mainTmpl" + ], + [ + "fu", + "function" + ], + [ + "lo", + "loads" + ], + [ + "jo", + "joke_dict" + ], + [ + "ge", + "get_weather" + ], + [ + "get", + "get_location" + ], + [ + "rg", + "rgba()" + ] + ] + }, + "buffers": + [ + { + "file": "db_api.py", + "settings": + { + "buffer_size": 1693, + "line_ending": "Unix" + } + }, + { + "file": "migrations/migration_db_v_0_1", + "settings": + { + "buffer_size": 1676, + "line_ending": "Unix" + } + }, + { + "contents": "DISCR = {\n 'forum': {\n 'fields': {\n 'user': '```str``` founder email',\n 'short_name': '```str``` forum slug',\n 'name': '```str``` forum name',\n 'order': \"```str``` sort order (by date). Possible values: ```['desc', 'asc']```. Default: 'desc'\",\n 'limit': \"```int``` return limit\",\n 'forum': '```str``` forum short_name',\n 'since_id': \"```int``` return entities in interval [since_id, max_id]\",\n 'since': \"```str``` include forums created since date. Format: 'YYYY-MM-DD hh-mm-ss'\",\n 'related': \"```array``` include related entities. Possible values: ```['user',]```. Default: []\",\n },\n 'methods': {\n 'create': 'Create new forum',\n 'details': 'Get forum details',\n 'listPosts': 'Get posts from this forum',\n 'listThreads': 'Get threads from this forum',\n 'listUsers': 'Get user with posts on this forum',\n }\n },\n 'post': {\n 'fields': {\n 'user': '```str``` author email',\n 'order': \"```str``` sort order (by date). Possible values: ```['desc', 'asc']```. Default: 'desc'\",\n 'thread': '```int``` thread id of this post',\n 'post': '```int``` post id',\n 'parent': '```int``` id of parent post. Default: None',\n 'forum': '```str``` forum short_name',\n 'message': '```str``` post body',\n 'vote': \"```int``` like/dislike. Possible values: [1, -1]\",\n 'date': \"```str``` date of creation. Format: 'YYYY-MM-DD hh-mm-ss'\",\n 'since': \"```str``` include posts created since date. Format: 'YYYY-MM-DD hh-mm-ss'\",\n 'related': \"```array``` include related entities. Possible values: ```['user', 'thread', 'forum']```. Default: []\",\n 'limit': \"```int``` return limit\",\n 'isSpam': \"```bool``` is post marked as spam\",\n 'isEdited': \"```bool``` is post marked as edited\",\n 'isDeleted': \"```bool``` is post marked as deleted\",\n 'isHighlighted': \"```bool``` is post marked as higlighted\",\n 'isApproved': \"```bool``` is post marked as approved by moderator\",\n },\n 'methods': {\n 'list': 'List posts',\n 'create': 'Create new post',\n 'details': 'Get post details',\n 'remove': 'Mark post as removed',\n 'restore': 'Cancel removal',\n 'update': 'Edit post',\n 'vote': 'like/dislike post',\n }\n },\n 'user': {\n 'fields': {\n 'since': \"```str``` include posts from this user created since date. Format: 'YYYY-MM-DD hh-mm-ss'\",\n 'order': \"```str``` sort order (by name). Possible values: ```['desc', 'asc']```. Default: 'desc'\",\n 'user': '```str``` user email',\n 'username': '```str``` user name',\n 'follower': '```str``` follower email',\n 'followee': '```str``` followee email',\n 'name': '```str``` user name',\n 'limit': \"```int``` return limit\",\n 'since_id': \"```int``` return entities in interval [since_id, max_id]\",\n 'email': '```str``` user email',\n 'isAnonymous': \"```bool``` is user marked as anonymous\",\n 'about': \"```str``` user info\",\n },\n 'methods': {\n 'create': 'Create new user',\n 'details': 'Get user details',\n 'follow': 'Mark one user as folowing other user',\n 'unfollow': 'Mark one user as not folowing other user anymore',\n 'listPosts': 'Get posts from this user',\n 'updateProfile': 'Update profile',\n 'listFollowers': 'Get followers of this user',\n 'listFollowing': 'Get followees of this user',\n }\n },\n 'thread': {\n 'fields': {\n 'thread': '```int``` thread id of this post',\n 'isDeleted': \"```bool``` is thread marked as deleted\",\n 'isClosed': \"```bool``` is thread marked as closed\",\n 'message': '```str``` thread message',\n 'user': '```str``` founder email',\n 'date': \"```str``` date of creation. Format: 'YYYY-MM-DD hh-mm-ss'\",\n 'slug': \"```str``` thread slug\",\n 'title': \"```str``` thread title\",\n 'limit': \"```int``` return limit\",\n 'forum': '```str``` parent forum short_name',\n 'related': \"```array``` include related entities. Possible values: ```['user', 'forum']```. Default: []\",\n 'since': \"```str``` include threads created since date. Format: 'YYYY-MM-DD hh-mm-ss'\",\n 'order': \"```str``` sort order (by date). Possible values: ```['desc', 'asc']```. Default: 'desc'\",\n 'vote': \"```int``` like/dislike. Possible values: [1, -1]\",\n },\n 'methods': {\n 'list': 'List threads',\n 'create': 'Create new thread',\n 'details': 'Get thread details',\n 'remove': 'Mark thread as removed',\n 'open': 'Mark thread as opened',\n 'close': 'Mark thread as closed',\n 'restore': 'Cancel removal',\n 'listPosts': 'Get posts from this thread',\n 'update': 'Edit thread',\n 'subscribe': 'Subscribe user to this thread',\n 'unsubscribe': 'Unsubscribe user from this thread',\n 'vote': 'like/dislike thread',\n }\n }\n}", + "settings": + { + "buffer_size": 4562, + "line_ending": "Unix", + "name": "DISCR = {" + } + }, + { + "contents": "#create user\n\ncurl -H \"Content-Type: application/json\" -d '{\"name\":\"boris\",\"username\":\"boris\"}' http://0.0.0.0:5000/db/api/user/create", + "file": "curls", + "file_size": 0, + "file_write_time": 130703165080000000, + "settings": + { + "buffer_size": 134, + "line_ending": "Unix" + } + } + ], + "build_system": "", + "command_palette": + { + "height": 167.0, + "selected_items": + [ + [ + "py", + "Set Syntax: Python" + ], + [ + "remo", + "Package Control: Remove Package" + ], + [ + "rem", + "Package Control: Remove Package" + ], + [ + "pl", + "Package Control: List Packages" + ], + [ + "pyth", + "Set Syntax: Python" + ], + [ + "ins", + "Package Control: Install Package" + ], + [ + "paca", + "Preferences: Browse Packages" + ], + [ + "insta", + "Package Control: Install Package" + ], + [ + "install", + "Package Control: Install Package" + ] + ], + "width": 449.0 + }, + "console": + { + "height": 348.0, + "history": + [ + "ls -al", + "import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)" + ] + }, + "distraction_free": + { + "menu_visible": true, + "show_minimap": false, + "show_open_files": false, + "show_tabs": false, + "side_bar_visible": false, + "status_bar_visible": false + }, + "expanded_folders": + [ + "/Users/Boris/db_api", + "/Users/Boris/db_api/env", + "/Users/Boris/db_api/migrations" + ], + "file_history": + [ + "/Users/Boris/db_api/db_api.sublime-project", + "/Users/Boris/db_api/migration_db_v_0_1", + "/Users/Boris/db_api/migration_db", + "/Users/Boris/Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings", + "/Users/Boris/db_api/ad_api.sublime-project", + "/Users/Boris/db_api/env/lib/python2.7/site-packages/MySQLdb/__init__.py", + "/usr/local/etc/nginx/nginx.conf", + "/Users/Boris/front_and_java/temp/tp_java/src/main/java/frontend/SignInServlet.java", + "/Users/Boris/front_and_java/temp/tp_java/src/main/java/frontend/SignUpServlet.java", + "/Users/Boris/front_and_java/temp/tp_java/server_tml/admin.tml", + "/Users/Boris/front_and_java/filler_game/public_html/js/collections/scores.js", + "/Users/Boris/front_and_java/filler_game/templates/login.xml", + "/Users/Boris/front_and_java/filler_game/filler_game.iml", + "/Users/Boris/front_and_java/filler_game/templates/registration.xml", + "/Users/Boris/front_and_java/filler_game/public_html/js/views/scoreboard.js", + "/Users/Boris/front_and_java/filler_game/public_html/index.html", + "/Users/Boris/front_and_java/filler_game/templates/addons/header.xml", + "/Users/Boris/front_and_java/filler_game/public_html/js/main.js", + "/Users/Boris/front_and_java/filler_game/templates/game.xml", + "/Users/Boris/front_and_java/filler_game/public_html/js/router.js", + "/Users/Boris/front_and_java/filler_game/public_html/bootstrap/js/bootstrap.min.js", + "/Users/Boris/front_and_java/filler_game/public_html/js/models/score.js", + "/Users/Boris/front_and_java/epicgame/public_html/js/models/score.js", + "/Users/Boris/Desktop/Лаб для бакалавров МП системы Хартов/ПРОГРАММЫ/1_1.asm", + "/Users/Boris/front_and_java/filler_game/gruntfile.js", + "/Users/Boris/front_and_java/filler_game/public_html/js/views/game.js", + "/Users/Boris/front_and_java/epicgame/Gruntfile.js", + "/Users/Boris/front_and_java/epicgame/public_html/js/main.js", + "/Users/Boris/front_and_java/epicgame/public_html/js/router.js", + "/Users/Boris/front_and_java/epicgame/server/server.js", + "/Users/Boris/front_and_java/epicgame/routes/scores.js", + "/Users/Boris/front_and_java/epicgame/public/js/collections/scores.js", + "/Users/Boris/front_and_java/epicgame/public/examples/joystick.js", + "/Users/Boris/front_and_java/epicgame/public/examples/console.js", + "/Users/Boris/front_and_java/epicgame/public/css/main.css", + "/Users/Boris/front_and_java/epicgame/app.js", + "/Users/Boris/front_and_java/epicgame/public_html/js/views/game.js", + "/Users/Boris/front_and_java/filler_game/templates/scoreboard.xml", + "/Users/Boris/front_and_java/filler_game/templates/main.xml", + "/Users/Boris/Downloads/technopark-db-api-master/conf/test.conf", + "/Users/Boris/Desktop/L1.2/public_html/css/main.css", + "/Users/Boris/front_and_java/filler_game/package.json", + "/Users/Boris/Desktop/L1.2/public_html/timer.tml", + "/Users/Boris/Desktop/L1.2/public_html/authform.tml", + "/Users/Boris/Desktop/L1.2/package.json", + "/Users/Boris/Desktop/L1.2/Gruntfile.js", + "/Users/Boris/Desktop/L1.2/L1.2.iml", + "/Users/Boris/Desktop/L1.2/assembly.bat", + "/Users/Boris/Desktop/L1.2/start.bat", + "/Users/Boris/front_and_java/epicgame/package.json", + "/Users/Boris/front_and_java/epicgame/tst/public_html/js/main.js", + "/Users/Boris/front_and_java/epicgame/tst/public_html/js/lib/require.js", + "/Users/Boris/front_and_java/epicgame/gruntfile.js", + "/Users/Boris/front_and_java/epicgame/public_html/js/lib/jquery.js", + "/Users/Boris/front_and_java/epicgame/public_html/index.html", + "/Users/Boris/front_and_java/epicgame/public_html/js/tmpl/game.js", + "/Users/Boris/Downloads/technopark-db-api-master/doc/clear.md", + "/Users/Boris/Downloads/technopark-db-api-master/doc/doc_template.md", + "/Users/Boris/Downloads/technopark-db-api-master/doc/doc_conf.py", + "/Users/Boris/front_and_java/epicgame/node_modules/grunt/README.md", + "/Users/Boris/front_and_java/epicgame/node_modules/grunt/package.json", + "/Users/Boris/front_and_java/epicgame/node_modules/grunt/CONTRIBUTING.md", + "/Users/Boris/Downloads/6_stream.c", + "/Users/Boris/Library/Application Support/Übersicht/widgets/my.widget/index.coffee", + "/Users/Boris/Library/Application Support/Übersicht/widgets/my.widget/location.py", + "/Users/Boris/Library/Application Support/Übersicht/widgets/my.widget/helper.py", + "/Users/Boris/Library/Application Support/Übersicht/widgets/my.widget/my_script.py", + "/Users/Boris/Library/Application Support/Übersicht/widgets/index.coffee", + "/Users/Boris/Library/Application Support/Übersicht/widgets/my_script.py", + "/Users/Boris/Library/Application Support/Übersicht/widgets/weather.widget/index.coffee", + "/Users/Boris/Desktop/my_script.py", + "/Users/Boris/Library/Application Support/Übersicht/widgets/roundClock.widget/index.coffee", + "/Users/Boris/Library/Application Support/Übersicht/widgets/sys-mon-set.widget/mini-top-mem.widget/index.coffee", + "/Users/Boris/Library/Application Support/Übersicht/widgets/sys-mon-set.widget/battery.widget/index.coffee", + "/Users/Boris/Library/Application Support/Übersicht/widgets/sys-mon-set.widget/README.md", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/config.json", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/node_modules/numeral/languages.js", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/node_modules/numeral/bower.json", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/node_modules/config/config.js", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/node_modules/config/component.json", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/youtube.js", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.widget/index.coffee", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/node_modules/numeral/README.md", + "/Users/Boris/Library/Application Support/Übersicht/widgets/youtube/Youtube.command/node_modules/config/package.json", + "/Users/Boris/Downloads/itunes-now.widget/index.coffee", + "/Users/Boris/Library/Application Support/Übersicht/widgets/getting-started.coffee", + "/Users/Boris/Downloads/ipflt/ipflt.sh", + "/Users/Boris/.wine/drive_c/users/Boris/Documents/My Games/Binding of Isaac Rebirth/options.ini", + "/Users/Boris/.wine/drive_c/Program Files/R.G. Gamblers/The Binding of Isaac Rebirth/ALI213.ini", + "/Users/Boris/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim", + "/Users/Boris/.vim/color scheme/desert.vim", + "/Users/Boris/Downloads/cpp11/cpp11.vim", + "/Users/Boris/.vim/cpp.vim", + "/Users/Boris/Desktop/The Binding of Isaac Rebirth.desktop", + "/Users/Boris/Downloads/44100/source/igdc57/igdc57.vcproj", + "/Users/Boris/Documents/ШЛАК/Untitled Model 4.gps", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit1.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit11.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit10.pas", + "/Users/Boris/Desktop/bootstrap.min.css", + "/Users/Boris/Downloads/bootstrap-material.css", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit9.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit8.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit7.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit6.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit5.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit4.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit3.pas", + "/Users/Boris/Desktop/курсач/11проект/Исходные коды/Unit2.pas", + "/Users/Boris/Qt/5.3/clang_64/mkspecs/macx-clang/qmake.conf", + "/Users/Boris/Downloads/apache2.conf", + "/Users/Boris/Desktop/C++/Prog8(Vect)/Vectsolve/Vs.cpp", + "/Users/Boris/Desktop/C++/Prog8(Vect)/Vectsolve/Vheader.h", + "/Users/Boris/Desktop/C++/Prog8(Vect)/Vectsolve/Vheader.cpp", + "/Users/Boris/Desktop/C++/Prog7(Double_linked_list)/Prog7(Double_linked_list)/Prg7.cpp", + "/Users/Boris/Desktop/C++/Prog7(Double_linked_list)/Prog7(Double_linked_list)/DblLinkedList.cpp", + "/Users/Boris/Desktop/C++/Prog7(Double_linked_list)/Prog7(Double_linked_list)/DblLinkedList.h", + "/Users/Boris/Desktop/C++/Prog7(Double_linked_list)/Prog7(Double_linked_list)/Prg7.h", + "/Users/Boris/Kurs/Kurs.pro.user", + "/Volumes/ADATA UFD/11проект/Программа по проекту/Unit1.pas", + "/Applications/Hearthstone/DBF/CARD_BACK.xml", + "/Applications/Hearthstone/DBF/ACHIEVE.xml", + "/Applications/Hearthstone/DBF/WING.xml", + "/Applications/Hearthstone/manifest-achieves.csv", + "/Applications/Hearthstone/manifest-cards.csv", + "/Applications/Hearthstone/Launcher.db", + "/Applications/Hearthstone/Hearthstone.tfil", + "/Applications/Hearthstone/Hearthstone.mfil" + ], + "find": + { + "height": 35.0 + }, + "find_in_files": + { + "height": 93.0, + "where_history": + [ + ] + }, + "find_state": + { + "case_sensitive": false, + "find_history": + [ + "connect", + "cursor", + ");\n", + "datamain", + "print", + "Helve" + ], + "highlight": true, + "in_selection": false, + "preserve_case": false, + "regex": false, + "replace_history": + [ + ], + "reverse": false, + "show_context": true, + "use_buffer2": true, + "whole_word": false, + "wrap": true + }, + "groups": + [ + { + "selected": 1, + "sheets": + [ + { + "buffer": 0, + "file": "db_api.py", + "semi_transient": false, + "settings": + { + "buffer_size": 1693, + "regions": + { + }, + "selection": + [ + [ + 1519, + 1519 + ] + ], + "settings": + { + "syntax": "Packages/Python/Python.tmLanguage" + }, + "translation.x": 0.0, + "translation.y": 350.0, + "zoom_level": 1.0 + }, + "stack_index": 1, + "type": "text" + }, + { + "buffer": 1, + "file": "migrations/migration_db_v_0_1", + "semi_transient": false, + "settings": + { + "buffer_size": 1676, + "regions": + { + }, + "selection": + [ + [ + 1673, + 1673 + ] + ], + "settings": + { + "syntax": "Packages/SQL/SQL.tmLanguage" + }, + "translation.x": 0.0, + "translation.y": 160.0, + "zoom_level": 1.0 + }, + "stack_index": 0, + "type": "text" + }, + { + "buffer": 2, + "semi_transient": false, + "settings": + { + "buffer_size": 4562, + "regions": + { + }, + "selection": + [ + [ + 2142, + 2142 + ] + ], + "settings": + { + "auto_name": "DISCR = {", + "syntax": "Packages/Python/Python.tmLanguage", + "translate_tabs_to_spaces": false + }, + "translation.x": 0.0, + "translation.y": 1259.0, + "zoom_level": 1.0 + }, + "stack_index": 2, + "type": "text" + }, + { + "buffer": 3, + "file": "curls", + "semi_transient": false, + "settings": + { + "buffer_size": 134, + "regions": + { + }, + "selection": + [ + [ + 134, + 14 + ] + ], + "settings": + { + "syntax": "Packages/Python/Python.tmLanguage" + }, + "translation.x": 0.0, + "translation.y": 0.0, + "zoom_level": 1.0 + }, + "stack_index": 3, + "type": "text" + } + ] + } + ], + "incremental_find": + { + "height": 27.0 + }, + "input": + { + "height": 0.0 + }, + "layout": + { + "cells": + [ + [ + 0, + 0, + 1, + 1 + ] + ], + "cols": + [ + 0.0, + 1.0 + ], + "rows": + [ + 0.0, + 1.0 + ] + }, + "menu_visible": true, + "output.exec": + { + "height": 118.0 + }, + "output.find_results": + { + "height": 0.0 + }, + "project": "db_api.sublime-project", + "replace": + { + "height": 50.0 + }, + "save_all_on_build": true, + "select_file": + { + "height": 0.0, + "selected_items": + [ + ], + "width": 0.0 + }, + "select_project": + { + "height": 0.0, + "selected_items": + [ + ], + "width": 0.0 + }, + "select_symbol": + { + "height": 0.0, + "selected_items": + [ + ], + "width": 0.0 + }, + "selected_group": 0, + "settings": + { + }, + "show_minimap": true, + "show_open_files": false, + "show_tabs": true, + "side_bar_visible": true, + "side_bar_width": 285.0, + "status_bar_visible": true, + "template_settings": + { + } +} diff --git a/env/.Python b/env/.Python new file mode 120000 index 0000000..cc24a1e --- /dev/null +++ b/env/.Python @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/Python \ No newline at end of file diff --git a/env/bin/activate b/env/bin/activate new file mode 100644 index 0000000..ba8c3fe --- /dev/null +++ b/env/bin/activate @@ -0,0 +1,80 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + unset pydoc + + # reset old environment variables + if [ -n "$_OLD_VIRTUAL_PATH" ] ; then + PATH="$_OLD_VIRTUAL_PATH" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then + PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # 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" -o -n "$ZSH_VERSION" ] ; then + hash -r 2>/dev/null + fi + + if [ -n "$_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="/Users/Boris/db_api/env" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "$PYTHONHOME" ] ; then + _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" + unset PYTHONHOME +fi + +if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then + _OLD_VIRTUAL_PS1="$PS1" + if [ "x" != x ] ; then + PS1="$PS1" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +alias 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" -o -n "$ZSH_VERSION" ] ; then + hash -r 2>/dev/null +fi diff --git a/env/bin/activate.csh b/env/bin/activate.csh new file mode 100644 index 0000000..8d306cd --- /dev/null +++ b/env/bin/activate.csh @@ -0,0 +1,42 @@ +# 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 "/Users/Boris/db_api/env" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + + +if ("" != "") then + set env_name = "" +else + if (`basename "$VIRTUAL_ENV"` == "__") then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` + else + set env_name = `basename "$VIRTUAL_ENV"` + endif +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/env/bin/activate.fish b/env/bin/activate.fish new file mode 100644 index 0000000..7c7f1c6 --- /dev/null +++ b/env/bin/activate.fish @@ -0,0 +1,74 @@ +# This file must be used with "source bin/activate.fish" *from fish* (http://fishshell.com) +# you cannot run it directly + +function deactivate -d "Exit virtualenv and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + # set an empty local fish_function_path, so fish_prompt doesn't automatically reload + set -l fish_function_path + # erase the virtualenv's fish_prompt function, 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 deactivate + end +end + +# unset irrelevant variables +deactivate nondestructive + +set -gx VIRTUAL_ENV "/Users/Boris/db_api/env" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# unset PYTHONHOME if set +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # copy the current fish_prompt function as the function _old_fish_prompt + functions -c fish_prompt _old_fish_prompt + + # with the original prompt function copied, we can override with our own. + function fish_prompt + # Prompt override? + if test -n "" + printf "%s%s" "" (set_color normal) + _old_fish_prompt + return + end + # ...Otherwise, prepend env + set -l _checkbase (basename "$VIRTUAL_ENV") + if test $_checkbase = "__" + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) + _old_fish_prompt + else + printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) + _old_fish_prompt + end + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/env/bin/activate_this.py b/env/bin/activate_this.py new file mode 100644 index 0000000..f18193b --- /dev/null +++ b/env/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/env/bin/easy_install b/env/bin/easy_install new file mode 100755 index 0000000..a363c22 --- /dev/null +++ b/env/bin/easy_install @@ -0,0 +1,11 @@ +#!/Users/Boris/db_api/env/bin/python + +# -*- 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/env/bin/easy_install-2.7 b/env/bin/easy_install-2.7 new file mode 100755 index 0000000..a363c22 --- /dev/null +++ b/env/bin/easy_install-2.7 @@ -0,0 +1,11 @@ +#!/Users/Boris/db_api/env/bin/python + +# -*- 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/env/bin/pip b/env/bin/pip new file mode 100755 index 0000000..e2ebf75 --- /dev/null +++ b/env/bin/pip @@ -0,0 +1,11 @@ +#!/Users/Boris/db_api/env/bin/python + +# -*- 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/env/bin/pip2 b/env/bin/pip2 new file mode 100755 index 0000000..e2ebf75 --- /dev/null +++ b/env/bin/pip2 @@ -0,0 +1,11 @@ +#!/Users/Boris/db_api/env/bin/python + +# -*- 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/env/bin/pip2.7 b/env/bin/pip2.7 new file mode 100755 index 0000000..e2ebf75 --- /dev/null +++ b/env/bin/pip2.7 @@ -0,0 +1,11 @@ +#!/Users/Boris/db_api/env/bin/python + +# -*- 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/env/bin/python b/env/bin/python new file mode 100755 index 0000000000000000000000000000000000000000..54bad1bf67c3151df32824a17017edb346547521 GIT binary patch literal 34560 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�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®myi~!Mw*lKL3U^#8@EG@gc_l>f)Wc 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å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�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�c6i7Z(;H&yxR=%J*q;`E!=fY;jEd4{`bl=I>X-$j@n;GQJh| zCC5jTM~h>dlgEi`+midmGe?roGmMPIFJt5LdP&XT|ZY$dkm$Ey$C_G4zwBzMN{< zT>ly7XQu3x_jtc=6PLx0iL+{tUlUiqV0<5nYnQP7_`%vI&_4G#roa9;>+`bW@{{C| z;zX6ayEywaIVX;dXMU!MlgqJwoGotrPW#p3gx)8;Pn?>?_+AjFpJ)0$6_@@-Ht&U- z@=h&J|0{_TZH#{-aRV=+n)2L9T%E@7U-}CGun9g6y-! z4e__)qIli|nBI!wUs;@%eY7}!1>@gCT>2~daBJ85dy_3+N&A`N?B(R^#EtXG_le6W z4O1R3S-bc%as4@#=bz$YhUK-wflPn3&hi{7E{OLOC+DHPR~-L{e3m#S|7CIMJ=*UR zr{^ZWVZ*P?>whAy?#uN3Brb~M2dR8#(!Pc`yA|`low&LJQ2E zUi*m~N^jo!-=F@ci%WZu&k<+E*I57J{}VUFFNh1u?+4jx9re zMV$Sf`LB!1Uz2|lC%+`mk93&!yY?-41#uA{J}~!tLvj6|n|!Xgp!D7$ZmdcBGvfMcvzk?^7>1lpE30zIhohn zNSqoV?<`J>vxYI=+*RYT;|*iHR2s(d*;Vo%FEjjo;>K0vSH)SK7j1}ZU(-Hcmg!03 z8#X5WtBB+0Grgn5sbS>Z#En}yo@lfF)gMg}mpWMMBN_rK2V|0d)`a?DS0750B?h^t%kevcK`rz=0=*ktm-;>uL=L~&vo zd78L3g?yU0B>POuitk1nUe~)%92;QxXAI+ho~HfOw`EVQ$Mnt-H|}Hpezx}e$qSEX ze(U#;R}#nj8UM!O+8W$H+(VpPlRRD=i<75`>;K~V$W7vEgZzp(A^u)m{D$_W+L)er zg6UsRTzZP>+e%#jH~o(jXMZJ65-0ydE{e;)kuMXc{~$kL{r^s$Ev}1W?MzQX{+AV} zb-j(ng+Cd7TXAeImdAeLr0m_|RE+i$#8sXDxma9znf32lapEeL$KB#Ae(8R$7|x%F z%SVwv62~Wzf3Wu9yq`%bATu}RYggBn0fBb5J*Z#ymr2n&Qc%}Dp zak0kq-(mR=hJR9A()0JGIQBa4?+@0$(!Xd2uU8pP`�L(zAs)c?+NKJ;bRmc)ddm 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 z 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/_abcoll.py b/env/lib/python2.7/_abcoll.py new file mode 120000 index 0000000..4a595bc --- /dev/null +++ b/env/lib/python2.7/_abcoll.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py \ No newline at end of file diff --git a/env/lib/python2.7/_abcoll.pyc b/env/lib/python2.7/_abcoll.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74853f4a4a59b0821f9d61226f66b81e0235bc5c GIT binary patch literal 26716 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 OJJApR!GF2oGye;AlSNJd literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/_weakrefset.py b/env/lib/python2.7/_weakrefset.py new file mode 120000 index 0000000..b8b09b7 --- /dev/null +++ b/env/lib/python2.7/_weakrefset.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py \ No newline at end of file diff --git a/env/lib/python2.7/_weakrefset.pyc b/env/lib/python2.7/_weakrefset.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce5e00792ee545dce669d39ed19e88d68081b7fa GIT binary patch literal 10494 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 b%9Zv8W=*%gY<@0vh3Sq4tjR*9I5Yo0koAg@ literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/abc.py b/env/lib/python2.7/abc.py new file mode 120000 index 0000000..87956e5 --- /dev/null +++ b/env/lib/python2.7/abc.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py \ No newline at end of file diff --git a/env/lib/python2.7/abc.pyc b/env/lib/python2.7/abc.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3f6e7aedca7d0528849668d78126f807061e053 GIT binary patch literal 6330 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 KcAkCiJO2iGD%L{) literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/codecs.py b/env/lib/python2.7/codecs.py new file mode 120000 index 0000000..b18c8d6 --- /dev/null +++ b/env/lib/python2.7/codecs.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py \ No newline at end of file diff --git a/env/lib/python2.7/codecs.pyc b/env/lib/python2.7/codecs.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f88bd364fca797013a43e88ea1e012601e477c2c GIT binary patch literal 38200 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 z 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 z
VS`$p>&~T6pe$F6Hw$TwuT`12{cq0TQN=JyN*?R1-qW8H zGpNSGn;b)3g`cqa6veTXM6LfB4{ihaKuJ_j3rWx%zPJgK$`692%O@65fh3VkyZ}`* zWA-`34R5iRO4PR{v)yU!|GcP^-Cyz4Db9K-fcqY^?mDkciaufhhw=S^4N;MBe%7xq zIzr;VgLv*&-#vtMV@-qCfx4PFhkVteDQkF{HNIU5S6MJ+3{_#OE1pzMJfsLiuKrSv ztC8fobIgy()pGS#;}jCqrADjKU1+y_ZyqS!^xOWaX1m>LwlB5)_WLd94fW-A_rHjs BqcZ>i literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/distutils/__init__.py b/env/lib/python2.7/distutils/__init__.py new file mode 100644 index 0000000..29fc1da --- /dev/null +++ b/env/lib/python2.7/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/env/lib/python2.7/distutils/__init__.pyc b/env/lib/python2.7/distutils/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7a7d47579e2c53333d5ff482d829267be9cd63f GIT binary patch literal 3736 zcmcgu-)|eo5uQELlqgfy58ILwRSuh44sFL$nxHL;8g1h^NP`4wadzS6g7$FaE#;%g zJLYyJTZP;g`=vnp)PJKuANr^DwLtrQbL7c(o{AWibf>x5+1Z_$Z@%5ezm}J-KKb{< zfy{mu@c);1+}%JV#h;O}NL0&4A~V+q5(RU)AyH#4HzjI{6&YQSQA?uMTwa(9&@^SV zD9_<4kmvBzo)0aFZBt)Qp9#>bJ%)|~DgQ1ukkLg+8#FfgAH;TKv@9tW#{58xZOG`7 zq!$KrzqAMENf{d@q zWJ972nQTh5Ddu!h?3S2E`6i~mrBgrVRQt9>TcQq(jJ73R)J^}*FrjT3e@`Ym5?vFM zBCKmNL>ey23z6p{Uqw5*7_8n=t1d#>5!;n`M{*InA*1ih=v|3^AZdq_qIbpOPxUc` zO&ML6XqTx#=;^Y&Kz?tC-IdXMVsA*SZ%s0c85|{twww6wuInb#sZC1P^+mUDyIJ1#nCFs-?T(8<;)7U=s zVGCb%&v5)69=C=U@LF{UOA|==K&KCA!-rl!!Q=jf*BN?5JL_ms%56DRO)Qe%5g*J( zJ-`aU|7!L*Y6^CSwgT)ioyK!NqXj0Oql+?Xi(k?P(f(pXcx@2OVZ)??3N^5WgDOwV z!IxRz^)5kxrN}tzmq~ewjFnDPbWr3LK2cPc<<2Mhp!)15&N^Rad6hCZ9cLc97b%=4 zn@kh`*x9LP$}rKEUfofx!l=k{1c{WOgctF@w8=Q0mUfsu^~?A!kn=k8p0FBbc{0xa zXyal^47jR7jKSIQu!sMmFZVM@`@hASZvS3UW^O<2$H_F?2j=z>;QsW~KQ8hQ_kOZp z17kmqvpn;0yf-}!37;Ey95W(j#dOTN*$#G%=FTrd8OJ&B7{{8LIGz;g@fe>v^?WC9 zW;;ybE*{79wv2*`fMWI(RR4qkWLHIg1~7nrz>^Jv9M}L1o&~A|Ee6U-KP81eYe)`$ zY*IL%(h?x*OyPH~UsR2e@*nc_BX-3Z+#0$6`(1g~lrzx!5*&57Xe z5p|uJ6GQBhD;UIqW3lTx>3kj?4|_u6M%W0EBe*J;3%&#N2zm&rhD=Q#SVi1v*7TUq%Llx_|S4=x- znJqy5G9Z7&teOD<$EQXbVTjU!N61}UGuQxfC@H!b2*fDxR?*)2Z>kTSWW-_MZ#K&%G2iY(iggel@!9+0Jn(SZO!WSH4HJOi&88B)-ETHz; z9t6Z!UXwGu0Wk;H<~ayn$pH+WH~!Z&fSZ(I!kbt~>6nC@CS@99=>L`qtn~mJn5AN! zslcbEg7y52V}He~qMW~o)RY6V;Wh2g!~%{i+yu!h;21rQNJ5|%@DuKIF#DP$gwLY| z%E%aGXzqT4`IVjC>EMobfLx2NVFc4dBb!(jrgJjk)(%3}YSyQHr~UZl=lAY^9`<;I zdE##ly%|58;G$9WJe!)>8y4l{HNsHfhU$XLq}jlS??9-|1FDkp(CKACk1;ycQxK`- zQThe}{1z5_6~HeA@-+uZb42h8dU@L{OhlHmQ#4Vmc^N zt5m50VDrj~N}HS&D^KC1+s20yVUB#&6iTPF1Clz}k*)QB9~VhFJ1CVB^pyY27oWu_ z&!?X}{B`)1^0FqdCTHz}I4t1NRdAee7}b=pTFgX;~JfdXM81ocC%H!a_oJ zZphMvyj^H*4#2L}3=ZP<68?}wjHF(0Z%|AoXu7@n?xDB7@Cq%Ng>P9Zt=HDG2zB50 zaaQO)v90hu%njeB7e??Z`Go{Xc#DI)JH>HY3}&IeWJnIUO~X4hWL`P=Qu)IVIQnC} z&H<;=cRoK@`McF6=jXi7I_8)pslUxmaNT@hT4pI&HP?d%K(}m~I8HVoFG60ru!7@c bV`onVDg;LNq>$CsucE|h|%|9*A literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/distutils/distutils.cfg b/env/lib/python2.7/distutils/distutils.cfg new file mode 100644 index 0000000..1af230e --- /dev/null +++ b/env/lib/python2.7/distutils/distutils.cfg @@ -0,0 +1,6 @@ +# This is a config file local to this virtualenv installation +# You may include options that will be used by all distutils commands, +# and by easy_install. For instance: +# +# [easy_install] +# find_links = http://mylocalsite diff --git a/env/lib/python2.7/encodings b/env/lib/python2.7/encodings new file mode 120000 index 0000000..8732f85 --- /dev/null +++ b/env/lib/python2.7/encodings @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings \ No newline at end of file diff --git a/env/lib/python2.7/fnmatch.py b/env/lib/python2.7/fnmatch.py new file mode 120000 index 0000000..49b6bc0 --- /dev/null +++ b/env/lib/python2.7/fnmatch.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/fnmatch.py \ No newline at end of file diff --git a/env/lib/python2.7/fnmatch.pyc b/env/lib/python2.7/fnmatch.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0e208ee0c8855f7c40abb81969f83fce3b58db8 GIT binary patch literal 3636 zcmbtWTW=dh6h6C7oY=WGy`+(fI;~XUM6HARKmip>T2fJoMrD(#C>N~F?l|6Lv+L}P zn;0ceMdAgCpU?`P5Wj&Rz*~jHFX0{d&e^r&Rv@9)_KfFp=FH4F-}%mz{+y^jpFCU* zsQ3)w|5Fs>qY8=EQ9Bg66g#wzMv1~93Wq5y)6NjByA(kNgCn$#@lpB~UCdUbQKqme zjS&jRq%lh2xHKxPbG0_XTm9q^-H&3O`1@Mz`!;Ar$&NaVY)hGzj$_sKt<_m#>eXs9 z5rNwM2VX3&EInMlt{yF|tu1>i^Z80`lph3X7P1PPD%;X3P6IzyL7F_(iH*{v-qRBJ zM*o{8KR)!kMp=Ik>R3ociKy))7H3$4&SobGSeH?0TW7x2YP+j!<|iiht?Uh<;@nt` zllUsrJDu3is`{v%X=C^#NR?*!s=AmsAife)7CnC?GXKqb**oW zOxq4jcDn6=rYa1C6SUK$XQpBq&Qp6}RhZ)5NosqiQIW0BSEIl2S+QlftQo~{h#lc( z?hre6+GdN{3i>^J=mC zhiJ%v9fokg!ZkGLv@-9ZyZG4X%q-qbv&bxl+YP@RE$ZayVjOKRw!5~KCO7N17K=O7 zF~YZNv^&|3K8Kd!!kv6{c9z#;U`XhW9hogLNOwJ;zk53ZF+sASgf6>Twbs6#-&wH`X8JG7Bt-kHiW5 zsGsT#Hw7j|#hrY%KkX-7WiS~7do4fn12|R$H;g{m8qmXneF+W-%;$nva>?F?JwZWG zAt!=M36@1RLNFp`qBLYJ{ToL)B&o6724q`y6b(KXEAV(yd@l3Mbbx~hdK^V>30sdt>LQBaO=)`EnZZ|J z%L9BQfo&ObgRt#W`$>s*0OTQoEwBuz_F#(!&b&85*$E-oit%AWs9+q>1`X^DQ?|q1 z-BAhU1m>vFZk3LQMFM&qy3M1~n%fyH3`H+s@&*keqd7L{xx-8_iFJD{xk`7+d6X+}A?}K&b5}Zgj9xi=# zZ|UCW%N|pgzy@T^C@9EZC{3bC=*VxkbrRNCt;{fZjK_Q{yL;n2!Mp`vcVa7hq3NAr zi7KiZN?yGYCwjd628y}LE%%~R2DrxYopC0d3n)|W1bVZmFFNOP*zv8o2<$>M7)B&8 zdPvsk!N}$NW1L|G8~{eQBqIP=$OsIWVcHd>u!Lw47)fhx7dVl%!0}$Cmpy*KZvTr^ zuY-SrxFb1`gA`en$#D$~pz!k*n3J~Q)M40u!An&yg~h9DtYNfRxEAui0_eIDa)>r5shaSFqRMo!%rFo!S- z8A>AYOU@Q-cCoUHB!*mvha2eP=sO24Mc&&3@P2gi%r?giBCo_*$Rf@{Fo#RoV?vbU z)i{fV2bW}`EE9=Lj0{eU%Eb4q{RDJ_U%toBdr86JdR!mR zU#EZEO(&d`p%Pu5g*>#`>Yh)5MJ;kO$zv*dAc>r!t>eMRam5!&1^ykax&Y|6~nhQW8uY+N&2hOxN0 zUc0kz<|V;O&eZk literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/genericpath.py b/env/lib/python2.7/genericpath.py new file mode 120000 index 0000000..7843bce --- /dev/null +++ b/env/lib/python2.7/genericpath.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/genericpath.py \ No newline at end of file diff --git a/env/lib/python2.7/genericpath.pyc b/env/lib/python2.7/genericpath.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3648aac85099417e595a7d0410546fd8ec0dfed6 GIT binary patch literal 3433 zcmcInTW=dh6h6CloZ3m7q%DH-!l(k|R>f8;M1@+)r72Zk0IgdUg^RWEj-74x)|p8f zqvQ!5dEpHn5HCplKz;yx->jXsQ6-=WcINoZea?5TY5aM*^V^vxgOSWWr||m`n*9kR z5!nC@Bnc%8WCKjihq4h$(vYMn$$}&;NfsqJB}rS7j!aI;2Bwze2W-cJWzS&QY0qHs z8P8zLif6EK)ic<>=9!KpXFand$vMv~^9_UUc|PrDkj@ve+frqvP3+RLuxeE1d08k| zs=PE>xvjWRWuevQgU))Xiqfeat5uR3J#yK!r_}u|PAXgJQ94dX*p}>M+Nw0KO5<>V zR&iCCvNCDxbZ5L%jOv@lrpz&&+SwK^&8^OMwe5A%zwr6YE#ryxiz=hX>7Hw0K<}m2 zSx1N`+Tq=~o_BEc(@yR?i}f;_ey806_|)R@{+!f~(@c*7466~V2a3#20Lb_^i? zG|m9wxHM|hl-s&ccA9UN8L-RJV%v845Ep`!7N_H6$mpN0jRB;b_DA^1`({V``+biW zb}=uW*muG8A6RW{|C7?Bwx4Vc<0|dzVz-~AoBe9)w#wpK?|Oft3vJR7_xGx4M1fY& zYzIWbMz9vF1`C15iZ46F>IOQ~bI)OQ5XcdrV%Tn zCp%ee6m`|5`XeenYLoDF(GrNGmIuRogXqp(&s#TyA?hw48=d9~a@L&$IK1n1o;C;P z-2VyAP25ylj&jhoO2^)(sHq~(HSifjzjRo5s<*YYn9LlsG}GQcW43-Til}T4mh-k8 zt+J1HTtlM5-bQ;7R=kN?@lMAJpY=F6+RQqxVrC8if(ad2m19^2E#eB~XPnWA+MKG= z_UJ6#OTBJ`yACa7ZWG*Gdkd#{05LoXLFo~FG)svjJd7&;LO{y@jDT5;7y{#EH1$DQ zF^>IrktreFfV;iS(RqxVgscoo3@tAq>j&6&RMvPj(iRqc94UPkI9VyFx%XdA%8#Fy z5-BN8Vi&6svgrg#^*ECH6nCA7U z!Uy2w^C)NO=XLgEL6Mb!5i4fJN~Yt4K@Z&uwMyaeLRdP*LXH;6)1v;3_Z;(vE_QMj zJi1P`j6->yAFkFv*L)OAJsq8d$KVEGeP9{pBy34DSjP7P6322dBF^+yzV$Ym{R0HB zJ_7Y<62nl;d-K7N5Fadf^f8583aFb>9PVoP1ufafUsJZ5Vtyq9?Y(-iD0?5u{vzkL zMa(Ze6x|C@3DxtX@3%y8xFv6l5r{F3t=F;j@wZ6s{uEaFks63vkO&pO|ZrV$!>*zI*I@!_6%{VQRhzY$*C3vM* z-d?P(e4!X;ZqDLFvRsJYdqsi)79jPKy3a|xtM0J&nCBTk(#60rv#K}Zp(Wn9{sGRj z6iHeuK`U4Z&W0<&a@Ya48k`N*!mh7>ShWm?NjVx0kL1PSFwQcJdTh8X@?{pWiD;S; yBVk12jL;;y4DwV8&%Jb|>5;ry|IcuXH(Dy9Mel$VD+}$V_Hw)3Uhv;md+l$7GzEzO literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/lib-dynload b/env/lib/python2.7/lib-dynload new file mode 120000 index 0000000..24c555e --- /dev/null +++ b/env/lib/python2.7/lib-dynload @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload \ No newline at end of file diff --git a/env/lib/python2.7/linecache.py b/env/lib/python2.7/linecache.py new file mode 120000 index 0000000..1f79a61 --- /dev/null +++ b/env/lib/python2.7/linecache.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/linecache.py \ No newline at end of file diff --git a/env/lib/python2.7/linecache.pyc b/env/lib/python2.7/linecache.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e77eac7c5eddae19402718314589b521b87be11 GIT binary patch literal 3313 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/re.py b/env/lib/python2.7/re.py new file mode 120000 index 0000000..b1a8e65 --- /dev/null +++ b/env/lib/python2.7/re.py @@ -0,0 +1 @@ +/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py \ No newline at end of file diff --git a/env/lib/python2.7/re.pyc b/env/lib/python2.7/re.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7dcbedf1235db458736a940b1aec5f2bf2a7ad4 GIT binary patch literal 13451 zcmcIqOLN@DcJ3LzM2Zq^$=1V$k0}4R@<)|_Lis0^Kc@WWl>fZ)PbvSj@?TK?i^@Nv{IkkG zr~LD3{j92i$V;j=pn|g698~?aAyqpj7sI$1QMKc8F^Y>5s&-N?#&GeRsy#0kr*Lsv z)n1T`7jbb$)y~SrIb57qwU^}LWmS7c8n3F_tIB^_`LC$&u)|+T`&DUQkTxFuN_~e7 z>-_S9TwcsCwOo$NcKs>I1&mws=k2;9Zx zujTTR^50P3f#nssc}Z?wR>7OfuW)4Tit;Z@hY1y;+f_MFs$fcXg5l`-vii0xou`$5 zMb)k;e?o>_SN>ILyruj}X}qocDQUcuOY(-Q-BA9t+$eONlk zVf=OW_*SVeYVQ*n)ymrh%%4svRqeFfagyn^IMGS4-f6mt4tCo~kfvcArMlwGU!EKp zS=k6v-HQEAGtliM-VXgBJ*2;GxtX^SM(a9m2Z@^ri8O45B%8$}*+!fOn5z@{I*jyk zkTfT?UdVK6mXYd4oNeg$t~SCBVc?LpK6W zk2QMOLf~u9jkFg>nTz?NPP3^Sdl}Xa;v?RMo46jRq&n_oDfXmE>3&tuROc2JbmB(q z0XFX(!k1pMvgWiMc%j>r^~8xEMsBjFyE9CV+>O&rAM#{EH^Z$!kI#%x=y4Y(NMd{% zziwjI1OBy}L7I&mBA*Yr;yo>0_6+xVr~4(<{a{4nZ+vo`KU&`<41~))JOHk|pbfd|DA;L+5m?K< z<6j>bWM*~&%6P438MgQ9hx87Blzn~4!_5wM(+B`;!$v!)b~BllQ_CNx`yK&1*_#I@ znyu&b%R%&!z9kDBTKN=vKDjW*R`>2?0yt zyLO>vZnU?LD(om+S%V3WZys@cqT) zuy7mkcFw)kRkQ2)5Tb{*OFg#@tR4bv2s;heBew~AQ9MtBN1Y(@EVVDcva(%>{E!+Z zT?4^xS49q>U`9X>xe|M8VFI8QePI{7guIxl-wL9PXi9_3;_|VT+sxzH3GF3;nKuI7 z45)e#6_{Pl5F)c?cx7^O@^UZ7xeN>qqrwKZq0)nx^JX;1Mu7310nASIaR zU>nw!>LI%C!=X&%f)Im59&C&TPmOtW^@Uwt0*PI2rxi$55;3mxw?AS+^qo?g z=9DfTN+};_tP$zu{coD7duBFf4m-f6xQa^4SX>}_7k8UMw4QAg!n$cD>=_@$8T>R& zQy_Fj-aj^fJ&zj0jz1mFqTZzQ(^^lLjRm+i!UKwJIA4~JFaHf_1vysV?R zpoyR)NOr;$LPsdnwPm?2fF^*^Aszgh9;bm}@Z$DpwHP%{&_u5h!7(Erv)1oN1%w>= z6C3s6pb4%|E)fW%ou-%sC`OO2lYSatDF}P=*v80jHR`k)z+b^Jb}iJ{T2{j{dyxX1 z2$(p^l9;ia%0(DQ%{_QiVOyF##b2-1eqhv7-0o`Qz!)wzXtgs0I)Y(?@k8c^H8-Jv zt9QUuyYShcM2_sAsx4`uRi%+nlsns}EzK+hnDAZ1-}+NDG+R&W&sZj>-5pEOYR4=WsisIeLm0Fd22IHU zT;q3i+}I2}lV}GnSTFK4bQtD^h%EG+ZMcOb!w9l;F~NGUdrv5sA?;4GjsY0bgaCz6 zhv31(M3zY=%*BA&9E7r2DtE6=ru%m}QjH-V>kXk%dJ*wbpvf!<6_g2H#&?Sy)_H!t4@*ix9AO0&SnRFh520!(F3z zi;VU1e&ZqQ;f{9#;0C{9fqJyebSTc_NM3tqw9d-TWpmZ;WI5%hOv=fg;z41?Z{J&) zSp@6&$GkkBm+q=Cigb8@JPc{%H9G=VQMumy{GryL&pWgCC^7skNIp)&)D-19X`cjZ2 zal)cS_`mpD$_7yJ5*}oOtbK{q%lg>tG_rp48%ZxQC)p5gS=%6OtE19GlrKAm9vQ+C zCOSgYs909Q{RKHM%K5IGt8#uQ=lj_R`xL4mqm56?hVi68sXQ=}ltoxUNZYbf79^WZ zxy9>~*C(%`)~J-n&E>}&+UXgbGNm5lKPrwW*Ot`d5=)QO3fG)I!f6FnD_Wd(8^Im1 zP}JF;8t6?}YYkxwQuiA?N#~HF1sZ`lLTZtL-hr}68E~?KsLA<4hSk+X%E;z11&5WRwi1yO$&L;%#|K31G9l8X^X zxp<=jHXfk$l*HMDJa%yJ7VHLrA(UD=sA(IWF%TenD-@7GKnxkj3Km39JQUlrqoRVd z{4EZHiXrc3qT)ZhsBrc5t62xdEy+TG3JSV{8f`sK@l4!j>j&Kj%#8oPAtm(VPT~b3 zj(rFdC?T(6c_v4f4N>jNih$J&&SPW=TBYQ>69739zWyjKg+z`dRD+%!mqGz`27x9} zofG?su$1988fVHur8Rs1L0Is43TA=5}ix(5w(9$OwL_U6!|^Jih0 z?@gq}gjh{%Co@b~Oq1swaE{uQ;rX;?9A9@q%cSH5V`%x#^n|7axr?c%SyDn^1CfTz z4AqN}9oQuxFl014FIA;{{alragyEy?vWyga4A!QQl)|D=!-uPrgJ(fT8X zYs_W-nJeTjRN3R1e_XX}h=CzCgi!xm+|9%mvgI@C=b&_)U4OKQuw(*q&R6$XRWQK? z$7RQhn{_&fZuBXwXAVJ`dHpMnlm<+dM@og5ctdveJQ{_VkW$TdMRkLH3Q^_xS)Ru9 zgxdO7kA3Xe`Hht~-TW`N}Agix&TRw>p4NW3J_=U8gMU}z_etnbMdrMDOj5Fv zO8-)UVUXqT%6z)m4wDX_yUk88&mxl8w=@az`h>tLOwA$$iYpi-T^)+tk+_Pp@(mCHQ@=a& zaBgPqvw273s=`jPs;yv8h>1bv1u@$0ItIDkJ_1^4%>INUeFG;|K3f_CQu}d?0k>ml z@w%^c2EQjtr*Od7vL{hnAop)@0pzk;Bz6Rdg`_P+VLjkUEJVe)5MO<2Q|t>MMtqel zz6Jzeb>OQX_!=Pmh)LpWkW&y}LxQirkQt8^_`(AzT;1es;z*Y&oYFe`3NH%dYFv5fR{t4FckamiCghd zIrL0N*dbkY-ApkA>{^d~%6M$t%+#DyBxK-o5I(R@*a1nYfjT`BlE zxP?u)Q?v)^#vTu<`k>l%2)^52{YE_Rka_}NI-oX(q&M2=+D~JHn*?m1I!iKesY9dz zjWk?c7wtrk(xVymU|)aEbG(NfzQ%@j4D1`o)t#W1HPgVz*6~3$IA$FzUu+1vq&7b5 z%q-1)CcdkBe|C9hWo6!365XgURuOAtyqGw?EOkD`ZRZZ3Q4Y;u7vI`Oq8D;w*?eIu zWeAx8LK6XE1YwKq7Ke-vRo9#a_951~ zOERYTGVaOL?TrL43C$|xrT7uBNVTiiQE|-b_16eSYK4Lm94-&S9S)aH!yUd=K3%$K z>=-dcy%1de2O0#9Sl>-F5JZV@EMBHSrvNix58~VXy@Xf>T!Sk8L@hH~8dQj$2|2(8 zUJx!1_HNZY12MQx^uU+-Wp(a6PUitXZ2d7l(Z?`!{evJ7yTB@dMniFk6!8?DIR`qM zAo5=%(1R-l4EX?P9#D_23fN&72h;_CHHQ>-rvx(+m(-E!HJkOiakan2Gv^*p>?HvV z;2^>izss+LQLex@V}ujxF2GMB$PhdT91Nvp5|JVu(PAnrj*!Qta<1Scp-)TBn+_*D zg23s72)t_)_8YiRh<=7kFXG&X-$99p7#E#`;D>QWG>>1Cff%&#tFwAtpkJ?>@8Iio zhknLc#i_eEX+3jRF%KH!TpgDR5S}yyKfskRvtIXO5Azd->0WA-ijLks6)BlKyl%gM zMDNq+P<7_(pDxbasdwKtI`k5b*aSuhMGx}=(qT65NP^8S#Z&vb(cuv1MVzuzy^o7m zmd+?U@R`IP#rWIuKH6ch?Qmh)KI-{N3fn85p#2KB7qSI}+m+ z{cg|C-oGP|la`70(A&H!bLd(e^3Wll9r{iY=|-??xn@wvGLZ@8iDU_q1mXCI?;Cui z5M&Nf%5<6{G(BTNRyhDQ5w hw;u{p9v&Mk4VKT92g}1}hR22nhDS%s!+oa*{tuK{Ub6rI literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/PKG-INFO b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/PKG-INFO new file mode 100644 index 0000000..1ff4f1a --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/PKG-INFO @@ -0,0 +1,58 @@ +Metadata-Version: 1.1 +Name: Flask +Version: 0.10.1 +Summary: A microframework based on Werkzeug, Jinja2 and good intentions +Home-page: http://github.com/mitsuhiko/flask/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +License: BSD +Description: + Flask + ----- + + Flask is a microframework for Python based on Werkzeug, Jinja 2 and good + intentions. And before you ask: It's BSD licensed! + + Flask is Fun + ```````````` + + .. code:: python + + from flask import Flask + app = Flask(__name__) + + @app.route("/") + def hello(): + return "Hello World!" + + if __name__ == "__main__": + app.run() + + And Easy to Setup + ````````````````` + + .. code:: bash + + $ pip install Flask + $ python hello.py + * Running on http://localhost:5000/ + + Links + ````` + + * `website `_ + * `documentation `_ + * `development version + `_ + + +Platform: any +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/SOURCES.txt b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/SOURCES.txt new file mode 100644 index 0000000..e326cfc --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/SOURCES.txt @@ -0,0 +1,238 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +Makefile +README +run-tests.py +setup.cfg +setup.py +Flask.egg-info/PKG-INFO +Flask.egg-info/SOURCES.txt +Flask.egg-info/dependency_links.txt +Flask.egg-info/not-zip-safe +Flask.egg-info/requires.txt +Flask.egg-info/top_level.txt +artwork/.DS_Store +artwork/LICENSE +artwork/logo-full.svg +docs/.gitignore +docs/Makefile +docs/advanced_foreword.rst +docs/api.rst +docs/appcontext.rst +docs/becomingbig.rst +docs/blueprints.rst +docs/changelog.rst +docs/conf.py +docs/config.rst +docs/contents.rst.inc +docs/design.rst +docs/errorhandling.rst +docs/extensiondev.rst +docs/extensions.rst +docs/flaskdocext.py +docs/flaskext.py +docs/flaskstyle.sty +docs/foreword.rst +docs/htmlfaq.rst +docs/index.rst +docs/installation.rst +docs/latexindex.rst +docs/license.rst +docs/logo.pdf +docs/make.bat +docs/python3.rst +docs/quickstart.rst +docs/reqcontext.rst +docs/security.rst +docs/shell.rst +docs/signals.rst +docs/styleguide.rst +docs/templating.rst +docs/testing.rst +docs/unicode.rst +docs/upgrading.rst +docs/views.rst +docs/_static/debugger.png +docs/_static/flask.png +docs/_static/flaskr.png +docs/_static/logo-full.png +docs/_static/no.png +docs/_static/touch-icon.png +docs/_static/yes.png +docs/_templates/sidebarintro.html +docs/_templates/sidebarlogo.html +docs/_themes/.git +docs/_themes/.gitignore +docs/_themes/LICENSE +docs/_themes/README +docs/_themes/flask_theme_support.py +docs/_themes/flask/layout.html +docs/_themes/flask/relations.html +docs/_themes/flask/theme.conf +docs/_themes/flask/static/flasky.css_t +docs/_themes/flask/static/small_flask.css +docs/_themes/flask_small/layout.html +docs/_themes/flask_small/theme.conf +docs/_themes/flask_small/static/flasky.css_t +docs/deploying/cgi.rst +docs/deploying/fastcgi.rst +docs/deploying/index.rst +docs/deploying/mod_wsgi.rst +docs/deploying/uwsgi.rst +docs/deploying/wsgi-standalone.rst +docs/patterns/apierrors.rst +docs/patterns/appdispatch.rst +docs/patterns/appfactories.rst +docs/patterns/caching.rst +docs/patterns/celery.rst +docs/patterns/deferredcallbacks.rst +docs/patterns/distribute.rst +docs/patterns/errorpages.rst +docs/patterns/fabric.rst +docs/patterns/favicon.rst +docs/patterns/fileuploads.rst +docs/patterns/flashing.rst +docs/patterns/index.rst +docs/patterns/jquery.rst +docs/patterns/lazyloading.rst +docs/patterns/methodoverrides.rst +docs/patterns/mongokit.rst +docs/patterns/packages.rst +docs/patterns/requestchecksum.rst +docs/patterns/sqlalchemy.rst +docs/patterns/sqlite3.rst +docs/patterns/streaming.rst +docs/patterns/templateinheritance.rst +docs/patterns/urlprocessors.rst +docs/patterns/viewdecorators.rst +docs/patterns/wtforms.rst +docs/tutorial/css.rst +docs/tutorial/dbcon.rst +docs/tutorial/dbinit.rst +docs/tutorial/folders.rst +docs/tutorial/index.rst +docs/tutorial/introduction.rst +docs/tutorial/schema.rst +docs/tutorial/setup.rst +docs/tutorial/templates.rst +docs/tutorial/testing.rst +docs/tutorial/views.rst +examples/.DS_Store +examples/blueprintexample/blueprintexample.py +examples/blueprintexample/blueprintexample_test.py +examples/blueprintexample/simple_page/__init__.py +examples/blueprintexample/simple_page/simple_page.py +examples/blueprintexample/simple_page/templates/pages/hello.html +examples/blueprintexample/simple_page/templates/pages/index.html +examples/blueprintexample/simple_page/templates/pages/layout.html +examples/blueprintexample/simple_page/templates/pages/world.html +examples/flaskr/README +examples/flaskr/flaskr.py +examples/flaskr/flaskr_tests.py +examples/flaskr/schema.sql +examples/flaskr/static/style.css +examples/flaskr/templates/layout.html +examples/flaskr/templates/login.html +examples/flaskr/templates/show_entries.html +examples/jqueryexample/jqueryexample.py +examples/jqueryexample/templates/index.html +examples/jqueryexample/templates/layout.html +examples/minitwit/README +examples/minitwit/minitwit.py +examples/minitwit/minitwit_tests.py +examples/minitwit/schema.sql +examples/minitwit/static/style.css +examples/minitwit/templates/layout.html +examples/minitwit/templates/login.html +examples/minitwit/templates/register.html +examples/minitwit/templates/timeline.html +examples/persona/.DS_Store +examples/persona/persona.py +examples/persona/static/.DS_Store +examples/persona/static/persona.js +examples/persona/static/spinner.png +examples/persona/static/style.css +examples/persona/templates/index.html +examples/persona/templates/layout.html +flask/__init__.py +flask/_compat.py +flask/app.py +flask/blueprints.py +flask/config.py +flask/ctx.py +flask/debughelpers.py +flask/exthook.py +flask/globals.py +flask/helpers.py +flask/json.py +flask/logging.py +flask/module.py +flask/sessions.py +flask/signals.py +flask/templating.py +flask/testing.py +flask/views.py +flask/wrappers.py +flask/ext/__init__.py +flask/testsuite/__init__.py +flask/testsuite/appctx.py +flask/testsuite/basic.py +flask/testsuite/blueprints.py +flask/testsuite/config.py +flask/testsuite/deprecations.py +flask/testsuite/examples.py +flask/testsuite/ext.py +flask/testsuite/helpers.py +flask/testsuite/regression.py +flask/testsuite/reqctx.py +flask/testsuite/signals.py +flask/testsuite/subclassing.py +flask/testsuite/templating.py +flask/testsuite/testing.py +flask/testsuite/views.py +flask/testsuite/static/index.html +flask/testsuite/templates/_macro.html +flask/testsuite/templates/context_template.html +flask/testsuite/templates/escaping_template.html +flask/testsuite/templates/mail.txt +flask/testsuite/templates/simple_template.html +flask/testsuite/templates/template_filter.html +flask/testsuite/templates/template_test.html +flask/testsuite/templates/nested/nested.txt +flask/testsuite/test_apps/config_module_app.py +flask/testsuite/test_apps/flask_newext_simple.py +flask/testsuite/test_apps/importerror.py +flask/testsuite/test_apps/main_app.py +flask/testsuite/test_apps/blueprintapp/__init__.py +flask/testsuite/test_apps/blueprintapp/apps/__init__.py +flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.py +flask/testsuite/test_apps/blueprintapp/apps/admin/static/test.txt +flask/testsuite/test_apps/blueprintapp/apps/admin/static/css/test.css +flask/testsuite/test_apps/blueprintapp/apps/admin/templates/admin/index.html +flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.py +flask/testsuite/test_apps/blueprintapp/apps/frontend/templates/frontend/index.html +flask/testsuite/test_apps/config_package_app/__init__.py +flask/testsuite/test_apps/flask_broken/__init__.py +flask/testsuite/test_apps/flask_broken/b.py +flask/testsuite/test_apps/flask_newext_package/__init__.py +flask/testsuite/test_apps/flask_newext_package/submodule.py +flask/testsuite/test_apps/flaskext/__init__.py +flask/testsuite/test_apps/flaskext/oldext_simple.py +flask/testsuite/test_apps/flaskext/oldext_package/__init__.py +flask/testsuite/test_apps/flaskext/oldext_package/submodule.py +flask/testsuite/test_apps/lib/python2.5/site-packages/SiteEgg.egg +flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.py +flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.py +flask/testsuite/test_apps/moduleapp/__init__.py +flask/testsuite/test_apps/moduleapp/apps/__init__.py +flask/testsuite/test_apps/moduleapp/apps/admin/__init__.py +flask/testsuite/test_apps/moduleapp/apps/admin/static/test.txt +flask/testsuite/test_apps/moduleapp/apps/admin/static/css/test.css +flask/testsuite/test_apps/moduleapp/apps/admin/templates/index.html +flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.py +flask/testsuite/test_apps/moduleapp/apps/frontend/templates/index.html +flask/testsuite/test_apps/path/installed_package/__init__.py +flask/testsuite/test_apps/subdomaintestmodule/__init__.py +flask/testsuite/test_apps/subdomaintestmodule/static/hello.txt \ No newline at end of file diff --git a/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/dependency_links.txt b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/installed-files.txt b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/installed-files.txt new file mode 100644 index 0000000..f78239e --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/installed-files.txt @@ -0,0 +1,148 @@ +../flask/__init__.py +../flask/_compat.py +../flask/app.py +../flask/blueprints.py +../flask/config.py +../flask/ctx.py +../flask/debughelpers.py +../flask/exthook.py +../flask/globals.py +../flask/helpers.py +../flask/json.py +../flask/logging.py +../flask/module.py +../flask/sessions.py +../flask/signals.py +../flask/templating.py +../flask/testing.py +../flask/views.py +../flask/wrappers.py +../flask/ext/__init__.py +../flask/testsuite/__init__.py +../flask/testsuite/appctx.py +../flask/testsuite/basic.py +../flask/testsuite/blueprints.py +../flask/testsuite/config.py +../flask/testsuite/deprecations.py +../flask/testsuite/examples.py +../flask/testsuite/ext.py +../flask/testsuite/helpers.py +../flask/testsuite/regression.py +../flask/testsuite/reqctx.py +../flask/testsuite/signals.py +../flask/testsuite/subclassing.py +../flask/testsuite/templating.py +../flask/testsuite/testing.py +../flask/testsuite/views.py +../flask/testsuite/static/index.html +../flask/testsuite/templates/_macro.html +../flask/testsuite/templates/context_template.html +../flask/testsuite/templates/escaping_template.html +../flask/testsuite/templates/mail.txt +../flask/testsuite/templates/simple_template.html +../flask/testsuite/templates/template_filter.html +../flask/testsuite/templates/template_test.html +../flask/testsuite/templates/nested/nested.txt +../flask/testsuite/test_apps/config_module_app.py +../flask/testsuite/test_apps/flask_newext_simple.py +../flask/testsuite/test_apps/importerror.py +../flask/testsuite/test_apps/main_app.py +../flask/testsuite/test_apps/blueprintapp/__init__.py +../flask/testsuite/test_apps/blueprintapp/apps/__init__.py +../flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.py +../flask/testsuite/test_apps/blueprintapp/apps/admin/static/test.txt +../flask/testsuite/test_apps/blueprintapp/apps/admin/static/css/test.css +../flask/testsuite/test_apps/blueprintapp/apps/admin/templates/admin/index.html +../flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.py +../flask/testsuite/test_apps/blueprintapp/apps/frontend/templates/frontend/index.html +../flask/testsuite/test_apps/config_package_app/__init__.py +../flask/testsuite/test_apps/flask_broken/__init__.py +../flask/testsuite/test_apps/flask_broken/b.py +../flask/testsuite/test_apps/flask_newext_package/__init__.py +../flask/testsuite/test_apps/flask_newext_package/submodule.py +../flask/testsuite/test_apps/flaskext/__init__.py +../flask/testsuite/test_apps/flaskext/oldext_simple.py +../flask/testsuite/test_apps/flaskext/oldext_package/__init__.py +../flask/testsuite/test_apps/flaskext/oldext_package/submodule.py +../flask/testsuite/test_apps/lib/python2.5/site-packages/SiteEgg.egg +../flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.py +../flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.py +../flask/testsuite/test_apps/moduleapp/__init__.py +../flask/testsuite/test_apps/moduleapp/apps/__init__.py +../flask/testsuite/test_apps/moduleapp/apps/admin/__init__.py +../flask/testsuite/test_apps/moduleapp/apps/admin/static/test.txt +../flask/testsuite/test_apps/moduleapp/apps/admin/static/css/test.css +../flask/testsuite/test_apps/moduleapp/apps/admin/templates/index.html +../flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.py +../flask/testsuite/test_apps/moduleapp/apps/frontend/templates/index.html +../flask/testsuite/test_apps/path/installed_package/__init__.py +../flask/testsuite/test_apps/subdomaintestmodule/__init__.py +../flask/testsuite/test_apps/subdomaintestmodule/static/hello.txt +../flask/__init__.pyc +../flask/_compat.pyc +../flask/app.pyc +../flask/blueprints.pyc +../flask/config.pyc +../flask/ctx.pyc +../flask/debughelpers.pyc +../flask/exthook.pyc +../flask/globals.pyc +../flask/helpers.pyc +../flask/json.pyc +../flask/logging.pyc +../flask/module.pyc +../flask/sessions.pyc +../flask/signals.pyc +../flask/templating.pyc +../flask/testing.pyc +../flask/views.pyc +../flask/wrappers.pyc +../flask/ext/__init__.pyc +../flask/testsuite/__init__.pyc +../flask/testsuite/appctx.pyc +../flask/testsuite/basic.pyc +../flask/testsuite/blueprints.pyc +../flask/testsuite/config.pyc +../flask/testsuite/deprecations.pyc +../flask/testsuite/examples.pyc +../flask/testsuite/ext.pyc +../flask/testsuite/helpers.pyc +../flask/testsuite/regression.pyc +../flask/testsuite/reqctx.pyc +../flask/testsuite/signals.pyc +../flask/testsuite/subclassing.pyc +../flask/testsuite/templating.pyc +../flask/testsuite/testing.pyc +../flask/testsuite/views.pyc +../flask/testsuite/test_apps/config_module_app.pyc +../flask/testsuite/test_apps/flask_newext_simple.pyc +../flask/testsuite/test_apps/importerror.pyc +../flask/testsuite/test_apps/main_app.pyc +../flask/testsuite/test_apps/blueprintapp/__init__.pyc +../flask/testsuite/test_apps/blueprintapp/apps/__init__.pyc +../flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.pyc +../flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.pyc +../flask/testsuite/test_apps/config_package_app/__init__.pyc +../flask/testsuite/test_apps/flask_broken/__init__.pyc +../flask/testsuite/test_apps/flask_broken/b.pyc +../flask/testsuite/test_apps/flask_newext_package/__init__.pyc +../flask/testsuite/test_apps/flask_newext_package/submodule.pyc +../flask/testsuite/test_apps/flaskext/__init__.pyc +../flask/testsuite/test_apps/flaskext/oldext_simple.pyc +../flask/testsuite/test_apps/flaskext/oldext_package/__init__.pyc +../flask/testsuite/test_apps/flaskext/oldext_package/submodule.pyc +../flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.pyc +../flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.pyc +../flask/testsuite/test_apps/moduleapp/__init__.pyc +../flask/testsuite/test_apps/moduleapp/apps/__init__.pyc +../flask/testsuite/test_apps/moduleapp/apps/admin/__init__.pyc +../flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.pyc +../flask/testsuite/test_apps/path/installed_package/__init__.pyc +../flask/testsuite/test_apps/subdomaintestmodule/__init__.pyc +./ +dependency_links.txt +not-zip-safe +PKG-INFO +requires.txt +SOURCES.txt +top_level.txt diff --git a/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/not-zip-safe b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/requires.txt b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/requires.txt new file mode 100644 index 0000000..bfe5189 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/requires.txt @@ -0,0 +1,3 @@ +Werkzeug>=0.7 +Jinja2>=2.4 +itsdangerous>=0.21 diff --git a/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/top_level.txt b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/top_level.txt new file mode 100644 index 0000000..7e10602 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info/top_level.txt @@ -0,0 +1 @@ +flask diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7-nspkg.pth b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7-nspkg.pth new file mode 100644 index 0000000..1d5f762 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7-nspkg.pth @@ -0,0 +1 @@ +import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('flaskext',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('flaskext', types.ModuleType('flaskext'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p) diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/PKG-INFO b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/PKG-INFO new file mode 100644 index 0000000..22003ff --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/PKG-INFO @@ -0,0 +1,17 @@ +Metadata-Version: 1.1 +Name: Flask-MySQL +Version: 1.2 +Summary: Flask simple mysql client +Home-page: https://github.com/cyberdelia/flask-mysql/ +Author: Timothee Peignier +Author-email: timothee.peignier@tryphon.org +License: BSD +Description: UNKNOWN +Platform: any +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/SOURCES.txt b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/SOURCES.txt new file mode 100644 index 0000000..95f2943 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/SOURCES.txt @@ -0,0 +1,11 @@ +setup.cfg +setup.py +Flask_MySQL.egg-info/PKG-INFO +Flask_MySQL.egg-info/SOURCES.txt +Flask_MySQL.egg-info/dependency_links.txt +Flask_MySQL.egg-info/namespace_packages.txt +Flask_MySQL.egg-info/not-zip-safe +Flask_MySQL.egg-info/requires.txt +Flask_MySQL.egg-info/top_level.txt +flaskext/__init__.py +flaskext/mysql.py \ No newline at end of file diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/dependency_links.txt b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/installed-files.txt b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/installed-files.txt new file mode 100644 index 0000000..a95bc3f --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/installed-files.txt @@ -0,0 +1,11 @@ +../flaskext/mysql.py +../flaskext/mysql.pyc +./ +dependency_links.txt +namespace_packages.txt +not-zip-safe +PKG-INFO +requires.txt +SOURCES.txt +top_level.txt +../Flask_MySQL-1.2-py2.7-nspkg.pth diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/namespace_packages.txt b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/namespace_packages.txt new file mode 100644 index 0000000..cbcdbd5 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/namespace_packages.txt @@ -0,0 +1 @@ +flaskext diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/not-zip-safe b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/requires.txt b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/requires.txt new file mode 100644 index 0000000..2d0b0d5 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/requires.txt @@ -0,0 +1,2 @@ +Flask +MySQL-python diff --git a/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/top_level.txt b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/top_level.txt new file mode 100644 index 0000000..cbcdbd5 --- /dev/null +++ b/env/lib/python2.7/site-packages/Flask_MySQL-1.2-py2.7.egg-info/top_level.txt @@ -0,0 +1 @@ +flaskext diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/PKG-INFO b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/PKG-INFO new file mode 100644 index 0000000..7234bf5 --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/PKG-INFO @@ -0,0 +1,55 @@ +Metadata-Version: 1.1 +Name: Jinja2 +Version: 2.7.3 +Summary: A small but fast and easy to use stand-alone template engine written in pure python. +Home-page: http://jinja.pocoo.org/ +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +License: BSD +Description: + Jinja2 + ~~~~~~ + + Jinja2 is a template engine written in pure Python. It provides a + `Django`_ inspired non-XML syntax but supports inline expressions and + an optional `sandboxed`_ environment. + + Nutshell + -------- + + Here a small example of a Jinja template:: + + {% extends 'base.html' %} + {% block title %}Memberlist{% endblock %} + {% block content %} +

+ {% endblock %} + + Philosophy + ---------- + + Application logic is for the controller but don't try to make the life + for the template designer too hard by giving him too few functionality. + + For more informations visit the new `Jinja2 webpage`_ and `documentation`_. + + .. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security) + .. _Django: http://www.djangoproject.com/ + .. _Jinja2 webpage: http://jinja.pocoo.org/ + .. _documentation: http://jinja.pocoo.org/2/documentation/ + +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup :: HTML diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/SOURCES.txt b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/SOURCES.txt new file mode 100644 index 0000000..a27a9c4 --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/SOURCES.txt @@ -0,0 +1,126 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +Makefile +README.rst +run-tests.py +setup.cfg +setup.py +Jinja2.egg-info/PKG-INFO +Jinja2.egg-info/SOURCES.txt +Jinja2.egg-info/dependency_links.txt +Jinja2.egg-info/entry_points.txt +Jinja2.egg-info/not-zip-safe +Jinja2.egg-info/requires.txt +Jinja2.egg-info/top_level.txt +artwork/jinjalogo.svg +docs/Makefile +docs/api.rst +docs/cache_extension.py +docs/changelog.rst +docs/conf.py +docs/contents.rst.inc +docs/extensions.rst +docs/faq.rst +docs/index.rst +docs/integration.rst +docs/intro.rst +docs/jinjaext.py +docs/jinjastyle.sty +docs/latexindex.rst +docs/logo.pdf +docs/sandbox.rst +docs/switching.rst +docs/templates.rst +docs/tricks.rst +docs/_static/.ignore +docs/_static/jinja-small.png +docs/_templates/sidebarintro.html +docs/_templates/sidebarlogo.html +docs/_themes/LICENSE +docs/_themes/README +docs/_themes/jinja/layout.html +docs/_themes/jinja/relations.html +docs/_themes/jinja/theme.conf +docs/_themes/jinja/static/jinja.css_t +examples/bench.py +examples/profile.py +examples/basic/cycle.py +examples/basic/debugger.py +examples/basic/inheritance.py +examples/basic/test.py +examples/basic/test_filter_and_linestatements.py +examples/basic/test_loop_filter.py +examples/basic/translate.py +examples/basic/templates/broken.html +examples/basic/templates/subbroken.html +examples/rwbench/djangoext.py +examples/rwbench/rwbench.py +examples/rwbench/django/_form.html +examples/rwbench/django/_input_field.html +examples/rwbench/django/_textarea.html +examples/rwbench/django/index.html +examples/rwbench/django/layout.html +examples/rwbench/genshi/helpers.html +examples/rwbench/genshi/index.html +examples/rwbench/genshi/layout.html +examples/rwbench/jinja/helpers.html +examples/rwbench/jinja/index.html +examples/rwbench/jinja/layout.html +examples/rwbench/mako/helpers.html +examples/rwbench/mako/index.html +examples/rwbench/mako/layout.html +ext/djangojinja2.py +ext/inlinegettext.py +ext/jinja.el +ext/Vim/jinja.vim +ext/django2jinja/django2jinja.py +ext/django2jinja/example.py +ext/django2jinja/templates/index.html +ext/django2jinja/templates/layout.html +ext/django2jinja/templates/subtemplate.html +jinja2/__init__.py +jinja2/_compat.py +jinja2/_stringdefs.py +jinja2/bccache.py +jinja2/compiler.py +jinja2/constants.py +jinja2/debug.py +jinja2/defaults.py +jinja2/environment.py +jinja2/exceptions.py +jinja2/ext.py +jinja2/filters.py +jinja2/lexer.py +jinja2/loaders.py +jinja2/meta.py +jinja2/nodes.py +jinja2/optimizer.py +jinja2/parser.py +jinja2/runtime.py +jinja2/sandbox.py +jinja2/tests.py +jinja2/utils.py +jinja2/visitor.py +jinja2/testsuite/__init__.py +jinja2/testsuite/api.py +jinja2/testsuite/bytecode_cache.py +jinja2/testsuite/core_tags.py +jinja2/testsuite/debug.py +jinja2/testsuite/doctests.py +jinja2/testsuite/ext.py +jinja2/testsuite/filters.py +jinja2/testsuite/imports.py +jinja2/testsuite/inheritance.py +jinja2/testsuite/lexnparse.py +jinja2/testsuite/loader.py +jinja2/testsuite/regression.py +jinja2/testsuite/security.py +jinja2/testsuite/tests.py +jinja2/testsuite/utils.py +jinja2/testsuite/res/__init__.py +jinja2/testsuite/res/templates/broken.html +jinja2/testsuite/res/templates/syntaxerror.html +jinja2/testsuite/res/templates/test.html +jinja2/testsuite/res/templates/foo/test.html \ No newline at end of file diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/dependency_links.txt b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/entry_points.txt b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/entry_points.txt new file mode 100644 index 0000000..32e6b75 --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/entry_points.txt @@ -0,0 +1,4 @@ + + [babel.extractors] + jinja2 = jinja2.ext:babel_extract[i18n] + \ No newline at end of file diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/installed-files.txt b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/installed-files.txt new file mode 100644 index 0000000..f709693 --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/installed-files.txt @@ -0,0 +1,92 @@ +../jinja2/__init__.py +../jinja2/_compat.py +../jinja2/_stringdefs.py +../jinja2/bccache.py +../jinja2/compiler.py +../jinja2/constants.py +../jinja2/debug.py +../jinja2/defaults.py +../jinja2/environment.py +../jinja2/exceptions.py +../jinja2/ext.py +../jinja2/filters.py +../jinja2/lexer.py +../jinja2/loaders.py +../jinja2/meta.py +../jinja2/nodes.py +../jinja2/optimizer.py +../jinja2/parser.py +../jinja2/runtime.py +../jinja2/sandbox.py +../jinja2/tests.py +../jinja2/utils.py +../jinja2/visitor.py +../jinja2/testsuite/__init__.py +../jinja2/testsuite/api.py +../jinja2/testsuite/bytecode_cache.py +../jinja2/testsuite/core_tags.py +../jinja2/testsuite/debug.py +../jinja2/testsuite/doctests.py +../jinja2/testsuite/ext.py +../jinja2/testsuite/filters.py +../jinja2/testsuite/imports.py +../jinja2/testsuite/inheritance.py +../jinja2/testsuite/lexnparse.py +../jinja2/testsuite/loader.py +../jinja2/testsuite/regression.py +../jinja2/testsuite/security.py +../jinja2/testsuite/tests.py +../jinja2/testsuite/utils.py +../jinja2/testsuite/res/__init__.py +../jinja2/testsuite/res/templates/broken.html +../jinja2/testsuite/res/templates/syntaxerror.html +../jinja2/testsuite/res/templates/test.html +../jinja2/testsuite/res/templates/foo/test.html +../jinja2/__init__.pyc +../jinja2/_compat.pyc +../jinja2/_stringdefs.pyc +../jinja2/bccache.pyc +../jinja2/compiler.pyc +../jinja2/constants.pyc +../jinja2/debug.pyc +../jinja2/defaults.pyc +../jinja2/environment.pyc +../jinja2/exceptions.pyc +../jinja2/ext.pyc +../jinja2/filters.pyc +../jinja2/lexer.pyc +../jinja2/loaders.pyc +../jinja2/meta.pyc +../jinja2/nodes.pyc +../jinja2/optimizer.pyc +../jinja2/parser.pyc +../jinja2/runtime.pyc +../jinja2/sandbox.pyc +../jinja2/tests.pyc +../jinja2/utils.pyc +../jinja2/visitor.pyc +../jinja2/testsuite/__init__.pyc +../jinja2/testsuite/api.pyc +../jinja2/testsuite/bytecode_cache.pyc +../jinja2/testsuite/core_tags.pyc +../jinja2/testsuite/debug.pyc +../jinja2/testsuite/doctests.pyc +../jinja2/testsuite/ext.pyc +../jinja2/testsuite/filters.pyc +../jinja2/testsuite/imports.pyc +../jinja2/testsuite/inheritance.pyc +../jinja2/testsuite/lexnparse.pyc +../jinja2/testsuite/loader.pyc +../jinja2/testsuite/regression.pyc +../jinja2/testsuite/security.pyc +../jinja2/testsuite/tests.pyc +../jinja2/testsuite/utils.pyc +../jinja2/testsuite/res/__init__.pyc +./ +dependency_links.txt +entry_points.txt +not-zip-safe +PKG-INFO +requires.txt +SOURCES.txt +top_level.txt diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/not-zip-safe b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/requires.txt b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/requires.txt new file mode 100644 index 0000000..d115fee --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/requires.txt @@ -0,0 +1,4 @@ +markupsafe + +[i18n] +Babel>=0.8 diff --git a/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/top_level.txt b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/top_level.txt new file mode 100644 index 0000000..7f7afbf --- /dev/null +++ b/env/lib/python2.7/site-packages/Jinja2-2.7.3-py2.7.egg-info/top_level.txt @@ -0,0 +1 @@ +jinja2 diff --git a/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/PKG-INFO b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/PKG-INFO new file mode 100644 index 0000000..12aa93e --- /dev/null +++ b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/PKG-INFO @@ -0,0 +1,119 @@ +Metadata-Version: 1.1 +Name: MarkupSafe +Version: 0.23 +Summary: Implements a XML/HTML/XHTML Markup safe string for Python +Home-page: http://github.com/mitsuhiko/markupsafe +Author: Armin Ronacher +Author-email: armin.ronacher@active-4.com +License: BSD +Description: MarkupSafe + ========== + + Implements a unicode subclass that supports HTML strings: + + >>> from markupsafe import Markup, escape + >>> escape("") + Markup(u'<script>alert(document.cookie);</script>') + >>> tmpl = Markup("%s") + >>> tmpl % "Peter > Lustig" + Markup(u'Peter > Lustig') + + If you want to make an object unicode that is not yet unicode + but don't want to lose the taint information, you can use the + `soft_unicode` function. (On Python 3 you can also use `soft_str` which + is a different name for the same function). + + >>> from markupsafe import soft_unicode + >>> soft_unicode(42) + u'42' + >>> soft_unicode(Markup('foo')) + Markup(u'foo') + + HTML Representations + -------------------- + + Objects can customize their HTML markup equivalent by overriding + the `__html__` function: + + >>> class Foo(object): + ... def __html__(self): + ... return 'Nice' + ... + >>> escape(Foo()) + Markup(u'Nice') + >>> Markup(Foo()) + Markup(u'Nice') + + Silent Escapes + -------------- + + Since MarkupSafe 0.10 there is now also a separate escape function + called `escape_silent` that returns an empty string for `None` for + consistency with other systems that return empty strings for `None` + when escaping (for instance Pylons' webhelpers). + + If you also want to use this for the escape method of the Markup + object, you can create your own subclass that does that:: + + from markupsafe import Markup, escape_silent as escape + + class SilentMarkup(Markup): + __slots__ = () + + @classmethod + def escape(cls, s): + return cls(escape(s)) + + New-Style String Formatting + --------------------------- + + Starting with MarkupSafe 0.21 new style string formats from Python 2.6 and + 3.x are now fully supported. Previously the escape behavior of those + functions was spotty at best. The new implementations operates under the + following algorithm: + + 1. if an object has an ``__html_format__`` method it is called as + replacement for ``__format__`` with the format specifier. It either + has to return a string or markup object. + 2. if an object has an ``__html__`` method it is called. + 3. otherwise the default format system of Python kicks in and the result + is HTML escaped. + + Here is how you can implement your own formatting:: + + class User(object): + + def __init__(self, id, username): + self.id = id + self.username = username + + def __html_format__(self, format_spec): + if format_spec == 'link': + return Markup('{1}').format( + self.id, + self.__html__(), + ) + elif format_spec: + raise ValueError('Invalid format spec') + return self.__html__() + + def __html__(self): + return Markup('{0}').format(self.username) + + And to format that user: + + >>> user = User(1, 'foo') + >>> Markup('

User: {0:link}').format(user) + Markup(u'

User: foo') + +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Processing :: Markup :: HTML diff --git a/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/SOURCES.txt b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/SOURCES.txt new file mode 100644 index 0000000..dfeb82b --- /dev/null +++ b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/SOURCES.txt @@ -0,0 +1,17 @@ +AUTHORS +LICENSE +MANIFEST.in +README.rst +setup.cfg +setup.py +MarkupSafe.egg-info/PKG-INFO +MarkupSafe.egg-info/SOURCES.txt +MarkupSafe.egg-info/dependency_links.txt +MarkupSafe.egg-info/not-zip-safe +MarkupSafe.egg-info/top_level.txt +markupsafe/__init__.py +markupsafe/_compat.py +markupsafe/_constants.py +markupsafe/_native.py +markupsafe/_speedups.c +markupsafe/tests.py \ No newline at end of file diff --git a/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/dependency_links.txt b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/installed-files.txt b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/installed-files.txt new file mode 100644 index 0000000..bff605a --- /dev/null +++ b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/installed-files.txt @@ -0,0 +1,18 @@ +../markupsafe/__init__.py +../markupsafe/_compat.py +../markupsafe/_constants.py +../markupsafe/_native.py +../markupsafe/tests.py +../markupsafe/_speedups.c +../markupsafe/__init__.pyc +../markupsafe/_compat.pyc +../markupsafe/_constants.pyc +../markupsafe/_native.pyc +../markupsafe/tests.pyc +../markupsafe/_speedups.so +./ +dependency_links.txt +not-zip-safe +PKG-INFO +SOURCES.txt +top_level.txt diff --git a/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/not-zip-safe b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/top_level.txt b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/top_level.txt new file mode 100644 index 0000000..75bf729 --- /dev/null +++ b/env/lib/python2.7/site-packages/MarkupSafe-0.23-py2.7.egg-info/top_level.txt @@ -0,0 +1 @@ +markupsafe diff --git a/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/PKG-INFO b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/PKG-INFO new file mode 100644 index 0000000..0d7a901 --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/PKG-INFO @@ -0,0 +1,43 @@ +Metadata-Version: 1.1 +Name: MySQL-python +Version: 1.2.5 +Summary: Python interface to MySQL +Home-page: https://github.com/farcepest/MySQLdb1 +Author: Andy Dustman +Author-email: farcepest@gmail.com +License: GPL +Description: + ========================= + Python interface to MySQL + ========================= + + MySQLdb is an interface to the popular MySQL_ database server for + Python. The design goals are: + + - Compliance with Python database API version 2.0 [PEP-0249]_ + - Thread-safety + - Thread-friendliness (threads will not block each other) + + MySQL-3.23 through 5.5 and Python-2.4 through 2.7 are currently + supported. Python-3.0 will be supported in a future release. + PyPy is supported. + + MySQLdb is `Free Software`_. + + .. _MySQL: http://www.mysql.com/ + .. _`Free Software`: http://www.gnu.org/ + .. [PEP-0249] http://www.python.org/peps/pep-0249.html +Platform: ALL +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Other Environment +Classifier: License :: OSI Approved :: GNU General Public License (GPL) +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows :: Windows NT/2000 +Classifier: Operating System :: OS Independent +Classifier: Operating System :: POSIX +Classifier: Operating System :: POSIX :: Linux +Classifier: Operating System :: Unix +Classifier: Programming Language :: C +Classifier: Programming Language :: Python +Classifier: Topic :: Database +Classifier: Topic :: Database :: Database Engines/Servers diff --git a/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/SOURCES.txt b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/SOURCES.txt new file mode 100644 index 0000000..e0b09bd --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/SOURCES.txt @@ -0,0 +1,60 @@ +GPL-2.0 +HISTORY +INSTALL +MANIFEST.in +README.md +_mysql.c +_mysql_exceptions.py +metadata.cfg +pymemcompat.h +setup.cfg +setup.py +setup_common.py +setup_posix.py +setup_windows.py +site.cfg +MySQL_python.egg-info/PKG-INFO +MySQL_python.egg-info/SOURCES.txt +MySQL_python.egg-info/dependency_links.txt +MySQL_python.egg-info/top_level.txt +MySQLdb/__init__.py +MySQLdb/connections.py +MySQLdb/converters.py +MySQLdb/cursors.py +MySQLdb/release.py +MySQLdb/times.py +MySQLdb/constants/CLIENT.py +MySQLdb/constants/CR.py +MySQLdb/constants/ER.py +MySQLdb/constants/FIELD_TYPE.py +MySQLdb/constants/FLAG.py +MySQLdb/constants/REFRESH.py +MySQLdb/constants/__init__.py +doc/FAQ.rst +doc/MySQLdb.constants.rst +doc/MySQLdb.rst +doc/_mysql.rst +doc/_mysql_exceptions.rst +doc/conf.py +doc/index.rst +doc/modules.rst +doc/user_guide.rst +doc/_build/_sources/FAQ.txt +doc/_build/_sources/MySQLdb.constants.txt +doc/_build/_sources/MySQLdb.txt +doc/_build/_sources/_mysql.txt +doc/_build/_sources/_mysql_exceptions.txt +doc/_build/_sources/distribute_setup.txt +doc/_build/_sources/index.txt +doc/_build/_sources/modules.txt +doc/_build/_sources/setup.txt +doc/_build/_sources/setup_common.txt +doc/_build/_sources/setup_posix.txt +doc/_build/_sources/setup_windows.txt +doc/_build/_sources/user_guide.txt +tests/capabilities.py +tests/configdb.py +tests/dbapi20.py +tests/test_MySQLdb_capabilities.py +tests/test_MySQLdb_dbapi20.py +tests/test_MySQLdb_nonstandard.py \ No newline at end of file diff --git a/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/dependency_links.txt b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/installed-files.txt b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/installed-files.txt new file mode 100644 index 0000000..4fccfa2 --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/installed-files.txt @@ -0,0 +1,34 @@ +../_mysql_exceptions.py +../MySQLdb/__init__.py +../MySQLdb/converters.py +../MySQLdb/connections.py +../MySQLdb/cursors.py +../MySQLdb/release.py +../MySQLdb/times.py +../MySQLdb/constants/__init__.py +../MySQLdb/constants/CR.py +../MySQLdb/constants/FIELD_TYPE.py +../MySQLdb/constants/ER.py +../MySQLdb/constants/FLAG.py +../MySQLdb/constants/REFRESH.py +../MySQLdb/constants/CLIENT.py +../_mysql_exceptions.pyc +../MySQLdb/__init__.pyc +../MySQLdb/converters.pyc +../MySQLdb/connections.pyc +../MySQLdb/cursors.pyc +../MySQLdb/release.pyc +../MySQLdb/times.pyc +../MySQLdb/constants/__init__.pyc +../MySQLdb/constants/CR.pyc +../MySQLdb/constants/FIELD_TYPE.pyc +../MySQLdb/constants/ER.pyc +../MySQLdb/constants/FLAG.pyc +../MySQLdb/constants/REFRESH.pyc +../MySQLdb/constants/CLIENT.pyc +../_mysql.so +./ +dependency_links.txt +PKG-INFO +SOURCES.txt +top_level.txt diff --git a/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/top_level.txt b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/top_level.txt new file mode 100644 index 0000000..08d3b44 --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7.egg-info/top_level.txt @@ -0,0 +1,3 @@ +MySQLdb +_mysql +_mysql_exceptions diff --git a/env/lib/python2.7/site-packages/MySQLdb/__init__.py b/env/lib/python2.7/site-packages/MySQLdb/__init__.py new file mode 100644 index 0000000..dc18e87 --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/__init__.py @@ -0,0 +1,98 @@ +"""MySQLdb - A DB API v2.0 compatible interface to MySQL. + +This package is a wrapper around _mysql, which mostly implements the +MySQL C API. + +connect() -- connects to server + +See the C API specification and the MySQL documentation for more info +on other items. + +For information on how MySQLdb handles type conversion, see the +MySQLdb.converters module. + +""" + +__revision__ = """$Revision$"""[11:-2] +from MySQLdb.release import __version__, version_info, __author__ + +import _mysql + +if version_info != _mysql.version_info: + raise ImportError("this is MySQLdb version %s, but _mysql is version %r" % + (version_info, _mysql.version_info)) + +threadsafety = 1 +apilevel = "2.0" +paramstyle = "format" + +from _mysql import * +from MySQLdb.constants import FIELD_TYPE +from MySQLdb.times import Date, Time, Timestamp, \ + DateFromTicks, TimeFromTicks, TimestampFromTicks + +try: + frozenset +except NameError: + from sets import ImmutableSet as frozenset + +class DBAPISet(frozenset): + + """A special type of set for which A == x is true if A is a + DBAPISet and x is a member of that set.""" + + def __eq__(self, other): + if isinstance(other, DBAPISet): + return not self.difference(other) + return other in self + + +STRING = DBAPISet([FIELD_TYPE.ENUM, FIELD_TYPE.STRING, + FIELD_TYPE.VAR_STRING]) +BINARY = DBAPISet([FIELD_TYPE.BLOB, FIELD_TYPE.LONG_BLOB, + FIELD_TYPE.MEDIUM_BLOB, FIELD_TYPE.TINY_BLOB]) +NUMBER = DBAPISet([FIELD_TYPE.DECIMAL, FIELD_TYPE.DOUBLE, FIELD_TYPE.FLOAT, + FIELD_TYPE.INT24, FIELD_TYPE.LONG, FIELD_TYPE.LONGLONG, + FIELD_TYPE.TINY, FIELD_TYPE.YEAR]) +DATE = DBAPISet([FIELD_TYPE.DATE, FIELD_TYPE.NEWDATE]) +TIME = DBAPISet([FIELD_TYPE.TIME]) +TIMESTAMP = DBAPISet([FIELD_TYPE.TIMESTAMP, FIELD_TYPE.DATETIME]) +DATETIME = TIMESTAMP +ROWID = DBAPISet() + +def test_DBAPISet_set_equality(): + assert STRING == STRING + +def test_DBAPISet_set_inequality(): + assert STRING != NUMBER + +def test_DBAPISet_set_equality_membership(): + assert FIELD_TYPE.VAR_STRING == STRING + +def test_DBAPISet_set_inequality_membership(): + assert FIELD_TYPE.DATE != STRING + +def Binary(x): + return str(x) + +def Connect(*args, **kwargs): + """Factory function for connections.Connection.""" + from MySQLdb.connections import Connection + return Connection(*args, **kwargs) + +connect = Connection = Connect + +__all__ = [ 'BINARY', 'Binary', 'Connect', 'Connection', 'DATE', + 'Date', 'Time', 'Timestamp', 'DateFromTicks', 'TimeFromTicks', + 'TimestampFromTicks', 'DataError', 'DatabaseError', 'Error', + 'FIELD_TYPE', 'IntegrityError', 'InterfaceError', 'InternalError', + 'MySQLError', 'NULL', 'NUMBER', 'NotSupportedError', 'DBAPISet', + 'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'TIME', + 'TIMESTAMP', 'Warning', 'apilevel', 'connect', 'connections', + 'constants', 'converters', 'cursors', 'debug', 'escape', 'escape_dict', + 'escape_sequence', 'escape_string', 'get_client_info', + 'paramstyle', 'string_literal', 'threadsafety', 'version_info'] + + + + diff --git a/env/lib/python2.7/site-packages/MySQLdb/__init__.pyc b/env/lib/python2.7/site-packages/MySQLdb/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31f5a9eb16dc6c0987d7e82e1e0551b201b9a6ff GIT binary patch literal 4549 zcmcgv-E$Mk5$~0Zu!W6{0rP#gaC`{PmMsr7HhL{<=KoH5Kyf9?7Qeiqt(oENyGLr?%Kk}?BZi)& zc!iR4N2S-q&_0`F)5eSRZ`bTeM0IwsT-tjlDb8zLh3fDJET4(wMq!HS|e2@ z1#4gjEP!rkg}(cwz90oHUy}NY)GtZ>iqzMn9+LWo)VHL*BUK|+C$&MnD*0e5(Qajv z%QbL_w#U1_-BSDRnp<->>u&8y(|vKb`kC8FlVND0{aCxv!043!SNN;ta=Rbp z?l9~eggtQNZs@+u!r@S7ZkVN`fpUXnoPQs$x-a`tr|%|dZsM^UCBs-JdSG(b^mSQ; zxf`q%B0K3|pgX2=+g)3OenG&Oy1C9?=&W4c)i9y2?F()`)Sajsbzo&Wa6_o%Ju6bB zoe`_Cd)+jH0U3MJP0L_T!I`;{(Mb-ykFd=P`jHeFCHz{a zD@->G?${+OeAH}gZ3gYVCyfeoni+u2&}dn-qePoIPFd3SK$^N4(P1;fCAQuYn zA5oUye&djAb+XsZBpI0yHMgscnPq`>lm?Iv*7CK-m>~MfAMD6!gIPUHpP@z~_+tY1uO1prc9# z2hWwv86b+^>)v^ChmoD(j zI4?Lp1XzcXKfZ4!Au8aBZAGyO#N{->Yp z@n)^v`2Tn)E$k;A9wqQCAAkLpkKE1pIXrmW7Pu8+HgpaT8*?C|2#v{(uAU!`3i7>o zv3fKJv+-|Ok&>j;d4*jV>&MUNR>EnOrP9YX^CwvrkOqz||?r6}F z*@G{X$-IJgkykhD?1FXGUi0EH$Kq(m_VUx9OTd#<7-55Jwc;0q!BhD3;OG^fMi*JnU*S_PDYuUjcY$0c1Z2vdOrML4egv3p~@Y zM#?>qNM7{#Fp4Yop9OKHnQ(q2<{tM??*W4i=HwJkg&oGrmJClz(=Ed@>CdRhZkGO0 z4{+5=0$LbkY^FK2pynQrq;?KtQUjN#?Y@_Q$rx7O+NsOSTRW}CfnZ$k+l|fU(`}2( zklbwT3Fb*($mH;NkIQ?R~`H=wN@zD4%YThyOj| zI0%j!w5;B1mu3UMw&UYBeAe?n0F(*~&gH^>> numeric_part("20-alpha") + 20 + >>> numeric_part("foo") + >>> numeric_part("16b") + 16 + """ + + m = re_numeric_part.match(s) + if m: + return int(m.group(1)) + return None + + +class Connection(_mysql.connection): + + """MySQL Database Connection Object""" + + default_cursor = cursors.Cursor + + def __init__(self, *args, **kwargs): + """ + + Create a connection to the database. It is strongly recommended + that you only use keyword parameters. Consult the MySQL C API + documentation for more information. + + host + string, host to connect + + user + string, user to connect as + + passwd + string, password to use + + db + string, database to use + + port + integer, TCP/IP port to connect to + + unix_socket + string, location of unix_socket to use + + conv + conversion dictionary, see MySQLdb.converters + + connect_timeout + number of seconds to wait before the connection attempt + fails. + + compress + if set, compression is enabled + + named_pipe + if set, a named pipe is used to connect (Windows only) + + init_command + command which is run once the connection is created + + read_default_file + file from which default client values are read + + read_default_group + configuration group to use from the default file + + cursorclass + class object, used to create cursors (keyword only) + + use_unicode + If True, text-like columns are returned as unicode objects + using the connection's character set. Otherwise, text-like + columns are returned as strings. columns are returned as + normal strings. Unicode objects will always be encoded to + the connection's character set regardless of this setting. + + charset + If supplied, the connection character set will be changed + to this character set (MySQL-4.1 and newer). This implies + use_unicode=True. + + sql_mode + If supplied, the session SQL mode will be changed to this + setting (MySQL-4.1 and newer). For more details and legal + values, see the MySQL documentation. + + client_flag + integer, flags to use or 0 + (see MySQL docs or constants/CLIENTS.py) + + ssl + dictionary or mapping, contains SSL connection parameters; + see the MySQL documentation for more details + (mysql_ssl_set()). If this is set, and the client does not + support SSL, NotSupportedError will be raised. + + local_infile + integer, non-zero enables LOAD LOCAL INFILE; zero disables + + autocommit + If False (default), autocommit is disabled. + If True, autocommit is enabled. + If None, autocommit isn't set and server default is used. + + There are a number of undocumented, non-standard methods. See the + documentation for the MySQL C API for some hints on what they do. + + """ + from MySQLdb.constants import CLIENT, FIELD_TYPE + from MySQLdb.converters import conversions + from weakref import proxy + + kwargs2 = kwargs.copy() + + if 'conv' in kwargs: + conv = kwargs['conv'] + else: + conv = conversions + + conv2 = {} + for k, v in conv.items(): + if isinstance(k, int) and isinstance(v, list): + conv2[k] = v[:] + else: + conv2[k] = v + kwargs2['conv'] = conv2 + + cursorclass = kwargs2.pop('cursorclass', self.default_cursor) + charset = kwargs2.pop('charset', '') + + if charset: + use_unicode = True + else: + use_unicode = False + + use_unicode = kwargs2.pop('use_unicode', use_unicode) + sql_mode = kwargs2.pop('sql_mode', '') + + client_flag = kwargs.get('client_flag', 0) + client_version = tuple([ numeric_part(n) for n in _mysql.get_client_info().split('.')[:2] ]) + if client_version >= (4, 1): + client_flag |= CLIENT.MULTI_STATEMENTS + if client_version >= (5, 0): + client_flag |= CLIENT.MULTI_RESULTS + + kwargs2['client_flag'] = client_flag + + # PEP-249 requires autocommit to be initially off + autocommit = kwargs2.pop('autocommit', False) + + super(Connection, self).__init__(*args, **kwargs2) + self.cursorclass = cursorclass + self.encoders = dict([ (k, v) for k, v in conv.items() + if type(k) is not int ]) + + self._server_version = tuple([ numeric_part(n) for n in self.get_server_info().split('.')[:2] ]) + + db = proxy(self) + def _get_string_literal(): + def string_literal(obj, dummy=None): + return db.string_literal(obj) + return string_literal + + def _get_unicode_literal(): + def unicode_literal(u, dummy=None): + return db.literal(u.encode(unicode_literal.charset)) + return unicode_literal + + def _get_string_decoder(): + def string_decoder(s): + return s.decode(string_decoder.charset) + return string_decoder + + string_literal = _get_string_literal() + self.unicode_literal = unicode_literal = _get_unicode_literal() + self.string_decoder = string_decoder = _get_string_decoder() + if not charset: + charset = self.character_set_name() + self.set_character_set(charset) + + if sql_mode: + self.set_sql_mode(sql_mode) + + if use_unicode: + self.converter[FIELD_TYPE.STRING].append((None, string_decoder)) + self.converter[FIELD_TYPE.VAR_STRING].append((None, string_decoder)) + self.converter[FIELD_TYPE.VARCHAR].append((None, string_decoder)) + self.converter[FIELD_TYPE.BLOB].append((None, string_decoder)) + + self.encoders[types.StringType] = string_literal + self.encoders[types.UnicodeType] = unicode_literal + self._transactional = self.server_capabilities & CLIENT.TRANSACTIONS + if self._transactional: + if autocommit is not None: + self.autocommit(autocommit) + self.messages = [] + + def autocommit(self, on): + on = bool(on) + if self.get_autocommit() != on: + _mysql.connection.autocommit(self, on) + + def cursor(self, cursorclass=None): + """ + + Create a cursor on which queries may be performed. The + optional cursorclass parameter is used to create the + Cursor. By default, self.cursorclass=cursors.Cursor is + used. + + """ + return (cursorclass or self.cursorclass)(self) + + def __enter__(self): + if self.get_autocommit(): + self.query("BEGIN") + return self.cursor() + + def __exit__(self, exc, value, tb): + if exc: + self.rollback() + else: + self.commit() + + def literal(self, o): + """ + + If o is a single object, returns an SQL literal as a string. + If o is a non-string sequence, the items of the sequence are + converted and returned as a sequence. + + Non-standard. For internal use; do not use this in your + applications. + + """ + return self.escape(o, self.encoders) + + def begin(self): + """Explicitly begin a connection. Non-standard. + DEPRECATED: Will be removed in 1.3. + Use an SQL BEGIN statement instead.""" + from warnings import warn + warn("begin() is non-standard and will be removed in 1.3", + DeprecationWarning, 2) + self.query("BEGIN") + + if not hasattr(_mysql.connection, 'warning_count'): + + def warning_count(self): + """Return the number of warnings generated from the + last query. This is derived from the info() method.""" + from string import atoi + info = self.info() + if info: + return atoi(info.split()[-1]) + else: + return 0 + + def set_character_set(self, charset): + """Set the connection character set to charset. The character + set can only be changed in MySQL-4.1 and newer. If you try + to change the character set from the current value in an + older version, NotSupportedError will be raised.""" + if charset == "utf8mb4": + py_charset = "utf8" + else: + py_charset = charset + if self.character_set_name() != charset: + try: + super(Connection, self).set_character_set(charset) + except AttributeError: + if self._server_version < (4, 1): + raise NotSupportedError("server is too old to set charset") + self.query('SET NAMES %s' % charset) + self.store_result() + self.string_decoder.charset = py_charset + self.unicode_literal.charset = py_charset + + def set_sql_mode(self, sql_mode): + """Set the connection sql_mode. See MySQL documentation for + legal values.""" + if self._server_version < (4, 1): + raise NotSupportedError("server is too old to set sql_mode") + self.query("SET SESSION sql_mode='%s'" % sql_mode) + self.store_result() + + def show_warnings(self): + """Return detailed information about warnings as a + sequence of tuples of (Level, Code, Message). This + is only supported in MySQL-4.1 and up. If your server + is an earlier version, an empty sequence is returned.""" + if self._server_version < (4,1): return () + self.query("SHOW WARNINGS") + r = self.store_result() + warnings = r.fetch_row(0) + return warnings + + Warning = Warning + Error = Error + InterfaceError = InterfaceError + DatabaseError = DatabaseError + DataError = DataError + OperationalError = OperationalError + IntegrityError = IntegrityError + InternalError = InternalError + ProgrammingError = ProgrammingError + NotSupportedError = NotSupportedError + + errorhandler = defaulterrorhandler diff --git a/env/lib/python2.7/site-packages/MySQLdb/connections.pyc b/env/lib/python2.7/site-packages/MySQLdb/connections.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e01630b9e4f58430db9ea98d656466e1650f6233 GIT binary patch literal 13276 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/CLIENT.py b/env/lib/python2.7/site-packages/MySQLdb/constants/CLIENT.py new file mode 100644 index 0000000..6559917 --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/constants/CLIENT.py @@ -0,0 +1,29 @@ +"""MySQL CLIENT constants + +These constants are used when creating the connection. Use bitwise-OR +(|) to combine options together, and pass them as the client_flags +parameter to MySQLdb.Connection. For more information on these flags, +see the MySQL C API documentation for mysql_real_connect(). + +""" + +LONG_PASSWORD = 1 +FOUND_ROWS = 2 +LONG_FLAG = 4 +CONNECT_WITH_DB = 8 +NO_SCHEMA = 16 +COMPRESS = 32 +ODBC = 64 +LOCAL_FILES = 128 +IGNORE_SPACE = 256 +CHANGE_USER = 512 +INTERACTIVE = 1024 +SSL = 2048 +IGNORE_SIGPIPE = 4096 +TRANSACTIONS = 8192 # mysql_com.h was WRONG prior to 3.23.35 +RESERVED = 16384 +SECURE_CONNECTION = 32768 +MULTI_STATEMENTS = 65536 +MULTI_RESULTS = 131072 + + diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/CLIENT.pyc b/env/lib/python2.7/site-packages/MySQLdb/constants/CLIENT.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a95a28b9d6d27bc6029fe367a506a64ca61f0f1f GIT binary patch literal 1001 zcmah|O;6iE5S=6tzz{zB1NOinNDxcC^iowA#{^4`oq8RR_Of!aOR{QWr``pG)C2ea z++KU=tVyA_`s1y4{NBvl@w)Y^Bei?@>3Wkr@H+Ec}SSuN35SrEK1 zBbup`oI6^|+Ut6`#2bY~l+%YL7J5~nmMow3_XWqbEjYHqR_LDf97owNrkWNuENoji zv_LFeT6nPlNK}AC1xQqYLN6pS(!gb^g%mL2)B#r|=<9A_p!~0h?BThK=Z-Sv`tXn@Bj?#cq zWBn)nE8pzaS$r?z*I^V;vxoC=5GQHC>B#egn&97f@gU%18l?3+jI$v1{4Bf;ObZ2+ zMrQvXVK^9tqoB@}rCv-eHHm3$0m}#JZO}JIRv7qWth6?c9An!#97kEmY360Y5Vs?( zd+{1XHNK=>WWhV=1g9?Uxk|fNWu>$$COls$R~C=%LQUM&vzeF0$KEGbDp lliFSHBlm5?yRUyh4+XYgpO>Y0SjaE-S)U@bo9)K`&Ocx6@Vx*4 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/CR.py b/env/lib/python2.7/site-packages/MySQLdb/constants/CR.py new file mode 100644 index 0000000..249dfec --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/constants/CR.py @@ -0,0 +1,30 @@ +"""MySQL Connection Errors + +Nearly all of these raise OperationalError. COMMANDS_OUT_OF_SYNC +raises ProgrammingError. + +""" + +MIN_ERROR = 2000 +MAX_ERROR = 2999 +UNKNOWN_ERROR = 2000 +SOCKET_CREATE_ERROR = 2001 +CONNECTION_ERROR = 2002 +CONN_HOST_ERROR = 2003 +IPSOCK_ERROR = 2004 +UNKNOWN_HOST = 2005 +SERVER_GONE_ERROR = 2006 +VERSION_ERROR = 2007 +OUT_OF_MEMORY = 2008 +WRONG_HOST_INFO = 2009 +LOCALHOST_CONNECTION = 2010 +TCP_CONNECTION = 2011 +SERVER_HANDSHAKE_ERR = 2012 +SERVER_LOST = 2013 +COMMANDS_OUT_OF_SYNC = 2014 +NAMEDPIPE_CONNECTION = 2015 +NAMEDPIPEWAIT_ERROR = 2016 +NAMEDPIPEOPEN_ERROR = 2017 +NAMEDPIPESETSTATE_ERROR = 2018 +CANT_READ_CHARSET = 2019 +NET_PACKET_TOO_LARGE = 2020 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/CR.pyc b/env/lib/python2.7/site-packages/MySQLdb/constants/CR.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb1dd32e7ba0089ccdfc2f41ebdee5f12d121653 GIT binary patch literal 1076 zcma)*OK;Oa5XUEdq^;ZZ{ov?hFT@fTE(l@VZ4)KgHMUD(FDo}|T8q?<>;ReU$DbK zuzlg*rjAjVbJNYzlPo+ti<6U)+c4rMa{%$0X|3(z5feg{1AS@@QxNYa@x%e6 zRRSzUOaAzDRLUOrNRN5973Mqg7(EyzY}0+FHnrAej@>P47?-G)bs%tDF(IM1%-q5e zw(L%kUg_ynfi9Ma#(&MZ2vEC6_T08hCXdFx{Rte|?W!Gr>C7cn>vksnJ_-C_+-q!* zW79zB0qhB_^T%5v*^n#H*#k3~3)tth!~ z4dP>Kc&<*<htil0LsTm3Z2RhX#Ua=fNC&+GH9oTc*KAi7%D O>%6H^pQ_jX|Nad`i2y$U literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/ER.py b/env/lib/python2.7/site-packages/MySQLdb/constants/ER.py new file mode 100644 index 0000000..ed45f3a --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/constants/ER.py @@ -0,0 +1,467 @@ +"""MySQL ER Constants + +These constants are error codes for the bulk of the error conditions +that may occur. + +""" + +HASHCHK = 1000 +NISAMCHK = 1001 +NO = 1002 +YES = 1003 +CANT_CREATE_FILE = 1004 +CANT_CREATE_TABLE = 1005 +CANT_CREATE_DB = 1006 +DB_CREATE_EXISTS = 1007 +DB_DROP_EXISTS = 1008 +DB_DROP_DELETE = 1009 +DB_DROP_RMDIR = 1010 +CANT_DELETE_FILE = 1011 +CANT_FIND_SYSTEM_REC = 1012 +CANT_GET_STAT = 1013 +CANT_GET_WD = 1014 +CANT_LOCK = 1015 +CANT_OPEN_FILE = 1016 +FILE_NOT_FOUND = 1017 +CANT_READ_DIR = 1018 +CANT_SET_WD = 1019 +CHECKREAD = 1020 +DISK_FULL = 1021 +DUP_KEY = 1022 +ERROR_ON_CLOSE = 1023 +ERROR_ON_READ = 1024 +ERROR_ON_RENAME = 1025 +ERROR_ON_WRITE = 1026 +FILE_USED = 1027 +FILSORT_ABORT = 1028 +FORM_NOT_FOUND = 1029 +GET_ERRNO = 1030 +ILLEGAL_HA = 1031 +KEY_NOT_FOUND = 1032 +NOT_FORM_FILE = 1033 +NOT_KEYFILE = 1034 +OLD_KEYFILE = 1035 +OPEN_AS_READONLY = 1036 +OUTOFMEMORY = 1037 +OUT_OF_SORTMEMORY = 1038 +UNEXPECTED_EOF = 1039 +CON_COUNT_ERROR = 1040 +OUT_OF_RESOURCES = 1041 +BAD_HOST_ERROR = 1042 +HANDSHAKE_ERROR = 1043 +DBACCESS_DENIED_ERROR = 1044 +ACCESS_DENIED_ERROR = 1045 +NO_DB_ERROR = 1046 +UNKNOWN_COM_ERROR = 1047 +BAD_NULL_ERROR = 1048 +BAD_DB_ERROR = 1049 +TABLE_EXISTS_ERROR = 1050 +BAD_TABLE_ERROR = 1051 +NON_UNIQ_ERROR = 1052 +SERVER_SHUTDOWN = 1053 +BAD_FIELD_ERROR = 1054 +WRONG_FIELD_WITH_GROUP = 1055 +WRONG_GROUP_FIELD = 1056 +WRONG_SUM_SELECT = 1057 +WRONG_VALUE_COUNT = 1058 +TOO_LONG_IDENT = 1059 +DUP_FIELDNAME = 1060 +DUP_KEYNAME = 1061 +DUP_ENTRY = 1062 +WRONG_FIELD_SPEC = 1063 +PARSE_ERROR = 1064 +EMPTY_QUERY = 1065 +NONUNIQ_TABLE = 1066 +INVALID_DEFAULT = 1067 +MULTIPLE_PRI_KEY = 1068 +TOO_MANY_KEYS = 1069 +TOO_MANY_KEY_PARTS = 1070 +TOO_LONG_KEY = 1071 +KEY_COLUMN_DOES_NOT_EXITS = 1072 +BLOB_USED_AS_KEY = 1073 +TOO_BIG_FIELDLENGTH = 1074 +WRONG_AUTO_KEY = 1075 +READY = 1076 +NORMAL_SHUTDOWN = 1077 +GOT_SIGNAL = 1078 +SHUTDOWN_COMPLETE = 1079 +FORCING_CLOSE = 1080 +IPSOCK_ERROR = 1081 +NO_SUCH_INDEX = 1082 +WRONG_FIELD_TERMINATORS = 1083 +BLOBS_AND_NO_TERMINATED = 1084 +TEXTFILE_NOT_READABLE = 1085 +FILE_EXISTS_ERROR = 1086 +LOAD_INFO = 1087 +ALTER_INFO = 1088 +WRONG_SUB_KEY = 1089 +CANT_REMOVE_ALL_FIELDS = 1090 +CANT_DROP_FIELD_OR_KEY = 1091 +INSERT_INFO = 1092 +INSERT_TABLE_USED = 1093 +NO_SUCH_THREAD = 1094 +KILL_DENIED_ERROR = 1095 +NO_TABLES_USED = 1096 +TOO_BIG_SET = 1097 +NO_UNIQUE_LOGFILE = 1098 +TABLE_NOT_LOCKED_FOR_WRITE = 1099 +TABLE_NOT_LOCKED = 1100 +BLOB_CANT_HAVE_DEFAULT = 1101 +WRONG_DB_NAME = 1102 +WRONG_TABLE_NAME = 1103 +TOO_BIG_SELECT = 1104 +UNKNOWN_ERROR = 1105 +UNKNOWN_PROCEDURE = 1106 +WRONG_PARAMCOUNT_TO_PROCEDURE = 1107 +WRONG_PARAMETERS_TO_PROCEDURE = 1108 +UNKNOWN_TABLE = 1109 +FIELD_SPECIFIED_TWICE = 1110 +INVALID_GROUP_FUNC_USE = 1111 +UNSUPPORTED_EXTENSION = 1112 +TABLE_MUST_HAVE_COLUMNS = 1113 +RECORD_FILE_FULL = 1114 +UNKNOWN_CHARACTER_SET = 1115 +TOO_MANY_TABLES = 1116 +TOO_MANY_FIELDS = 1117 +TOO_BIG_ROWSIZE = 1118 +STACK_OVERRUN = 1119 +WRONG_OUTER_JOIN = 1120 +NULL_COLUMN_IN_INDEX = 1121 +CANT_FIND_UDF = 1122 +CANT_INITIALIZE_UDF = 1123 +UDF_NO_PATHS = 1124 +UDF_EXISTS = 1125 +CANT_OPEN_LIBRARY = 1126 +CANT_FIND_DL_ENTRY = 1127 +FUNCTION_NOT_DEFINED = 1128 +HOST_IS_BLOCKED = 1129 +HOST_NOT_PRIVILEGED = 1130 +PASSWORD_ANONYMOUS_USER = 1131 +PASSWORD_NOT_ALLOWED = 1132 +PASSWORD_NO_MATCH = 1133 +UPDATE_INFO = 1134 +CANT_CREATE_THREAD = 1135 +WRONG_VALUE_COUNT_ON_ROW = 1136 +CANT_REOPEN_TABLE = 1137 +INVALID_USE_OF_NULL = 1138 +REGEXP_ERROR = 1139 +MIX_OF_GROUP_FUNC_AND_FIELDS = 1140 +NONEXISTING_GRANT = 1141 +TABLEACCESS_DENIED_ERROR = 1142 +COLUMNACCESS_DENIED_ERROR = 1143 +ILLEGAL_GRANT_FOR_TABLE = 1144 +GRANT_WRONG_HOST_OR_USER = 1145 +NO_SUCH_TABLE = 1146 +NONEXISTING_TABLE_GRANT = 1147 +NOT_ALLOWED_COMMAND = 1148 +SYNTAX_ERROR = 1149 +DELAYED_CANT_CHANGE_LOCK = 1150 +TOO_MANY_DELAYED_THREADS = 1151 +ABORTING_CONNECTION = 1152 +NET_PACKET_TOO_LARGE = 1153 +NET_READ_ERROR_FROM_PIPE = 1154 +NET_FCNTL_ERROR = 1155 +NET_PACKETS_OUT_OF_ORDER = 1156 +NET_UNCOMPRESS_ERROR = 1157 +NET_READ_ERROR = 1158 +NET_READ_INTERRUPTED = 1159 +NET_ERROR_ON_WRITE = 1160 +NET_WRITE_INTERRUPTED = 1161 +TOO_LONG_STRING = 1162 +TABLE_CANT_HANDLE_BLOB = 1163 +TABLE_CANT_HANDLE_AUTO_INCREMENT = 1164 +DELAYED_INSERT_TABLE_LOCKED = 1165 +WRONG_COLUMN_NAME = 1166 +WRONG_KEY_COLUMN = 1167 +WRONG_MRG_TABLE = 1168 +DUP_UNIQUE = 1169 +BLOB_KEY_WITHOUT_LENGTH = 1170 +PRIMARY_CANT_HAVE_NULL = 1171 +TOO_MANY_ROWS = 1172 +REQUIRES_PRIMARY_KEY = 1173 +NO_RAID_COMPILED = 1174 +UPDATE_WITHOUT_KEY_IN_SAFE_MODE = 1175 +KEY_DOES_NOT_EXITS = 1176 +CHECK_NO_SUCH_TABLE = 1177 +CHECK_NOT_IMPLEMENTED = 1178 +CANT_DO_THIS_DURING_AN_TRANSACTION = 1179 +ERROR_DURING_COMMIT = 1180 +ERROR_DURING_ROLLBACK = 1181 +ERROR_DURING_FLUSH_LOGS = 1182 +ERROR_DURING_CHECKPOINT = 1183 +NEW_ABORTING_CONNECTION = 1184 +DUMP_NOT_IMPLEMENTED = 1185 +FLUSH_MASTER_BINLOG_CLOSED = 1186 +INDEX_REBUILD = 1187 +MASTER = 1188 +MASTER_NET_READ = 1189 +MASTER_NET_WRITE = 1190 +FT_MATCHING_KEY_NOT_FOUND = 1191 +LOCK_OR_ACTIVE_TRANSACTION = 1192 +UNKNOWN_SYSTEM_VARIABLE = 1193 +CRASHED_ON_USAGE = 1194 +CRASHED_ON_REPAIR = 1195 +WARNING_NOT_COMPLETE_ROLLBACK = 1196 +TRANS_CACHE_FULL = 1197 +SLAVE_MUST_STOP = 1198 +SLAVE_NOT_RUNNING = 1199 +BAD_SLAVE = 1200 +MASTER_INFO = 1201 +SLAVE_THREAD = 1202 +TOO_MANY_USER_CONNECTIONS = 1203 +SET_CONSTANTS_ONLY = 1204 +LOCK_WAIT_TIMEOUT = 1205 +LOCK_TABLE_FULL = 1206 +READ_ONLY_TRANSACTION = 1207 +DROP_DB_WITH_READ_LOCK = 1208 +CREATE_DB_WITH_READ_LOCK = 1209 +WRONG_ARGUMENTS = 1210 +NO_PERMISSION_TO_CREATE_USER = 1211 +UNION_TABLES_IN_DIFFERENT_DIR = 1212 +LOCK_DEADLOCK = 1213 +TABLE_CANT_HANDLE_FT = 1214 +CANNOT_ADD_FOREIGN = 1215 +NO_REFERENCED_ROW = 1216 +ROW_IS_REFERENCED = 1217 +CONNECT_TO_MASTER = 1218 +QUERY_ON_MASTER = 1219 +ERROR_WHEN_EXECUTING_COMMAND = 1220 +WRONG_USAGE = 1221 +WRONG_NUMBER_OF_COLUMNS_IN_SELECT = 1222 +CANT_UPDATE_WITH_READLOCK = 1223 +MIXING_NOT_ALLOWED = 1224 +DUP_ARGUMENT = 1225 +USER_LIMIT_REACHED = 1226 +SPECIFIC_ACCESS_DENIED_ERROR = 1227 +LOCAL_VARIABLE = 1228 +GLOBAL_VARIABLE = 1229 +NO_DEFAULT = 1230 +WRONG_VALUE_FOR_VAR = 1231 +WRONG_TYPE_FOR_VAR = 1232 +VAR_CANT_BE_READ = 1233 +CANT_USE_OPTION_HERE = 1234 +NOT_SUPPORTED_YET = 1235 +MASTER_FATAL_ERROR_READING_BINLOG = 1236 +SLAVE_IGNORED_TABLE = 1237 +INCORRECT_GLOBAL_LOCAL_VAR = 1238 +WRONG_FK_DEF = 1239 +KEY_REF_DO_NOT_MATCH_TABLE_REF = 1240 +OPERAND_COLUMNS = 1241 +SUBQUERY_NO_1_ROW = 1242 +UNKNOWN_STMT_HANDLER = 1243 +CORRUPT_HELP_DB = 1244 +CYCLIC_REFERENCE = 1245 +AUTO_CONVERT = 1246 +ILLEGAL_REFERENCE = 1247 +DERIVED_MUST_HAVE_ALIAS = 1248 +SELECT_REDUCED = 1249 +TABLENAME_NOT_ALLOWED_HERE = 1250 +NOT_SUPPORTED_AUTH_MODE = 1251 +SPATIAL_CANT_HAVE_NULL = 1252 +COLLATION_CHARSET_MISMATCH = 1253 +SLAVE_WAS_RUNNING = 1254 +SLAVE_WAS_NOT_RUNNING = 1255 +TOO_BIG_FOR_UNCOMPRESS = 1256 +ZLIB_Z_MEM_ERROR = 1257 +ZLIB_Z_BUF_ERROR = 1258 +ZLIB_Z_DATA_ERROR = 1259 +CUT_VALUE_GROUP_CONCAT = 1260 +WARN_TOO_FEW_RECORDS = 1261 +WARN_TOO_MANY_RECORDS = 1262 +WARN_NULL_TO_NOTNULL = 1263 +WARN_DATA_OUT_OF_RANGE = 1264 +WARN_DATA_TRUNCATED = 1265 +WARN_USING_OTHER_HANDLER = 1266 +CANT_AGGREGATE_2COLLATIONS = 1267 +DROP_USER = 1268 +REVOKE_GRANTS = 1269 +CANT_AGGREGATE_3COLLATIONS = 1270 +CANT_AGGREGATE_NCOLLATIONS = 1271 +VARIABLE_IS_NOT_STRUCT = 1272 +UNKNOWN_COLLATION = 1273 +SLAVE_IGNORED_SSL_PARAMS = 1274 +SERVER_IS_IN_SECURE_AUTH_MODE = 1275 +WARN_FIELD_RESOLVED = 1276 +BAD_SLAVE_UNTIL_COND = 1277 +MISSING_SKIP_SLAVE = 1278 +UNTIL_COND_IGNORED = 1279 +WRONG_NAME_FOR_INDEX = 1280 +WRONG_NAME_FOR_CATALOG = 1281 +WARN_QC_RESIZE = 1282 +BAD_FT_COLUMN = 1283 +UNKNOWN_KEY_CACHE = 1284 +WARN_HOSTNAME_WONT_WORK = 1285 +UNKNOWN_STORAGE_ENGINE = 1286 +WARN_DEPRECATED_SYNTAX = 1287 +NON_UPDATABLE_TABLE = 1288 +FEATURE_DISABLED = 1289 +OPTION_PREVENTS_STATEMENT = 1290 +DUPLICATED_VALUE_IN_TYPE = 1291 +TRUNCATED_WRONG_VALUE = 1292 +TOO_MUCH_AUTO_TIMESTAMP_COLS = 1293 +INVALID_ON_UPDATE = 1294 +UNSUPPORTED_PS = 1295 +GET_ERRMSG = 1296 +GET_TEMPORARY_ERRMSG = 1297 +UNKNOWN_TIME_ZONE = 1298 +WARN_INVALID_TIMESTAMP = 1299 +INVALID_CHARACTER_STRING = 1300 +WARN_ALLOWED_PACKET_OVERFLOWED = 1301 +CONFLICTING_DECLARATIONS = 1302 +SP_NO_RECURSIVE_CREATE = 1303 +SP_ALREADY_EXISTS = 1304 +SP_DOES_NOT_EXIST = 1305 +SP_DROP_FAILED = 1306 +SP_STORE_FAILED = 1307 +SP_LILABEL_MISMATCH = 1308 +SP_LABEL_REDEFINE = 1309 +SP_LABEL_MISMATCH = 1310 +SP_UNINIT_VAR = 1311 +SP_BADSELECT = 1312 +SP_BADRETURN = 1313 +SP_BADSTATEMENT = 1314 +UPDATE_LOG_DEPRECATED_IGNORED = 1315 +UPDATE_LOG_DEPRECATED_TRANSLATED = 1316 +QUERY_INTERRUPTED = 1317 +SP_WRONG_NO_OF_ARGS = 1318 +SP_COND_MISMATCH = 1319 +SP_NORETURN = 1320 +SP_NORETURNEND = 1321 +SP_BAD_CURSOR_QUERY = 1322 +SP_BAD_CURSOR_SELECT = 1323 +SP_CURSOR_MISMATCH = 1324 +SP_CURSOR_ALREADY_OPEN = 1325 +SP_CURSOR_NOT_OPEN = 1326 +SP_UNDECLARED_VAR = 1327 +SP_WRONG_NO_OF_FETCH_ARGS = 1328 +SP_FETCH_NO_DATA = 1329 +SP_DUP_PARAM = 1330 +SP_DUP_VAR = 1331 +SP_DUP_COND = 1332 +SP_DUP_CURS = 1333 +SP_CANT_ALTER = 1334 +SP_SUBSELECT_NYI = 1335 +STMT_NOT_ALLOWED_IN_SF_OR_TRG = 1336 +SP_VARCOND_AFTER_CURSHNDLR = 1337 +SP_CURSOR_AFTER_HANDLER = 1338 +SP_CASE_NOT_FOUND = 1339 +FPARSER_TOO_BIG_FILE = 1340 +FPARSER_BAD_HEADER = 1341 +FPARSER_EOF_IN_COMMENT = 1342 +FPARSER_ERROR_IN_PARAMETER = 1343 +FPARSER_EOF_IN_UNKNOWN_PARAMETER = 1344 +VIEW_NO_EXPLAIN = 1345 +FRM_UNKNOWN_TYPE = 1346 +WRONG_OBJECT = 1347 +NONUPDATEABLE_COLUMN = 1348 +VIEW_SELECT_DERIVED = 1349 +VIEW_SELECT_CLAUSE = 1350 +VIEW_SELECT_VARIABLE = 1351 +VIEW_SELECT_TMPTABLE = 1352 +VIEW_WRONG_LIST = 1353 +WARN_VIEW_MERGE = 1354 +WARN_VIEW_WITHOUT_KEY = 1355 +VIEW_INVALID = 1356 +SP_NO_DROP_SP = 1357 +SP_GOTO_IN_HNDLR = 1358 +TRG_ALREADY_EXISTS = 1359 +TRG_DOES_NOT_EXIST = 1360 +TRG_ON_VIEW_OR_TEMP_TABLE = 1361 +TRG_CANT_CHANGE_ROW = 1362 +TRG_NO_SUCH_ROW_IN_TRG = 1363 +NO_DEFAULT_FOR_FIELD = 1364 +DIVISION_BY_ZERO = 1365 +TRUNCATED_WRONG_VALUE_FOR_FIELD = 1366 +ILLEGAL_VALUE_FOR_TYPE = 1367 +VIEW_NONUPD_CHECK = 1368 +VIEW_CHECK_FAILED = 1369 +PROCACCESS_DENIED_ERROR = 1370 +RELAY_LOG_FAIL = 1371 +PASSWD_LENGTH = 1372 +UNKNOWN_TARGET_BINLOG = 1373 +IO_ERR_LOG_INDEX_READ = 1374 +BINLOG_PURGE_PROHIBITED = 1375 +FSEEK_FAIL = 1376 +BINLOG_PURGE_FATAL_ERR = 1377 +LOG_IN_USE = 1378 +LOG_PURGE_UNKNOWN_ERR = 1379 +RELAY_LOG_INIT = 1380 +NO_BINARY_LOGGING = 1381 +RESERVED_SYNTAX = 1382 +WSAS_FAILED = 1383 +DIFF_GROUPS_PROC = 1384 +NO_GROUP_FOR_PROC = 1385 +ORDER_WITH_PROC = 1386 +LOGGING_PROHIBIT_CHANGING_OF = 1387 +NO_FILE_MAPPING = 1388 +WRONG_MAGIC = 1389 +PS_MANY_PARAM = 1390 +KEY_PART_0 = 1391 +VIEW_CHECKSUM = 1392 +VIEW_MULTIUPDATE = 1393 +VIEW_NO_INSERT_FIELD_LIST = 1394 +VIEW_DELETE_MERGE_VIEW = 1395 +CANNOT_USER = 1396 +XAER_NOTA = 1397 +XAER_INVAL = 1398 +XAER_RMFAIL = 1399 +XAER_OUTSIDE = 1400 +XAER_RMERR = 1401 +XA_RBROLLBACK = 1402 +NONEXISTING_PROC_GRANT = 1403 +PROC_AUTO_GRANT_FAIL = 1404 +PROC_AUTO_REVOKE_FAIL = 1405 +DATA_TOO_LONG = 1406 +SP_BAD_SQLSTATE = 1407 +STARTUP = 1408 +LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR = 1409 +CANT_CREATE_USER_WITH_GRANT = 1410 +WRONG_VALUE_FOR_TYPE = 1411 +TABLE_DEF_CHANGED = 1412 +SP_DUP_HANDLER = 1413 +SP_NOT_VAR_ARG = 1414 +SP_NO_RETSET = 1415 +CANT_CREATE_GEOMETRY_OBJECT = 1416 +FAILED_ROUTINE_BREAK_BINLOG = 1417 +BINLOG_UNSAFE_ROUTINE = 1418 +BINLOG_CREATE_ROUTINE_NEED_SUPER = 1419 +EXEC_STMT_WITH_OPEN_CURSOR = 1420 +STMT_HAS_NO_OPEN_CURSOR = 1421 +COMMIT_NOT_ALLOWED_IN_SF_OR_TRG = 1422 +NO_DEFAULT_FOR_VIEW_FIELD = 1423 +SP_NO_RECURSION = 1424 +TOO_BIG_SCALE = 1425 +TOO_BIG_PRECISION = 1426 +M_BIGGER_THAN_D = 1427 +WRONG_LOCK_OF_SYSTEM_TABLE = 1428 +CONNECT_TO_FOREIGN_DATA_SOURCE = 1429 +QUERY_ON_FOREIGN_DATA_SOURCE = 1430 +FOREIGN_DATA_SOURCE_DOESNT_EXIST = 1431 +FOREIGN_DATA_STRING_INVALID_CANT_CREATE = 1432 +FOREIGN_DATA_STRING_INVALID = 1433 +CANT_CREATE_FEDERATED_TABLE = 1434 +TRG_IN_WRONG_SCHEMA = 1435 +STACK_OVERRUN_NEED_MORE = 1436 +TOO_LONG_BODY = 1437 +WARN_CANT_DROP_DEFAULT_KEYCACHE = 1438 +TOO_BIG_DISPLAYWIDTH = 1439 +XAER_DUPID = 1440 +DATETIME_FUNCTION_OVERFLOW = 1441 +CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG = 1442 +VIEW_PREVENT_UPDATE = 1443 +PS_NO_RECURSION = 1444 +SP_CANT_SET_AUTOCOMMIT = 1445 +MALFORMED_DEFINER = 1446 +VIEW_FRM_NO_USER = 1447 +VIEW_OTHER_USER = 1448 +NO_SUCH_USER = 1449 +FORBID_SCHEMA_CHANGE = 1450 +ROW_IS_REFERENCED_2 = 1451 +NO_REFERENCED_ROW_2 = 1452 +SP_BAD_VAR_SHADOW = 1453 +TRG_NO_DEFINER = 1454 +OLD_FILE_FORMAT = 1455 +SP_RECURSION_LIMIT = 1456 +SP_PROC_TABLE_CORRUPT = 1457 +ERROR_LAST = 1457 + diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/ER.pyc b/env/lib/python2.7/site-packages/MySQLdb/constants/ER.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1554861a52b4bfe0b378f662d5538b41612f0079 GIT binary patch literal 16789 zcmeI3b(|b!(#NZi0Kwg1aZez)Gdt6>JM37xXR^D63`r`GKuAJ%0t9z=cXxMpw{v%Q zKTd(Wd+S$E_v}RO|M!o(``kC%Pe1+i^VC!JRL?E>@rq+FJngf_R7(HD_U{4qzmbo| z5-E`wnS@D~AX$QRNs=W=mm*n;bZL^MNym_kAzg-K8Pa7*mL*+|WI58YBx6aJCt03! z1(Fp=S0q`HbS09NNLMCVnRFGBRY+GQS(S7(lGR98Ct00z4U#oT*Cbh!bS;v#NY^G= zn{*wLbx7AGS(kJ@lJ!W}Ct06#1Ck9$Hze7RbR&|DNH-?gn6!tahjbH?O-MH-*_3oM zlFdjrC)u2I3z98JwaOjbt~{-AQ&Q-GgKg(mhG`B;AW- zFVek9_9oqjWFOLfN%ke(k7Pg6{YmyGJ%Ho@(i};Sw3nopG*6NzEszvQBa(=;NKz#2 zBk3dUC+R0Gk(5XeBsq|DfMkHQOj0JTkW@&kBvsNHNsY8lQYW2AGLbYUiAfWZgtS4@ zAZ?N~Nhgs^A{`_dBpo6dA{{0fCKVDPJ&5EW(t}A3COw4Y5Yj_Q4kc}ov`7ylIgE5N z$z;+gBvVMIl1wF45+$8RGL7_blEX=lAUT3`I>~g>86-1Ek0d#g^eB>}NN1AFBt4qs zXwq3Evq)!?%qE>fGKcgSl4D5clFTI?AsHcUle9_ak<24KmgHE{<4BGpJ)Y!v()lFw zNlzd-f%HU@6G=}ZIf?XSl9NeKAvuNgRFYFkPa`>v^mLNbNzWiTgY-<2GfB@PIg9jc zlCw$AAvuTiT#|E1&m%dH^n8-@NiQI|fb>F=3rQ~`xrp>)l8Z?%A-RO~Qj$waFC)2( z^m3BRNv|Neg7iv~D@m^+xr+2^lB-FtA-RV1T9Ru?uOqpR^m>x(NpB#zf%Ha_8%b{> zxry{%xr_8}lDkRoA-RY2UXpuB z?<2X7^nQ~2Ngp72fb>C<2T30yd5H93l7~qjA$f%KQIbbVA0v5;^l_5MNuMBjg7is} zCrO_od5ZLDlBY?ZA$f-MS(0Z-pCfsW^m&r!Nnap&f%HX^7fD|td5QF8l9x$eA$f)L zRgzapUn6;q^mUTgN#7uOgY-?3H%Z?jd5iRIlDA3UA$f=NU6OZ6-y?aC^nH@|Nk1U@ zfb>I>4@o~F`H1v$B%dSwJjv%tzd-T@(l3&Hk@QO>Un2c7$(KpLLh=>TuabO~^lKzv zBmFwb*Ga!Y@(t2&l6;f&TO{8i{Wi(BNxwt#9n$ZTe3$flB;OmlKhhNS0uk8{WZz2Nq2<{VT~|N&iOj zH`2e8{GIe4B>y1&C&@oaKOy;q^iz^gNk1d`jPze5|04Z2$-hbeL-HT<|18AHEX=wD z%Mz?hvMkBE6w6YqOS3G^I)-Ho>oP3MurAB8EbDSC%dw7S8Oypn%kr!%u<kBFl=b zE3vG^x-!ektgEoB!n!KUs;sNAtj4-J%j&Fau&lwlCd-!@4fZ zx~%K5tjD@O%lfPvux!A(AY{t4d%jT?G zux!D)CCiqqTd{1#x;4wztlO|`!@4cYwyfK+Y{$Ai%l520us~B-vF^>XH|stu z`>^iIvM=j?Ec>zU&$2)30W1fw=2&v9y)3<~d6qnDfu+D2u|%vzmLh8(OCM`LOFwIg zrNnw5%Ym!|ECZ}%mNILFrNUZesj}8sYOHmZI_pH1iL5b8%$l$ytPPe1Ym=qPI*DZx z>mbV@>k!Kj>oChOtFQ>`K`aNc9?Wtu>me+MupY{CC~J$Q#d;XaVXTu`CbLdqnZi1i zWh$$(DC;zqX{?8{9L{(MMnv(93f#X6g1 zHtQUgIjqO99K$-7WiIOo%Lr?mrOi5zWghFXEXT4Q$8sF&@hr!)&S#m=dIHM{tS7RZ z$a)gXNvtQcoXmO(%PFjv) zvYg9$9?N;G=d+y8dI8G?tQWFe$a)dWMXVRIT+Dh2%O$LrvRuk~8Ovp?m$O{XdIifB ztXHyJ$$AybRjgODT+Mn7%QdXmvRuo09m{pB*Rx#DdIQT1tT(dU$a)jYO{_Pw+{}6l z%Pp+8vfRpg8_R91x3k>NdI!rLtaq~9$$A&dU95Mr+|7Cq%RQ|3vfRshAIp8L_p{v3 z`T)xVtPiq0$ode=L#z+8Jk0tC%Ok9hvOLQA7|Ua;(3 zJk9zH%QLLcvOLTB9Lsa8&$B$w`U1-ftS_>>$odk?ORO)myv+Iv%PXv}vb@Ur8p~^} zud}?)`UcAztZ%Zs$@&({TdZ%hyv_O!%R8*^vb@Xs9?N^I@3Xwm`T@%a&JS5XJ=5mSojupublOPI z;r3U1`m~-Y^JX5^Gy8D=JG(ziXS8S7lVjV{C%1c!o;<&2_SC8K=8hXXcE&H4B%1Ln z;Mc%!fZqbY1AY(u0r(^EC*aS($G~5JzXE>){to;D_$TlQ@G0;a@Gs!sz<&T*%D})9 zz>>gHz|z1NU>RUpU^!qcuspB=up+P$urja;uqv<`usW~?uqLn;ur{y`ur9D3us*N> zupzJ!urbgBYyxZwYzAx&YyoTuYz1r$Yy)fyYzJ%)>;Q}d#sfP7I{_1boq=6|U4h+z z-GM!TJ%PP|y@7pzeS!Ue{ec639MB8ofdUW#MW7Gp2TH(!zyMGNDnJ#e0d-&^5CaL& z0GhxgU=SDrh57%&-_0!#($P)0MR0fz%e0MmgPz>&aFz)aw1 zU=}bNm;)RG%mqe(HZTu37B~(#9+(fD0GtS%1e^?<0-Oq*2AmF@0h|e(1)L3>1Dp$- z2b>RF09*)M1Y8VU0$d7Q23!tY0bB`O1zZhW16&JS2V4)_0Ne=N1l$bV0^ADR2HXzZ z0o)1P1>6nX1KbPT2iy-l06Yjh1Uw8p0z3*l20RWt0Xzvj1w0Kr13U{n2RskF0K5pi z1iTEq0=x>m2D}cu0lW#k1-uQs1H22o2fPn_0DK611bhzoJn#kJi@=wFF9Tlzz6yK| z_&V?n;G4j=fNule0lo`-5BNUt1K@|ikANQoKLLIU{0#Ux@C)FVz^{N`1HS=&3;YiF zJ@5zMkHDXRKLZ~Fe*yjq{0;a!@DJdhz$d_`z-Pd}fPVx30cdFh14{r)0!sl)17mMz)HZ%z$(D1z-qwiz#71sz*@lCz&gOXz z_5t<<_5=0@4ghjMFOUZcKm-(lKA;~c0S5vDKpCh2RiFmcfr&s2BtQdb0+WD2UYO4>%Y&1UM9E0fzyTfhoXLz{*kP|A51RBY^3^4B$xMC}1XVG%yR84a@P6AE_P618@P6JK{&H&B?&H~N`&H>H^&I8T|E&whBE&?tF zE&(nDE(0zHt^lqCt^%$Gt^uwEt^=+IZUAlsZUSxwZUJruZUb%y?f~ut?gH)x?g8!v z?gQ=z9snK$9s(W)9swQ&9s?dXR6WgVFJoy|tEIE2wp#voe=h0I_Ybs}wf1T$$yIQ% z1TJcA%U5VPO4_T~zxiCX(aOhBt`W70rE=6>b)m*auGd;uTBxrWSYvuC5BQqoAg zpEVZZTD`THrb1MX8c};i8!hV}!g^cPTBB90HLHcuQB4|!7G~8MHR&3) zKgtiFhrgpxN(NfRX1VM_FEs0|foRy@7sYWcZq=%-e7Tl{C3l+q@s(``T`kpIC5XAx zHW-&oR#=How3$R=oRA@!DVjF_ULr}I0KIvM}hxFk%N@~qGZ~BU7du?m_Yf07*&-Ul4 zg`__>5Mjag?3&hA=*{Krk)&0KswKR~@2qZj7S|ru+cK35{a^#l>Oi$Nh*?$A*6j6F z+wQb!1?z|zb)HWgd5x=TIW^6SvS%`3Df%}OgVE6g{#x=zZKn^BOz z3%OCNwaOU2Wa4WCb2ZiWDY%|OV5zeEH8c*_*4uU->d`&D#5UX2qn?YCY?m-ZRH-+H zTN9g+JruOC>e2{42SO`VZEhtKa8%4S%MBm8Vtg zN7cSYzsoHwI%h`UUClca%wyO$v1&$YCfM0n*kzv?SyJk&=E}Ys**z$oEim`|!2U6LcmFU5Zw)>@eKU5wTr=G)Rg1yTaCA|*TvJEto(&gX2+1IQ%w1S(4t}J}pm*ooN%kIzF zqBBJv6_5E2x1mw1Nyo_o!sy)GZ1H5~oECLg^|+Rg3e7lbZ)p9(2AJ|&{CDqan)zRQ zn7+kHYk?l!@A6r>j)eVzRhR5f^J;^oeB_JG%r*5r&1xPZ_J^9)q*X>YDCqf zRI9o=hUHe8=G0w8!5D-2S+uXkaDHa)9%iAV+3NHCwlE7L<}Gd8;4UC4_X0j896rkHWutakY@3q$sX18b#f8wrVf|I}ZUs;R|6PQJ&UsWb~k zcN5-Hs+Jlh^I;OT&<^vpe_?s`T%$kn@Qj8uTY}d5a~@yIrQSGa&Jq4>bo_#aA9u8v zPtkyKxJst=n zC9O2YGtD!3WUn!Ww(w_ZUy`oKef9#c>GbtCm#Su=akFl&#VrMIaBYB21@{cMfo8ul znxNIR6gjCb41cB9Ty<$!zD1&=gHy!w_ zj=zK>bfL!4#AeB44-er_AqFEfnZt^6mWg3+%ySgl8(U*)?Ac2(0rQDTt{Al{wL;{( zfyRXrE9i0_=P0;APh5hzV3)FX3-`!@AWwVQrnrNnYQZv=e)DP;;-ICuYO7%eoLCru zreff*^XYw9NvYuhXo2>)RxaBSVZepAz@1{bne-#-hg@ladp@_iMS_MuSB(b4A#5@B zQfOA{?vlG#fgB=?U&+~FHnt?PYHtdeT{zr%24@D<+bop}?J@R1=<14)K9!kV$cDp6 z9p(0%w%7AMb|JAfGi4pUU0yCG4E3rHM5Jci3W5Mw;Z=K+>p% z15IedKo*)YsGo{)D)KuXcT(AS+(D2H&!iCt9=xOLaK1L9%)N!v0#5kWW=TM`VSWh* zS}e^)HJB@z*DF;bGc4Z+Zw+3cla#n8!gCAA6ZYphtz~(BO7m`b-koO}7Z<$=Nd&Vu zN85xEByEH?qz%aC6J$@w)zT3>pg`*86L13?mcSMZrD8FP?RhU~z~+7O1@qWG3pm|H z{aLY*r5qk|3ZCgkc2IGlz!gM3s->EpplvRsWrjI=C+J3yGp5?5$bRI55~XceTClXi zeyh+#Ls7oj2v!xM98Lj29zpFk>0DQvm0sIVi}z{X=pHDXa6NFtYjpW34_3Z(WG9v? zWICFqHc%dT*G%v(3D=o&$$SZ(H-#Qxte}D41uDX>r7w-Nr2WGxvaagQI!kQ%{<`L32!AJGtUPeLMcD zQNalUu{!o4Fel3jTK!SEZY3Ibm-*p*xs=DtVHI|4!FGH2HtVXEQL(m1f0(`Tsa3VHh3Ocv=AE3 zc!>w;&J91sWp}X4e#Z}A=1Oc8p2OfZe#2j#W|O8i7MR?Q@EX6>FlpG!ZD){z`XkK* z%3W*NhIF*X1q_Fg>+7>)1r9P3Is#8Z#TTV*ceik+aWtuBg-6fv6W?{WyV1vY?s|MN zqnpIj?F>bb%u~RVVyi46ZKkEVOwBt__)-?M$RsJF)Rn6w9)iD%zSEWRhN#U zbtDwd^Qg0yO}%}CI4q>;&CsM`gbiG$^tohpUKvX~1#HHOLFJIME`YrVbBgP_z#wkfzoDai`!} zSL$hPoJk1S{$(N@2>eXetefY74yIONdjePPdf(AcJE5TP>UQHH#?uzm_S{J!3$Yx< za!V6NaEjTn*gQfAb1ud1a!Wl_8PZPzm88%22AB3h#Y!?b9GEfV2CO-g6yDVmJ1UO~ zDSKCE8m@y`YgaucoTK3CUAUR^OHYs}vJ^uh0g^H0Dw=3K;1{C2oh{wL1&c_KM#D!m z;{@4iNO(dxupnJVl(OlE&rj|F&DVF;ag*?g#D)pA#hf2rJkvA=lFw@ii8vioR59GMP<3co#r9`-3K zD2%6ap^}0FLSa-nGxO@PH>GLKLOnd6w-{ks33-Hw*?r_q7aBCpgloBzB|D+uW)p#} zkFFk>mo*~d`)rZbbX`a07t--yrPw7ibbqI7Sy))so{9h-11}1lJMjySVYE5hT2z5N z`x(6j&*;tRe%seOR~t92*lp1|cdxG)S$%4ORfZNMUS`~(ief5ad7t}FKV#b%Xh8Or zN&%Pd3cIgu6<*81{5*D`2<{QoS}bKrQ-kVoDL7@MDOf>f6!6VOoW~k*pN9~8%--qS zkSpSt2toB*UK6{Q!+V0{!rd(8NrjQmS<;8`!+{U6vuJC=p{En<%?4bg*$r%6zZsIv z8=H_d+t)cn4jiJ*q50f8w-Ees)5V3-v6n_Vx5JZ}D;ezs!<$sHsBe~?%gHOX2#DuY2N7I@h3a;32wA);~6yxVO3r(hs zLFC!d#Lpa_EBIs!RzdbtXzy@KqPXS-p~c3rt_Sh5EV&*%-}r_@eSO+tlP$fq0+D+# zZ}rQ}RU?1KcZ~mb?21wUL=ndyaA|wBx{%eyuvHy(LoKtB9dmG}WV#v0{(M%Cu~QXZ znig#8O?w1iQu<51_L08e?xL7Pk^LCJf{Dv?fv%l%mG{KNY>%OhcpWaoh}o3v?H!XXzl3RG`iRJrP}q(Tl|}En%+RoQ$;Z;+Pclv`NwfLOlX+jO@B$^rs?+J z6Ef|GZ}bEn-!F%9<`=Cc=Nsc!Zlm7WFXM`DDg2RN+bJWl@8YBVV|zuY<`3msac`%@ zg_(3$^C8K!m=DA9OHb<3uLe*YsKe-u^mO6xM`jU@GAO@Wj_CVtu>ii?eqQalgZ~P} z{)!v+Q-B_O!avV?O}fmr1h=;sa}8Os zB}73N%ns7*0C6%4OPz$l^C86GEZUmFSWr`=o#>7BGxmJLviAdjY%89cC|=4APx#b&S5`M0MKW<$^o#RZ(o zJoQLJusgj_WQG;t)9!h-PJk@XZ$z^$$P2HT#tYzG!&-_Nj%kZTQ^@is<2(3Cqp) z!47|xzzh$T3ikUCl=0j@nC_RtE||GSeu(OPqsrK&Fr#Y2iY1%)4@(| zlO8IwBOa8-eCYy81Al|u5OPIb2)-r#{(;zPKR&TNtJr(O2_~ed?kbD^^ReI*I|*8- zjJTtO@3U8Vdf*L^f(_Pd+ZZIBIsiWkEK&$=O-RquX71f(V{1=yR`@XUM)u!=&$$kJ8ehGk|(u5MVEjT?JTGrzQTKA#W>~1u8sI(C1dt|=aB3;?Onrv;0 zpiztr*yZ@<$h5g5<9lb%oiQ?Ar?e)|nK6FatYgQ|oH1qmocZnPvu8~hxBK{!8SQC1 z%$Yp(sL4l68yWBa?-rdhzVrWO86U;ttTTRkxzEwFb>7Tr`{6^*$TjxE%P~ug;s5>j Oe-ikg1pYrs;Qs*Qn7AVV literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/FIELD_TYPE.py b/env/lib/python2.7/site-packages/MySQLdb/constants/FIELD_TYPE.py new file mode 100644 index 0000000..8a57b17 --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/constants/FIELD_TYPE.py @@ -0,0 +1,37 @@ +"""MySQL FIELD_TYPE Constants + +These constants represent the various column (field) types that are +supported by MySQL. + +""" + +DECIMAL = 0 +TINY = 1 +SHORT = 2 +LONG = 3 +FLOAT = 4 +DOUBLE = 5 +NULL = 6 +TIMESTAMP = 7 +LONGLONG = 8 +INT24 = 9 +DATE = 10 +TIME = 11 +DATETIME = 12 +YEAR = 13 +NEWDATE = 14 +VARCHAR = 15 +BIT = 16 +NEWDECIMAL = 246 +ENUM = 247 +SET = 248 +TINY_BLOB = 249 +MEDIUM_BLOB = 250 +LONG_BLOB = 251 +BLOB = 252 +VAR_STRING = 253 +STRING = 254 +GEOMETRY = 255 + +CHAR = TINY +INTERVAL = ENUM diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/FIELD_TYPE.pyc b/env/lib/python2.7/site-packages/MySQLdb/constants/FIELD_TYPE.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a01477faab41fa40d99f577a114c305871217efc GIT binary patch literal 1002 zcmbV~OHbQC5Xb*XAb=sf-_Xj(^iV9JN|marYC;THvK^W@RN0H=WVXd>NTPUylw0rp zLj7Kq`lOGYg+kAbm7jNBp8t%t@Tp{dcz+#rar?{Z_e=fHK57skG;3A7Bc3|fI$ z0j)x;g4Q6`Ks?LzE=_8|5kwYGgoUHbsEk7oG+ zPcYU9Ce2sAeeAh@Esok}u6;Dc&WUlWCq&U`#Ql8AZkn zW0o<;uo&}<1xAUn$XH@5Gd?rEFupRrF}^c?Fs>Ot8NV36HNx^kO~sw!mV+`)zb}J1dDRf_(RF-;PX&jwuKQFE7MT$4W@qbjiVJk54 zrW@Ug3EOeiuU8eXFmP*LE4Z;)Dhs=@xT#6wkLpHoGirExTpsfF$kUv-^}vl9Z8L)r z!(Kg>+c>ZIWqrmyvZgkjRwhT8Qyq-b%%M)43{yw;ubf`mafTChG3Xy2Jaw{E$;ZQ_ s`!0DaGsoN(>Ns~7(7C^+2fB!RKEE8$xF=t*!0eeuF<;F6$D^zM0JTZUo&W#< literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/FLAG.py b/env/lib/python2.7/site-packages/MySQLdb/constants/FLAG.py new file mode 100644 index 0000000..00e6c7c --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/constants/FLAG.py @@ -0,0 +1,23 @@ +"""MySQL FLAG Constants + +These flags are used along with the FIELD_TYPE to indicate various +properties of columns in a result set. + +""" + +NOT_NULL = 1 +PRI_KEY = 2 +UNIQUE_KEY = 4 +MULTIPLE_KEY = 8 +BLOB = 16 +UNSIGNED = 32 +ZEROFILL = 64 +BINARY = 128 +ENUM = 256 +AUTO_INCREMENT = 512 +TIMESTAMP = 1024 +SET = 2048 +NUM = 32768 +PART_KEY = 16384 +GROUP = 32768 +UNIQUE = 65536 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/FLAG.pyc b/env/lib/python2.7/site-packages/MySQLdb/constants/FLAG.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30d9007785d0dabd590abe3a960e490967c8d55f GIT binary patch literal 714 zcmaKpJ#X7E5Qfj+wqiT(Kj4_97SN?jQN&JUL#QMxGBucsAd8I6RuK)6PLM5~`*X8q z=uv6WtrGN*FYo2)$m_gLoL?_*w17WP3&(5x^mhaYV8|A*7VtK(Ht-Ix4)89pF7O_( z9`HV}KJWps0q`NPA@C8f5pV~X1N;Km1@JMjG4Khn3GgYfX*0hBehF*_d#5L$Gn#6tesP>PNFtaXrk^(p~~|^rO`%mQVV@94bj5P9Y@+LkZp^u#n57A zK`gENRqVGE4*N$HDu8tz{W(mQ98<+WPCryKMyXlFiD;bbV{_qeZea*6l@UXr?$> zq;!+{(M{roUPR3Zm#80lTe=8i(?PZMXfxUkw!nCi(58wWigmI{<0kiec~`gw|DZ#Z zZmLDC-KDCfcKJTbPtq0Dqg%?odwMoURehR&cC|F(<0&tGDpnITtp!=Zupa-A^ zpd(Nb=pm>f=n<$9=rO1<=onNC`T)e_F!XyO-0a2AjOFPpPsN;FxY}b`qmN@*8E@F? z!@;~UTZWEpoyX0dX;W_4qs5A0W$U$Pwno#` zP~)d@Y{O`_8_*9J1snyifU|(-fH1!WQg0^*WaE%f6xywd0tcjD<;ktY9%jTbFwQ}zst4pyxojm^3UD!_w`Sy XBCO#1*6I6=ISq68V?xx8I{)8SgF1W` literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/__init__.py b/env/lib/python2.7/site-packages/MySQLdb/constants/__init__.py new file mode 100644 index 0000000..3da4a0e --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/constants/__init__.py @@ -0,0 +1 @@ +__all__ = ['CR', 'FIELD_TYPE','CLIENT','REFRESH','ER','FLAG'] diff --git a/env/lib/python2.7/site-packages/MySQLdb/constants/__init__.pyc b/env/lib/python2.7/site-packages/MySQLdb/constants/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2b17bead049e8b291776dd81ca343262ce212f8 GIT binary patch literal 265 zcmYL@%}N7749C+CS1I@gKEPgVz>60VwNACLEp~T3=q1eV40UjwU79HL=H18j>cMOg z49Pzq{1P(yKAwDi{**QRS)%z$gHKeP`T*Pz+z8wl+yQJ7c-CP8MS7@!3{_^iOf=0G zCcCBb>A^^UWR@+=s+69}%{({7{T?>CjC(k{zFVaOt@Z?wZ5pCfd-xY#Ym1NUw~ROK zHZZ!1Y!}eS4{Sn(-A-QGcs4yp4&qNcTff?kXI$=zb>=Fp+sI<0FcO6rglMWOM|$<* Ot#$8>zwAF?4fq8SvO7Ki literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/converters.py b/env/lib/python2.7/site-packages/MySQLdb/converters.py new file mode 100644 index 0000000..35b9d0b --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/converters.py @@ -0,0 +1,189 @@ +"""MySQLdb type conversion module + +This module handles all the type conversions for MySQL. If the default +type conversions aren't what you need, you can make your own. The +dictionary conversions maps some kind of type to a conversion function +which returns the corresponding value: + +Key: FIELD_TYPE.* (from MySQLdb.constants) + +Conversion function: + + Arguments: string + + Returns: Python object + +Key: Python type object (from types) or class + +Conversion function: + + Arguments: Python object of indicated type or class AND + conversion dictionary + + Returns: SQL literal value + + Notes: Most conversion functions can ignore the dictionary, but + it is a required parameter. It is necessary for converting + things like sequences and instances. + +Don't modify conversions if you can avoid it. Instead, make copies +(with the copy() method), modify the copies, and then pass them to +MySQL.connect(). + +""" + +from _mysql import string_literal, escape_sequence, escape_dict, escape, NULL +from MySQLdb.constants import FIELD_TYPE, FLAG +from MySQLdb.times import * + +try: + from types import IntType, LongType, FloatType, NoneType, TupleType, ListType, DictType, InstanceType, \ + StringType, UnicodeType, ObjectType, BooleanType, ClassType, TypeType +except ImportError: + # Python 3 + long = int + IntType, LongType, FloatType, NoneType = int, long, float, type(None) + TupleType, ListType, DictType, InstanceType = tuple, list, dict, None + StringType, UnicodeType, ObjectType, BooleanType = bytes, str, object, bool + +import array + +try: + ArrayType = array.ArrayType +except AttributeError: + ArrayType = array.array + +try: + set +except NameError: + from sets import Set as set + +def Bool2Str(s, d): return str(int(s)) + +def Str2Set(s): + return set([ i for i in s.split(',') if i ]) + +def Set2Str(s, d): + return string_literal(','.join(s), d) + +def Thing2Str(s, d): + """Convert something into a string via str().""" + return str(s) + +def Unicode2Str(s, d): + """Convert a unicode object to a string using the default encoding. + This is only used as a placeholder for the real function, which + is connection-dependent.""" + return s.encode() + +Long2Int = Thing2Str + +def Float2Str(o, d): + return '%.15g' % o + +def None2NULL(o, d): + """Convert None to NULL.""" + return NULL # duh + +def Thing2Literal(o, d): + + """Convert something into a SQL string literal. If using + MySQL-3.23 or newer, string_literal() is a method of the + _mysql.MYSQL object, and this function will be overridden with + that method when the connection is created.""" + + return string_literal(o, d) + + +def Instance2Str(o, d): + + """ + + Convert an Instance to a string representation. If the __str__() + method produces acceptable output, then you don't need to add the + class to conversions; it will be handled by the default + converter. If the exact class is not found in d, it will use the + first class it can find for which o is an instance. + + """ + + if o.__class__ in d: + return d[o.__class__](o, d) + cl = filter(lambda x,o=o: + type(x) is ClassType + and isinstance(o, x), d.keys()) + if not cl: + cl = filter(lambda x,o=o: + type(x) is TypeType + and isinstance(o, x) + and d[x] is not Instance2Str, + d.keys()) + if not cl: + return d[StringType](o,d) + d[o.__class__] = d[cl[0]] + return d[cl[0]](o, d) + +def char_array(s): + return array.array('c', s) + +def array2Str(o, d): + return Thing2Literal(o.tostring(), d) + +def quote_tuple(t, d): + return "(%s)" % (','.join(escape_sequence(t, d))) + +conversions = { + IntType: Thing2Str, + LongType: Long2Int, + FloatType: Float2Str, + NoneType: None2NULL, + TupleType: quote_tuple, + ListType: quote_tuple, + DictType: escape_dict, + InstanceType: Instance2Str, + ArrayType: array2Str, + StringType: Thing2Literal, # default + UnicodeType: Unicode2Str, + ObjectType: Instance2Str, + BooleanType: Bool2Str, + DateTimeType: DateTime2literal, + DateTimeDeltaType: DateTimeDelta2literal, + set: Set2Str, + FIELD_TYPE.TINY: int, + FIELD_TYPE.SHORT: int, + FIELD_TYPE.LONG: long, + FIELD_TYPE.FLOAT: float, + FIELD_TYPE.DOUBLE: float, + FIELD_TYPE.DECIMAL: float, + FIELD_TYPE.NEWDECIMAL: float, + FIELD_TYPE.LONGLONG: long, + FIELD_TYPE.INT24: int, + FIELD_TYPE.YEAR: int, + FIELD_TYPE.SET: Str2Set, + FIELD_TYPE.TIMESTAMP: mysql_timestamp_converter, + FIELD_TYPE.DATETIME: DateTime_or_None, + FIELD_TYPE.TIME: TimeDelta_or_None, + FIELD_TYPE.DATE: Date_or_None, + FIELD_TYPE.BLOB: [ + (FLAG.BINARY, str), + ], + FIELD_TYPE.STRING: [ + (FLAG.BINARY, str), + ], + FIELD_TYPE.VAR_STRING: [ + (FLAG.BINARY, str), + ], + FIELD_TYPE.VARCHAR: [ + (FLAG.BINARY, str), + ], + } + +try: + from decimal import Decimal + conversions[FIELD_TYPE.DECIMAL] = Decimal + conversions[FIELD_TYPE.NEWDECIMAL] = Decimal +except ImportError: + pass + + + diff --git a/env/lib/python2.7/site-packages/MySQLdb/converters.pyc b/env/lib/python2.7/site-packages/MySQLdb/converters.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b44511e85fcf97fb24c2aa7a72c4b5dab160f5b4 GIT binary patch literal 7186 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 len(self._rows): return None + result = self._rows[self.rownumber] + self.rownumber = self.rownumber+1 + return result + + def fetchmany(self, size=None): + """Fetch up to size rows from the cursor. Result set may be smaller + than size. If size is not defined, cursor.arraysize is used.""" + self._check_executed() + end = self.rownumber + (size or self.arraysize) + result = self._rows[self.rownumber:end] + self.rownumber = min(end, len(self._rows)) + return result + + def fetchall(self): + """Fetchs all available rows from the cursor.""" + self._check_executed() + if self.rownumber: + result = self._rows[self.rownumber:] + else: + result = self._rows + self.rownumber = len(self._rows) + return result + + def scroll(self, value, mode='relative'): + """Scroll the cursor in the result set to a new position according + to mode. + + If mode is 'relative' (default), value is taken as offset to + the current position in the result set, if set to 'absolute', + value states an absolute target position.""" + self._check_executed() + if mode == 'relative': + r = self.rownumber + value + elif mode == 'absolute': + r = value + else: + self.errorhandler(self, ProgrammingError, + "unknown scroll mode %s" % repr(mode)) + if r < 0 or r >= len(self._rows): + self.errorhandler(self, IndexError, "out of range") + self.rownumber = r + + def __iter__(self): + self._check_executed() + result = self.rownumber and self._rows[self.rownumber:] or self._rows + return iter(result) + + +class CursorUseResultMixIn(object): + + """This is a MixIn class which causes the result set to be stored + in the server and sent row-by-row to client side, i.e. it uses + mysql_use_result(). You MUST retrieve the entire result set and + close() the cursor before additional queries can be peformed on + the connection.""" + + _defer_warnings = True + + def _get_result(self): return self._get_db().use_result() + + def fetchone(self): + """Fetches a single row from the cursor.""" + self._check_executed() + r = self._fetch_row(1) + if not r: + self._warning_check() + return None + self.rownumber = self.rownumber + 1 + return r[0] + + def fetchmany(self, size=None): + """Fetch up to size rows from the cursor. Result set may be smaller + than size. If size is not defined, cursor.arraysize is used.""" + self._check_executed() + r = self._fetch_row(size or self.arraysize) + self.rownumber = self.rownumber + len(r) + if not r: + self._warning_check() + return r + + def fetchall(self): + """Fetchs all available rows from the cursor.""" + self._check_executed() + r = self._fetch_row(0) + self.rownumber = self.rownumber + len(r) + self._warning_check() + return r + + def __iter__(self): + return self + + def next(self): + row = self.fetchone() + if row is None: + raise StopIteration + return row + + +class CursorTupleRowsMixIn(object): + + """This is a MixIn class that causes all rows to be returned as tuples, + which is the standard form required by DB API.""" + + _fetch_type = 0 + + +class CursorDictRowsMixIn(object): + + """This is a MixIn class that causes all rows to be returned as + dictionaries. This is a non-standard feature.""" + + _fetch_type = 1 + + def fetchoneDict(self): + """Fetch a single row as a dictionary. Deprecated: + Use fetchone() instead. Will be removed in 1.3.""" + from warnings import warn + warn("fetchoneDict() is non-standard and will be removed in 1.3", + DeprecationWarning, 2) + return self.fetchone() + + def fetchmanyDict(self, size=None): + """Fetch several rows as a list of dictionaries. Deprecated: + Use fetchmany() instead. Will be removed in 1.3.""" + from warnings import warn + warn("fetchmanyDict() is non-standard and will be removed in 1.3", + DeprecationWarning, 2) + return self.fetchmany(size) + + def fetchallDict(self): + """Fetch all available rows as a list of dictionaries. Deprecated: + Use fetchall() instead. Will be removed in 1.3.""" + from warnings import warn + warn("fetchallDict() is non-standard and will be removed in 1.3", + DeprecationWarning, 2) + return self.fetchall() + + +class CursorOldDictRowsMixIn(CursorDictRowsMixIn): + + """This is a MixIn class that returns rows as dictionaries with + the same key convention as the old Mysqldb (MySQLmodule). Don't + use this.""" + + _fetch_type = 2 + + +class Cursor(CursorStoreResultMixIn, CursorTupleRowsMixIn, + BaseCursor): + + """This is the standard Cursor class that returns rows as tuples + and stores the result set in the client.""" + + +class DictCursor(CursorStoreResultMixIn, CursorDictRowsMixIn, + BaseCursor): + + """This is a Cursor class that returns rows as dictionaries and + stores the result set in the client.""" + + +class SSCursor(CursorUseResultMixIn, CursorTupleRowsMixIn, + BaseCursor): + + """This is a Cursor class that returns rows as tuples and stores + the result set in the server.""" + + +class SSDictCursor(CursorUseResultMixIn, CursorDictRowsMixIn, + BaseCursor): + + """This is a Cursor class that returns rows as dictionaries and + stores the result set in the server.""" + + diff --git a/env/lib/python2.7/site-packages/MySQLdb/cursors.pyc b/env/lib/python2.7/site-packages/MySQLdb/cursors.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b494c21e6880a8c485f8359f472bdfc200459342 GIT binary patch literal 22201 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 CZU>eC literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/MySQLdb/release.py b/env/lib/python2.7/site-packages/MySQLdb/release.py new file mode 100644 index 0000000..2e7119c --- /dev/null +++ b/env/lib/python2.7/site-packages/MySQLdb/release.py @@ -0,0 +1,4 @@ + +__author__ = "Andy Dustman " +version_info = (1,2,5,'final',1) +__version__ = "1.2.5" diff --git a/env/lib/python2.7/site-packages/MySQLdb/release.pyc b/env/lib/python2.7/site-packages/MySQLdb/release.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6bdd1efb09eee052136bb7197519fa01e77f2b8b GIT binary patch literal 336 zcmZ9I!Arw16vordbu#tpd3fr@1P9_}j49%23S)ZdC8W*k45mrxO9#FA2l(H5_25fU z1OxfyefhrkAQ^w2%|710o=f(#CUmZ8<2gYymJ_EePne#te8hChcG+?CF9^3z_w)M> zL#^C=S*f;!1~9DmwKA5MzFwJxVrCQ(Cx?j2IAt+bSA4;*pR!o~3l8=W9E@xnn`Z4.1 returns TIMESTAMP in the same format as DATETIME + if s[4] == '-': return DateTime_or_None(s) + s = s + "0"*(14-len(s)) # padding + parts = map(int, filter(None, (s[:4],s[4:6],s[6:8], + s[8:10],s[10:12],s[12:14]))) + try: + return Timestamp(*parts) + except (SystemExit, KeyboardInterrupt): + raise + except: + return None diff --git a/env/lib/python2.7/site-packages/MySQLdb/times.pyc b/env/lib/python2.7/site-packages/MySQLdb/times.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d830b9aadb913dbbdb9d7b1e81a56e4730fd8f0 GIT binary patch literal 5141 zcmd5=OOG5^6+Tt{nC_m3$B%i~agwqja%08a!A5|r2w^f4$x1v)YC2#whE`2iji)^I z=+vz-X~`oY!UBoxS@0XOWWkaJEb=4Ruw+NJAo#v>yL;LL3X0@G%ygYTb>HWl?>uf- zzF2Pk`saV|4Q2A@;`{q}%-=vlkv^y+p(}|aeK7b`BylCJNWUTu->Z^TC9O%nCTUgr z;9cosL|yuIJEA7Zf}{=UH^hlBuqhFSv?RiiMTszJN%>{vS0t>Q@b`SI9 zD9ubK{wMx++73_H1WEE?kZ?r1$|e$BvN2`QrL7#JGsuKdQU-RB6$~_GfrAc`xQvP* z8FFzx6+CaT`w~crk0Z}SK2a2Sp9-`^w3s%B<=NAyD7_DN?mzU(cz9^MID;&K6(i0} z8Dzt#6LU?S=5q%hkJxk6!0ALTCrZo~xGt1cnC=hqA~xM{ZxD>)Zj?RkCh=Z(q&mFa z`A*m1=(k3}@Gy8BnXW23-0M_=x_O$~|XCZM92boE{i9JqB%(JM(UvA*nIqXXfd`jdK zX{qA>fwc5mN(-H*qnXH8(K;_O4NRD+$PdB5$N=;cXM*YVW9Os^k!{UFef`*-Yj$mO zMb?iijD1|dm1h-s2I|OuRn~Xg++`fWxqxpI z4f8BC6DJ-U>(ca-r#>g^pft{oN(jm=4)UWy!T6%lvx>zL!qT7|^zJ{{-r9b*ckepd z48w{z7o83K&m4zFR-Mw#s1MBP&rP3#TN!s|~-vD>@%;C=36 zF=5Y7sPfVC|AQydAa_`o0-41TKq7mUsR44a@g{jTwkDXMnB(70a0CD#J$~ZKBMidF zBBY`-e?^c0YrxFOn2H<&LRCU2tTFFlE?TlWQy&=M<1uvV>cj?dI$5MiegiWf<7?|D z7v#9c=>M$7_Mf`)(eH%u>POiPsRAoyUG`l$Y)SD~aUACtBH0QV>j9MEVaR~qf(CZ{ z^Pp<9UQFXC+tC=N>>Du}ZR;&8zxXuOvPMR-3$CMu3bWt+CqJ&d}FiAMg#X;WEpvD9e)$7h8gO2pVQ zm5R~Ocp%~|IZZxp%dI$@;5MB#x9)7gKk81!;)`y|JgxZp3z+fe&$-AWAOI+X)d9U3 z%08HmacNG1NeHHi?G;r7N=1QEBLh_cd>BkdXOYotO$MOU*z~A+vK?n(sk-9E#=r&6 zMXiO2D6cq6sst!dTa!bP;*SLD;w}iFg;ETLC8+*PED=ESD7p-3{dEvUj?b*B!12$q zgLQ|EYJ^Q14~u*f{}fFAOYFZ&LY(-F-HL!<&nR+!7$is0c2VSo#!KQ&!><1-M-sLN zN>l$j8;F$hOri{NOMGmxrkaA}9vTf#F8~6ev8K@Yw)2WYrsg)BWm|bruo*!9gqQJW zQ{$^m{vQBB`~N3sOfXPY4E*7%U_fog^o77g>ocb*YcWtV-OXV_!@y}sR4~TBK|lsBbw?N+3>ck85 z{zX%G`QDRgSbBlMrOCU$`yQ?#lY+2gD{qEk{}PCOou!fC8OU0)_Lydl+mnmc6SPh1 z(XS>kPxx;VYrvToTP2hNBZh-3ye-%I}hfW(GE348%LcHPJ zg#WKh{J+g8q_>;FAk2q@fu;xCJ`Vf}dVD-$3r7uMS_?3g4s=7Ga_J0$P#NlBrVxds z|6LAZu6_=wz40iT)vcVx2A|cePjmRRfvO!pk!VtyyA{p9Z{6!{`*b%AFlsgbb-sR+ zgn`e$L-H+>yC5fisN9SDse{LU)BbGrJu1d@K`_. + + + Features + -------- + + - unicode awareness + + - request and response objects + + - various utility functions for dealing with HTTP headers such as + `Accept` and `Cache-Control` headers. + + - thread local objects with proper cleanup at request end + + - an interactive debugger + + - A simple WSGI server with support for threading and forking + with an automatic reloader. + + - a flexible URL routing system with REST support. + + - fully WSGI compatible + + + Development Version + ------------------- + + The Werkzeug development version can be installed by cloning the git + repository from `github`_:: + + git clone git@github.com:mitsuhiko/werkzeug.git + + .. _github: http://github.com/mitsuhiko/werkzeug + +Platform: any +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/SOURCES.txt b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/SOURCES.txt new file mode 100644 index 0000000..23565c7 --- /dev/null +++ b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/SOURCES.txt @@ -0,0 +1,288 @@ +AUTHORS +CHANGES +LICENSE +MANIFEST.in +Makefile +README.rst +setup.cfg +setup.py +Werkzeug.egg-info/PKG-INFO +Werkzeug.egg-info/SOURCES.txt +Werkzeug.egg-info/dependency_links.txt +Werkzeug.egg-info/not-zip-safe +Werkzeug.egg-info/top_level.txt +artwork/.DS_Store +artwork/logo.png +artwork/logo.svg +docs/Makefile +docs/changes.rst +docs/conf.py +docs/contents.rst.inc +docs/datastructures.rst +docs/debug.rst +docs/exceptions.rst +docs/http.rst +docs/index.rst +docs/installation.rst +docs/latexindex.rst +docs/levels.rst +docs/local.rst +docs/logo.pdf +docs/make.bat +docs/makearchive.py +docs/middlewares.rst +docs/python3.rst +docs/quickstart.rst +docs/request_data.rst +docs/routing.rst +docs/serving.rst +docs/terms.rst +docs/test.rst +docs/transition.rst +docs/tutorial.rst +docs/unicode.rst +docs/urls.rst +docs/utils.rst +docs/werkzeugext.py +docs/werkzeugstyle.sty +docs/wrappers.rst +docs/wsgi.rst +docs/_static/background.png +docs/_static/codebackground.png +docs/_static/contents.png +docs/_static/debug-screenshot.png +docs/_static/favicon.ico +docs/_static/header.png +docs/_static/navigation.png +docs/_static/navigation_active.png +docs/_static/shortly.png +docs/_static/shorty-screenshot.png +docs/_static/style.css +docs/_static/werkzeug.js +docs/_static/werkzeug.png +docs/_templates/sidebarintro.html +docs/_templates/sidebarlogo.html +docs/contrib/atom.rst +docs/contrib/cache.rst +docs/contrib/fixers.rst +docs/contrib/index.rst +docs/contrib/iterio.rst +docs/contrib/lint.rst +docs/contrib/profiler.rst +docs/contrib/securecookie.rst +docs/contrib/sessions.rst +docs/contrib/wrappers.rst +docs/deployment/cgi.rst +docs/deployment/fastcgi.rst +docs/deployment/index.rst +docs/deployment/mod_wsgi.rst +docs/deployment/proxying.rst +examples/README +examples/cookieauth.py +examples/httpbasicauth.py +examples/manage-coolmagic.py +examples/manage-couchy.py +examples/manage-cupoftee.py +examples/manage-i18nurls.py +examples/manage-plnt.py +examples/manage-shorty.py +examples/manage-simplewiki.py +examples/manage-webpylike.py +examples/upload.py +examples/contrib/README +examples/contrib/securecookie.py +examples/contrib/sessions.py +examples/coolmagic/__init__.py +examples/coolmagic/application.py +examples/coolmagic/helpers.py +examples/coolmagic/utils.py +examples/coolmagic/public/style.css +examples/coolmagic/templates/layout.html +examples/coolmagic/templates/static/about.html +examples/coolmagic/templates/static/index.html +examples/coolmagic/templates/static/not_found.html +examples/coolmagic/views/__init__.py +examples/coolmagic/views/static.py +examples/couchy/README +examples/couchy/__init__.py +examples/couchy/application.py +examples/couchy/models.py +examples/couchy/utils.py +examples/couchy/views.py +examples/couchy/static/style.css +examples/couchy/templates/display.html +examples/couchy/templates/layout.html +examples/couchy/templates/list.html +examples/couchy/templates/new.html +examples/couchy/templates/not_found.html +examples/cupoftee/__init__.py +examples/cupoftee/application.py +examples/cupoftee/db.py +examples/cupoftee/network.py +examples/cupoftee/pages.py +examples/cupoftee/utils.py +examples/cupoftee/shared/content.png +examples/cupoftee/shared/down.png +examples/cupoftee/shared/favicon.ico +examples/cupoftee/shared/header.png +examples/cupoftee/shared/logo.png +examples/cupoftee/shared/style.css +examples/cupoftee/shared/up.png +examples/cupoftee/templates/layout.html +examples/cupoftee/templates/missingpage.html +examples/cupoftee/templates/search.html +examples/cupoftee/templates/server.html +examples/cupoftee/templates/serverlist.html +examples/i18nurls/__init__.py +examples/i18nurls/application.py +examples/i18nurls/urls.py +examples/i18nurls/views.py +examples/i18nurls/templates/about.html +examples/i18nurls/templates/blog.html +examples/i18nurls/templates/index.html +examples/i18nurls/templates/layout.html +examples/partial/README +examples/partial/complex_routing.py +examples/plnt/__init__.py +examples/plnt/database.py +examples/plnt/sync.py +examples/plnt/utils.py +examples/plnt/views.py +examples/plnt/webapp.py +examples/plnt/shared/style.css +examples/plnt/templates/about.html +examples/plnt/templates/index.html +examples/plnt/templates/layout.html +examples/shortly/shortly.py +examples/shortly/static/style.css +examples/shortly/templates/404.html +examples/shortly/templates/layout.html +examples/shortly/templates/new_url.html +examples/shortly/templates/short_link_details.html +examples/shorty/__init__.py +examples/shorty/application.py +examples/shorty/models.py +examples/shorty/utils.py +examples/shorty/views.py +examples/shorty/static/style.css +examples/shorty/templates/display.html +examples/shorty/templates/layout.html +examples/shorty/templates/list.html +examples/shorty/templates/new.html +examples/shorty/templates/not_found.html +examples/simplewiki/__init__.py +examples/simplewiki/actions.py +examples/simplewiki/application.py +examples/simplewiki/database.py +examples/simplewiki/specialpages.py +examples/simplewiki/utils.py +examples/simplewiki/shared/style.css +examples/simplewiki/templates/action_diff.html +examples/simplewiki/templates/action_edit.html +examples/simplewiki/templates/action_log.html +examples/simplewiki/templates/action_revert.html +examples/simplewiki/templates/action_show.html +examples/simplewiki/templates/layout.html +examples/simplewiki/templates/macros.xml +examples/simplewiki/templates/missing_action.html +examples/simplewiki/templates/page_index.html +examples/simplewiki/templates/page_missing.html +examples/simplewiki/templates/recent_changes.html +examples/webpylike/example.py +examples/webpylike/webpylike.py +tests/__init__.py +tests/conftest.py +tests/test_compat.py +tests/test_datastructures.py +tests/test_debug.py +tests/test_exceptions.py +tests/test_formparser.py +tests/test_http.py +tests/test_internal.py +tests/test_local.py +tests/test_routing.py +tests/test_security.py +tests/test_serving.py +tests/test_test.py +tests/test_urls.py +tests/test_utils.py +tests/test_wrappers.py +tests/test_wsgi.py +tests/contrib/__init__.py +tests/contrib/test_atom.py +tests/contrib/test_cache.py +tests/contrib/test_fixers.py +tests/contrib/test_iterio.py +tests/contrib/test_securecookie.py +tests/contrib/test_sessions.py +tests/contrib/test_wrappers.py +tests/multipart/ie7_full_path_request.txt +tests/multipart/test_collect.py +tests/multipart/firefox3-2png1txt/file1.png +tests/multipart/firefox3-2png1txt/file2.png +tests/multipart/firefox3-2png1txt/request.txt +tests/multipart/firefox3-2png1txt/text.txt +tests/multipart/firefox3-2pnglongtext/file1.png +tests/multipart/firefox3-2pnglongtext/file2.png +tests/multipart/firefox3-2pnglongtext/request.txt +tests/multipart/firefox3-2pnglongtext/text.txt +tests/multipart/ie6-2png1txt/file1.png +tests/multipart/ie6-2png1txt/file2.png +tests/multipart/ie6-2png1txt/request.txt +tests/multipart/ie6-2png1txt/text.txt +tests/multipart/opera8-2png1txt/file1.png +tests/multipart/opera8-2png1txt/file2.png +tests/multipart/opera8-2png1txt/request.txt +tests/multipart/opera8-2png1txt/text.txt +tests/multipart/webkit3-2png1txt/file1.png +tests/multipart/webkit3-2png1txt/file2.png +tests/multipart/webkit3-2png1txt/request.txt +tests/multipart/webkit3-2png1txt/text.txt +tests/res/test.txt +werkzeug/__init__.py +werkzeug/_compat.py +werkzeug/_internal.py +werkzeug/_reloader.py +werkzeug/datastructures.py +werkzeug/exceptions.py +werkzeug/formparser.py +werkzeug/http.py +werkzeug/local.py +werkzeug/posixemulation.py +werkzeug/routing.py +werkzeug/script.py +werkzeug/security.py +werkzeug/serving.py +werkzeug/test.py +werkzeug/testapp.py +werkzeug/urls.py +werkzeug/useragents.py +werkzeug/utils.py +werkzeug/wrappers.py +werkzeug/wsgi.py +werkzeug/contrib/__init__.py +werkzeug/contrib/atom.py +werkzeug/contrib/cache.py +werkzeug/contrib/fixers.py +werkzeug/contrib/iterio.py +werkzeug/contrib/jsrouting.py +werkzeug/contrib/limiter.py +werkzeug/contrib/lint.py +werkzeug/contrib/profiler.py +werkzeug/contrib/securecookie.py +werkzeug/contrib/sessions.py +werkzeug/contrib/testtools.py +werkzeug/contrib/wrappers.py +werkzeug/debug/__init__.py +werkzeug/debug/console.py +werkzeug/debug/repr.py +werkzeug/debug/tbtools.py +werkzeug/debug/shared/FONT_LICENSE +werkzeug/debug/shared/console.png +werkzeug/debug/shared/debugger.js +werkzeug/debug/shared/jquery.js +werkzeug/debug/shared/less.png +werkzeug/debug/shared/more.png +werkzeug/debug/shared/source.png +werkzeug/debug/shared/style.css +werkzeug/debug/shared/ubuntu.ttf \ No newline at end of file diff --git a/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/dependency_links.txt b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/installed-files.txt b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/installed-files.txt new file mode 100644 index 0000000..92e8cda --- /dev/null +++ b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/installed-files.txt @@ -0,0 +1,91 @@ +../werkzeug/__init__.py +../werkzeug/_compat.py +../werkzeug/_internal.py +../werkzeug/_reloader.py +../werkzeug/datastructures.py +../werkzeug/exceptions.py +../werkzeug/formparser.py +../werkzeug/http.py +../werkzeug/local.py +../werkzeug/posixemulation.py +../werkzeug/routing.py +../werkzeug/script.py +../werkzeug/security.py +../werkzeug/serving.py +../werkzeug/test.py +../werkzeug/testapp.py +../werkzeug/urls.py +../werkzeug/useragents.py +../werkzeug/utils.py +../werkzeug/wrappers.py +../werkzeug/wsgi.py +../werkzeug/debug/__init__.py +../werkzeug/debug/console.py +../werkzeug/debug/repr.py +../werkzeug/debug/tbtools.py +../werkzeug/contrib/__init__.py +../werkzeug/contrib/atom.py +../werkzeug/contrib/cache.py +../werkzeug/contrib/fixers.py +../werkzeug/contrib/iterio.py +../werkzeug/contrib/jsrouting.py +../werkzeug/contrib/limiter.py +../werkzeug/contrib/lint.py +../werkzeug/contrib/profiler.py +../werkzeug/contrib/securecookie.py +../werkzeug/contrib/sessions.py +../werkzeug/contrib/testtools.py +../werkzeug/contrib/wrappers.py +../werkzeug/debug/shared/FONT_LICENSE +../werkzeug/debug/shared/console.png +../werkzeug/debug/shared/debugger.js +../werkzeug/debug/shared/jquery.js +../werkzeug/debug/shared/less.png +../werkzeug/debug/shared/more.png +../werkzeug/debug/shared/source.png +../werkzeug/debug/shared/style.css +../werkzeug/debug/shared/ubuntu.ttf +../werkzeug/__init__.pyc +../werkzeug/_compat.pyc +../werkzeug/_internal.pyc +../werkzeug/_reloader.pyc +../werkzeug/datastructures.pyc +../werkzeug/exceptions.pyc +../werkzeug/formparser.pyc +../werkzeug/http.pyc +../werkzeug/local.pyc +../werkzeug/posixemulation.pyc +../werkzeug/routing.pyc +../werkzeug/script.pyc +../werkzeug/security.pyc +../werkzeug/serving.pyc +../werkzeug/test.pyc +../werkzeug/testapp.pyc +../werkzeug/urls.pyc +../werkzeug/useragents.pyc +../werkzeug/utils.pyc +../werkzeug/wrappers.pyc +../werkzeug/wsgi.pyc +../werkzeug/debug/__init__.pyc +../werkzeug/debug/console.pyc +../werkzeug/debug/repr.pyc +../werkzeug/debug/tbtools.pyc +../werkzeug/contrib/__init__.pyc +../werkzeug/contrib/atom.pyc +../werkzeug/contrib/cache.pyc +../werkzeug/contrib/fixers.pyc +../werkzeug/contrib/iterio.pyc +../werkzeug/contrib/jsrouting.pyc +../werkzeug/contrib/limiter.pyc +../werkzeug/contrib/lint.pyc +../werkzeug/contrib/profiler.pyc +../werkzeug/contrib/securecookie.pyc +../werkzeug/contrib/sessions.pyc +../werkzeug/contrib/testtools.pyc +../werkzeug/contrib/wrappers.pyc +./ +dependency_links.txt +not-zip-safe +PKG-INFO +SOURCES.txt +top_level.txt diff --git a/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/not-zip-safe b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/top_level.txt b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/top_level.txt new file mode 100644 index 0000000..6fe8da8 --- /dev/null +++ b/env/lib/python2.7/site-packages/Werkzeug-0.10.1-py2.7.egg-info/top_level.txt @@ -0,0 +1 @@ +werkzeug diff --git a/env/lib/python2.7/site-packages/_markerlib/__init__.py b/env/lib/python2.7/site-packages/_markerlib/__init__.py new file mode 100644 index 0000000..e2b237b --- /dev/null +++ b/env/lib/python2.7/site-packages/_markerlib/__init__.py @@ -0,0 +1,16 @@ +try: + import ast + from _markerlib.markers import default_environment, compile, interpret +except ImportError: + if 'ast' in globals(): + raise + def default_environment(): + return {} + def compile(marker): + def marker_fn(environment=None, override=None): + # 'empty markers are True' heuristic won't install extra deps. + return not marker.strip() + marker_fn.__doc__ = marker + return marker_fn + def interpret(marker, environment=None, override=None): + return compile(marker)() diff --git a/env/lib/python2.7/site-packages/_markerlib/__init__.pyc b/env/lib/python2.7/site-packages/_markerlib/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbb09975cbc0b84c1348f1bc374c0f06c80145df GIT binary patch literal 1357 zcmcgrL2uJA6n;+9Ld&Wl5S$UG9@v6F+z>*V5aLpaY!Xv1R+_k7sN+Po8@dTDFaiIU zD-yiV0XFdiYQLZEe-%UZq`b(`BPeWnH>GOV_Pgn2W+ak!4|* zdi%6o70>jUeavHJ(v!5U+JnWW(&a(Dt-9_sb;@sA-!$5#vd-;VSzRqsDJxTXDG%H8 z3_XB}ix7zdogqZ4;Nc!JKz^ccM9ZMr*N8p|`cCvwkQBhEc)AILXKUFp0n@H~ z7Ak~)MNbMAW+>J(@AfWf1F%T8MVd&x6nNx+ynWy?}x4HbX4-!~-!A`(h|Y(P;P^X', 'eval', + dont_inherit=True) + +_cache = weakref.WeakValueDictionary() + +def compile(marker): + """Return compiled marker as a function accepting an environment dict.""" + try: + return _cache[marker] + except KeyError: + pass + if not marker.strip(): + def marker_fn(environment=None, override=None): + """""" + return True + else: + compiled_marker = compile_marker(parse_marker(marker)) + def marker_fn(environment=None, override=None): + """override updates environment""" + if override is None: + override = {} + if environment is None: + environment = default_environment() + environment.update(override) + return eval(compiled_marker, environment) + marker_fn.__doc__ = marker + _cache[marker] = marker_fn + return _cache[marker] + +def interpret(marker, environment=None): + return compile(marker)(environment) diff --git a/env/lib/python2.7/site-packages/_markerlib/markers.pyc b/env/lib/python2.7/site-packages/_markerlib/markers.pyc new file mode 100644 index 0000000000000000000000000000000000000000..943c4750422ca960b92981af6d3c0f21322fef07 GIT binary patch literal 5739 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 L7nAPzgOC3W)2_Aw literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/_mysql_exceptions.py b/env/lib/python2.7/site-packages/_mysql_exceptions.py new file mode 100644 index 0000000..3241e74 --- /dev/null +++ b/env/lib/python2.7/site-packages/_mysql_exceptions.py @@ -0,0 +1,87 @@ +"""_mysql_exceptions: Exception classes for _mysql and MySQLdb. + +These classes are dictated by the DB API v2.0: + + http://www.python.org/topics/database/DatabaseAPI-2.0.html +""" + +try: + from exceptions import Exception, StandardError, Warning +except ImportError: + # Python 3 + StandardError = Exception + + +class MySQLError(StandardError): + + """Exception related to operation with MySQL.""" + + +class Warning(Warning, MySQLError): + + """Exception raised for important warnings like data truncations + while inserting, etc.""" + +class Error(MySQLError): + + """Exception that is the base class of all other error exceptions + (not Warning).""" + + +class InterfaceError(Error): + + """Exception raised for errors that are related to the database + interface rather than the database itself.""" + + +class DatabaseError(Error): + + """Exception raised for errors that are related to the + database.""" + + +class DataError(DatabaseError): + + """Exception raised for errors that are due to problems with the + processed data like division by zero, numeric value out of range, + etc.""" + + +class OperationalError(DatabaseError): + + """Exception raised for errors that are related to the database's + operation and not necessarily under the control of the programmer, + e.g. an unexpected disconnect occurs, the data source name is not + found, a transaction could not be processed, a memory allocation + error occurred during processing, etc.""" + + +class IntegrityError(DatabaseError): + + """Exception raised when the relational integrity of the database + is affected, e.g. a foreign key check fails, duplicate key, + etc.""" + + +class InternalError(DatabaseError): + + """Exception raised when the database encounters an internal + error, e.g. the cursor is not valid anymore, the transaction is + out of sync, etc.""" + + +class ProgrammingError(DatabaseError): + + """Exception raised for programming errors, e.g. table not found + or already exists, syntax error in the SQL statement, wrong number + of parameters specified, etc.""" + + +class NotSupportedError(DatabaseError): + + """Exception raised in case a method or database API was used + which is not supported by the database, e.g. requesting a + .rollback() on a connection that does not support transaction or + has transactions turned off.""" + + diff --git a/env/lib/python2.7/site-packages/_mysql_exceptions.pyc b/env/lib/python2.7/site-packages/_mysql_exceptions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5541dab51622b85b38ed4a5f1deafa84547d66be GIT binary patch literal 4459 zcmc&%OOG2x5NQJ+v2b-8V~b}qD>p(s4LtjqS0s&`m{ve z5MS$-pq3b6a9jK!#P>pcbJ!7jLr_~#M~s?6cj^yqp*N!x-M4D#rqJ7hHsd7STDm3l zsY-gfmTn8ZBWOGJJyT1&LZ7Xq=W6LGq0d*+S8C~LpzaZN&)UF-Mf^LcN!2osz4 ztQ+@(otf14wF+veJoRraA29d|#`Y#*nsv=zxb|AucGyN!Z#3-S?I2)p%IVwASr;}T zd8k}&@^R?mIqo@rs!a(7ByQsNXV4H#35rGA6v@FJfAjC6sn?K>vUspyrJa#ejFz06 zFe&lqmHXPln86@dQyL87!h^xo>LTM;-qT>9Z8{k2;ZYnn{xiJxzw+dK|E6^YKnw?J zX8M#r?q_D$FOj<1`=IYlper+#9;q?;{xj+WrU?Ud7PoJr=`<7md+}30MDLYTE90R} zwg5Ao0a%p>IWK|rGBZa|IaDQsEAljA;-i-56O)lNIgS*dgMCRMEg?$USRi3PPC96g zL5NTPEfRe43%E-pT7g$x(+KYKklG`{LN!s4AIHb6<$m=ce@ z+y=Qc$jdJu2sXV-D?qTx-^l~HkxFSzM2?<9#2p(*JUC+mjF<~nJcg;D^6h9JrdnLW zlNdFO$|I~*H)(>WZ1nQ6+QRwXTEU9RrJ|!Xp}O(!po$1pIJ|rSm|Ndo0f65bfHe>Q z^NSu{7bL-|GiQexO?^qKFp3BRq$wc^>5^wk#xakLXZl5u`IemBmw7QIXHxlCWthws zfnCz6d`$asmJ?wgjyvzwIJUz%Jbzh*4wbD5=XJ!SVY6_H>fcC~cBm)>gPiB;I#Mj1S5M~4TX<9hHU;DH4 zws0v)j*Cp6ST?FY0nK#m&Z$WCUQ%OhIIbVBKo94V7QcehEurKG%VsfzmkX$*L4%39^cQ}f@ShctjmITK}iL^-7;kgQFaYp=QTvOoZh z_#iJ&CzZYWY9Cd#R*hTg$NJm>FH#nC-Pglvf7WACy=_*EPwnD99k$Fxsdl#8s` z<i=2z1m43(W#RcTS6Ti|G@WLv YAsai*Zfker(#CEl{x)~FcQ^U>H}%ts4gdfE literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/easy_install.py b/env/lib/python2.7/site-packages/easy_install.py new file mode 100644 index 0000000..d87e984 --- /dev/null +++ b/env/lib/python2.7/site-packages/easy_install.py @@ -0,0 +1,5 @@ +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() diff --git a/env/lib/python2.7/site-packages/easy_install.pyc b/env/lib/python2.7/site-packages/easy_install.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27bab5e63e0e70f16376b863b5cba351e6b7e051 GIT binary patch literal 367 zcmYjMJx{|h6nsufK?o!!76vkApm7CaLx_cer9#=PHdg%+*-l7V`N^zE@KPet zlit~WUw2Nw&QCAjzZWG8Nbr2Z2vZ~humq3<1c7Y={su$>A_bj*Nnx1+ktuuv5R1Jd zc+HRc$t$FJW3yPv?3st%iw%)$ot4fQZbdx7I%9?_%b5B>*%j!k zkXNCvL0*I2fZTw-4tX8=2ILLsn~*oFw-=EG(6=COL2p8CLf?kG4SfglPW8qTvb)gt zAn#TBGP3*7Eyz}-uONE>{SfjY^drbemGvC5$Iwq8pFp=E+t3}z4)hk}7W6jcHuMhU z4)jyVr_j$JpFux|d=C8r@lxE67)c)TrMMf=}+g z4b-tyxlIpMb`m5-Jklz6D)C98JPCS5mK8@f=ql@i(nPUKV-=K^7m83?+uEn%=9Q8|NhNIFS zm5rlPr5xL;v!4@utlygy38V{LfWlKyCbLE zGP!g#RG}HSRn>}mDm*CCysG7ligb9Cx7}bUc3Fk6^|F z^YE71NGWWM&Q!*4B8=T}Xk8Q!-3ps2`pndtCX=r`i0oNJRoR^*C)<6<*v6@&9`Pk~ zgY-1SZIGFH6Hb~utv;T@W9^|Vl2JB>gqQt38>!OJ{1w_%S7QXJ*(5;%5vP}m{AjkRTO5l z4s4NE8k2Kh(ZbbUQ4CYHU!niG^&>evH$v(w4nxnLFg#R-*+Du-9!)+Sr-NBRW_XsI zI!BJKt~dqnAk7b=9l`ff_{+zF#uD6_;F~BsU0Ki?=&lLorEg}SvXVLw{$?`rg25Ba zY_Y_GFNk1{3MPSIRD57RE4l=&;AIKspWyxl!yp(X!I#c)Cq#9@Ac)H>uCTaD!hbik z=bgC5Iv4IvcxMHZ*W1Q)Awb1-vWXk)@E5CMm$=E+fW<8qn=Ed#xWnQui+e2YvuKfU z^b7HTPn?IrOM55&>omTsRy>?|#{fEB<`*+k9tsXQV>Rc*nXn&7?fhzKubuaWNo^eQ2xJ_G!n>iGXNoiHS}yD)6iYYfYqYDqsZCYFbr fotm9))|$2TsST2E>+Pw{DX-T*&NZhO>do5!s9PC( literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/flask/_compat.py b/env/lib/python2.7/site-packages/flask/_compat.py new file mode 100644 index 0000000..c342884 --- /dev/null +++ b/env/lib/python2.7/site-packages/flask/_compat.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +""" + flask._compat + ~~~~~~~~~~~~~ + + Some py2/py3 compatibility support based on a stripped down + version of six so we don't have to depend on a specific version + of it. + + :copyright: (c) 2013 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" +import sys + +PY2 = sys.version_info[0] == 2 +_identity = lambda x: x + + +if not PY2: + text_type = str + string_types = (str,) + integer_types = (int, ) + + iterkeys = lambda d: iter(d.keys()) + itervalues = lambda d: iter(d.values()) + iteritems = lambda d: iter(d.items()) + + from io import StringIO + + def reraise(tp, value, tb=None): + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + + implements_to_string = _identity + +else: + text_type = unicode + string_types = (str, unicode) + integer_types = (int, long) + + iterkeys = lambda d: d.iterkeys() + itervalues = lambda d: d.itervalues() + iteritems = lambda d: d.iteritems() + + from cStringIO import StringIO + + exec('def reraise(tp, value, tb=None):\n raise tp, value, tb') + + def implements_to_string(cls): + cls.__unicode__ = cls.__str__ + cls.__str__ = lambda x: x.__unicode__().encode('utf-8') + return cls + + +def with_metaclass(meta, *bases): + # This requires a bit of explanation: the basic idea is to make a + # dummy metaclass for one level of class instantiation that replaces + # itself with the actual metaclass. Because of internal type checks + # we also need to make sure that we downgrade the custom metaclass + # for one level to something closer to type (that's why __call__ and + # __init__ comes back from type etc.). + # + # This has the advantage over six.with_metaclass in that it does not + # introduce dummy classes into the final MRO. + class metaclass(meta): + __call__ = type.__call__ + __init__ = type.__init__ + def __new__(cls, name, this_bases, d): + if this_bases is None: + return type.__new__(cls, name, (), d) + return meta(name, bases, d) + return metaclass('temporary_class', None, {}) diff --git a/env/lib/python2.7/site-packages/flask/_compat.pyc b/env/lib/python2.7/site-packages/flask/_compat.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6095f3f45b78b482becf8426875688d6295d7169 GIT binary patch literal 3643 zcmcguQEwYX5S}|bPV72q+O&nD0t-CgLTW<_qKZldP5V#@1$3ql^~>pew@$V>-<@tZ zNi7u~NJaa=zwIj$d^2Y|jerLr$yvLeot>Tic6MfVYOj}DTZg~@7}NBt;r|;n`x;$B zG(hiB;#2C;z$5L^Q=gI=T~F$?=hL7@$pXEAT%B}{>~EwOXwcw(gawPFmxO3i(h#v0 zC5u8_pkzsiwrtR(beYC0G*}@IyCp4pf%U7T>omAT*?{!rsa_BxY%Hqvn$XaGVWz!3 z)4qIC`<1!&6+TY=adJ@vE>W^7#8qbZJD2$IYaUTc;Txrq-Rp*NJ}x3BoS)zPTEgn* zW37tGMz5IMR+Xq3n$)<7vin7mmre~Ms}q%HDpJ;!rYJB<^21ElAL!B=%;h6x%`;_l zb*M3$eeBe3bfA^XRiX=>%@ho!#V zPSm&M*kmfmvnbxxWmnd1rY6>z)tl;m|G~PlTC49KZ9UxXKUAZwguYO(LE=ak-6I)bR?wX@v~~oO#1*`@3Fq{D3bCgr_84|@2CxIR$J=QC4Q?Qq8(4o3rTe-98}J#<3hVX% ziFE<%Vc+pNKz(NhwYoxfkUnBA+j;bTT*H9d+%G=G;5m{SdY|^1RDK{skB9J)Up&f0 z07P=^*JA!6@D^C2pcl%+0-I9w9fNs`3)_ zA;Q4p=aOmZ`yH0tKC!OPIM(Lt;9W?%Scia`id&9_eK)#wN0z$_7>40~X5u{2h$MDf zo$)||IKc4CQrj2MEjL?1;Rp&tywYJ9a4}G25su?HwPz8sSD@OAi&T$w=4|M4-W=&_ z1N>?Hw!L;0zYK%ZJcG17bg=3xk4vnVL@z<0bn@v}iRdRk`JBa2tRZvZ(LSod`n-7C zv0skys>djAY>a_?e39HN`;kUXhkDPar!}tfm_R93e`6oweFh5@RH-9o)!g`M`SL9v zfB_KgEm8R)p$I_n2+u*n1@7lHI;vA2@G*V`F2)Q|{HZcDA6H&v_E;g@q|lP&!Z6c^ zVJHU**n~2jMK~6x2DfW$$W@oEQWq1?`zeM2mjP3OI7(9pEQx^0jKehRtgOLj2ySrq?u>VO(62$|eKdjI@S6C! zix}h0Mg<#{lTe(c3dgs2f4&?+Qek2Re~0tbARa%jbJx9tJ*DQP*87VcMlkh_B#&W7 zMrbG2wedeKmP3<`a+&zy$%e#1XcEL7iuFp|mBMxUnG40)cySewGPWXSGUxdH$G_gu zWi=D<`ya5;0x387zDyo)tOjhcfL8=p(Fw|Fwi91W^K3`', + endpoint='static', + view_func=self.send_static_file) + + def _get_error_handlers(self): + from warnings import warn + warn(DeprecationWarning('error_handlers is deprecated, use the ' + 'new error_handler_spec attribute instead.'), stacklevel=1) + return self._error_handlers + def _set_error_handlers(self, value): + self._error_handlers = value + self.error_handler_spec[None] = value + error_handlers = property(_get_error_handlers, _set_error_handlers) + del _get_error_handlers, _set_error_handlers + + @locked_cached_property + def name(self): + """The name of the application. This is usually the import name + with the difference that it's guessed from the run file if the + import name is main. This name is used as a display name when + Flask needs the name of the application. It can be set and overridden + to change the value. + + .. versionadded:: 0.8 + """ + if self.import_name == '__main__': + fn = getattr(sys.modules['__main__'], '__file__', None) + if fn is None: + return '__main__' + return os.path.splitext(os.path.basename(fn))[0] + return self.import_name + + @property + def propagate_exceptions(self): + """Returns the value of the `PROPAGATE_EXCEPTIONS` configuration + value in case it's set, otherwise a sensible default is returned. + + .. versionadded:: 0.7 + """ + rv = self.config['PROPAGATE_EXCEPTIONS'] + if rv is not None: + return rv + return self.testing or self.debug + + @property + def preserve_context_on_exception(self): + """Returns the value of the `PRESERVE_CONTEXT_ON_EXCEPTION` + configuration value in case it's set, otherwise a sensible default + is returned. + + .. versionadded:: 0.7 + """ + rv = self.config['PRESERVE_CONTEXT_ON_EXCEPTION'] + if rv is not None: + return rv + return self.debug + + @property + def logger(self): + """A :class:`logging.Logger` object for this application. The + default configuration is to log to stderr if the application is + in debug mode. This logger can be used to (surprise) log messages. + Here some examples:: + + app.logger.debug('A value for debugging') + app.logger.warning('A warning occurred (%d apples)', 42) + app.logger.error('An error occurred') + + .. versionadded:: 0.3 + """ + if self._logger and self._logger.name == self.logger_name: + return self._logger + with _logger_lock: + if self._logger and self._logger.name == self.logger_name: + return self._logger + from flask.logging import create_logger + self._logger = rv = create_logger(self) + return rv + + @locked_cached_property + def jinja_env(self): + """The Jinja2 environment used to load templates.""" + return self.create_jinja_environment() + + @property + def got_first_request(self): + """This attribute is set to `True` if the application started + handling the first request. + + .. versionadded:: 0.8 + """ + return self._got_first_request + + def make_config(self, instance_relative=False): + """Used to create the config attribute by the Flask constructor. + The `instance_relative` parameter is passed in from the constructor + of Flask (there named `instance_relative_config`) and indicates if + the config should be relative to the instance path or the root path + of the application. + + .. versionadded:: 0.8 + """ + root_path = self.root_path + if instance_relative: + root_path = self.instance_path + return Config(root_path, self.default_config) + + def auto_find_instance_path(self): + """Tries to locate the instance path if it was not provided to the + constructor of the application class. It will basically calculate + the path to a folder named ``instance`` next to your main file or + the package. + + .. versionadded:: 0.8 + """ + prefix, package_path = find_package(self.import_name) + if prefix is None: + return os.path.join(package_path, 'instance') + return os.path.join(prefix, 'var', self.name + '-instance') + + def open_instance_resource(self, resource, mode='rb'): + """Opens a resource from the application's instance folder + (:attr:`instance_path`). Otherwise works like + :meth:`open_resource`. Instance resources can also be opened for + writing. + + :param resource: the name of the resource. To access resources within + subfolders use forward slashes as separator. + :param mode: resource file opening mode, default is 'rb'. + """ + return open(os.path.join(self.instance_path, resource), mode) + + def create_jinja_environment(self): + """Creates the Jinja2 environment based on :attr:`jinja_options` + and :meth:`select_jinja_autoescape`. Since 0.7 this also adds + the Jinja2 globals and filters after initialization. Override + this function to customize the behavior. + + .. versionadded:: 0.5 + """ + options = dict(self.jinja_options) + if 'autoescape' not in options: + options['autoescape'] = self.select_jinja_autoescape + rv = Environment(self, **options) + rv.globals.update( + url_for=url_for, + get_flashed_messages=get_flashed_messages, + config=self.config, + # request, session and g are normally added with the + # context processor for efficiency reasons but for imported + # templates we also want the proxies in there. + request=request, + session=session, + g=g + ) + rv.filters['tojson'] = json.tojson_filter + return rv + + def create_global_jinja_loader(self): + """Creates the loader for the Jinja2 environment. Can be used to + override just the loader and keeping the rest unchanged. It's + discouraged to override this function. Instead one should override + the :meth:`jinja_loader` function instead. + + The global loader dispatches between the loaders of the application + and the individual blueprints. + + .. versionadded:: 0.7 + """ + return DispatchingJinjaLoader(self) + + def init_jinja_globals(self): + """Deprecated. Used to initialize the Jinja2 globals. + + .. versionadded:: 0.5 + .. versionchanged:: 0.7 + This method is deprecated with 0.7. Override + :meth:`create_jinja_environment` instead. + """ + + def select_jinja_autoescape(self, filename): + """Returns `True` if autoescaping should be active for the given + template name. + + .. versionadded:: 0.5 + """ + if filename is None: + return False + return filename.endswith(('.html', '.htm', '.xml', '.xhtml')) + + def update_template_context(self, context): + """Update the template context with some commonly used variables. + This injects request, session, config and g into the template + context as well as everything template context processors want + to inject. Note that the as of Flask 0.6, the original values + in the context will not be overridden if a context processor + decides to return a value with the same key. + + :param context: the context as a dictionary that is updated in place + to add extra variables. + """ + funcs = self.template_context_processors[None] + reqctx = _request_ctx_stack.top + if reqctx is not None: + bp = reqctx.request.blueprint + if bp is not None and bp in self.template_context_processors: + funcs = chain(funcs, self.template_context_processors[bp]) + orig_ctx = context.copy() + for func in funcs: + context.update(func()) + # make sure the original values win. This makes it possible to + # easier add new variables in context processors without breaking + # existing views. + context.update(orig_ctx) + + def run(self, host=None, port=None, debug=None, **options): + """Runs the application on a local development server. If the + :attr:`debug` flag is set the server will automatically reload + for code changes and show a debugger in case an exception happened. + + If you want to run the application in debug mode, but disable the + code execution on the interactive debugger, you can pass + ``use_evalex=False`` as parameter. This will keep the debugger's + traceback screen active, but disable code execution. + + .. admonition:: Keep in Mind + + Flask will suppress any server error with a generic error page + unless it is in debug mode. As such to enable just the + interactive debugger without the code reloading, you have to + invoke :meth:`run` with ``debug=True`` and ``use_reloader=False``. + Setting ``use_debugger`` to `True` without being in debug mode + won't catch any exceptions because there won't be any to + catch. + + .. versionchanged:: 0.10 + The default port is now picked from the ``SERVER_NAME`` variable. + + :param host: the hostname to listen on. Set this to ``'0.0.0.0'`` to + have the server available externally as well. Defaults to + ``'127.0.0.1'``. + :param port: the port of the webserver. Defaults to ``5000`` or the + port defined in the ``SERVER_NAME`` config variable if + present. + :param debug: if given, enable or disable debug mode. + See :attr:`debug`. + :param options: the options to be forwarded to the underlying + Werkzeug server. See + :func:`werkzeug.serving.run_simple` for more + information. + """ + from werkzeug.serving import run_simple + if host is None: + host = '127.0.0.1' + if port is None: + server_name = self.config['SERVER_NAME'] + if server_name and ':' in server_name: + port = int(server_name.rsplit(':', 1)[1]) + else: + port = 5000 + if debug is not None: + self.debug = bool(debug) + options.setdefault('use_reloader', self.debug) + options.setdefault('use_debugger', self.debug) + try: + run_simple(host, port, self, **options) + finally: + # reset the first request information if the development server + # resetted normally. This makes it possible to restart the server + # without reloader and that stuff from an interactive shell. + self._got_first_request = False + + def test_client(self, use_cookies=True): + """Creates a test client for this application. For information + about unit testing head over to :ref:`testing`. + + Note that if you are testing for assertions or exceptions in your + application code, you must set ``app.testing = True`` in order for the + exceptions to propagate to the test client. Otherwise, the exception + will be handled by the application (not visible to the test client) and + the only indication of an AssertionError or other exception will be a + 500 status code response to the test client. See the :attr:`testing` + attribute. For example:: + + app.testing = True + client = app.test_client() + + The test client can be used in a `with` block to defer the closing down + of the context until the end of the `with` block. This is useful if + you want to access the context locals for testing:: + + with app.test_client() as c: + rv = c.get('/?vodka=42') + assert request.args['vodka'] == '42' + + See :class:`~flask.testing.FlaskClient` for more information. + + .. versionchanged:: 0.4 + added support for `with` block usage for the client. + + .. versionadded:: 0.7 + The `use_cookies` parameter was added as well as the ability + to override the client to be used by setting the + :attr:`test_client_class` attribute. + """ + cls = self.test_client_class + if cls is None: + from flask.testing import FlaskClient as cls + return cls(self, self.response_class, use_cookies=use_cookies) + + def open_session(self, request): + """Creates or opens a new session. Default implementation stores all + session data in a signed cookie. This requires that the + :attr:`secret_key` is set. Instead of overriding this method + we recommend replacing the :class:`session_interface`. + + :param request: an instance of :attr:`request_class`. + """ + return self.session_interface.open_session(self, request) + + def save_session(self, session, response): + """Saves the session if it needs updates. For the default + implementation, check :meth:`open_session`. Instead of overriding this + method we recommend replacing the :class:`session_interface`. + + :param session: the session to be saved (a + :class:`~werkzeug.contrib.securecookie.SecureCookie` + object) + :param response: an instance of :attr:`response_class` + """ + return self.session_interface.save_session(self, session, response) + + def make_null_session(self): + """Creates a new instance of a missing session. Instead of overriding + this method we recommend replacing the :class:`session_interface`. + + .. versionadded:: 0.7 + """ + return self.session_interface.make_null_session(self) + + def register_module(self, module, **options): + """Registers a module with this application. The keyword argument + of this function are the same as the ones for the constructor of the + :class:`Module` class and will override the values of the module if + provided. + + .. versionchanged:: 0.7 + The module system was deprecated in favor for the blueprint + system. + """ + assert blueprint_is_module(module), 'register_module requires ' \ + 'actual module objects. Please upgrade to blueprints though.' + if not self.enable_modules: + raise RuntimeError('Module support was disabled but code ' + 'attempted to register a module named %r' % module) + else: + from warnings import warn + warn(DeprecationWarning('Modules are deprecated. Upgrade to ' + 'using blueprints. Have a look into the documentation for ' + 'more information. If this module was registered by a ' + 'Flask-Extension upgrade the extension or contact the author ' + 'of that extension instead. (Registered %r)' % module), + stacklevel=2) + + self.register_blueprint(module, **options) + + @setupmethod + def register_blueprint(self, blueprint, **options): + """Registers a blueprint on the application. + + .. versionadded:: 0.7 + """ + first_registration = False + if blueprint.name in self.blueprints: + assert self.blueprints[blueprint.name] is blueprint, \ + 'A blueprint\'s name collision occurred between %r and ' \ + '%r. Both share the same name "%s". Blueprints that ' \ + 'are created on the fly need unique names.' % \ + (blueprint, self.blueprints[blueprint.name], blueprint.name) + else: + self.blueprints[blueprint.name] = blueprint + first_registration = True + blueprint.register(self, options, first_registration) + + @setupmethod + def add_url_rule(self, rule, endpoint=None, view_func=None, **options): + """Connects a URL rule. Works exactly like the :meth:`route` + decorator. If a view_func is provided it will be registered with the + endpoint. + + Basically this example:: + + @app.route('/') + def index(): + pass + + Is equivalent to the following:: + + def index(): + pass + app.add_url_rule('/', 'index', index) + + If the view_func is not provided you will need to connect the endpoint + to a view function like so:: + + app.view_functions['index'] = index + + Internally :meth:`route` invokes :meth:`add_url_rule` so if you want + to customize the behavior via subclassing you only need to change + this method. + + For more information refer to :ref:`url-route-registrations`. + + .. versionchanged:: 0.2 + `view_func` parameter added. + + .. versionchanged:: 0.6 + `OPTIONS` is added automatically as method. + + :param rule: the URL rule as string + :param endpoint: the endpoint for the registered URL rule. Flask + itself assumes the name of the view function as + endpoint + :param view_func: the function to call when serving a request to the + provided endpoint + :param options: the options to be forwarded to the underlying + :class:`~werkzeug.routing.Rule` object. A change + to Werkzeug is handling of method options. methods + is a list of methods this rule should be limited + to (`GET`, `POST` etc.). By default a rule + just listens for `GET` (and implicitly `HEAD`). + Starting with Flask 0.6, `OPTIONS` is implicitly + added and handled by the standard request handling. + """ + if endpoint is None: + endpoint = _endpoint_from_view_func(view_func) + options['endpoint'] = endpoint + methods = options.pop('methods', None) + + # if the methods are not given and the view_func object knows its + # methods we can use that instead. If neither exists, we go with + # a tuple of only `GET` as default. + if methods is None: + methods = getattr(view_func, 'methods', None) or ('GET',) + methods = set(methods) + + # Methods that should always be added + required_methods = set(getattr(view_func, 'required_methods', ())) + + # starting with Flask 0.8 the view_func object can disable and + # force-enable the automatic options handling. + provide_automatic_options = getattr(view_func, + 'provide_automatic_options', None) + + if provide_automatic_options is None: + if 'OPTIONS' not in methods: + provide_automatic_options = True + required_methods.add('OPTIONS') + else: + provide_automatic_options = False + + # Add the required methods now. + methods |= required_methods + + # due to a werkzeug bug we need to make sure that the defaults are + # None if they are an empty dictionary. This should not be necessary + # with Werkzeug 0.7 + options['defaults'] = options.get('defaults') or None + + rule = self.url_rule_class(rule, methods=methods, **options) + rule.provide_automatic_options = provide_automatic_options + + self.url_map.add(rule) + if view_func is not None: + old_func = self.view_functions.get(endpoint) + if old_func is not None and old_func != view_func: + raise AssertionError('View function mapping is overwriting an ' + 'existing endpoint function: %s' % endpoint) + self.view_functions[endpoint] = view_func + + def route(self, rule, **options): + """A decorator that is used to register a view function for a + given URL rule. This does the same thing as :meth:`add_url_rule` + but is intended for decorator usage:: + + @app.route('/') + def index(): + return 'Hello World' + + For more information refer to :ref:`url-route-registrations`. + + :param rule: the URL rule as string + :param endpoint: the endpoint for the registered URL rule. Flask + itself assumes the name of the view function as + endpoint + :param options: the options to be forwarded to the underlying + :class:`~werkzeug.routing.Rule` object. A change + to Werkzeug is handling of method options. methods + is a list of methods this rule should be limited + to (`GET`, `POST` etc.). By default a rule + just listens for `GET` (and implicitly `HEAD`). + Starting with Flask 0.6, `OPTIONS` is implicitly + added and handled by the standard request handling. + """ + def decorator(f): + endpoint = options.pop('endpoint', None) + self.add_url_rule(rule, endpoint, f, **options) + return f + return decorator + + @setupmethod + def endpoint(self, endpoint): + """A decorator to register a function as an endpoint. + Example:: + + @app.endpoint('example.endpoint') + def example(): + return "example" + + :param endpoint: the name of the endpoint + """ + def decorator(f): + self.view_functions[endpoint] = f + return f + return decorator + + @setupmethod + def errorhandler(self, code_or_exception): + """A decorator that is used to register a function give a given + error code. Example:: + + @app.errorhandler(404) + def page_not_found(error): + return 'This page does not exist', 404 + + You can also register handlers for arbitrary exceptions:: + + @app.errorhandler(DatabaseError) + def special_exception_handler(error): + return 'Database connection failed', 500 + + You can also register a function as error handler without using + the :meth:`errorhandler` decorator. The following example is + equivalent to the one above:: + + def page_not_found(error): + return 'This page does not exist', 404 + app.error_handler_spec[None][404] = page_not_found + + Setting error handlers via assignments to :attr:`error_handler_spec` + however is discouraged as it requires fiddling with nested dictionaries + and the special case for arbitrary exception types. + + The first `None` refers to the active blueprint. If the error + handler should be application wide `None` shall be used. + + .. versionadded:: 0.7 + One can now additionally also register custom exception types + that do not necessarily have to be a subclass of the + :class:`~werkzeug.exceptions.HTTPException` class. + + :param code: the code as integer for the handler + """ + def decorator(f): + self._register_error_handler(None, code_or_exception, f) + return f + return decorator + + def register_error_handler(self, code_or_exception, f): + """Alternative error attach function to the :meth:`errorhandler` + decorator that is more straightforward to use for non decorator + usage. + + .. versionadded:: 0.7 + """ + self._register_error_handler(None, code_or_exception, f) + + @setupmethod + def _register_error_handler(self, key, code_or_exception, f): + if isinstance(code_or_exception, HTTPException): + code_or_exception = code_or_exception.code + if isinstance(code_or_exception, integer_types): + assert code_or_exception != 500 or key is None, \ + 'It is currently not possible to register a 500 internal ' \ + 'server error on a per-blueprint level.' + self.error_handler_spec.setdefault(key, {})[code_or_exception] = f + else: + self.error_handler_spec.setdefault(key, {}).setdefault(None, []) \ + .append((code_or_exception, f)) + + @setupmethod + def template_filter(self, name=None): + """A decorator that is used to register custom template filter. + You can specify a name for the filter, otherwise the function + name will be used. Example:: + + @app.template_filter() + def reverse(s): + return s[::-1] + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + def decorator(f): + self.add_template_filter(f, name=name) + return f + return decorator + + @setupmethod + def add_template_filter(self, f, name=None): + """Register a custom template filter. Works exactly like the + :meth:`template_filter` decorator. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + self.jinja_env.filters[name or f.__name__] = f + + @setupmethod + def template_test(self, name=None): + """A decorator that is used to register custom template test. + You can specify a name for the test, otherwise the function + name will be used. Example:: + + @app.template_test() + def is_prime(n): + if n == 2: + return True + for i in range(2, int(math.ceil(math.sqrt(n))) + 1): + if n % i == 0: + return False + return True + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + def decorator(f): + self.add_template_test(f, name=name) + return f + return decorator + + @setupmethod + def add_template_test(self, f, name=None): + """Register a custom template test. Works exactly like the + :meth:`template_test` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + self.jinja_env.tests[name or f.__name__] = f + + + @setupmethod + def template_global(self, name=None): + """A decorator that is used to register a custom template global function. + You can specify a name for the global function, otherwise the function + name will be used. Example:: + + @app.template_global() + def double(n): + return 2 * n + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + def decorator(f): + self.add_template_global(f, name=name) + return f + return decorator + + @setupmethod + def add_template_global(self, f, name=None): + """Register a custom template global function. Works exactly like the + :meth:`template_global` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the global function, otherwise the + function name will be used. + """ + self.jinja_env.globals[name or f.__name__] = f + + @setupmethod + def before_request(self, f): + """Registers a function to run before each request.""" + self.before_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def before_first_request(self, f): + """Registers a function to be run before the first request to this + instance of the application. + + .. versionadded:: 0.8 + """ + self.before_first_request_funcs.append(f) + + @setupmethod + def after_request(self, f): + """Register a function to be run after each request. Your function + must take one parameter, a :attr:`response_class` object and return + a new response object or the same (see :meth:`process_response`). + + As of Flask 0.7 this function might not be executed at the end of the + request in case an unhandled exception occurred. + """ + self.after_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def teardown_request(self, f): + """Register a function to be run at the end of each request, + regardless of whether there was an exception or not. These functions + are executed when the request context is popped, even if not an + actual request was performed. + + Example:: + + ctx = app.test_request_context() + ctx.push() + ... + ctx.pop() + + When ``ctx.pop()`` is executed in the above example, the teardown + functions are called just before the request context moves from the + stack of active contexts. This becomes relevant if you are using + such constructs in tests. + + Generally teardown functions must take every necessary step to avoid + that they will fail. If they do execute code that might fail they + will have to surround the execution of these code by try/except + statements and log occurring errors. + + When a teardown function was called because of a exception it will + be passed an error object. + + .. admonition:: Debug Note + + In debug mode Flask will not tear down a request on an exception + immediately. Instead if will keep it alive so that the interactive + debugger can still access it. This behavior can be controlled + by the ``PRESERVE_CONTEXT_ON_EXCEPTION`` configuration variable. + """ + self.teardown_request_funcs.setdefault(None, []).append(f) + return f + + @setupmethod + def teardown_appcontext(self, f): + """Registers a function to be called when the application context + ends. These functions are typically also called when the request + context is popped. + + Example:: + + ctx = app.app_context() + ctx.push() + ... + ctx.pop() + + When ``ctx.pop()`` is executed in the above example, the teardown + functions are called just before the app context moves from the + stack of active contexts. This becomes relevant if you are using + such constructs in tests. + + Since a request context typically also manages an application + context it would also be called when you pop a request context. + + When a teardown function was called because of an exception it will + be passed an error object. + + .. versionadded:: 0.9 + """ + self.teardown_appcontext_funcs.append(f) + return f + + @setupmethod + def context_processor(self, f): + """Registers a template context processor function.""" + self.template_context_processors[None].append(f) + return f + + @setupmethod + def url_value_preprocessor(self, f): + """Registers a function as URL value preprocessor for all view + functions of the application. It's called before the view functions + are called and can modify the url values provided. + """ + self.url_value_preprocessors.setdefault(None, []).append(f) + return f + + @setupmethod + def url_defaults(self, f): + """Callback function for URL defaults for all view functions of the + application. It's called with the endpoint and values and should + update the values passed in place. + """ + self.url_default_functions.setdefault(None, []).append(f) + return f + + def handle_http_exception(self, e): + """Handles an HTTP exception. By default this will invoke the + registered error handlers and fall back to returning the + exception as response. + + .. versionadded:: 0.3 + """ + handlers = self.error_handler_spec.get(request.blueprint) + # Proxy exceptions don't have error codes. We want to always return + # those unchanged as errors + if e.code is None: + return e + if handlers and e.code in handlers: + handler = handlers[e.code] + else: + handler = self.error_handler_spec[None].get(e.code) + if handler is None: + return e + return handler(e) + + def trap_http_exception(self, e): + """Checks if an HTTP exception should be trapped or not. By default + this will return `False` for all exceptions except for a bad request + key error if ``TRAP_BAD_REQUEST_ERRORS`` is set to `True`. It + also returns `True` if ``TRAP_HTTP_EXCEPTIONS`` is set to `True`. + + This is called for all HTTP exceptions raised by a view function. + If it returns `True` for any exception the error handler for this + exception is not called and it shows up as regular exception in the + traceback. This is helpful for debugging implicitly raised HTTP + exceptions. + + .. versionadded:: 0.8 + """ + if self.config['TRAP_HTTP_EXCEPTIONS']: + return True + if self.config['TRAP_BAD_REQUEST_ERRORS']: + return isinstance(e, BadRequest) + return False + + def handle_user_exception(self, e): + """This method is called whenever an exception occurs that should be + handled. A special case are + :class:`~werkzeug.exception.HTTPException`\s which are forwarded by + this function to the :meth:`handle_http_exception` method. This + function will either return a response value or reraise the + exception with the same traceback. + + .. versionadded:: 0.7 + """ + exc_type, exc_value, tb = sys.exc_info() + assert exc_value is e + + # ensure not to trash sys.exc_info() at that point in case someone + # wants the traceback preserved in handle_http_exception. Of course + # we cannot prevent users from trashing it themselves in a custom + # trap_http_exception method so that's their fault then. + if isinstance(e, HTTPException) and not self.trap_http_exception(e): + return self.handle_http_exception(e) + + blueprint_handlers = () + handlers = self.error_handler_spec.get(request.blueprint) + if handlers is not None: + blueprint_handlers = handlers.get(None, ()) + app_handlers = self.error_handler_spec[None].get(None, ()) + for typecheck, handler in chain(blueprint_handlers, app_handlers): + if isinstance(e, typecheck): + return handler(e) + + reraise(exc_type, exc_value, tb) + + def handle_exception(self, e): + """Default exception handling that kicks in when an exception + occurs that is not caught. In debug mode the exception will + be re-raised immediately, otherwise it is logged and the handler + for a 500 internal server error is used. If no such handler + exists, a default 500 internal server error message is displayed. + + .. versionadded:: 0.3 + """ + exc_type, exc_value, tb = sys.exc_info() + + got_request_exception.send(self, exception=e) + handler = self.error_handler_spec[None].get(500) + + if self.propagate_exceptions: + # if we want to repropagate the exception, we can attempt to + # raise it with the whole traceback in case we can do that + # (the function was actually called from the except part) + # otherwise, we just raise the error again + if exc_value is e: + reraise(exc_type, exc_value, tb) + else: + raise e + + self.log_exception((exc_type, exc_value, tb)) + if handler is None: + return InternalServerError() + return handler(e) + + def log_exception(self, exc_info): + """Logs an exception. This is called by :meth:`handle_exception` + if debugging is disabled and right before the handler is called. + The default implementation logs the exception as error on the + :attr:`logger`. + + .. versionadded:: 0.8 + """ + self.logger.error('Exception on %s [%s]' % ( + request.path, + request.method + ), exc_info=exc_info) + + def raise_routing_exception(self, request): + """Exceptions that are recording during routing are reraised with + this method. During debug we are not reraising redirect requests + for non ``GET``, ``HEAD``, or ``OPTIONS`` requests and we're raising + a different error instead to help debug situations. + + :internal: + """ + if not self.debug \ + or not isinstance(request.routing_exception, RequestRedirect) \ + or request.method in ('GET', 'HEAD', 'OPTIONS'): + raise request.routing_exception + + from .debughelpers import FormDataRoutingRedirect + raise FormDataRoutingRedirect(request) + + def dispatch_request(self): + """Does the request dispatching. Matches the URL and returns the + return value of the view or error handler. This does not have to + be a response object. In order to convert the return value to a + proper response object, call :func:`make_response`. + + .. versionchanged:: 0.7 + This no longer does the exception handling, this code was + moved to the new :meth:`full_dispatch_request`. + """ + req = _request_ctx_stack.top.request + if req.routing_exception is not None: + self.raise_routing_exception(req) + rule = req.url_rule + # if we provide automatic options for this URL and the + # request came with the OPTIONS method, reply automatically + if getattr(rule, 'provide_automatic_options', False) \ + and req.method == 'OPTIONS': + return self.make_default_options_response() + # otherwise dispatch to the handler for that endpoint + return self.view_functions[rule.endpoint](**req.view_args) + + def full_dispatch_request(self): + """Dispatches the request and on top of that performs request + pre and postprocessing as well as HTTP exception catching and + error handling. + + .. versionadded:: 0.7 + """ + self.try_trigger_before_first_request_functions() + try: + request_started.send(self) + rv = self.preprocess_request() + if rv is None: + rv = self.dispatch_request() + except Exception as e: + rv = self.handle_user_exception(e) + response = self.make_response(rv) + response = self.process_response(response) + request_finished.send(self, response=response) + return response + + def try_trigger_before_first_request_functions(self): + """Called before each request and will ensure that it triggers + the :attr:`before_first_request_funcs` and only exactly once per + application instance (which means process usually). + + :internal: + """ + if self._got_first_request: + return + with self._before_request_lock: + if self._got_first_request: + return + self._got_first_request = True + for func in self.before_first_request_funcs: + func() + + def make_default_options_response(self): + """This method is called to create the default `OPTIONS` response. + This can be changed through subclassing to change the default + behavior of `OPTIONS` responses. + + .. versionadded:: 0.7 + """ + adapter = _request_ctx_stack.top.url_adapter + if hasattr(adapter, 'allowed_methods'): + methods = adapter.allowed_methods() + else: + # fallback for Werkzeug < 0.7 + methods = [] + try: + adapter.match(method='--') + except MethodNotAllowed as e: + methods = e.valid_methods + except HTTPException as e: + pass + rv = self.response_class() + rv.allow.update(methods) + return rv + + def should_ignore_error(self, error): + """This is called to figure out if an error should be ignored + or not as far as the teardown system is concerned. If this + function returns `True` then the teardown handlers will not be + passed the error. + + .. versionadded:: 0.10 + """ + return False + + def make_response(self, rv): + """Converts the return value from a view function to a real + response object that is an instance of :attr:`response_class`. + + The following types are allowed for `rv`: + + .. tabularcolumns:: |p{3.5cm}|p{9.5cm}| + + ======================= =========================================== + :attr:`response_class` the object is returned unchanged + :class:`str` a response object is created with the + string as body + :class:`unicode` a response object is created with the + string encoded to utf-8 as body + a WSGI function the function is called as WSGI application + and buffered as response object + :class:`tuple` A tuple in the form ``(response, status, + headers)`` where `response` is any of the + types defined here, `status` is a string + or an integer and `headers` is a list of + a dictionary with header values. + ======================= =========================================== + + :param rv: the return value from the view function + + .. versionchanged:: 0.9 + Previously a tuple was interpreted as the arguments for the + response object. + """ + status = headers = None + if isinstance(rv, tuple): + rv, status, headers = rv + (None,) * (3 - len(rv)) + + if rv is None: + raise ValueError('View function did not return a response') + + if not isinstance(rv, self.response_class): + # When we create a response object directly, we let the constructor + # set the headers and status. We do this because there can be + # some extra logic involved when creating these objects with + # specific values (like default content type selection). + if isinstance(rv, (text_type, bytes, bytearray)): + rv = self.response_class(rv, headers=headers, status=status) + headers = status = None + else: + rv = self.response_class.force_type(rv, request.environ) + + if status is not None: + if isinstance(status, string_types): + rv.status = status + else: + rv.status_code = status + if headers: + rv.headers.extend(headers) + + return rv + + def create_url_adapter(self, request): + """Creates a URL adapter for the given request. The URL adapter + is created at a point where the request context is not yet set up + so the request is passed explicitly. + + .. versionadded:: 0.6 + + .. versionchanged:: 0.9 + This can now also be called without a request object when the + URL adapter is created for the application context. + """ + if request is not None: + return self.url_map.bind_to_environ(request.environ, + server_name=self.config['SERVER_NAME']) + # We need at the very least the server name to be set for this + # to work. + if self.config['SERVER_NAME'] is not None: + return self.url_map.bind( + self.config['SERVER_NAME'], + script_name=self.config['APPLICATION_ROOT'] or '/', + url_scheme=self.config['PREFERRED_URL_SCHEME']) + + def inject_url_defaults(self, endpoint, values): + """Injects the URL defaults for the given endpoint directly into + the values dictionary passed. This is used internally and + automatically called on URL building. + + .. versionadded:: 0.7 + """ + funcs = self.url_default_functions.get(None, ()) + if '.' in endpoint: + bp = endpoint.rsplit('.', 1)[0] + funcs = chain(funcs, self.url_default_functions.get(bp, ())) + for func in funcs: + func(endpoint, values) + + def handle_url_build_error(self, error, endpoint, values): + """Handle :class:`~werkzeug.routing.BuildError` on :meth:`url_for`. + """ + exc_type, exc_value, tb = sys.exc_info() + for handler in self.url_build_error_handlers: + try: + rv = handler(error, endpoint, values) + if rv is not None: + return rv + except BuildError as error: + pass + + # At this point we want to reraise the exception. If the error is + # still the same one we can reraise it with the original traceback, + # otherwise we raise it from here. + if error is exc_value: + reraise(exc_type, exc_value, tb) + raise error + + def preprocess_request(self): + """Called before the actual request dispatching and will + call every as :meth:`before_request` decorated function. + If any of these function returns a value it's handled as + if it was the return value from the view and further + request handling is stopped. + + This also triggers the :meth:`url_value_processor` functions before + the actual :meth:`before_request` functions are called. + """ + bp = _request_ctx_stack.top.request.blueprint + + funcs = self.url_value_preprocessors.get(None, ()) + if bp is not None and bp in self.url_value_preprocessors: + funcs = chain(funcs, self.url_value_preprocessors[bp]) + for func in funcs: + func(request.endpoint, request.view_args) + + funcs = self.before_request_funcs.get(None, ()) + if bp is not None and bp in self.before_request_funcs: + funcs = chain(funcs, self.before_request_funcs[bp]) + for func in funcs: + rv = func() + if rv is not None: + return rv + + def process_response(self, response): + """Can be overridden in order to modify the response object + before it's sent to the WSGI server. By default this will + call all the :meth:`after_request` decorated functions. + + .. versionchanged:: 0.5 + As of Flask 0.5 the functions registered for after request + execution are called in reverse order of registration. + + :param response: a :attr:`response_class` object. + :return: a new response object or the same, has to be an + instance of :attr:`response_class`. + """ + ctx = _request_ctx_stack.top + bp = ctx.request.blueprint + funcs = ctx._after_request_functions + if bp is not None and bp in self.after_request_funcs: + funcs = chain(funcs, reversed(self.after_request_funcs[bp])) + if None in self.after_request_funcs: + funcs = chain(funcs, reversed(self.after_request_funcs[None])) + for handler in funcs: + response = handler(response) + if not self.session_interface.is_null_session(ctx.session): + self.save_session(ctx.session, response) + return response + + def do_teardown_request(self, exc=None): + """Called after the actual request dispatching and will + call every as :meth:`teardown_request` decorated function. This is + not actually called by the :class:`Flask` object itself but is always + triggered when the request context is popped. That way we have a + tighter control over certain resources under testing environments. + + .. versionchanged:: 0.9 + Added the `exc` argument. Previously this was always using the + current exception information. + """ + if exc is None: + exc = sys.exc_info()[1] + funcs = reversed(self.teardown_request_funcs.get(None, ())) + bp = _request_ctx_stack.top.request.blueprint + if bp is not None and bp in self.teardown_request_funcs: + funcs = chain(funcs, reversed(self.teardown_request_funcs[bp])) + for func in funcs: + rv = func(exc) + request_tearing_down.send(self, exc=exc) + + def do_teardown_appcontext(self, exc=None): + """Called when an application context is popped. This works pretty + much the same as :meth:`do_teardown_request` but for the application + context. + + .. versionadded:: 0.9 + """ + if exc is None: + exc = sys.exc_info()[1] + for func in reversed(self.teardown_appcontext_funcs): + func(exc) + appcontext_tearing_down.send(self, exc=exc) + + def app_context(self): + """Binds the application only. For as long as the application is bound + to the current context the :data:`flask.current_app` points to that + application. An application context is automatically created when a + request context is pushed if necessary. + + Example usage:: + + with app.app_context(): + ... + + .. versionadded:: 0.9 + """ + return AppContext(self) + + def request_context(self, environ): + """Creates a :class:`~flask.ctx.RequestContext` from the given + environment and binds it to the current context. This must be used in + combination with the `with` statement because the request is only bound + to the current context for the duration of the `with` block. + + Example usage:: + + with app.request_context(environ): + do_something_with(request) + + The object returned can also be used without the `with` statement + which is useful for working in the shell. The example above is + doing exactly the same as this code:: + + ctx = app.request_context(environ) + ctx.push() + try: + do_something_with(request) + finally: + ctx.pop() + + .. versionchanged:: 0.3 + Added support for non-with statement usage and `with` statement + is now passed the ctx object. + + :param environ: a WSGI environment + """ + return RequestContext(self, environ) + + def test_request_context(self, *args, **kwargs): + """Creates a WSGI environment from the given values (see + :func:`werkzeug.test.EnvironBuilder` for more information, this + function accepts the same arguments). + """ + from flask.testing import make_test_environ_builder + builder = make_test_environ_builder(self, *args, **kwargs) + try: + return self.request_context(builder.get_environ()) + finally: + builder.close() + + def wsgi_app(self, environ, start_response): + """The actual WSGI application. This is not implemented in + `__call__` so that middlewares can be applied without losing a + reference to the class. So instead of doing this:: + + app = MyMiddleware(app) + + It's a better idea to do this instead:: + + app.wsgi_app = MyMiddleware(app.wsgi_app) + + Then you still have the original application object around and + can continue to call methods on it. + + .. versionchanged:: 0.7 + The behavior of the before and after request callbacks was changed + under error conditions and a new callback was added that will + always execute at the end of the request, independent on if an + error occurred or not. See :ref:`callbacks-and-errors`. + + :param environ: a WSGI environment + :param start_response: a callable accepting a status code, + a list of headers and an optional + exception context to start the response + """ + ctx = self.request_context(environ) + ctx.push() + error = None + try: + try: + response = self.full_dispatch_request() + except Exception as e: + error = e + response = self.make_response(self.handle_exception(e)) + return response(environ, start_response) + finally: + if self.should_ignore_error(error): + error = None + ctx.auto_pop(error) + + @property + def modules(self): + from warnings import warn + warn(DeprecationWarning('Flask.modules is deprecated, use ' + 'Flask.blueprints instead'), stacklevel=2) + return self.blueprints + + def __call__(self, environ, start_response): + """Shortcut for :attr:`wsgi_app`.""" + return self.wsgi_app(environ, start_response) + + def __repr__(self): + return '<%s %r>' % ( + self.__class__.__name__, + self.name, + ) diff --git a/env/lib/python2.7/site-packages/flask/app.pyc b/env/lib/python2.7/site-packages/flask/app.pyc new file mode 100644 index 0000000000000000000000000000000000000000..793e5b6cc0d39c02a5ddce3db592b789f7ae700d GIT binary patch literal 65334 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¨2OLq^tM^hc7Flj_1rgHuc5 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 w%<4Ju41RM0A<', + view_func=self.send_static_file, + endpoint='static') + + for deferred in self.deferred_functions: + deferred(state) + + def route(self, rule, **options): + """Like :meth:`Flask.route` but for a blueprint. The endpoint for the + :func:`url_for` function is prefixed with the name of the blueprint. + """ + def decorator(f): + endpoint = options.pop("endpoint", f.__name__) + self.add_url_rule(rule, endpoint, f, **options) + return f + return decorator + + def add_url_rule(self, rule, endpoint=None, view_func=None, **options): + """Like :meth:`Flask.add_url_rule` but for a blueprint. The endpoint for + the :func:`url_for` function is prefixed with the name of the blueprint. + """ + if endpoint: + assert '.' not in endpoint, "Blueprint endpoint's should not contain dot's" + self.record(lambda s: + s.add_url_rule(rule, endpoint, view_func, **options)) + + def endpoint(self, endpoint): + """Like :meth:`Flask.endpoint` but for a blueprint. This does not + prefix the endpoint with the blueprint name, this has to be done + explicitly by the user of this method. If the endpoint is prefixed + with a `.` it will be registered to the current blueprint, otherwise + it's an application independent endpoint. + """ + def decorator(f): + def register_endpoint(state): + state.app.view_functions[endpoint] = f + self.record_once(register_endpoint) + return f + return decorator + + def app_template_filter(self, name=None): + """Register a custom template filter, available application wide. Like + :meth:`Flask.template_filter` but for a blueprint. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + def decorator(f): + self.add_app_template_filter(f, name=name) + return f + return decorator + + def add_app_template_filter(self, f, name=None): + """Register a custom template filter, available application wide. Like + :meth:`Flask.add_template_filter` but for a blueprint. Works exactly + like the :meth:`app_template_filter` decorator. + + :param name: the optional name of the filter, otherwise the + function name will be used. + """ + def register_template(state): + state.app.jinja_env.filters[name or f.__name__] = f + self.record_once(register_template) + + def app_template_test(self, name=None): + """Register a custom template test, available application wide. Like + :meth:`Flask.template_test` but for a blueprint. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + def decorator(f): + self.add_app_template_test(f, name=name) + return f + return decorator + + def add_app_template_test(self, f, name=None): + """Register a custom template test, available application wide. Like + :meth:`Flask.add_template_test` but for a blueprint. Works exactly + like the :meth:`app_template_test` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the test, otherwise the + function name will be used. + """ + def register_template(state): + state.app.jinja_env.tests[name or f.__name__] = f + self.record_once(register_template) + + def app_template_global(self, name=None): + """Register a custom template global, available application wide. Like + :meth:`Flask.template_global` but for a blueprint. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + def decorator(f): + self.add_app_template_global(f, name=name) + return f + return decorator + + def add_app_template_global(self, f, name=None): + """Register a custom template global, available application wide. Like + :meth:`Flask.add_template_global` but for a blueprint. Works exactly + like the :meth:`app_template_global` decorator. + + .. versionadded:: 0.10 + + :param name: the optional name of the global, otherwise the + function name will be used. + """ + def register_template(state): + state.app.jinja_env.globals[name or f.__name__] = f + self.record_once(register_template) + + def before_request(self, f): + """Like :meth:`Flask.before_request` but for a blueprint. This function + is only executed before each request that is handled by a function of + that blueprint. + """ + self.record_once(lambda s: s.app.before_request_funcs + .setdefault(self.name, []).append(f)) + return f + + def before_app_request(self, f): + """Like :meth:`Flask.before_request`. Such a function is executed + before each request, even if outside of a blueprint. + """ + self.record_once(lambda s: s.app.before_request_funcs + .setdefault(None, []).append(f)) + return f + + def before_app_first_request(self, f): + """Like :meth:`Flask.before_first_request`. Such a function is + executed before the first request to the application. + """ + self.record_once(lambda s: s.app.before_first_request_funcs.append(f)) + return f + + def after_request(self, f): + """Like :meth:`Flask.after_request` but for a blueprint. This function + is only executed after each request that is handled by a function of + that blueprint. + """ + self.record_once(lambda s: s.app.after_request_funcs + .setdefault(self.name, []).append(f)) + return f + + def after_app_request(self, f): + """Like :meth:`Flask.after_request` but for a blueprint. Such a function + is executed after each request, even if outside of the blueprint. + """ + self.record_once(lambda s: s.app.after_request_funcs + .setdefault(None, []).append(f)) + return f + + def teardown_request(self, f): + """Like :meth:`Flask.teardown_request` but for a blueprint. This + function is only executed when tearing down requests handled by a + function of that blueprint. Teardown request functions are executed + when the request context is popped, even when no actual request was + performed. + """ + self.record_once(lambda s: s.app.teardown_request_funcs + .setdefault(self.name, []).append(f)) + return f + + def teardown_app_request(self, f): + """Like :meth:`Flask.teardown_request` but for a blueprint. Such a + function is executed when tearing down each request, even if outside of + the blueprint. + """ + self.record_once(lambda s: s.app.teardown_request_funcs + .setdefault(None, []).append(f)) + return f + + def context_processor(self, f): + """Like :meth:`Flask.context_processor` but for a blueprint. This + function is only executed for requests handled by a blueprint. + """ + self.record_once(lambda s: s.app.template_context_processors + .setdefault(self.name, []).append(f)) + return f + + def app_context_processor(self, f): + """Like :meth:`Flask.context_processor` but for a blueprint. Such a + function is executed each request, even if outside of the blueprint. + """ + self.record_once(lambda s: s.app.template_context_processors + .setdefault(None, []).append(f)) + return f + + def app_errorhandler(self, code): + """Like :meth:`Flask.errorhandler` but for a blueprint. This + handler is used for all requests, even if outside of the blueprint. + """ + def decorator(f): + self.record_once(lambda s: s.app.errorhandler(code)(f)) + return f + return decorator + + def url_value_preprocessor(self, f): + """Registers a function as URL value preprocessor for this + blueprint. It's called before the view functions are called and + can modify the url values provided. + """ + self.record_once(lambda s: s.app.url_value_preprocessors + .setdefault(self.name, []).append(f)) + return f + + def url_defaults(self, f): + """Callback function for URL defaults for this blueprint. It's called + with the endpoint and values and should update the values passed + in place. + """ + self.record_once(lambda s: s.app.url_default_functions + .setdefault(self.name, []).append(f)) + return f + + def app_url_value_preprocessor(self, f): + """Same as :meth:`url_value_preprocessor` but application wide. + """ + self.record_once(lambda s: s.app.url_value_preprocessors + .setdefault(None, []).append(f)) + return f + + def app_url_defaults(self, f): + """Same as :meth:`url_defaults` but application wide. + """ + self.record_once(lambda s: s.app.url_default_functions + .setdefault(None, []).append(f)) + return f + + def errorhandler(self, code_or_exception): + """Registers an error handler that becomes active for this blueprint + only. Please be aware that routing does not happen local to a + blueprint so an error handler for 404 usually is not handled by + a blueprint unless it is caused inside a view function. Another + special case is the 500 internal server error which is always looked + up from the application. + + Otherwise works as the :meth:`~flask.Flask.errorhandler` decorator + of the :class:`~flask.Flask` object. + """ + def decorator(f): + self.record_once(lambda s: s.app._register_error_handler( + self.name, code_or_exception, f)) + return f + return decorator diff --git a/env/lib/python2.7/site-packages/flask/blueprints.pyc b/env/lib/python2.7/site-packages/flask/blueprints.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f120663ac842f40d1c30e3c724e622ca4d01ab6f GIT binary patch literal 22808 zcmdU1TW}o5TJGJIcD1s6lVc^0on&%73OJH;>g0qHJ|?!}q)ZYe89A7UFz20$MNaq{r|dISIJ)q|GtG^^cfOYsWqepUzTANVKNwqeKvy;jzt4-WnR$nW1SE*0eD$1=WZ$i#anX^;Mt*X`eX}(1j zl$y5ix7l!_-Gz-t$7_dvD~{ykS3Q5za`u|J$#O!^inl#0^y)#g>9t(Xwf3DmRvcJ< zv)%A;Dz+LbxFwV=~-Kit^y>T&!O&!g_`01a2$41;EE&-eCgo1Io&9x@HK>cyS*YK-E$ z`uiFRh+aYBp}*0ANQ>-sbmJQOTK`{EU!(gcmAyJY!TbLW$xW}>4nilqV{Hcwmu)N( zNgYFP%a71{erwBeEYq>pz8`P1&!nAlt-oMdS6k?TD0W(P&k8nilOI`i^anZynb3pW zE?Yc(da3Ef+e_6>lSYe+^kEjHcItekpWn78Vx{5%WKtf zw1HN(r2U8s-KX_Q)VP8ltG|q2^iw2X6xA1Keq;)gL0Xaw&QC~24tI)bXM$~dx1he9 zR9{T8m3OC9_%ZLO5<=5?5KT&W0N_9e{~Lv=cUJ?a5GO4+PSR=5@&r&RPVlEqIV zFN_wi1)(1;x*Ij8?Js(*y~T#VvDm%??6khW@aAIV$KGpgJpiLcLEWOMY_xzI`OaF+ zZ~1Yp#$g#tc$Tc*%?>wlCS^Gig42nC(ir5;vNS|V|9O64VWx+^ z7g;T*>FLqTD*^}UvlLPhf%kH>@N%>wxYj@b07E8hKlqh$Ux2OKy}S&L;8j zZ4n!^JXtPQUy-&m+Mtf}@<;hZ(|rh)>g6<@SE3oi6eH!?zW<>I%ZjE9G$5XW^-_{d zm5*Qyd|gm$(~_T*{ISFWTAN9Ws)*`5u3WK!)=tRzs@!~1^3#$(CHZ5LKP~wg$%AJ$U1?4^| znP-&ylw{Bd=Opu-a-WurrQGw9d0x2}B=drDpOMUqGzp$V<3?|wVQtuNUIeoX12h|Y zRPNc4jNVpiEX3PRECyWYYOBxaU624S?fcNq8=mOp-toO8=7BK*%uru2-Jh8}>)M(l zxfo(HuM+BkWfp*ULRucJt;h;mLPJ!AJzTU3gKh~*acSMWGFmsLofPJ`VCj*cf>vTc zE-YAk&@wmyUhv$dC7PLXZ=D*7KXSn`n=(d%AIKgoOdDfT-7SIawMNIW*7qRk3h$^1 z@iQar%uHEr38TX%@O1{30l=%xjxC=2a!Ry>SPZZdaA{S{(3SaPc)d-_Q;+01=17g2 zF-dkbto(XyQ|!L@WOhdE1t;DXg%8T~!q9WIElOKTOk6{3Vj5_opy@l$HV{^{`O27L zz>W{XxJJ&gpXFsjOyNco0b^BH~-1yrRoV95M`GdQYKEs&Q? zZ{ENG`h+_D4apRkff@&=G>WQOqQa&ohcW=WK!M}`LZXo;X&a*BdCD~^_n%OtotUf~ zYAKTSn4!H4waDSJ?P(MnpknkHMVk%;+?as9SLdQ6Q*^G>UL`Abw&g&QaH}I;7xE!Y z@UVrlwasoN_IjUrZp6`MdZwUro)Oz}-w9h0P_1YRWcAtSYa4J6+&gAuONHP@Y; z4J}MMB2ZTTrjLuQU>}@>av~7Rw$s}3B26@{Ahx3IVBhMr7gn@INu5~R3R1(>Bc22J zC^2;#Wx^5FAWBXgNzs$MLK?AO!fm1*Z|O6(#S_$5Xly9_d158A1=!s3%yf+Dqprr)+Mok6!Y5?ak*1$ITVgLn-P%(YAdz@6?S-oCkto()5ORQb;Fi||SfsJvgukgrNe=!OyGk+d)Se^DB2@I7GsMv5)CvQ3@nrIhJX?PkmyhnN=SW{6kvjkL16?!a<#J|h6_li z4#5JL1)=XUl!a2oJ|S^hjs;g-2S6ko;sLP;YFGk|409SJ9Ig_X(fX6Un>oI^!*FV} zeMSGJm(B0;B}BiPl%*(s^;1MyJxA*^yZz;r#q zJP3j4&_$t01$q0toUN$0KR=ZOR^Zxlfc@l_x`mkJsyHsu6#!ycYeXocr1vG(w~+Q& z&7fet%SOzZu^ABh*g~`kdXN1HV>Rhgm&!M=>YWI_s{gBLuu?~wOlce5wzKC4ASu*%un$I$LYlh=1i)r*F~REOfs(MGj`;C zF#%8)j!0OhMTPLxeFPR^5#Xep$35SaVARs7U;!%v6Rk~XQQ1_C()V&1_5{p~+&$t7 zJjr|5($cFV)iW&Lr5WVJLHGwakO+c8f6f);Z8sJ8>$NA_nI)zd%H=O2%>s=w05wrY zAkjD&tN=+;+-QwUgqRa{gr+a1?D!cPz8{cjnDk&Ug6!M?_7zZIkf_;DbX{722^Z)5 zNoqD4|0n{=ib@j--NoF5DagCcNkgB?HF0e_=ms-qmAJ8~Ct|RfXJAv7#H$@^ePP}5 zvtU=MYEq>QFSUa}3T88nm2y!BtM>gU6U+z9Y3k$5DX-Om2NQGgke@0)F_pH4z`nLnva5{lrk z>N2ZXj`=e-6}iGhs6hg5&&VQJ*oZPTNXHl&P&XJIT3g>O6!Iq09PSVx#=Mtm7bCgW zQ(KKxB2Xih4~@r2vWd38!!HRAoaw`)yt@aJMxIe(QYL{1G{)Z==_<3OItL4zn`49d z=tU&G>P63Nq7x+2T7aFjD%McyxR`_H!}hnbP~jx(qXj$ ztpV39HEEMc2SWBSfxm^mfHp9iL3<1B^E?TkKd&X&hk6>7Hp`CR+Ht_ydlE&}!!#2A zK@WvYe{fL9)WMkbN7|2nkM|j)OcaAC5D}lsLUfr3WM9LfNR?AB94Vt5BsS-8f678B zfts2ves|)2>cN8`_M-UVX`7`C27gA{gQm+~zm#1c4%J%T$AZ#1UC>AAlD(D3lDo+KU^E|!%5`yri2VP>kg(8&_rD{} z+i&5an0`4c|ERfLxcOi4^2dqFmm$wTQzoJE>BCU@vkx8sTa94DX*@ic>vA3qou@KC z7KA>~M%NNPVoLu{1C%4Bbb2{ml&%}&-;Hz+PwHF`{Qw(1#m6E2$}U>hWevvlp@=;# zaD3FBR)1{6!$Macj@&DFQj2#a^gadLJWllf4w{28l5ToW{Z{c^pJ7`|xS+>_?Fzv~ ze}&unBcvN1CVxDvwf+f~Odnuta{&y3oM|w_IGQ*o%PPFvUL6w<$(AID=YDl7m(@k4&fJW$r=-^o(Jww^E5P1 zV?n!!j5u~zSC*SaHVf6x*Q>~BN?u})&8%HBI%#48kJJtOd6arO1>8(uXwi6v^5!0C zMk$C)5p*}r48;)(m!t7VXWf55Xke~lF5BCS3xi&D5AQznTE%32#;28~-8RmMRg67gt84pU% z4UG~b$VdUgHRTCFsJN5Ceb#_vV(yS2xr>4i1WCFNM03+XsF+SpA(N6217Pxe#zg(Q z1q*;X{A!(T|aT9KNv@m&|9Rh(863b>OdZ=VPAmMaC4kTU8 z@k|aXdU~&mPlnWCe}Omjqs7_896^f7gY2*&RhX3ZxN0zBva7O>g93Y%JrF9V?$X*htX*(XtpEMX|E3r9Negt z>qvE)1Qvxlaw_dLgPVaWZAhN_5lZRjso2Bvx?sOG3{@G(q*ga==x%FUFWE<#T(Qn_ zQ%%S92$`|nUy>{mg;k!x3Ko7MTUv&(_PJCa8|o4h-xOx{3#4{Fm(X~(#ni{%wzlUc zXqFpW*gIQ~I}W$cYPSH3@l9FS4G1TsIdD>xidOXT3&?coV|YA682yY>_qO}vz?zqb z20y7ab3#Ts0%#TVHV!vuX~VyASi}F%QS9N-uesBJBaiiCE)qM@a zbr_neCJswgzx!~g8iuRBjhSSrMy84%fUd(>csEhOBV(jbhK3Gq90McCOgh39eaQJZ zLry|T9Kyse|BYxg^u$uRq0KBd9n3}8oD+oF@*0kYl6z^{aY>k7z%QQ|5gREQq{oIw zi|{Je+V`!}?26K@7!qUc#nNK!jisf-9tbbvsWhZ2!w2B}9Op)o(_qQHm1NqND1~ zcgm+mvn>k?(w`2JY_dH>e=|sEH@TSmCKOjqV%rElFMu7zrf5T{4~sbJ zFScn?JMmlfrx3))V3YUGLkKtjkQYb=#i#*(Gu zgHfy<3vg@t892TA`~jVQ7;|lnJtv)e1d~krL-#9g9D}*W{-W|4+yUHGrLFzaAUATD z&gOjUfX+_Isaz;YNLFsFTJ?r8 zyn`R+uo?kO6z>0WOfjZlE5hksnfU%6T>1g5euPA^ISi6;7h)E*HRU*&h*qc7K!}68 zzi@xu5tjkqLFCML&ll2AfvYGm|D}wm?bUrqS!cEIJZ-HvE?t85!rWO47qBr6pBG3P zZ-3jzoIGxG8u&~mzF-gpyUAw|sq*k`0d6;!LUN3l+e+{uUoLxNuuUDG`QZLIys`Up z3VH`~-c-%)OE684eA1xj6HfB%dh%_k0jifv7sS}Jkh!08gYx^U5AcM{v)m1tc|v;M zvaGeiHFTs*zkKv;7LcgZ#q+2u~>s1}4Z?{?jj4LR-w2s`k9VUEDFro9pg`(6|Z#AaO1zJNrQ9KYi=U!$a8k&JA{Sg#4qeuKH6 zV?qN?Z&v&T=D6*`ew)cMlXsbLftUS@Ox|Pi0h14ze8hyGRy zziPEQRjo*ROwuW&{Hs(eEBZrT(!y1gDRJ2#XhiZw8QI07KNcD3kBm_#$Ok0!2Ug^x fem12VW3A<*5tsGX3$Msd`YG1FaH=?0n!ECUV$I1+ literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/flask/config.py b/env/lib/python2.7/site-packages/flask/config.py new file mode 100644 index 0000000..155afa2 --- /dev/null +++ b/env/lib/python2.7/site-packages/flask/config.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +""" + flask.config + ~~~~~~~~~~~~ + + Implements the configuration related objects. + + :copyright: (c) 2011 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" + +import imp +import os +import errno + +from werkzeug.utils import import_string +from ._compat import string_types + + +class ConfigAttribute(object): + """Makes an attribute forward to the config""" + + def __init__(self, name, get_converter=None): + self.__name__ = name + self.get_converter = get_converter + + def __get__(self, obj, type=None): + if obj is None: + return self + rv = obj.config[self.__name__] + if self.get_converter is not None: + rv = self.get_converter(rv) + return rv + + def __set__(self, obj, value): + obj.config[self.__name__] = value + + +class Config(dict): + """Works exactly like a dict but provides ways to fill it from files + or special dictionaries. There are two common patterns to populate the + config. + + Either you can fill the config from a config file:: + + app.config.from_pyfile('yourconfig.cfg') + + Or alternatively you can define the configuration options in the + module that calls :meth:`from_object` or provide an import path to + a module that should be loaded. It is also possible to tell it to + use the same module and with that provide the configuration values + just before the call:: + + DEBUG = True + SECRET_KEY = 'development key' + app.config.from_object(__name__) + + In both cases (loading from any Python file or loading from modules), + only uppercase keys are added to the config. This makes it possible to use + lowercase values in the config file for temporary values that are not added + to the config or to define the config keys in the same file that implements + the application. + + Probably the most interesting way to load configurations is from an + environment variable pointing to a file:: + + app.config.from_envvar('YOURAPPLICATION_SETTINGS') + + In this case before launching the application you have to set this + environment variable to the file you want to use. On Linux and OS X + use the export statement:: + + export YOURAPPLICATION_SETTINGS='/path/to/config/file' + + On windows use `set` instead. + + :param root_path: path to which files are read relative from. When the + config object is created by the application, this is + the application's :attr:`~flask.Flask.root_path`. + :param defaults: an optional dictionary of default values + """ + + def __init__(self, root_path, defaults=None): + dict.__init__(self, defaults or {}) + self.root_path = root_path + + def from_envvar(self, variable_name, silent=False): + """Loads a configuration from an environment variable pointing to + a configuration file. This is basically just a shortcut with nicer + error messages for this line of code:: + + app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS']) + + :param variable_name: name of the environment variable + :param silent: set to `True` if you want silent failure for missing + files. + :return: bool. `True` if able to load config, `False` otherwise. + """ + rv = os.environ.get(variable_name) + if not rv: + if silent: + return False + raise RuntimeError('The environment variable %r is not set ' + 'and as such configuration could not be ' + 'loaded. Set this variable and make it ' + 'point to a configuration file' % + variable_name) + return self.from_pyfile(rv, silent=silent) + + def from_pyfile(self, filename, silent=False): + """Updates the values in the config from a Python file. This function + behaves as if the file was imported as module with the + :meth:`from_object` function. + + :param filename: the filename of the config. This can either be an + absolute filename or a filename relative to the + root path. + :param silent: set to `True` if you want silent failure for missing + files. + + .. versionadded:: 0.7 + `silent` parameter. + """ + filename = os.path.join(self.root_path, filename) + d = imp.new_module('config') + d.__file__ = filename + try: + with open(filename) as config_file: + exec(compile(config_file.read(), filename, 'exec'), d.__dict__) + except IOError as e: + if silent and e.errno in (errno.ENOENT, errno.EISDIR): + return False + e.strerror = 'Unable to load configuration file (%s)' % e.strerror + raise + self.from_object(d) + return True + + def from_object(self, obj): + """Updates the values from the given object. An object can be of one + of the following two types: + + - a string: in this case the object with that name will be imported + - an actual object reference: that object is used directly + + Objects are usually either modules or classes. + + Just the uppercase variables in that object are stored in the config. + Example usage:: + + app.config.from_object('yourapplication.default_config') + from yourapplication import default_config + app.config.from_object(default_config) + + You should not use this function to load the actual configuration but + rather configuration defaults. The actual config should be loaded + with :meth:`from_pyfile` and ideally from a location not within the + package because the package might be installed system wide. + + :param obj: an import name or object + """ + if isinstance(obj, string_types): + obj = import_string(obj) + for key in dir(obj): + if key.isupper(): + self[key] = getattr(obj, key) + + def __repr__(self): + return '<%s %s>' % (self.__class__.__name__, dict.__repr__(self)) diff --git a/env/lib/python2.7/site-packages/flask/config.pyc b/env/lib/python2.7/site-packages/flask/config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..918216d9e7d8773cfdacb035cf3a8976593a713f GIT binary patch literal 7558 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/flask/ctx.py b/env/lib/python2.7/site-packages/flask/ctx.py new file mode 100644 index 0000000..f134237 --- /dev/null +++ b/env/lib/python2.7/site-packages/flask/ctx.py @@ -0,0 +1,394 @@ +# -*- coding: utf-8 -*- +""" + flask.ctx + ~~~~~~~~~ + + Implements the objects required to keep the context. + + :copyright: (c) 2011 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" + +from __future__ import with_statement + +import sys +from functools import update_wrapper + +from werkzeug.exceptions import HTTPException + +from .globals import _request_ctx_stack, _app_ctx_stack +from .module import blueprint_is_module +from .signals import appcontext_pushed, appcontext_popped + + +class _AppCtxGlobals(object): + """A plain object.""" + + def get(self, name, default=None): + return self.__dict__.get(name, default) + + def __contains__(self, item): + return item in self.__dict__ + + def __iter__(self): + return iter(self.__dict__) + + def __repr__(self): + top = _app_ctx_stack.top + if top is not None: + return '' % top.app.name + return object.__repr__(self) + + +def after_this_request(f): + """Executes a function after this request. This is useful to modify + response objects. The function is passed the response object and has + to return the same or a new one. + + Example:: + + @app.route('/') + def index(): + @after_this_request + def add_header(response): + response.headers['X-Foo'] = 'Parachute' + return response + return 'Hello World!' + + This is more useful if a function other than the view function wants to + modify a response. For instance think of a decorator that wants to add + some headers without converting the return value into a response object. + + .. versionadded:: 0.9 + """ + _request_ctx_stack.top._after_request_functions.append(f) + return f + + +def copy_current_request_context(f): + """A helper function that decorates a function to retain the current + request context. This is useful when working with greenlets. The moment + the function is decorated a copy of the request context is created and + then pushed when the function is called. + + Example:: + + import gevent + from flask import copy_current_request_context + + @app.route('/') + def index(): + @copy_current_request_context + def do_some_work(): + # do some work here, it can access flask.request like you + # would otherwise in the view function. + ... + gevent.spawn(do_some_work) + return 'Regular response' + + .. versionadded:: 0.10 + """ + top = _request_ctx_stack.top + if top is None: + raise RuntimeError('This decorator can only be used at local scopes ' + 'when a request context is on the stack. For instance within ' + 'view functions.') + reqctx = top.copy() + def wrapper(*args, **kwargs): + with reqctx: + return f(*args, **kwargs) + return update_wrapper(wrapper, f) + + +def has_request_context(): + """If you have code that wants to test if a request context is there or + not this function can be used. For instance, you may want to take advantage + of request information if the request object is available, but fail + silently if it is unavailable. + + :: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and has_request_context(): + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + Alternatively you can also just test any of the context bound objects + (such as :class:`request` or :class:`g` for truthness):: + + class User(db.Model): + + def __init__(self, username, remote_addr=None): + self.username = username + if remote_addr is None and request: + remote_addr = request.remote_addr + self.remote_addr = remote_addr + + .. versionadded:: 0.7 + """ + return _request_ctx_stack.top is not None + + +def has_app_context(): + """Works like :func:`has_request_context` but for the application + context. You can also just do a boolean check on the + :data:`current_app` object instead. + + .. versionadded:: 0.9 + """ + return _app_ctx_stack.top is not None + + +class AppContext(object): + """The application context binds an application object implicitly + to the current thread or greenlet, similar to how the + :class:`RequestContext` binds request information. The application + context is also implicitly created if a request context is created + but the application is not on top of the individual application + context. + """ + + def __init__(self, app): + self.app = app + self.url_adapter = app.create_url_adapter(None) + self.g = app.app_ctx_globals_class() + + # Like request context, app contexts can be pushed multiple times + # but there a basic "refcount" is enough to track them. + self._refcnt = 0 + + def push(self): + """Binds the app context to the current context.""" + self._refcnt += 1 + _app_ctx_stack.push(self) + appcontext_pushed.send(self.app) + + def pop(self, exc=None): + """Pops the app context.""" + self._refcnt -= 1 + if self._refcnt <= 0: + if exc is None: + exc = sys.exc_info()[1] + self.app.do_teardown_appcontext(exc) + rv = _app_ctx_stack.pop() + assert rv is self, 'Popped wrong app context. (%r instead of %r)' \ + % (rv, self) + appcontext_popped.send(self.app) + + def __enter__(self): + self.push() + return self + + def __exit__(self, exc_type, exc_value, tb): + self.pop(exc_value) + + +class RequestContext(object): + """The request context contains all request relevant information. It is + created at the beginning of the request and pushed to the + `_request_ctx_stack` and removed at the end of it. It will create the + URL adapter and request object for the WSGI environment provided. + + Do not attempt to use this class directly, instead use + :meth:`~flask.Flask.test_request_context` and + :meth:`~flask.Flask.request_context` to create this object. + + When the request context is popped, it will evaluate all the + functions registered on the application for teardown execution + (:meth:`~flask.Flask.teardown_request`). + + The request context is automatically popped at the end of the request + for you. In debug mode the request context is kept around if + exceptions happen so that interactive debuggers have a chance to + introspect the data. With 0.4 this can also be forced for requests + that did not fail and outside of `DEBUG` mode. By setting + ``'flask._preserve_context'`` to `True` on the WSGI environment the + context will not pop itself at the end of the request. This is used by + the :meth:`~flask.Flask.test_client` for example to implement the + deferred cleanup functionality. + + You might find this helpful for unittests where you need the + information from the context local around for a little longer. Make + sure to properly :meth:`~werkzeug.LocalStack.pop` the stack yourself in + that situation, otherwise your unittests will leak memory. + """ + + def __init__(self, app, environ, request=None): + self.app = app + if request is None: + request = app.request_class(environ) + self.request = request + self.url_adapter = app.create_url_adapter(self.request) + self.flashes = None + self.session = None + + # Request contexts can be pushed multiple times and interleaved with + # other request contexts. Now only if the last level is popped we + # get rid of them. Additionally if an application context is missing + # one is created implicitly so for each level we add this information + self._implicit_app_ctx_stack = [] + + # indicator if the context was preserved. Next time another context + # is pushed the preserved context is popped. + self.preserved = False + + # remembers the exception for pop if there is one in case the context + # preservation kicks in. + self._preserved_exc = None + + # Functions that should be executed after the request on the response + # object. These will be called before the regular "after_request" + # functions. + self._after_request_functions = [] + + self.match_request() + + # XXX: Support for deprecated functionality. This is going away with + # Flask 1.0 + blueprint = self.request.blueprint + if blueprint is not None: + # better safe than sorry, we don't want to break code that + # already worked + bp = app.blueprints.get(blueprint) + if bp is not None and blueprint_is_module(bp): + self.request._is_old_module = True + + def _get_g(self): + return _app_ctx_stack.top.g + def _set_g(self, value): + _app_ctx_stack.top.g = value + g = property(_get_g, _set_g) + del _get_g, _set_g + + def copy(self): + """Creates a copy of this request context with the same request object. + This can be used to move a request context to a different greenlet. + Because the actual request object is the same this cannot be used to + move a request context to a different thread unless access to the + request object is locked. + + .. versionadded:: 0.10 + """ + return self.__class__(self.app, + environ=self.request.environ, + request=self.request + ) + + def match_request(self): + """Can be overridden by a subclass to hook into the matching + of the request. + """ + try: + url_rule, self.request.view_args = \ + self.url_adapter.match(return_rule=True) + self.request.url_rule = url_rule + except HTTPException as e: + self.request.routing_exception = e + + def push(self): + """Binds the request context to the current context.""" + # If an exception occurs in debug mode or if context preservation is + # activated under exception situations exactly one context stays + # on the stack. The rationale is that you want to access that + # information under debug situations. However if someone forgets to + # pop that context again we want to make sure that on the next push + # it's invalidated, otherwise we run at risk that something leaks + # memory. This is usually only a problem in testsuite since this + # functionality is not active in production environments. + top = _request_ctx_stack.top + if top is not None and top.preserved: + top.pop(top._preserved_exc) + + # Before we push the request context we have to ensure that there + # is an application context. + app_ctx = _app_ctx_stack.top + if app_ctx is None or app_ctx.app != self.app: + app_ctx = self.app.app_context() + app_ctx.push() + self._implicit_app_ctx_stack.append(app_ctx) + else: + self._implicit_app_ctx_stack.append(None) + + _request_ctx_stack.push(self) + + # Open the session at the moment that the request context is + # available. This allows a custom open_session method to use the + # request context (e.g. code that access database information + # stored on `g` instead of the appcontext). + self.session = self.app.open_session(self.request) + if self.session is None: + self.session = self.app.make_null_session() + + def pop(self, exc=None): + """Pops the request context and unbinds it by doing that. This will + also trigger the execution of functions registered by the + :meth:`~flask.Flask.teardown_request` decorator. + + .. versionchanged:: 0.9 + Added the `exc` argument. + """ + app_ctx = self._implicit_app_ctx_stack.pop() + + clear_request = False + if not self._implicit_app_ctx_stack: + self.preserved = False + self._preserved_exc = None + if exc is None: + exc = sys.exc_info()[1] + self.app.do_teardown_request(exc) + + # If this interpreter supports clearing the exception information + # we do that now. This will only go into effect on Python 2.x, + # on 3.x it disappears automatically at the end of the exception + # stack. + if hasattr(sys, 'exc_clear'): + sys.exc_clear() + + request_close = getattr(self.request, 'close', None) + if request_close is not None: + request_close() + clear_request = True + + rv = _request_ctx_stack.pop() + assert rv is self, 'Popped wrong request context. (%r instead of %r)' \ + % (rv, self) + + # get rid of circular dependencies at the end of the request + # so that we don't require the GC to be active. + if clear_request: + rv.request.environ['werkzeug.request'] = None + + # Get rid of the app as well if necessary. + if app_ctx is not None: + app_ctx.pop(exc) + + def auto_pop(self, exc): + if self.request.environ.get('flask._preserve_context') or \ + (exc is not None and self.app.preserve_context_on_exception): + self.preserved = True + self._preserved_exc = exc + else: + self.pop(exc) + + def __enter__(self): + self.push() + return self + + def __exit__(self, exc_type, exc_value, tb): + # do not pop the request stack if we are in debug mode and an + # exception happened. This will allow the debugger to still + # access the request object in the interactive shell. Furthermore + # the context can be force kept alive for the test client. + # See flask.testing for how this works. + self.auto_pop(exc_value) + + def __repr__(self): + return '<%s \'%s\' [%s] of %s>' % ( + self.__class__.__name__, + self.request.url, + self.request.method, + self.app.name, + ) diff --git a/env/lib/python2.7/site-packages/flask/ctx.pyc b/env/lib/python2.7/site-packages/flask/ctx.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0395fddc3357b434bfb22447c8863a1f9146720b GIT binary patch literal 14586 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 tN>fpP5#j4dYa`frlWJg?2b{LlxP&u~_a7rIq%B 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/flask/exthook.py b/env/lib/python2.7/site-packages/flask/exthook.py new file mode 100644 index 0000000..d0d814c --- /dev/null +++ b/env/lib/python2.7/site-packages/flask/exthook.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- +""" + flask.exthook + ~~~~~~~~~~~~~ + + Redirect imports for extensions. This module basically makes it possible + for us to transition from flaskext.foo to flask_foo without having to + force all extensions to upgrade at the same time. + + When a user does ``from flask.ext.foo import bar`` it will attempt to + import ``from flask_foo import bar`` first and when that fails it will + try to import ``from flaskext.foo import bar``. + + We're switching from namespace packages because it was just too painful for + everybody involved. + + This is used by `flask.ext`. + + :copyright: (c) 2011 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" +import sys +import os +from ._compat import reraise + + +class ExtensionImporter(object): + """This importer redirects imports from this submodule to other locations. + This makes it possible to transition from the old flaskext.name to the + newer flask_name without people having a hard time. + """ + + def __init__(self, module_choices, wrapper_module): + self.module_choices = module_choices + self.wrapper_module = wrapper_module + self.prefix = wrapper_module + '.' + self.prefix_cutoff = wrapper_module.count('.') + 1 + + def __eq__(self, other): + return self.__class__.__module__ == other.__class__.__module__ and \ + self.__class__.__name__ == other.__class__.__name__ and \ + self.wrapper_module == other.wrapper_module and \ + self.module_choices == other.module_choices + + def __ne__(self, other): + return not self.__eq__(other) + + def install(self): + sys.meta_path[:] = [x for x in sys.meta_path if self != x] + [self] + + def find_module(self, fullname, path=None): + if fullname.startswith(self.prefix): + return self + + def load_module(self, fullname): + if fullname in sys.modules: + return sys.modules[fullname] + modname = fullname.split('.', self.prefix_cutoff)[self.prefix_cutoff] + for path in self.module_choices: + realname = path % modname + try: + __import__(realname) + except ImportError: + exc_type, exc_value, tb = sys.exc_info() + # since we only establish the entry in sys.modules at the + # very this seems to be redundant, but if recursive imports + # happen we will call into the move import a second time. + # On the second invocation we still don't have an entry for + # fullname in sys.modules, but we will end up with the same + # fake module name and that import will succeed since this + # one already has a temporary entry in the modules dict. + # Since this one "succeeded" temporarily that second + # invocation now will have created a fullname entry in + # sys.modules which we have to kill. + sys.modules.pop(fullname, None) + + # If it's an important traceback we reraise it, otherwise + # we swallow it and try the next choice. The skipped frame + # is the one from __import__ above which we don't care about + if self.is_important_traceback(realname, tb): + reraise(exc_type, exc_value, tb.tb_next) + continue + module = sys.modules[fullname] = sys.modules[realname] + if '.' not in modname: + setattr(sys.modules[self.wrapper_module], modname, module) + return module + raise ImportError('No module named %s' % fullname) + + def is_important_traceback(self, important_module, tb): + """Walks a traceback's frames and checks if any of the frames + originated in the given important module. If that is the case then we + were able to import the module itself but apparently something went + wrong when the module was imported. (Eg: import of an import failed). + """ + while tb is not None: + if self.is_important_frame(important_module, tb): + return True + tb = tb.tb_next + return False + + def is_important_frame(self, important_module, tb): + """Checks a single frame if it's important.""" + g = tb.tb_frame.f_globals + if '__name__' not in g: + return False + + module_name = g['__name__'] + + # Python 2.7 Behavior. Modules are cleaned up late so the + # name shows up properly here. Success! + if module_name == important_module: + return True + + # Some python versions will will clean up modules so early that the + # module name at that point is no longer set. Try guessing from + # the filename then. + filename = os.path.abspath(tb.tb_frame.f_code.co_filename) + test_string = os.path.sep + important_module.replace('.', os.path.sep) + return test_string + '.py' in filename or \ + test_string + os.path.sep + '__init__.py' in filename diff --git a/env/lib/python2.7/site-packages/flask/exthook.pyc b/env/lib/python2.7/site-packages/flask/exthook.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae3954d32b4d46ebbdc8898fb7ff526d80da52c9 GIT binary patch literal 4664 zcmcIo-EJGl6`tjvL`wdt(@0j5Hq)S~={6?g6i84ZC|uhrYM>C%r3*De)75f!NUpft zS9nYMZojE_>`R1(a|GCw9w)pSM zL{vX@{QCrt{SBH_h-0*YNNXYw#4$R)UlYeQk=8}p5P4n98sfMig0v}AQ;e{pCB6~j zwGdw&x9HVDcY}8PdrgRr#Lp;??X;)P-9+mtOa6TQr^BL9rI}HQli94)##uSiM&cb+ z*i09;C*{jYX5~z$^IXYcY_lZJ^QD}{Q)Ol5WT~yqhPm=b;^n!OPD^KE?BKA692q_H z%3$B#NMlm_aYTbf1_kF%PU5qy7-Md=Q=%k}x~2@hH!sH~PBG)8n<#1HnUXG>sh&6I zXrc-kLkDGKs-fY@$<^`X3qIf53Tw>C3E8m7a8B%;nw8krD^RVu{ywYwt#?P6u};QC zDi?IHn?S8moaO8p+Ldi_W=X1l$By5n(8?0^z`#CuCz+66*o*?^+A@Y`&`jeo3>>N? zhPiA;Y~|@33OTs7jI&}i&ncd)ggR4ZIn?P=X2qG#&s16+#PLOlu}Lb2OL?-!%}KRl zKhfpVWaEk3m)+!{{Or@mk7?zv%q%NpsEat6DAVI(_VX+OcGSLnI(Ytxv`Wd}zIb+U zI5=Qr%`}Wkl_MYZI@$m5bC?ByZI>EH05;0RnN{w4=pU?r_=3@?%sPPpa`6<8{R)jj z0wEvJB3%N?ien^AjXMoWAd)mGji`fUX$xf0H%PV3DvORG+2GlZNH@8&CBi|sLr44z zjrUTeg)~*xAkM3_A&@&t6+0hR*@BpBfYiubCo!c0Os2&28TDoY5k%h18iKga)2r+u z0PwpRvS?xAvQ#GWQ?7+o zrBS2o+|gT!o)^yDS_`9O?(}HHN4N&WR^_9R4h(73#p4_M9KHVUk@~j(RGZB9(_s{s zSzi@r{X84?%O#km_^kIuAIzj4tx~AZ?&~8Li70zmwTX?QC@V4-ML$B{l0XD){N4%@ zav43OEW0j52Oc`bA3PRRooP+z->u|uo|o6emAuZv`ZY;|B@L1cI3o_b?8r7wh@u39 zZllN%D5J`I7_0MsM3!6ul@?ucGJydX=Z{2ls<}SDspf zi~!+11$O{N+bb&xIU&tnsT~poZcgI@-g<-+EGZ{~gfyToVTz;r1v+DRkE8nh>-*x8 zvjd7x>%w#>Qh%z6SLk3}Aa?!2Zc6Dun;o(#j(}>H)=>y&Aik)K-Q>zj&YAO@Fq616 zE3CsE`YGv9*-84)vyRDo7Blhm0D$X$q5}i%}&I%Y=kX&PtCmf*LNIoPfxA z%7#Mtwh^~Q2W3TCWx&rdv=lY5f*iS;V98WRQ#5r{u{ z3$T2zak+VA!8YhrDE@p z5Ml43In=9qk7Ak1k8Sr3#Nk~ud_{ZWwoELx%rh4f*qC-Ia`M+A$ccjGFYg0mP+$^D z)OiAO9cj*uQkRUDLtQAhgW1eR{_VJM5iZ0;4N>b5$NIzFFe<>+tO&{klx@ae1Qd3L zV)*WAEfggaLfV&)HY)Z2UFqSLrQ+NqrOx7ft{nNn4f$H~hTcSWl3#KiuRu&>V}FcB z1b2e1;Dg|9&Iqz4u^|UR_V}>r@ zM!*1}>tg}K1{eU{0Qal9ID+2?%tZDPlH@4Pr&h*PgLs!ez{h}r_aH=pixMxvd^W;p zDfNiUZ$HmP4OJDmbjMi{J75NdAr&v<>?H3?$Vg~0p#MNM`SXJ#@-E~G=PDyxs1GDmvxm%8VwPcX|t=SpDAZ+n1qLC;#Pw_-g}MMu^d7=05s zc?f+JY5aXOqP7jrY1BFmw9WT}kHAZZUG^t8tPi;%ic+1R{A3QMIxgfJ;~nZzl7zd| zkiHDWkWRVMo_lYtd=IJmdLIv8X01l6)^6dq-mY&q+8?#Iz4PgNhi|m7j~)jH;hQ0t l{;Ht@LJv>zUn9KVO)1Oq{n7{gmvnD&1>J(zw}ZR&{{s@FW>x?I literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/flask/globals.py b/env/lib/python2.7/site-packages/flask/globals.py new file mode 100644 index 0000000..67d41f5 --- /dev/null +++ b/env/lib/python2.7/site-packages/flask/globals.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +""" + flask.globals + ~~~~~~~~~~~~~ + + Defines all the global objects that are proxies to the current + active context. + + :copyright: (c) 2011 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" + +from functools import partial +from werkzeug.local import LocalStack, LocalProxy + + +def _lookup_req_object(name): + top = _request_ctx_stack.top + if top is None: + raise RuntimeError('working outside of request context') + return getattr(top, name) + + +def _lookup_app_object(name): + top = _app_ctx_stack.top + if top is None: + raise RuntimeError('working outside of application context') + return getattr(top, name) + + +def _find_app(): + top = _app_ctx_stack.top + if top is None: + raise RuntimeError('working outside of application context') + return top.app + + +# context locals +_request_ctx_stack = LocalStack() +_app_ctx_stack = LocalStack() +current_app = LocalProxy(_find_app) +request = LocalProxy(partial(_lookup_req_object, 'request')) +session = LocalProxy(partial(_lookup_req_object, 'session')) +g = LocalProxy(partial(_lookup_app_object, 'g')) diff --git a/env/lib/python2.7/site-packages/flask/globals.pyc b/env/lib/python2.7/site-packages/flask/globals.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3871dc91e4dd314cdab5a55084b5b06b5c75281 GIT binary patch literal 1673 zcmcgsOK%e~5T4CD=@X<@+^`TrK|q%Ff)pVHeH@Ug2yNh!%gWhx5;wc+#rF1r3J1!M z;Xm;+xFW%flh78y0jc1XXUCt%TCiNJ6Nz?KIkTwHT4dI_;E|O_f<-E`;>31le!G#% zPqiFRY?rm8`)vF1))pI{vKKm)84Fa#qlwTR=b)R&NMuHI*-n4&Au~d-gO|Jez5YHM zDa}%a`^Um^nV3#Xe#h4K@Q}8SBInvlp0rB@v``$Vh$nr^qv^%)6$XDA(Hb%nSjhQN}k+EQE z#I$%@2xAvyw5znmO%&mLCXDP!Xk2&{hgCUx2k5Cx*kx3LBC|3T`&ujQ4miexTdQXW zB-4ziA|R!WeJ0EvYW^D|wDEV8md1~VAE65_iO(=FY`!4*1OTF=YD=|&iXmu!imaj(6GKZl25 ztfDZq@Y3LFbPeJ6@>C!vxLXmvpK9guxMZ(*=Pf{yICu!PNDE{ZH5 vF9B^AtfRQ7C#PLsQBe*)O;ubZ;+cD*Hxa0n*1gSgvyNY*>B?%u+wgt>zHx;- literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/flask/helpers.py b/env/lib/python2.7/site-packages/flask/helpers.py new file mode 100644 index 0000000..1e7c87f --- /dev/null +++ b/env/lib/python2.7/site-packages/flask/helpers.py @@ -0,0 +1,849 @@ +# -*- coding: utf-8 -*- +""" + flask.helpers + ~~~~~~~~~~~~~ + + Implements various helpers. + + :copyright: (c) 2011 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" + +import os +import sys +import pkgutil +import posixpath +import mimetypes +from time import time +from zlib import adler32 +from threading import RLock +from werkzeug.routing import BuildError +from functools import update_wrapper + +try: + from werkzeug.urls import url_quote +except ImportError: + from urlparse import quote as url_quote + +from werkzeug.datastructures import Headers +from werkzeug.exceptions import NotFound + +# this was moved in 0.7 +try: + from werkzeug.wsgi import wrap_file +except ImportError: + from werkzeug.utils import wrap_file + +from jinja2 import FileSystemLoader + +from .signals import message_flashed +from .globals import session, _request_ctx_stack, _app_ctx_stack, \ + current_app, request +from ._compat import string_types, text_type + + +# sentinel +_missing = object() + + +# what separators does this operating system provide that are not a slash? +# this is used by the send_from_directory function to ensure that nobody is +# able to access files from outside the filesystem. +_os_alt_seps = list(sep for sep in [os.path.sep, os.path.altsep] + if sep not in (None, '/')) + + +def _endpoint_from_view_func(view_func): + """Internal helper that returns the default endpoint for a given + function. This always is the function name. + """ + assert view_func is not None, 'expected view func if endpoint ' \ + 'is not provided.' + return view_func.__name__ + + +def stream_with_context(generator_or_function): + """Request contexts disappear when the response is started on the server. + This is done for efficiency reasons and to make it less likely to encounter + memory leaks with badly written WSGI middlewares. The downside is that if + you are using streamed responses, the generator cannot access request bound + information any more. + + This function however can help you keep the context around for longer:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + @stream_with_context + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(generate()) + + Alternatively it can also be used around a specific generator:: + + from flask import stream_with_context, request, Response + + @app.route('/stream') + def streamed_response(): + def generate(): + yield 'Hello ' + yield request.args['name'] + yield '!' + return Response(stream_with_context(generate())) + + .. versionadded:: 0.9 + """ + try: + gen = iter(generator_or_function) + except TypeError: + def decorator(*args, **kwargs): + gen = generator_or_function() + return stream_with_context(gen) + return update_wrapper(decorator, generator_or_function) + + def generator(): + ctx = _request_ctx_stack.top + if ctx is None: + raise RuntimeError('Attempted to stream with context but ' + 'there was no context in the first place to keep around.') + with ctx: + # Dummy sentinel. Has to be inside the context block or we're + # not actually keeping the context around. + yield None + + # The try/finally is here so that if someone passes a WSGI level + # iterator in we're still running the cleanup logic. Generators + # don't need that because they are closed on their destruction + # automatically. + try: + for item in gen: + yield item + finally: + if hasattr(gen, 'close'): + gen.close() + + # The trick is to start the generator. Then the code execution runs until + # the first dummy None is yielded at which point the context was already + # pushed. This item is discarded. Then when the iteration continues the + # real generator is executed. + wrapped_g = generator() + next(wrapped_g) + return wrapped_g + + +def make_response(*args): + """Sometimes it is necessary to set additional headers in a view. Because + views do not have to return response objects but can return a value that + is converted into a response object by Flask itself, it becomes tricky to + add headers to it. This function can be called instead of using a return + and you will get a response object which you can use to attach headers. + + If view looked like this and you want to add a new header:: + + def index(): + return render_template('index.html', foo=42) + + You can now do something like this:: + + def index(): + response = make_response(render_template('index.html', foo=42)) + response.headers['X-Parachutes'] = 'parachutes are cool' + return response + + This function accepts the very same arguments you can return from a + view function. This for example creates a response with a 404 error + code:: + + response = make_response(render_template('not_found.html'), 404) + + The other use case of this function is to force the return value of a + view function into a response which is helpful with view + decorators:: + + response = make_response(view_function()) + response.headers['X-Parachutes'] = 'parachutes are cool' + + Internally this function does the following things: + + - if no arguments are passed, it creates a new response argument + - if one argument is passed, :meth:`flask.Flask.make_response` + is invoked with it. + - if more than one argument is passed, the arguments are passed + to the :meth:`flask.Flask.make_response` function as tuple. + + .. versionadded:: 0.6 + """ + if not args: + return current_app.response_class() + if len(args) == 1: + args = args[0] + return current_app.make_response(args) + + +def url_for(endpoint, **values): + """Generates a URL to the given endpoint with the method provided. + + Variable arguments that are unknown to the target endpoint are appended + to the generated URL as query arguments. If the value of a query argument + is `None`, the whole pair is skipped. In case blueprints are active + you can shortcut references to the same blueprint by prefixing the + local endpoint with a dot (``.``). + + This will reference the index function local to the current blueprint:: + + url_for('.index') + + For more information, head over to the :ref:`Quickstart `. + + To integrate applications, :class:`Flask` has a hook to intercept URL build + errors through :attr:`Flask.build_error_handler`. The `url_for` function + results in a :exc:`~werkzeug.routing.BuildError` when the current app does + not have a URL for the given endpoint and values. When it does, the + :data:`~flask.current_app` calls its :attr:`~Flask.build_error_handler` if + it is not `None`, which can return a string to use as the result of + `url_for` (instead of `url_for`'s default to raise the + :exc:`~werkzeug.routing.BuildError` exception) or re-raise the exception. + An example:: + + def external_url_handler(error, endpoint, **values): + "Looks up an external URL when `url_for` cannot build a URL." + # This is an example of hooking the build_error_handler. + # Here, lookup_url is some utility function you've built + # which looks up the endpoint in some external URL registry. + url = lookup_url(endpoint, **values) + if url is None: + # External lookup did not have a URL. + # Re-raise the BuildError, in context of original traceback. + exc_type, exc_value, tb = sys.exc_info() + if exc_value is error: + raise exc_type, exc_value, tb + else: + raise error + # url_for will use this result, instead of raising BuildError. + return url + + app.build_error_handler = external_url_handler + + Here, `error` is the instance of :exc:`~werkzeug.routing.BuildError`, and + `endpoint` and `**values` are the arguments passed into `url_for`. Note + that this is for building URLs outside the current application, and not for + handling 404 NotFound errors. + + .. versionadded:: 0.10 + The `_scheme` parameter was added. + + .. versionadded:: 0.9 + The `_anchor` and `_method` parameters were added. + + .. versionadded:: 0.9 + Calls :meth:`Flask.handle_build_error` on + :exc:`~werkzeug.routing.BuildError`. + + :param endpoint: the endpoint of the URL (name of the function) + :param values: the variable arguments of the URL rule + :param _external: if set to `True`, an absolute URL is generated. Server + address can be changed via `SERVER_NAME` configuration variable which + defaults to `localhost`. + :param _scheme: a string specifying the desired URL scheme. The `_external` + parameter must be set to `True` or a `ValueError` is raised. + :param _anchor: if provided this is added as anchor to the URL. + :param _method: if provided this explicitly specifies an HTTP method. + """ + appctx = _app_ctx_stack.top + reqctx = _request_ctx_stack.top + if appctx is None: + raise RuntimeError('Attempted to generate a URL without the ' + 'application context being pushed. This has to be ' + 'executed when application context is available.') + + # If request specific information is available we have some extra + # features that support "relative" urls. + if reqctx is not None: + url_adapter = reqctx.url_adapter + blueprint_name = request.blueprint + if not reqctx.request._is_old_module: + if endpoint[:1] == '.': + if blueprint_name is not None: + endpoint = blueprint_name + endpoint + else: + endpoint = endpoint[1:] + else: + # TODO: get rid of this deprecated functionality in 1.0 + if '.' not in endpoint: + if blueprint_name is not None: + endpoint = blueprint_name + '.' + endpoint + elif endpoint.startswith('.'): + endpoint = endpoint[1:] + external = values.pop('_external', False) + + # Otherwise go with the url adapter from the appctx and make + # the urls external by default. + else: + url_adapter = appctx.url_adapter + if url_adapter is None: + raise RuntimeError('Application was not able to create a URL ' + 'adapter for request independent URL generation. ' + 'You might be able to fix this by setting ' + 'the SERVER_NAME config variable.') + external = values.pop('_external', True) + + anchor = values.pop('_anchor', None) + method = values.pop('_method', None) + scheme = values.pop('_scheme', None) + appctx.app.inject_url_defaults(endpoint, values) + + if scheme is not None: + if not external: + raise ValueError('When specifying _scheme, _external must be True') + url_adapter.url_scheme = scheme + + try: + rv = url_adapter.build(endpoint, values, method=method, + force_external=external) + except BuildError as error: + # We need to inject the values again so that the app callback can + # deal with that sort of stuff. + values['_external'] = external + values['_anchor'] = anchor + values['_method'] = method + return appctx.app.handle_url_build_error(error, endpoint, values) + + if anchor is not None: + rv += '#' + url_quote(anchor) + return rv + + +def get_template_attribute(template_name, attribute): + """Loads a macro (or variable) a template exports. This can be used to + invoke a macro from within Python code. If you for example have a + template named `_cider.html` with the following contents: + + .. sourcecode:: html+jinja + + {% macro hello(name) %}Hello {{ name }}!{% endmacro %} + + You can access this from Python code like this:: + + hello = get_template_attribute('_cider.html', 'hello') + return hello('World') + + .. versionadded:: 0.2 + + :param template_name: the name of the template + :param attribute: the name of the variable of macro to access + """ + return getattr(current_app.jinja_env.get_template(template_name).module, + attribute) + + +def flash(message, category='message'): + """Flashes a message to the next request. In order to remove the + flashed message from the session and to display it to the user, + the template has to call :func:`get_flashed_messages`. + + .. versionchanged:: 0.3 + `category` parameter added. + + :param message: the message to be flashed. + :param category: the category for the message. The following values + are recommended: ``'message'`` for any kind of message, + ``'error'`` for errors, ``'info'`` for information + messages and ``'warning'`` for warnings. However any + kind of string can be used as category. + """ + # Original implementation: + # + # session.setdefault('_flashes', []).append((category, message)) + # + # This assumed that changes made to mutable structures in the session are + # are always in sync with the sess on object, which is not true for session + # implementations that use external storage for keeping their keys/values. + flashes = session.get('_flashes', []) + flashes.append((category, message)) + session['_flashes'] = flashes + message_flashed.send(current_app._get_current_object(), + message=message, category=category) + + +def get_flashed_messages(with_categories=False, category_filter=[]): + """Pulls all flashed messages from the session and returns them. + Further calls in the same request to the function will return + the same messages. By default just the messages are returned, + but when `with_categories` is set to `True`, the return value will + be a list of tuples in the form ``(category, message)`` instead. + + Filter the flashed messages to one or more categories by providing those + categories in `category_filter`. This allows rendering categories in + separate html blocks. The `with_categories` and `category_filter` + arguments are distinct: + + * `with_categories` controls whether categories are returned with message + text (`True` gives a tuple, where `False` gives just the message text). + * `category_filter` filters the messages down to only those matching the + provided categories. + + See :ref:`message-flashing-pattern` for examples. + + .. versionchanged:: 0.3 + `with_categories` parameter added. + + .. versionchanged:: 0.9 + `category_filter` parameter added. + + :param with_categories: set to `True` to also receive categories. + :param category_filter: whitelist of categories to limit return values + """ + flashes = _request_ctx_stack.top.flashes + if flashes is None: + _request_ctx_stack.top.flashes = flashes = session.pop('_flashes') \ + if '_flashes' in session else [] + if category_filter: + flashes = list(filter(lambda f: f[0] in category_filter, flashes)) + if not with_categories: + return [x[1] for x in flashes] + return flashes + + +def send_file(filename_or_fp, mimetype=None, as_attachment=False, + attachment_filename=None, add_etags=True, + cache_timeout=None, conditional=False): + """Sends the contents of a file to the client. This will use the + most efficient method available and configured. By default it will + try to use the WSGI server's file_wrapper support. Alternatively + you can set the application's :attr:`~Flask.use_x_sendfile` attribute + to ``True`` to directly emit an `X-Sendfile` header. This however + requires support of the underlying webserver for `X-Sendfile`. + + By default it will try to guess the mimetype for you, but you can + also explicitly provide one. For extra security you probably want + to send certain files as attachment (HTML for instance). The mimetype + guessing requires a `filename` or an `attachment_filename` to be + provided. + + Please never pass filenames to this function from user sources without + checking them first. Something like this is usually sufficient to + avoid security problems:: + + if '..' in filename or filename.startswith('/'): + abort(404) + + .. versionadded:: 0.2 + + .. versionadded:: 0.5 + The `add_etags`, `cache_timeout` and `conditional` parameters were + added. The default behavior is now to attach etags. + + .. versionchanged:: 0.7 + mimetype guessing and etag support for file objects was + deprecated because it was unreliable. Pass a filename if you are + able to, otherwise attach an etag yourself. This functionality + will be removed in Flask 1.0 + + .. versionchanged:: 0.9 + cache_timeout pulls its default from application config, when None. + + :param filename_or_fp: the filename of the file to send. This is + relative to the :attr:`~Flask.root_path` if a + relative path is specified. + Alternatively a file object might be provided + in which case `X-Sendfile` might not work and + fall back to the traditional method. Make sure + that the file pointer is positioned at the start + of data to send before calling :func:`send_file`. + :param mimetype: the mimetype of the file if provided, otherwise + auto detection happens. + :param as_attachment: set to `True` if you want to send this file with + a ``Content-Disposition: attachment`` header. + :param attachment_filename: the filename for the attachment if it + differs from the file's filename. + :param add_etags: set to `False` to disable attaching of etags. + :param conditional: set to `True` to enable conditional responses. + + :param cache_timeout: the timeout in seconds for the headers. When `None` + (default), this value is set by + :meth:`~Flask.get_send_file_max_age` of + :data:`~flask.current_app`. + """ + mtime = None + if isinstance(filename_or_fp, string_types): + filename = filename_or_fp + file = None + else: + from warnings import warn + file = filename_or_fp + filename = getattr(file, 'name', None) + + # XXX: this behavior is now deprecated because it was unreliable. + # removed in Flask 1.0 + if not attachment_filename and not mimetype \ + and isinstance(filename, string_types): + warn(DeprecationWarning('The filename support for file objects ' + 'passed to send_file is now deprecated. Pass an ' + 'attach_filename if you want mimetypes to be guessed.'), + stacklevel=2) + if add_etags: + warn(DeprecationWarning('In future flask releases etags will no ' + 'longer be generated for file objects passed to the send_file ' + 'function because this behavior was unreliable. Pass ' + 'filenames instead if possible, otherwise attach an etag ' + 'yourself based on another value'), stacklevel=2) + + if filename is not None: + if not os.path.isabs(filename): + filename = os.path.join(current_app.root_path, filename) + if mimetype is None and (filename or attachment_filename): + mimetype = mimetypes.guess_type(filename or attachment_filename)[0] + if mimetype is None: + mimetype = 'application/octet-stream' + + headers = Headers() + if as_attachment: + if attachment_filename is None: + if filename is None: + raise TypeError('filename unavailable, required for ' + 'sending as attachment') + attachment_filename = os.path.basename(filename) + headers.add('Content-Disposition', 'attachment', + filename=attachment_filename) + + if current_app.use_x_sendfile and filename: + if file is not None: + file.close() + headers['X-Sendfile'] = filename + headers['Content-Length'] = os.path.getsize(filename) + data = None + else: + if file is None: + file = open(filename, 'rb') + mtime = os.path.getmtime(filename) + headers['Content-Length'] = os.path.getsize(filename) + data = wrap_file(request.environ, file) + + rv = current_app.response_class(data, mimetype=mimetype, headers=headers, + direct_passthrough=True) + + # if we know the file modification date, we can store it as the + # the time of the last modification. + if mtime is not None: + rv.last_modified = int(mtime) + + rv.cache_control.public = True + if cache_timeout is None: + cache_timeout = current_app.get_send_file_max_age(filename) + if cache_timeout is not None: + rv.cache_control.max_age = cache_timeout + rv.expires = int(time() + cache_timeout) + + if add_etags and filename is not None: + rv.set_etag('flask-%s-%s-%s' % ( + os.path.getmtime(filename), + os.path.getsize(filename), + adler32( + filename.encode('utf-8') if isinstance(filename, text_type) + else filename + ) & 0xffffffff + )) + if conditional: + rv = rv.make_conditional(request) + # make sure we don't send x-sendfile for servers that + # ignore the 304 status code for x-sendfile. + if rv.status_code == 304: + rv.headers.pop('x-sendfile', None) + return rv + + +def safe_join(directory, filename): + """Safely join `directory` and `filename`. + + Example usage:: + + @app.route('/wiki/') + def wiki_page(filename): + filename = safe_join(app.config['WIKI_FOLDER'], filename) + with open(filename, 'rb') as fd: + content = fd.read() # Read and process the file content... + + :param directory: the base directory. + :param filename: the untrusted filename relative to that directory. + :raises: :class:`~werkzeug.exceptions.NotFound` if the resulting path + would fall out of `directory`. + """ + filename = posixpath.normpath(filename) + for sep in _os_alt_seps: + if sep in filename: + raise NotFound() + if os.path.isabs(filename) or \ + filename == '..' or \ + filename.startswith('../'): + raise NotFound() + return os.path.join(directory, filename) + + +def send_from_directory(directory, filename, **options): + """Send a file from a given directory with :func:`send_file`. This + is a secure way to quickly expose static files from an upload folder + or something similar. + + Example usage:: + + @app.route('/uploads/') + def download_file(filename): + return send_from_directory(app.config['UPLOAD_FOLDER'], + filename, as_attachment=True) + + .. admonition:: Sending files and Performance + + It is strongly recommended to activate either `X-Sendfile` support in + your webserver or (if no authentication happens) to tell the webserver + to serve files for the given path on its own without calling into the + web application for improved performance. + + .. versionadded:: 0.5 + + :param directory: the directory where all the files are stored. + :param filename: the filename relative to that directory to + download. + :param options: optional keyword arguments that are directly + forwarded to :func:`send_file`. + """ + filename = safe_join(directory, filename) + if not os.path.isfile(filename): + raise NotFound() + options.setdefault('conditional', True) + return send_file(filename, **options) + + +def get_root_path(import_name): + """Returns the path to a package or cwd if that cannot be found. This + returns the path of a package or the folder that contains a module. + + Not to be confused with the package path returned by :func:`find_package`. + """ + # Module already imported and has a file attribute. Use that first. + mod = sys.modules.get(import_name) + if mod is not None and hasattr(mod, '__file__'): + return os.path.dirname(os.path.abspath(mod.__file__)) + + # Next attempt: check the loader. + loader = pkgutil.get_loader(import_name) + + # Loader does not exist or we're referring to an unloaded main module + # or a main module without path (interactive sessions), go with the + # current working directory. + if loader is None or import_name == '__main__': + return os.getcwd() + + # For .egg, zipimporter does not have get_filename until Python 2.7. + # Some other loaders might exhibit the same behavior. + if hasattr(loader, 'get_filename'): + filepath = loader.get_filename(import_name) + else: + # Fall back to imports. + __import__(import_name) + filepath = sys.modules[import_name].__file__ + + # filepath is import_name.py for a module, or __init__.py for a package. + return os.path.dirname(os.path.abspath(filepath)) + + +def find_package(import_name): + """Finds a package and returns the prefix (or None if the package is + not installed) as well as the folder that contains the package or + module as a tuple. The package path returned is the module that would + have to be added to the pythonpath in order to make it possible to + import the module. The prefix is the path below which a UNIX like + folder structure exists (lib, share etc.). + """ + root_mod_name = import_name.split('.')[0] + loader = pkgutil.get_loader(root_mod_name) + if loader is None or import_name == '__main__': + # import name is not found, or interactive/main module + package_path = os.getcwd() + else: + # For .egg, zipimporter does not have get_filename until Python 2.7. + if hasattr(loader, 'get_filename'): + filename = loader.get_filename(root_mod_name) + elif hasattr(loader, 'archive'): + # zipimporter's loader.archive points to the .egg or .zip + # archive filename is dropped in call to dirname below. + filename = loader.archive + else: + # At least one loader is missing both get_filename and archive: + # Google App Engine's HardenedModulesHook + # + # Fall back to imports. + __import__(import_name) + filename = sys.modules[import_name].__file__ + package_path = os.path.abspath(os.path.dirname(filename)) + # package_path ends with __init__.py for a package + if loader.is_package(root_mod_name): + package_path = os.path.dirname(package_path) + + site_parent, site_folder = os.path.split(package_path) + py_prefix = os.path.abspath(sys.prefix) + if package_path.startswith(py_prefix): + return py_prefix, package_path + elif site_folder.lower() == 'site-packages': + parent, folder = os.path.split(site_parent) + # Windows like installations + if folder.lower() == 'lib': + base_dir = parent + # UNIX like installations + elif os.path.basename(parent).lower() == 'lib': + base_dir = os.path.dirname(parent) + else: + base_dir = site_parent + return base_dir, package_path + return None, package_path + + +class locked_cached_property(object): + """A decorator that converts a function into a lazy property. The + function wrapped is called the first time to retrieve the result + and then that calculated result is used the next time you access + the value. Works like the one in Werkzeug but has a lock for + thread safety. + """ + + def __init__(self, func, name=None, doc=None): + self.__name__ = name or func.__name__ + self.__module__ = func.__module__ + self.__doc__ = doc or func.__doc__ + self.func = func + self.lock = RLock() + + def __get__(self, obj, type=None): + if obj is None: + return self + with self.lock: + value = obj.__dict__.get(self.__name__, _missing) + if value is _missing: + value = self.func(obj) + obj.__dict__[self.__name__] = value + return value + + +class _PackageBoundObject(object): + + def __init__(self, import_name, template_folder=None): + #: The name of the package or module. Do not change this once + #: it was set by the constructor. + self.import_name = import_name + + #: location of the templates. `None` if templates should not be + #: exposed. + self.template_folder = template_folder + + #: Where is the app root located? + self.root_path = get_root_path(self.import_name) + + self._static_folder = None + self._static_url_path = None + + def _get_static_folder(self): + if self._static_folder is not None: + return os.path.join(self.root_path, self._static_folder) + def _set_static_folder(self, value): + self._static_folder = value + static_folder = property(_get_static_folder, _set_static_folder) + del _get_static_folder, _set_static_folder + + def _get_static_url_path(self): + if self._static_url_path is None: + if self.static_folder is None: + return None + return '/' + os.path.basename(self.static_folder) + return self._static_url_path + def _set_static_url_path(self, value): + self._static_url_path = value + static_url_path = property(_get_static_url_path, _set_static_url_path) + del _get_static_url_path, _set_static_url_path + + @property + def has_static_folder(self): + """This is `True` if the package bound object's container has a + folder named ``'static'``. + + .. versionadded:: 0.5 + """ + return self.static_folder is not None + + @locked_cached_property + def jinja_loader(self): + """The Jinja loader for this package bound object. + + .. versionadded:: 0.5 + """ + if self.template_folder is not None: + return FileSystemLoader(os.path.join(self.root_path, + self.template_folder)) + + def get_send_file_max_age(self, filename): + """Provides default cache_timeout for the :func:`send_file` functions. + + By default, this function returns ``SEND_FILE_MAX_AGE_DEFAULT`` from + the configuration of :data:`~flask.current_app`. + + Static file functions such as :func:`send_from_directory` use this + function, and :func:`send_file` calls this function on + :data:`~flask.current_app` when the given cache_timeout is `None`. If a + cache_timeout is given in :func:`send_file`, that timeout is used; + otherwise, this method is called. + + This allows subclasses to change the behavior when sending files based + on the filename. For example, to set the cache timeout for .js files + to 60 seconds:: + + class MyFlask(flask.Flask): + def get_send_file_max_age(self, name): + if name.lower().endswith('.js'): + return 60 + return flask.Flask.get_send_file_max_age(self, name) + + .. versionadded:: 0.9 + """ + return current_app.config['SEND_FILE_MAX_AGE_DEFAULT'] + + def send_static_file(self, filename): + """Function used internally to send static files from the static + folder to the browser. + + .. versionadded:: 0.5 + """ + if not self.has_static_folder: + raise RuntimeError('No static folder for this object') + # Ensure get_send_file_max_age is called in all cases. + # Here, we ensure get_send_file_max_age is called for Blueprints. + cache_timeout = self.get_send_file_max_age(filename) + return send_from_directory(self.static_folder, filename, + cache_timeout=cache_timeout) + + def open_resource(self, resource, mode='rb'): + """Opens a resource from the application's resource folder. To see + how this works, consider the following folder structure:: + + /myapplication.py + /schema.sql + /static + /style.css + /templates + /layout.html + /index.html + + If you want to open the `schema.sql` file you would do the + following:: + + with app.open_resource('schema.sql') as f: + contents = f.read() + do_something_with(contents) + + :param resource: the name of the resource. To access resources within + subfolders use forward slashes as separator. + :param mode: resource file opening mode, default is 'rb'. + """ + if mode not in ('r', 'rb'): + raise ValueError('Resources can only be opened for reading') + return open(os.path.join(self.root_path, resource), mode) diff --git a/env/lib/python2.7/site-packages/flask/helpers.pyc b/env/lib/python2.7/site-packages/flask/helpers.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5d97ff55729ab3afd325d65105aacb16a5df072 GIT binary patch literal 31479 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 + tags. It accepts the same arguments and returns a JSON string. Note that + this is available in templates through the ``|tojson`` filter which will + also mark the result as safe. Due to how this function escapes certain + characters this is safe even if used outside of ``') + self.assert_equal(rv, u'"\\u003c/script\\u003e"') + self.assert_equal(type(rv), text_type) + rv = render('{{ ""|tojson }}') + self.assert_equal(rv, '"\\u003c/script\\u003e"') + rv = render('{{ "<\0/script>"|tojson }}') + self.assert_equal(rv, '"\\u003c\\u0000/script\\u003e"') + rv = render('{{ " list. + Return a list of all non-overlapping matches of pattern in string. + """ + return [str()] + + def finditer(self, string, pos=None, endpos=None): + """ + finditer(string[, pos[, endpos]]) --> iterator. + Return an iterator over all non-overlapping matches for the + RE pattern in string. For each match, the iterator returns a + match object. + """ + yield SRE_Match(self) + + def match(self, string, pos=None, endpos=None): + """ + match(string[, pos[, endpos]]) --> match object or None. + Matches zero or more characters at the beginning of the string + pattern + """ + return SRE_Match(self) + + def scanner(self, string, pos=None, endpos=None): + pass + + def search(self, string, pos=None, endpos=None): + """ + search(string[, pos[, endpos]]) --> match object or None. + Scan through string looking for a match, and return a corresponding + MatchObject instance. Return None if no position in the string matches. + """ + return SRE_Match(self) + + def split(self, string, maxsplit=0]): + """ + split(string[, maxsplit = 0]) --> list. + Split string by the occurrences of pattern. + """ + return [str()] + + def sub(self, repl, string, count=0): + """ + sub(repl, string[, count = 0]) --> newstring + Return the string obtained by replacing the leftmost non-overlapping + occurrences of pattern in string by the replacement repl. + """ + return str() + + def subn(self, repl, string, count=0): + """ + subn(repl, string[, count = 0]) --> (newstring, number of subs) + Return the tuple (new_string, number_of_subs_made) found by replacing + the leftmost non-overlapping occurrences of pattern with the + replacement repl. + """ + return (str(), int()) + + return SRE_Pattern() diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/_weakref.pym b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/_weakref.pym new file mode 100644 index 0000000..8d21a2c --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/_weakref.pym @@ -0,0 +1,8 @@ +def proxy(object, callback=None): + return object + +class weakref(): + def __init__(self, object, callback=None): + self.__object = object + def __call__(self): + return self.__object diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/builtins.pym b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/builtins.pym new file mode 100644 index 0000000..41c51d2 --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/builtins.pym @@ -0,0 +1,241 @@ +""" +Pure Python implementation of some builtins. +This code is not going to be executed anywhere. +These implementations are not always correct, but should work as good as +possible for the auto completion. +""" + + +def next(iterator, default=None): + if hasattr("next"): + return iterator.next() + else: + return iterator.__next__() + return default + + +def iter(collection, sentinel=None): + if sentinel: + yield collection() + else: + for c in collection: + yield c + + +def range(start, stop=None, step=1): + return [0] + + +class file(): + def __iter__(self): + yield '' + def next(self): + return '' + + +class xrange(): + # Attention: this function doesn't exist in Py3k (there it is range). + def __iter__(self): + yield 1 + + def count(self): + return 1 + + def index(self): + return 1 + + +def open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True): + import io + return io.TextIOWrapper(file, mode, buffering, encoding, errors, newline, closefd) + + +def open_python2(name, mode=None, buffering=None): + return file(name, mode, buffering) + + +#-------------------------------------------------------- +# descriptors +#-------------------------------------------------------- +class property(): + def __init__(self, fget, fset=None, fdel=None, doc=None): + self.fget = fget + self.fset = fset + self.fdel = fdel + self.__doc__ = doc + + def __get__(self, obj, cls): + return self.fget(obj) + + def __set__(self, obj, value): + self.fset(obj, value) + + def __delete__(self, obj): + self.fdel(obj) + + def setter(self, func): + self.fset = func + return self + + def getter(self, func): + self.fget = func + return self + + def deleter(self, func): + self.fdel = func + return self + + +class staticmethod(): + def __init__(self, func): + self.__func = func + + def __get__(self, obj, cls): + return self.__func + + +class classmethod(): + def __init__(self, func): + self.__func = func + + def __get__(self, obj, cls): + def _method(*args, **kwargs): + return self.__func(cls, *args, **kwargs) + return _method + + +#-------------------------------------------------------- +# array stuff +#-------------------------------------------------------- +class list(): + def __init__(self, iterable=[]): + self.__iterable = [] + for i in iterable: + self.__iterable += [i] + + def __iter__(self): + for i in self.__iterable: + yield i + + def __getitem__(self, y): + return self.__iterable[y] + + def pop(self): + return self.__iterable[-1] + + +class tuple(): + def __init__(self, iterable=[]): + self.__iterable = [] + for i in iterable: + self.__iterable += [i] + + def __iter__(self): + for i in self.__iterable: + yield i + + def __getitem__(self, y): + return self.__iterable[y] + + def index(self): + return 1 + + def count(self): + return 1 + + +class set(): + def __init__(self, iterable=[]): + self.__iterable = iterable + + def __iter__(self): + for i in self.__iterable: + yield i + + def pop(self): + return self.__iterable.pop() + + def copy(self): + return self + + def difference(self, other): + return self - other + + def intersection(self, other): + return self & other + + def symmetric_difference(self, other): + return self ^ other + + def union(self, other): + return self | other + + +class frozenset(): + def __init__(self, iterable=[]): + self.__iterable = iterable + + def __iter__(self): + for i in self.__iterable: + yield i + + def copy(self): + return self + + +class dict(): + def __init__(self, **elements): + self.__elements = elements + + def clear(self): + # has a strange docstr + pass + + def get(self, k, d=None): + # TODO implement + try: + #return self.__elements[k] + pass + except KeyError: + return d + + def setdefault(self, k, d): + # TODO maybe also return the content + return d + + +class reversed(): + def __init__(self, sequence): + self.__sequence = sequence + + def __iter__(self): + for i in self.__sequence: + yield i + + def __next__(self): + return next(self.__iter__()) + + def next(self): + return next(self.__iter__()) + + +def sorted(iterable, cmp=None, key=None, reverse=False): + return iterable + + +#-------------------------------------------------------- +# basic types +#-------------------------------------------------------- +class int(): + def __init__(self, x, base=None): + pass + + +class str(): + def __init__(self, obj): + pass + + +class type(): + def mro(): + return [object] diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/datetime.pym b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/datetime.pym new file mode 100644 index 0000000..823ac5b --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/datetime.pym @@ -0,0 +1,4 @@ +class datetime(): + @staticmethod + def now(): + return datetime() diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/io.pym b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/io.pym new file mode 100644 index 0000000..8225477 --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/io.pym @@ -0,0 +1,3 @@ +class TextIOWrapper(): + def __next__(self): + return 'hacked io return' diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/posix.pym b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/posix.pym new file mode 100644 index 0000000..4417f7c --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/compiled/fake/posix.pym @@ -0,0 +1,5 @@ +def getcwd(): + return '' + +def getcwdu(): + return '' diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/docstrings.py b/env/lib/python2.7/site-packages/jedi/evaluate/docstrings.py new file mode 100644 index 0000000..bb88266 --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/docstrings.py @@ -0,0 +1,141 @@ +""" +Docstrings are another source of information for functions and classes. +:mod:`jedi.evaluate.dynamic` tries to find all executions of functions, while +the docstring parsing is much easier. There are two different types of +docstrings that |jedi| understands: + +- `Sphinx `_ +- `Epydoc `_ + +For example, the sphinx annotation ``:type foo: str`` clearly states that the +type of ``foo`` is ``str``. + +As an addition to parameter searching, this module also provides return +annotations. +""" + +import re +from itertools import chain +from textwrap import dedent + +from jedi.evaluate.cache import memoize_default +from jedi.parser import Parser +from jedi.common import indent_block + +DOCSTRING_PARAM_PATTERNS = [ + r'\s*:type\s+%s:\s*([^\n]+)', # Sphinx + r'\s*:param\s+(\w+)\s+%s:[^\n]+', # Sphinx param with type + r'\s*@type\s+%s:\s*([^\n]+)', # Epydoc +] + +DOCSTRING_RETURN_PATTERNS = [ + re.compile(r'\s*:rtype:\s*([^\n]+)', re.M), # Sphinx + re.compile(r'\s*@rtype:\s*([^\n]+)', re.M), # Epydoc +] + +REST_ROLE_PATTERN = re.compile(r':[^`]+:`([^`]+)`') + + +@memoize_default(None, evaluator_is_first_arg=True) +def follow_param(evaluator, param): + func = param.parent_function + param_str = _search_param_in_docstr(func.raw_doc, str(param.get_name())) + return _evaluate_for_statement_string(evaluator, param_str, param.get_parent_until()) + + +def _search_param_in_docstr(docstr, param_str): + """ + Search `docstr` for a type of `param_str`. + + >>> _search_param_in_docstr(':type param: int', 'param') + 'int' + >>> _search_param_in_docstr('@type param: int', 'param') + 'int' + >>> _search_param_in_docstr( + ... ':type param: :class:`threading.Thread`', 'param') + 'threading.Thread' + >>> _search_param_in_docstr('no document', 'param') is None + True + >>> _search_param_in_docstr(':param int param: some description', 'param') + 'int' + + """ + # look at #40 to see definitions of those params + patterns = [re.compile(p % re.escape(param_str)) + for p in DOCSTRING_PARAM_PATTERNS] + for pattern in patterns: + match = pattern.search(docstr) + if match: + return _strip_rst_role(match.group(1)) + + return None + + +def _strip_rst_role(type_str): + """ + Strip off the part looks like a ReST role in `type_str`. + + >>> _strip_rst_role(':class:`ClassName`') # strip off :class: + 'ClassName' + >>> _strip_rst_role(':py:obj:`module.Object`') # works with domain + 'module.Object' + >>> _strip_rst_role('ClassName') # do nothing when not ReST role + 'ClassName' + + See also: + http://sphinx-doc.org/domains.html#cross-referencing-python-objects + + """ + match = REST_ROLE_PATTERN.match(type_str) + if match: + return match.group(1) + else: + return type_str + + +def _evaluate_for_statement_string(evaluator, string, module): + code = dedent(""" + def pseudo_docstring_stuff(): + '''Create a pseudo function for docstring statements.''' + %s + """) + if string is None: + return [] + + for element in re.findall('((?:\w+\.)*\w+)\.', string): + # Try to import module part in dotted name. + # (e.g., 'threading' in 'threading.Thread'). + string = 'import %s\n' % element + string + + p = Parser(code % indent_block(string), no_docstr=True) + pseudo_cls = p.module.subscopes[0] + try: + stmt = pseudo_cls.statements[-1] + except IndexError: + return [] + + # Use the module of the param. + # TODO this module is not the module of the param in case of a function + # call. In that case it's the module of the function call. + # stuffed with content from a function call. + pseudo_cls.parent = module + definitions = evaluator.eval_statement(stmt) + it = (evaluator.execute(d) for d in definitions) + # TODO Executing tuples does not make sense, people tend to say + # `(str, int)` in a type annotation, which means that it returns a tuple + # with both types. + # At this point we just return the classes if executing wasn't possible, + # i.e. is a tuple. + return list(chain.from_iterable(it)) or definitions + + +@memoize_default(None, evaluator_is_first_arg=True) +def find_return_types(evaluator, func): + def search_return_in_docstr(code): + for p in DOCSTRING_RETURN_PATTERNS: + match = p.search(code) + if match: + return _strip_rst_role(match.group(1)) + + type_str = search_return_in_docstr(func.raw_doc) + return _evaluate_for_statement_string(evaluator, type_str, func.get_parent_until()) diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/docstrings.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/docstrings.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e703f985b0b1375a808746d21e30ebad45cbf1b3 GIT binary patch literal 5131 zcmcgwZF3t*5uTM~$x`CjadOV3E*x74hvX!duAnMMse;K78!8m%T&;YB@+H|_?~bIE z_bof4*arJku7Khf@R9$;2lx+srRsRPXC)_RIH;nG%R8Q)m!6*Pe!6>H{rghuk8l35 z8;J6!hQE*Ssjtz5LhPZnL|75ACHBz4Z&kz@^MD5OGT+m&D#B(2F8$im)X{;CER_OH7tTc!@h##GA@yzXs3P{3 zXX8ua4dhx8vOzM2SA<-}h!rl2uLMtB6X6Q=_pXcZDtF!!;VO65&h5H3+jWDu4La9J z5l<>Yw6?N9=^{!;%JvIs`)Q`fvanS)Edpt0Lpw@`S&{fU%2FFWdpJ!4BCtLU?I8A* zlB(P4Ct29{CNhk=^0gmNeJ#7;aq1^g;Mq7pDqCmvFv1=`j%|4)gQ;PIGv++++lS*Q zmMzF&hcn6S+%FU)v?FCF(_m~%Uq!O$+PjbxBIDDCnH@&MA?Q@w`Z&jN*|0Tdfy2kX zwogdD6MLG5vQQfGtA4AsVS9so9HmG0!?D(Rzt>YtZeVveD@MJ zA(dMqaip}`^jzYyogZV%oQq_#YcvVXjbt~K8r;&UADiup`O)^)&!Ad)_(fOGb?CF2`(tB~Q??Dj!UH9}F21^iRg&Qe%7{T3KzZeC8oS;ZV-(!60$7oIv z9E3Qn2yKazikP5N<-wYG!(d0aIIWUiPq5fb)p@E4ER)K2It{d%G>hAl!e)@tH!$WJ zv%0JqH%eUt3{9H~|By(W2x)Yo7x8x_wF~G<{UL3h;n{@~yXvPNDx^tCC`0}9RqKYmH--LNsgST z$un_?pPR0MG((=Dn7b5XiVQ0${*H=lnlsesejVD(9E?9Xgj)D9@W+79eU0d!Dn76z zm<c;;Zg2*wKhHshLL>)%hMZwxNNvYicA)GyIzW=M9XZ&wNrf=4?NJ&a)xHZcVlh`W zpjA5UV=9Dp5Hr2@x^3T~{9GPYt}w1JU-q`kev@T>+|TwWea|G{?$iB=40Or&Fe@PM zVWh|K=L9*{@O@|Lx9~nYpQQ{ln+iTEt`5gCCE`p8=OpHVfi&enpQ(RcF&W8Bb#o^u zGNm>O$;DZKqc%+Z-oPDkFJB>n&dT^1(|%0Q=!;`hjnkh39v zhx%esY|&^_=p~`Ah{>`zY0^6U=6|K>L5EbZqcXJY1SsO{T*+yem4yY24B$+M!_K;K z6UtEScKa~`yOsc&Sv{}&IlImCwW($)QmZaD@ev;>{-ek>I-Q^NQQAH4uHWSfudB!c zQIcoCGZu2;kWX%9Y&7o{ zX4siJ4yMR`;8sPJxG2&Je?OKT;>|i@KBjRc=;SE4Qo_t7=_E z{#vLvk;B&N=PQ0nbqEh%am7!F?|$Lz%mVPhp?8f# zanOWe_NtGGBt!ilVlcmD%BPHZgPy%*5V^|GTow-<7LOto8_b~x0AG?F(4nW2^9eOJ zP2jsY;BrDEEV`xCl(!TdVEzKBFIyc-ZH!u%qNwW{7!&3RKRU}|WpG7z((*_j7JkmC z*97=?|Me31!B{$EUIq$J0=IZmaWFU=M0J^DDF+8<70aFLw1;BJXU+qnze^2=mG4uJ zb8~}w>YTY KywzN5e(#?KNg<5@ literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/dynamic.py b/env/lib/python2.7/site-packages/jedi/evaluate/dynamic.py new file mode 100644 index 0000000..49dbea1 --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/dynamic.py @@ -0,0 +1,153 @@ +""" +One of the really important features of |jedi| is to have an option to +understand code like this:: + + def foo(bar): + bar. # completion here + foo(1) + +There's no doubt wheter bar is an ``int`` or not, but if there's also a call +like ``foo('str')``, what would happen? Well, we'll just show both. Because +that's what a human would expect. + +It works as follows: + +- |Jedi| sees a param +- search for function calls named ``foo`` +- execute these calls and check the input. This work with a ``ParamListener``. +""" + +from jedi._compatibility import unicode +from jedi.parser import representation as pr +from jedi import settings +from jedi.evaluate import helpers +from jedi.evaluate.cache import memoize_default +from jedi.evaluate import imports + +# This is something like the sys.path, but only for searching params. It means +# that this is the order in which Jedi searches params. +search_param_modules = ['.'] + + +class ParamListener(object): + """ + This listener is used to get the params for a function. + """ + def __init__(self): + self.param_possibilities = [] + + def execute(self, params): + self.param_possibilities.append(params) + + +@memoize_default([], evaluator_is_first_arg=True) +def search_params(evaluator, param): + """ + This is a dynamic search for params. If you try to complete a type: + + >>> def func(foo): + ... foo + >>> func(1) + >>> func("") + + It is not known what the type is, because it cannot be guessed with + recursive madness. Therefore one has to analyse the statements that are + calling the function, as well as analyzing the incoming params. + """ + if not settings.dynamic_params: + return [] + + def get_params_for_module(module): + """ + Returns the values of a param, or an empty array. + """ + @memoize_default([], evaluator_is_first_arg=True) + def get_posibilities(evaluator, module, func_name): + try: + possible_stmts = module.used_names[func_name] + except KeyError: + return [] + + for stmt in possible_stmts: + if isinstance(stmt, pr.Import): + continue + calls = helpers.scan_statement_for_calls(stmt, func_name) + for c in calls: + # no execution means that params cannot be set + call_path = list(c.generate_call_path()) + pos = c.start_pos + scope = stmt.parent + + # this whole stuff is just to not execute certain parts + # (speed improvement), basically we could just call + # ``eval_call_path`` on the call_path and it would + # also work. + def listRightIndex(lst, value): + return len(lst) - lst[-1::-1].index(value) - 1 + + # Need to take right index, because there could be a + # func usage before. + call_path_simple = [unicode(d) if isinstance(d, pr.NamePart) + else d for d in call_path] + i = listRightIndex(call_path_simple, func_name) + first, last = call_path[:i], call_path[i + 1:] + if not last and not call_path_simple.index(func_name) != i: + continue + scopes = [scope] + if first: + scopes = evaluator.eval_call_path(iter(first), c.parent, pos) + pos = None + from jedi.evaluate import representation as er + for scope in scopes: + s = evaluator.find_types(scope, func_name, position=pos, + search_global=not first, + resolve_decorator=False) + + c = [getattr(escope, 'base_func', None) or escope.base + for escope in s + if escope.isinstance(er.Function, er.Class)] + if compare in c: + # only if we have the correct function we execute + # it, otherwise just ignore it. + evaluator.follow_path(iter(last), s, scope) + return listener.param_possibilities + + result = [] + for params in get_posibilities(evaluator, module, func_name): + for p in params: + if str(p) == param_name: + result += evaluator.eval_statement(p.parent) + return result + + func = param.get_parent_until(pr.Function) + current_module = param.get_parent_until() + func_name = unicode(func.name) + compare = func + if func_name == '__init__' and isinstance(func.parent, pr.Class): + func_name = unicode(func.parent.name) + compare = func.parent + + # get the param name + if param.assignment_details: + # first assignment details, others would be a syntax error + expression_list, op = param.assignment_details[0] + else: + expression_list = param.expression_list() + offset = 1 if expression_list[0] in ['*', '**'] else 0 + param_name = str(expression_list[offset].name) + + # add the listener + listener = ParamListener() + func.listeners.add(listener) + + result = [] + # This is like backtracking: Get the first possible result. + for mod in imports.get_modules_containing_name([current_module], func_name): + result = get_params_for_module(mod) + if result: + break + + # cleanup: remove the listener; important: should not stick. + func.listeners.remove(listener) + + return result diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/dynamic.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/dynamic.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ea8e83aa237fe67af05542c9549019b33d2ed17 GIT binary patch literal 5340 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 WPB&;7%b{6Y1GrTG8m;>I#s2|~yZNL5 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/finder.py b/env/lib/python2.7/site-packages/jedi/evaluate/finder.py new file mode 100644 index 0000000..d38a44a --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/finder.py @@ -0,0 +1,567 @@ +""" +Searcjing for names with given scope and name. This is very central in Jedi and +Python. The name resolution is quite complicated with descripter, +``__getattribute__``, ``__getattr__``, ``global``, etc. + +Flow checks ++++++++++++ + +Flow checks are not really mature. There's only a check for ``isinstance``. It +would check whether a flow has the form of ``if isinstance(a, type_or_tuple)``. +Unfortunately every other thing is being ignored (e.g. a == '' would be easy to +check for -> a is a string). There's big potential in these checks. +""" +from itertools import chain + +from jedi._compatibility import hasattr, unicode, u +from jedi.parser import representation as pr, tokenize +from jedi.parser import fast +from jedi import debug +from jedi import common +from jedi import settings +from jedi.evaluate import representation as er +from jedi.evaluate import dynamic +from jedi.evaluate import compiled +from jedi.evaluate import docstrings +from jedi.evaluate import iterable +from jedi.evaluate import imports +from jedi.evaluate import analysis +from jedi.evaluate import precedence + + +class NameFinder(object): + def __init__(self, evaluator, scope, name_str, position=None): + self._evaluator = evaluator + self.scope = scope + self.name_str = name_str + self.position = position + + @debug.increase_indent + def find(self, scopes, resolve_decorator=True, search_global=False): + if unicode(self.name_str) == 'None': + # Filter None, because it's really just a keyword, nobody wants to + # access it. + return [] + + names = self.filter_name(scopes) + types = self._names_to_types(names, resolve_decorator) + + if not names and not types \ + and not (isinstance(self.name_str, pr.NamePart) + and isinstance(self.name_str.parent.parent, pr.Param)): + if not isinstance(self.name_str, (str, unicode)): # TODO Remove? + if search_global: + message = ("NameError: name '%s' is not defined." + % self.name_str) + analysis.add(self._evaluator, 'name-error', self.name_str, + message) + else: + analysis.add_attribute_error(self._evaluator, + self.scope, self.name_str) + + debug.dbg('finder._names_to_types: %s -> %s', names, types) + return self._resolve_descriptors(types) + + def scopes(self, search_global=False): + if search_global: + return get_names_of_scope(self._evaluator, self.scope, self.position) + else: + return self.scope.scope_names_generator(self.position) + + def filter_name(self, scope_names_generator): + """ + Filters all variables of a scope (which are defined in the + `scope_names_generator`), until the name fits. + """ + result = [] + for name_list_scope, name_list in scope_names_generator: + break_scopes = [] + if not isinstance(name_list_scope, compiled.CompiledObject): + # Here is the position stuff happening (sorting of variables). + # Compiled objects don't need that, because there's only one + # reference. + name_list = sorted(name_list, key=lambda n: n.start_pos, reverse=True) + + for name in name_list: + if unicode(self.name_str) != name.get_code(): + continue + + scope = name.parent.parent + if scope in break_scopes: + continue + + # Exclude `arr[1] =` from the result set. + if not self._name_is_array_assignment(name): + result.append(name) + + if result and self._is_name_break_scope(name): + if self._does_scope_break_immediately(scope, name_list_scope): + break + else: + break_scopes.append(scope) + if result: + break + + scope_txt = (self.scope if self.scope == name_list_scope + else '%s-%s' % (self.scope, name_list_scope)) + debug.dbg('finder.filter_name "%s" in (%s): %s@%s', self.name_str, + scope_txt, u(result), self.position) + return result + + def _check_getattr(self, inst): + """Checks for both __getattr__ and __getattribute__ methods""" + result = [] + # str is important to lose the NamePart! + name = compiled.create(self._evaluator, str(self.name_str)) + with common.ignored(KeyError): + result = inst.execute_subscope_by_name('__getattr__', [name]) + if not result: + # this is a little bit special. `__getattribute__` is executed + # before anything else. But: I know no use case, where this + # could be practical and the jedi would return wrong types. If + # you ever have something, let me know! + with common.ignored(KeyError): + result = inst.execute_subscope_by_name('__getattribute__', [name]) + return result + + def _is_name_break_scope(self, name): + """ + Returns True except for nested imports and instance variables. + """ + par = name.parent + if par.isinstance(pr.Statement): + if isinstance(name, er.InstanceElement) and not name.is_class_var: + return False + elif isinstance(par, pr.Import) and par.is_nested(): + return False + return True + + def _does_scope_break_immediately(self, scope, name_list_scope): + """ + In comparison to everthing else, if/while/etc doesn't break directly, + because there are multiple different places in which a variable can be + defined. + """ + if isinstance(scope, pr.Flow) \ + or isinstance(scope, pr.KeywordStatement) and scope.name == 'global': + + # Check for `if foo is not None`, because Jedi is not interested in + # None values, so this is the only branch we actually care about. + # ATM it carries the same issue as the isinstance checks. It + # doesn't work with instance variables (self.foo). + if isinstance(scope, pr.Flow) and scope.command in ('if', 'while'): + try: + expression_list = scope.inputs[0].expression_list() + except IndexError: + pass + else: + p = precedence.create_precedence(expression_list) + if (isinstance(p, precedence.Precedence) + and p.operator.string == 'is not' + and p.right.get_code() == 'None' + and p.left.get_code() == unicode(self.name_str)): + return True + + if isinstance(name_list_scope, er.Class): + name_list_scope = name_list_scope.base + return scope == name_list_scope + else: + return True + + def _name_is_array_assignment(self, name): + if name.parent.isinstance(pr.Statement): + def is_execution(calls): + for c in calls: + if isinstance(c, (unicode, str, tokenize.Token)): + continue + if c.isinstance(pr.Array): + if is_execution(c): + return True + elif c.isinstance(pr.Call): + # Compare start_pos, because names may be different + # because of executions. + if c.name.start_pos == name.start_pos \ + and c.execution: + return True + return False + + is_exe = False + for assignee, op in name.parent.assignment_details: + is_exe |= is_execution(assignee) + + if is_exe: + # filter array[3] = ... + # TODO check executions for dict contents + return True + return False + + def _names_to_types(self, names, resolve_decorator): + types = [] + # Add isinstance and other if/assert knowledge. + flow_scope = self.scope + evaluator = self._evaluator + while flow_scope: + # TODO check if result is in scope -> no evaluation necessary + n = check_flow_information(evaluator, flow_scope, + self.name_str, self.position) + if n: + return n + flow_scope = flow_scope.parent + + for name in names: + typ = name.parent + if typ.isinstance(pr.ForFlow): + types += self._handle_for_loops(typ) + elif isinstance(typ, pr.Param): + types += self._eval_param(typ) + elif typ.isinstance(pr.Statement): + if typ.is_global(): + # global keyword handling. + types += evaluator.find_types(typ.parent.parent, str(name)) + else: + types += self._remove_statements(typ, name) + else: + if isinstance(typ, pr.Class): + typ = er.Class(evaluator, typ) + elif isinstance(typ, pr.Function): + typ = er.Function(evaluator, typ) + elif isinstance(typ, pr.Module): + typ = er.ModuleWrapper(evaluator, typ) + + if typ.isinstance(er.Function) and resolve_decorator: + typ = typ.get_decorated_func() + types.append(typ) + + if not names and isinstance(self.scope, er.Instance): + # handling __getattr__ / __getattribute__ + types = self._check_getattr(self.scope) + + return types + + def _remove_statements(self, stmt, name): + """ + This is the part where statements are being stripped. + + Due to lazy evaluation, statements like a = func; b = a; b() have to be + evaluated. + """ + evaluator = self._evaluator + types = [] + # Remove the statement docstr stuff for now, that has to be + # implemented with the evaluator class. + #if stmt.docstr: + #res_new.append(stmt) + + check_instance = None + if isinstance(stmt, er.InstanceElement) and stmt.is_class_var: + check_instance = stmt.instance + stmt = stmt.var + + types += evaluator.eval_statement(stmt, seek_name=unicode(self.name_str)) + + # check for `except X as y` usages, because y needs to be instantiated. + p = stmt.parent + # TODO this looks really hacky, improve parser representation! + if isinstance(p, pr.Flow) and p.command == 'except' \ + and p.inputs and p.inputs[0].as_names == [name]: + # TODO check for types that are not classes and add it to the + # static analysis report. + types = list(chain.from_iterable( + evaluator.execute(t) for t in types)) + + if check_instance is not None: + # class renames + types = [er.InstanceElement(evaluator, check_instance, a, True) + if isinstance(a, (er.Function, pr.Function)) + else a for a in types] + return types + + def _eval_param(self, param): + evaluator = self._evaluator + res_new = [] + func = param.parent + + cls = func.parent.get_parent_until((pr.Class, pr.Function)) + + from jedi.evaluate.param import ExecutedParam + if isinstance(cls, pr.Class) and param.position_nr == 0 \ + and not isinstance(param, ExecutedParam): + # This is where we add self - if it has never been + # instantiated. + if isinstance(self.scope, er.InstanceElement): + res_new.append(self.scope.instance) + else: + for inst in evaluator.execute(er.Class(evaluator, cls)): + inst.is_generated = True + res_new.append(inst) + return res_new + + # Instances are typically faked, if the instance is not called from + # outside. Here we check it for __init__ functions and return. + if isinstance(func, er.InstanceElement) \ + and func.instance.is_generated and str(func.name) == '__init__': + param = func.var.params[param.position_nr] + + # Add docstring knowledge. + doc_params = docstrings.follow_param(evaluator, param) + if doc_params: + return doc_params + + if not param.is_generated: + # Param owns no information itself. + res_new += dynamic.search_params(evaluator, param) + if not res_new: + if param.stars: + t = 'tuple' if param.stars == 1 else 'dict' + typ = evaluator.find_types(compiled.builtin, t)[0] + res_new = evaluator.execute(typ) + if not param.assignment_details: + # this means that there are no default params, + # so just ignore it. + return res_new + return res_new + evaluator.eval_statement(param, seek_name=unicode(self.name_str)) + + def _handle_for_loops(self, loop): + # Take the first statement (for has always only one`in`). + if not loop.inputs: + return [] + result = iterable.get_iterator_types(self._evaluator.eval_statement(loop.inputs[0])) + if len(loop.set_vars) > 1: + expression_list = loop.set_stmt.expression_list() + # loops with loop.set_vars > 0 only have one command + result = _assign_tuples(expression_list[0], result, unicode(self.name_str)) + return result + + def _resolve_descriptors(self, types): + """Processes descriptors""" + result = [] + for r in types: + if isinstance(self.scope, (er.Instance, er.Class)) \ + and hasattr(r, 'get_descriptor_return'): + # handle descriptors + with common.ignored(KeyError): + result += r.get_descriptor_return(self.scope) + continue + result.append(r) + return result + + +def check_flow_information(evaluator, flow, search_name_part, pos): + """ Try to find out the type of a variable just with the information that + is given by the flows: e.g. It is also responsible for assert checks.:: + + if isinstance(k, str): + k. # <- completion here + + ensures that `k` is a string. + """ + if not settings.dynamic_flow_information: + return None + + result = [] + if isinstance(flow, pr.IsScope) and not result: + for ass in reversed(flow.asserts): + if pos is None or ass.start_pos > pos: + continue + result = _check_isinstance_type(evaluator, ass, search_name_part) + if result: + break + + if isinstance(flow, pr.Flow) and not result: + if flow.command in ['if', 'while'] and len(flow.inputs) == 1: + result = _check_isinstance_type(evaluator, flow.inputs[0], search_name_part) + return result + + +def _check_isinstance_type(evaluator, stmt, search_name_part): + try: + expression_list = stmt.expression_list() + # this might be removed if we analyze and, etc + assert len(expression_list) == 1 + call = expression_list[0] + assert isinstance(call, pr.Call) and str(call.name) == 'isinstance' + assert bool(call.execution) + + # isinstance check + isinst = call.execution.values + assert len(isinst) == 2 # has two params + obj, classes = [statement.expression_list() for statement in isinst] + assert len(obj) == 1 + assert len(classes) == 1 + assert isinstance(obj[0], pr.Call) + + # names fit? + assert unicode(obj[0].name) == unicode(search_name_part) + assert isinstance(classes[0], pr.StatementElement) # can be type or tuple + except AssertionError: + return [] + + result = [] + for c in evaluator.eval_call(classes[0]): + for typ in (c.values() if isinstance(c, iterable.Array) else [c]): + result += evaluator.execute(typ) + return result + + +def get_names_of_scope(evaluator, scope, position=None, star_search=True, include_builtin=True): + """ + Get all completions (names) possible for the current scope. The star search + option is only here to provide an optimization. Otherwise the whole thing + would probably start a little recursive madness. + + This function is used to include names from outer scopes. For example, when + the current scope is function: + + >>> from jedi._compatibility import u + >>> from jedi.parser import Parser + >>> parser = Parser(u(''' + ... x = ['a', 'b', 'c'] + ... def func(): + ... y = None + ... ''')) + >>> scope = parser.module.subscopes[0] + >>> scope + + + `get_names_of_scope` is a generator. First it yields names from most inner + scope. + + >>> from jedi.evaluate import Evaluator + >>> pairs = list(get_names_of_scope(Evaluator(), scope)) + >>> pairs[0] + (, []) + + Then it yield the names from one level outer scope. For this example, this + is the most outer scope. + + >>> pairs[1] + (>, [, ]) + + After that we have a few underscore names that have been defined + + >>> pairs[2] + (>, [, ...]) + + + Finally, it yields names from builtin, if `include_builtin` is + true (default). + + >>> pairs[3] #doctest: +ELLIPSIS + (, [, ...]) + + :rtype: [(pr.Scope, [pr.Name])] + :return: Return an generator that yields a pair of scope and names. + """ + if isinstance(scope, pr.ListComprehension): + position = scope.parent.start_pos + + in_func_scope = scope + non_flow = scope.get_parent_until(pr.Flow, reverse=True) + while scope: + # We don't want submodules to report if we have modules. + # As well as some non-scopes, which are parents of list comprehensions. + if isinstance(scope, pr.SubModule) and scope.parent or not scope.is_scope(): + scope = scope.parent + continue + # `pr.Class` is used, because the parent is never `Class`. + # Ignore the Flows, because the classes and functions care for that. + # InstanceElement of Class is ignored, if it is not the start scope. + if not (scope != non_flow and scope.isinstance(pr.Class) + or scope.isinstance(pr.Flow) + or scope.isinstance(er.Instance) + and non_flow.isinstance(er.Function) + or isinstance(scope, compiled.CompiledObject) + and scope.type() == 'class' and in_func_scope != scope): + + if isinstance(scope, (pr.SubModule, fast.Module)): + scope = er.ModuleWrapper(evaluator, scope) + + for g in scope.scope_names_generator(position): + yield g + if scope.isinstance(pr.ListComprehension): + # is a list comprehension + yield scope, scope.get_defined_names(is_internal_call=True) + + scope = scope.parent + # This is used, because subscopes (Flow scopes) would distort the + # results. + if scope and scope.isinstance(er.Function, pr.Function, er.FunctionExecution): + in_func_scope = scope + if in_func_scope != scope \ + and isinstance(in_func_scope, (pr.Function, er.FunctionExecution)): + position = None + + # Add star imports. + if star_search: + for s in imports.remove_star_imports(evaluator, non_flow.get_parent_until()): + for g in get_names_of_scope(evaluator, s, star_search=False): + yield g + + # Add builtins to the global scope. + if include_builtin: + yield compiled.builtin, compiled.builtin.get_defined_names() + + +def _assign_tuples(tup, results, seek_name): + """ + This is a normal assignment checker. In python functions and other things + can return tuples: + >>> a, b = 1, "" + >>> a, (b, c) = 1, ("", 1.0) + + Here, if `seek_name` is "a", the number type will be returned. + The first part (before `=`) is the param tuples, the second one result. + + :type tup: pr.Array + """ + def eval_results(index): + types = [] + for r in results: + try: + func = r.get_exact_index_types + except AttributeError: + debug.warning("invalid tuple lookup %s of result %s in %s", + tup, results, seek_name) + else: + with common.ignored(IndexError): + types += func(index) + return types + + result = [] + for i, stmt in enumerate(tup): + # Used in assignments. There is just one call and no other things, + # therefore we can just assume, that the first part is important. + command = stmt.expression_list()[0] + + if tup.type == pr.Array.NOARRAY: + + # unnessecary braces -> just remove. + r = results + else: + r = eval_results(i) + + # LHS of tuples can be nested, so resolve it recursively + result += find_assignments(command, r, seek_name) + return result + + +def find_assignments(lhs, results, seek_name): + """ + Check if `seek_name` is in the left hand side `lhs` of assignment. + + `lhs` can simply be a variable (`pr.Call`) or a tuple/list (`pr.Array`) + representing the following cases:: + + a = 1 # lhs is pr.Call + (a, b) = 2 # lhs is pr.Array + + :type lhs: pr.Call + :type results: list + :type seek_name: str + """ + if isinstance(lhs, pr.Array): + return _assign_tuples(lhs, results, seek_name) + elif unicode(lhs.name.names[-1]) == seek_name: + return results + else: + return [] diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/finder.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/finder.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34dc19ab929e73208eb8848dfd2e784b08bf16c4 GIT binary patch literal 18012 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/helpers.py b/env/lib/python2.7/site-packages/jedi/evaluate/helpers.py new file mode 100644 index 0000000..409fb0e --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/helpers.py @@ -0,0 +1,216 @@ +import copy + +from jedi import common +from jedi.parser import representation as pr +from jedi import debug + + +def fast_parent_copy(obj): + """ + Much, much faster than copy.deepcopy, but just for certain elements. + """ + new_elements = {} + + def recursion(obj): + if isinstance(obj, pr.Statement): + # Need to set _set_vars, otherwise the cache is not working + # correctly, don't know why. + obj.get_defined_names() + + new_obj = copy.copy(obj) + new_elements[obj] = new_obj + + try: + items = list(new_obj.__dict__.items()) + except AttributeError: + # __dict__ not available, because of __slots__ + items = [] + + before = () + for cls in new_obj.__class__.__mro__: + with common.ignored(AttributeError): + if before == cls.__slots__: + continue + before = cls.__slots__ + items += [(n, getattr(new_obj, n)) for n in before] + + for key, value in items: + # replace parent (first try _parent and then parent) + if key in ['parent', '_parent'] and value is not None: + if key == 'parent' and '_parent' in items: + # parent can be a property + continue + with common.ignored(KeyError): + setattr(new_obj, key, new_elements[value]) + elif key in ['parent_function', 'use_as_parent', '_sub_module']: + continue + elif isinstance(value, list): + setattr(new_obj, key, list_rec(value)) + elif isinstance(value, pr.Simple): + setattr(new_obj, key, recursion(value)) + return new_obj + + def list_rec(list_obj): + copied_list = list_obj[:] # lists, tuples, strings, unicode + for i, el in enumerate(copied_list): + if isinstance(el, pr.Simple): + copied_list[i] = recursion(el) + elif isinstance(el, list): + copied_list[i] = list_rec(el) + return copied_list + return recursion(obj) + + +def call_signature_array_for_pos(stmt, pos): + """ + Searches for the array and position of a tuple. + """ + def search_array(arr, pos): + accepted_types = pr.Array.TUPLE, pr.Array.NOARRAY + if arr.type == 'dict': + for stmt in arr.values + arr.keys: + new_arr, index = call_signature_array_for_pos(stmt, pos) + if new_arr is not None: + return new_arr, index + else: + for i, stmt in enumerate(arr): + new_arr, index = call_signature_array_for_pos(stmt, pos) + if new_arr is not None: + return new_arr, index + + if arr.start_pos < pos <= stmt.end_pos: + if arr.type in accepted_types and isinstance(arr.parent, pr.Call): + return arr, i + if len(arr) == 0 and arr.start_pos < pos < arr.end_pos: + if arr.type in accepted_types and isinstance(arr.parent, pr.Call): + return arr, 0 + return None, 0 + + def search_call(call, pos): + arr, index = None, 0 + if call.next is not None: + if isinstance(call.next, pr.Array): + arr, index = search_array(call.next, pos) + else: + arr, index = search_call(call.next, pos) + if not arr and call.execution is not None: + arr, index = search_array(call.execution, pos) + return arr, index + + if stmt.start_pos >= pos >= stmt.end_pos: + return None, 0 + + for command in stmt.expression_list(): + arr = None + if isinstance(command, pr.Array): + arr, index = search_array(command, pos) + elif isinstance(command, pr.StatementElement): + arr, index = search_call(command, pos) + if arr is not None: + return arr, index + return None, 0 + + +def search_call_signatures(user_stmt, position): + """ + Returns the function Call that matches the position before. + """ + debug.speed('func_call start') + call, index = None, 0 + if user_stmt is not None and isinstance(user_stmt, pr.Statement): + # some parts will of the statement will be removed + user_stmt = fast_parent_copy(user_stmt) + arr, index = call_signature_array_for_pos(user_stmt, position) + if arr is not None: + call = arr.parent + + debug.speed('func_call parsed') + return call, index + + +def scan_statement_for_calls(stmt, search_name, assignment_details=False): + """ Returns the function Calls that match search_name in an Array. """ + def scan_array(arr, search_name): + result = [] + if arr.type == pr.Array.DICT: + for key_stmt, value_stmt in arr.items(): + result += scan_statement_for_calls(key_stmt, search_name) + result += scan_statement_for_calls(value_stmt, search_name) + else: + for stmt in arr: + result += scan_statement_for_calls(stmt, search_name) + return result + + check = list(stmt.expression_list()) + if assignment_details: + for expression_list, op in stmt.assignment_details: + check += expression_list + + result = [] + for c in check: + if isinstance(c, pr.Array): + result += scan_array(c, search_name) + elif isinstance(c, pr.Call): + s_new = c + while s_new is not None: + n = s_new.name + if isinstance(n, pr.Name) \ + and search_name in [str(x) for x in n.names]: + result.append(c) + + if s_new.execution is not None: + result += scan_array(s_new.execution, search_name) + s_new = s_new.next + elif isinstance(c, pr.ListComprehension): + for s in c.stmt, c.middle, c.input: + result += scan_statement_for_calls(s, search_name) + + return result + + +class FakeSubModule(): + line_offset = 0 + + +class FakeArray(pr.Array): + def __init__(self, values, parent=None, arr_type=pr.Array.LIST): + p = (0, 0) + super(FakeArray, self).__init__(FakeSubModule, p, arr_type, parent) + self.values = values + + +class FakeStatement(pr.Statement): + def __init__(self, expression_list, start_pos=(0, 0), parent=None): + p = start_pos + super(FakeStatement, self).__init__(FakeSubModule, expression_list, p, p) + self.set_expression_list(expression_list) + self.parent = parent + + +class FakeImport(pr.Import): + def __init__(self, name, parent, level=0): + p = 0, 0 + super(FakeImport, self).__init__(FakeSubModule, p, p, name, + relative_count=level) + self.parent = parent + + +class FakeName(pr.Name): + def __init__(self, name_or_names, parent=None): + p = 0, 0 + if isinstance(name_or_names, list): + names = [(n, p) for n in name_or_names] + else: + names = [(name_or_names, p)] + super(FakeName, self).__init__(FakeSubModule, names, p, p, parent) + + +def stmts_to_stmt(statements): + """ + Sometimes we want to have something like a result_set and unite some + statements in one. + """ + if len(statements) == 1: + return statements[0] + array = FakeArray(statements, arr_type=pr.Array.NOARRAY) + return FakeStatement([array]) diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/helpers.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/helpers.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdb6e5694219844b54e9dc62b39b7545cb8e293b GIT binary patch literal 8870 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' % (type(self).__name__, self.import_stmt) + + @property + def import_path(self): + return self._importer.str_import_path() + + def get_defined_names(self, on_import_stmt=False): + names = [] + for scope in self.follow(): + if scope is ImportWrapper.GlobalNamespace: + if not self._is_relative_import(): + names += self._get_module_names() + + if self._importer.file_path is not None: + path = os.path.abspath(self._importer.file_path) + for i in range(self.import_stmt.relative_count - 1): + path = os.path.dirname(path) + names += self._get_module_names([path]) + + if self._is_relative_import(): + rel_path = os.path.join(self._importer.get_relative_path(), + '__init__.py') + if os.path.exists(rel_path): + m = _load_module(rel_path) + names += m.get_defined_names() + else: + if on_import_stmt and isinstance(scope, pr.Module) \ + and scope.path.endswith('__init__.py'): + pkg_path = os.path.dirname(scope.path) + paths = self._importer.namespace_packages(pkg_path, + self.import_path) + names += self._get_module_names([pkg_path] + paths) + if self.is_just_from: + # In the case of an import like `from x.` we don't need to + # add all the variables. + if ('os',) == self.import_path and not self._is_relative_import(): + # os.path is a hardcoded exception, because it's a + # ``sys.modules`` modification. + names.append(self._generate_name('path')) + continue + from jedi.evaluate import finder + for s, scope_names in finder.get_names_of_scope(self._evaluator, + scope, include_builtin=False): + for n in scope_names: + if self.import_stmt.from_ns is None \ + or self.is_partial_import: + # from_ns must be defined to access module + # values plus a partial import means that there + # is something after the import, which + # automatically implies that there must not be + # any non-module scope. + continue + names.append(n) + return names + + def _generate_name(self, name): + return helpers.FakeName(name, parent=self.import_stmt) + + def _get_module_names(self, search_path=None): + """ + Get the names of all modules in the search_path. This means file names + and not names defined in the files. + """ + + names = [] + # add builtin module names + if search_path is None: + names += [self._generate_name(name) for name in sys.builtin_module_names] + + if search_path is None: + search_path = self._importer.sys_path_with_modifications() + for module_loader, name, is_pkg in pkgutil.iter_modules(search_path): + names.append(self._generate_name(name)) + return names + + def _is_relative_import(self): + return bool(self.import_stmt.relative_count) + + def follow(self, is_goto=False): + if self._evaluator.recursion_detector.push_stmt(self.import_stmt): + # check recursion + return [] + + if self.import_path: + try: + module, rest = self._importer.follow_file_system() + except ModuleNotFound as e: + analysis.add(self._evaluator, 'import-error', e.name_part) + return [] + + if self.import_stmt.is_nested() and not self.nested_resolve: + scopes = [NestedImportModule(module, self.import_stmt)] + else: + scopes = [module] + + star_imports = remove_star_imports(self._evaluator, module) + if star_imports: + scopes = [StarImportModule(scopes[0], star_imports)] + + # follow the rest of the import (not FS -> classes, functions) + if len(rest) > 1 or rest and self.is_like_search: + scopes = [] + if ('os', 'path') == self.import_path[:2] \ + and not self._is_relative_import(): + # This is a huge exception, we follow a nested import + # ``os.path``, because it's a very important one in Python + # that is being achieved by messing with ``sys.modules`` in + # ``os``. + scopes = self._evaluator.follow_path(iter(rest), [module], module) + elif rest: + if is_goto: + scopes = list(chain.from_iterable( + self._evaluator.find_types(s, rest[0], is_goto=True) + for s in scopes)) + else: + scopes = list(chain.from_iterable( + self._evaluator.follow_path(iter(rest), [s], s) + for s in scopes)) + else: + scopes = [ImportWrapper.GlobalNamespace] + debug.dbg('after import: %s', scopes) + if not scopes: + analysis.add(self._evaluator, 'import-error', + self._importer.import_path[-1]) + self._evaluator.recursion_detector.pop_stmt() + return scopes + + +class NestedImportModule(pr.Module): + def __init__(self, module, nested_import): + self._module = module + self._nested_import = nested_import + + def _get_nested_import_name(self): + """ + Generates an Import statement, that can be used to fake nested imports. + """ + i = self._nested_import + # This is not an existing Import statement. Therefore, set position to + # 0 (0 is not a valid line number). + zero = (0, 0) + names = [unicode(name_part) for name_part in i.namespace.names[1:]] + name = helpers.FakeName(names, self._nested_import) + new = pr.Import(i._sub_module, zero, zero, name) + new.parent = self._module + debug.dbg('Generated a nested import: %s', new) + return helpers.FakeName(str(i.namespace.names[1]), new) + + def _get_defined_names(self): + """ + NesteImportModule don't seem to be actively used, right now. + However, they might in the future. If we do more sophisticated static + analysis checks. + """ + nested = self._get_nested_import_name() + return self._module.get_defined_names() + [nested] + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s of %s>" % (self.__class__.__name__, self._module, + self._nested_import) + + +class StarImportModule(pr.Module): + """ + Used if a module contains star imports. + """ + def __init__(self, module, star_import_modules): + self._module = module + self.star_import_modules = star_import_modules + + def scope_names_generator(self, position=None): + for module, names in self._module.scope_names_generator(position): + yield module, names + for s in self.star_import_modules: + yield s, s.get_defined_names() + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self._module) + + +def get_importer(evaluator, import_path, module, level=0): + """ + Checks the evaluator caches first, which resembles the ``sys.modules`` + cache and speeds up libraries like ``numpy``. + """ + if level != 0: + # Only absolute imports should be cached. Otherwise we have a mess. + # TODO Maybe calculate the absolute import and save it here? + return _Importer(evaluator, import_path, module, level) + try: + return evaluator.import_cache[import_path] + except KeyError: + importer = _Importer(evaluator, import_path, module, level) + evaluator.import_cache[import_path] = importer + return importer + + +class _Importer(object): + def __init__(self, evaluator, import_path, module, level=0): + """ + An implementation similar to ``__import__``. Use `follow_file_system` + to actually follow the imports. + + *level* specifies whether to use absolute or relative imports. 0 (the + default) means only perform absolute imports. Positive values for level + indicate the number of parent directories to search relative to the + directory of the module calling ``__import__()`` (see PEP 328 for the + details). + + :param import_path: List of namespaces (strings). + """ + debug.speed('import %s' % (import_path,)) + self._evaluator = evaluator + self.import_path = import_path + self.level = level + self.module = module + path = module.path + # TODO abspath + self.file_path = os.path.dirname(path) if path is not None else None + + def str_import_path(self): + """Returns the import path as pure strings instead of NameParts.""" + return tuple(str(name_part) for name_part in self.import_path) + + def get_relative_path(self): + path = self.file_path + for i in range(self.level - 1): + path = os.path.dirname(path) + return path + + @memoize_default() + def sys_path_with_modifications(self): + # If you edit e.g. gunicorn, there will be imports like this: + # `from gunicorn import something`. But gunicorn is not in the + # sys.path. Therefore look if gunicorn is a parent directory, #56. + in_path = [] + if self.import_path: + parts = self.file_path.split(os.path.sep) + for i, p in enumerate(parts): + if p == unicode(self.import_path[0]): + new = os.path.sep.join(parts[:i]) + in_path.append(new) + + return in_path + sys_path_with_modifications(self._evaluator, self.module) + + def follow(self, evaluator): + scope, rest = self.follow_file_system() + if rest: + # follow the rest of the import (not FS -> classes, functions) + return evaluator.follow_path(iter(rest), [scope], scope) + return [scope] + + @memoize_default(NO_DEFAULT) + def follow_file_system(self): + if self.file_path: + sys_path_mod = list(self.sys_path_with_modifications()) + if not self.module.has_explicit_absolute_import: + # If the module explicitly asks for absolute imports, + # there's probably a bogus local one. + sys_path_mod.insert(0, self.file_path) + + # First the sys path is searched normally and if that doesn't + # succeed, try to search the parent directories, because sometimes + # Jedi doesn't recognize sys.path modifications (like py.test + # stuff). + old_path, temp_path = self.file_path, os.path.dirname(self.file_path) + while old_path != temp_path: + sys_path_mod.append(temp_path) + old_path, temp_path = temp_path, os.path.dirname(temp_path) + else: + sys_path_mod = list(get_sys_path()) + + from jedi.evaluate.representation import ModuleWrapper + module, rest = self._follow_sys_path(sys_path_mod) + if isinstance(module, pr.Module): + return ModuleWrapper(self._evaluator, module), rest + return module, rest + + def namespace_packages(self, found_path, import_path): + """ + Returns a list of paths of possible ``pkgutil``/``pkg_resources`` + namespaces. If the package is no "namespace package", an empty list is + returned. + """ + def follow_path(directories, paths): + try: + directory = next(directories) + except StopIteration: + return paths + else: + deeper_paths = [] + for p in paths: + new = os.path.join(p, directory) + if os.path.isdir(new) and new != found_path: + deeper_paths.append(new) + return follow_path(directories, deeper_paths) + + with open(os.path.join(found_path, '__init__.py'), 'rb') as f: + content = common.source_to_unicode(f.read()) + # these are strings that need to be used for namespace packages, + # the first one is ``pkgutil``, the second ``pkg_resources``. + options = ('declare_namespace(__name__)', 'extend_path(__path__') + if options[0] in content or options[1] in content: + # It is a namespace, now try to find the rest of the modules. + return follow_path(iter(import_path), sys.path) + return [] + + def _follow_sys_path(self, sys_path): + """ + Find a module with a path (of the module, like usb.backend.libusb10). + """ + def follow_str(ns_path, string): + debug.dbg('follow_module %s %s', ns_path, string) + path = None + if ns_path: + path = ns_path + elif self.level > 0: # is a relative import + path = self.get_relative_path() + + if path is not None: + importing = find_module(string, [path]) + else: + debug.dbg('search_module %s %s', string, self.file_path) + # Override the sys.path. It works only good that way. + # Injecting the path directly into `find_module` did not work. + sys.path, temp = sys_path, sys.path + try: + importing = find_module(string) + finally: + sys.path = temp + + return importing + + current_namespace = (None, None, None) + # now execute those paths + rest = [] + for i, s in enumerate(self.import_path): + try: + current_namespace = follow_str(current_namespace[1], unicode(s)) + except ImportError: + _continue = False + if self.level >= 1 and len(self.import_path) == 1: + # follow `from . import some_variable` + rel_path = self.get_relative_path() + with common.ignored(ImportError): + current_namespace = follow_str(rel_path, '__init__') + elif current_namespace[2]: # is a package + path = self.str_import_path()[:i] + for n in self.namespace_packages(current_namespace[1], path): + try: + current_namespace = follow_str(n, unicode(s)) + if current_namespace[1]: + _continue = True + break + except ImportError: + pass + + if not _continue: + if current_namespace[1]: + rest = self.str_import_path()[i:] + break + else: + raise ModuleNotFound(s) + + path = current_namespace[1] + is_package_directory = current_namespace[2] + + f = None + if is_package_directory or current_namespace[0]: + # is a directory module + if is_package_directory: + path = os.path.join(path, '__init__.py') + with open(path, 'rb') as f: + source = f.read() + else: + source = current_namespace[0].read() + current_namespace[0].close() + return _load_module(path, source, sys_path=sys_path), rest + else: + return _load_module(name=path, sys_path=sys_path), rest + + +def follow_imports(evaluator, scopes): + """ + Here we strip the imports - they don't get resolved necessarily. + Really used anymore? Merge with remove_star_imports? + """ + result = [] + for s in scopes: + if isinstance(s, pr.Import): + for r in ImportWrapper(evaluator, s).follow(): + result.append(r) + else: + result.append(s) + return result + + +@cache.cache_star_import +def remove_star_imports(evaluator, scope, ignored_modules=()): + """ + Check a module for star imports:: + + from module import * + + and follow these modules. + """ + if isinstance(scope, StarImportModule): + return scope.star_import_modules + modules = follow_imports(evaluator, (i for i in scope.get_imports() if i.star)) + new = [] + for m in modules: + if m not in ignored_modules: + new += remove_star_imports(evaluator, m, modules) + modules += new + + # Filter duplicate modules. + return set(modules) + + +def _load_module(path=None, source=None, name=None, sys_path=None): + def load(source): + dotted_path = path and compiled.dotted_from_fs_path(path, sys_path) + if path is not None and path.endswith('.py') \ + and not dotted_path in settings.auto_import_modules: + if source is None: + with open(path, 'rb') as f: + source = f.read() + else: + return compiled.load_module(path, name) + p = path or name + p = fast.FastParser(common.source_to_unicode(source), p) + cache.save_parser(path, name, p) + return p.module + + cached = cache.load_parser(path, name) + return load(source) if cached is None else cached.module + + +def get_modules_containing_name(mods, name): + """ + Search a name in the directories of modules. + """ + def check_python_file(path): + try: + return cache.parser_cache[path].parser.module + except KeyError: + try: + return check_fs(path) + except IOError: + return None + + def check_fs(path): + with open(path, 'rb') as f: + source = source_to_unicode(f.read()) + if name in source: + return _load_module(path, source) + + # skip non python modules + mods = set(m for m in mods if not isinstance(m, compiled.CompiledObject)) + mod_paths = set() + for m in mods: + mod_paths.add(m.path) + yield m + + if settings.dynamic_params_for_other_modules: + paths = set(settings.additional_dynamic_modules) + for p in mod_paths: + if p is not None: + d = os.path.dirname(p) + for entry in os.listdir(d): + if entry not in mod_paths: + if entry.endswith('.py'): + paths.add(d + os.path.sep + entry) + + for p in sorted(paths): + # make testing easier, sort it - same results on every interpreter + c = check_python_file(p) + if c is not None and c not in mods: + yield c diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/imports.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/imports.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25a8275d4ea64bf97751537742d759282373bd96 GIT binary patch literal 22623 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" % (type(self).__name__, self.func) + + +class GeneratorMethod(object): + """``__next__`` and ``send`` methods.""" + def __init__(self, generator, builtin_func): + self._builtin_func = builtin_func + self._generator = generator + + def execute(self): + return self._generator.iter_content() + + def __getattr__(self, name): + return getattr(self._builtin_func, name) + + +class GeneratorComprehension(Generator): + def __init__(self, evaluator, comprehension): + super(GeneratorComprehension, self).__init__(evaluator, comprehension, None) + self.comprehension = comprehension + + def iter_content(self): + return self._evaluator.eval_statement_element(self.comprehension) + + +class Array(use_metaclass(CachedMetaClass, pr.Base)): + """ + Used as a mirror to pr.Array, if needed. It defines some getter + methods which are important in this module. + """ + def __init__(self, evaluator, array): + self._evaluator = evaluator + self._array = array + + @memoize_default(NO_DEFAULT) + def get_index_types(self, index_array=()): + """ + Get the types of a specific index or all, if not given. + + :param indexes: The index input types. + """ + indexes = create_indexes_or_slices(self._evaluator, index_array) + if [index for index in indexes if isinstance(index, Slice)]: + return [self] + + lookup_done = False + types = [] + for index in indexes: + if isinstance(index, compiled.CompiledObject) \ + and isinstance(index.obj, (int, str, unicode)): + with common.ignored(KeyError, IndexError, TypeError): + types += self.get_exact_index_types(index.obj) + lookup_done = True + + return types if lookup_done else self.values() + + @memoize_default(NO_DEFAULT) + def values(self): + result = list(_follow_values(self._evaluator, self._array.values)) + result += check_array_additions(self._evaluator, self) + return result + + def get_exact_index_types(self, mixed_index): + """ Here the index is an int/str. Raises IndexError/KeyError """ + index = mixed_index + if self.type == pr.Array.DICT: + index = None + for i, key_statement in enumerate(self._array.keys): + # Because we only want the key to be a string. + key_expression_list = key_statement.expression_list() + if len(key_expression_list) != 1: # cannot deal with complex strings + continue + key = key_expression_list[0] + if isinstance(key, pr.Literal): + key = key.value + elif isinstance(key, pr.Name): + key = str(key) + else: + continue + + if mixed_index == key: + index = i + break + if index is None: + raise KeyError('No key found in dictionary') + + # Can raise an IndexError + values = [self._array.values[index]] + return _follow_values(self._evaluator, values) + + def scope_names_generator(self, position=None): + """ + This method generates all `ArrayMethod` for one pr.Array. + It returns e.g. for a list: append, pop, ... + """ + # `array.type` is a string with the type, e.g. 'list'. + scope = self._evaluator.find_types(compiled.builtin, self._array.type)[0] + scope = self._evaluator.execute(scope)[0] # builtins only have one class + for _, names in scope.scope_names_generator(): + yield self, [ArrayMethod(n) for n in names] + + @common.safe_property + def parent(self): + return compiled.builtin + + def get_parent_until(self): + return compiled.builtin + + def __getattr__(self, name): + if name not in ['type', 'start_pos', 'get_only_subelement', 'parent', + 'get_parent_until', 'items']: + raise AttributeError('Strange access on %s: %s.' % (self, name)) + return getattr(self._array, name) + + def __iter__(self): + return iter(self._array) + + def __len__(self): + return len(self._array) + + def __repr__(self): + return "" % (type(self).__name__, self._array) + + +class ArrayMethod(object): + """ + A name, e.g. `list.append`, it is used to access the original array + methods. + """ + def __init__(self, name): + super(ArrayMethod, self).__init__() + self.name = name + + def __getattr__(self, name): + # Set access privileges: + if name not in ['parent', 'names', 'start_pos', 'end_pos', 'get_code']: + raise AttributeError('Strange accesson %s: %s.' % (self, name)) + return getattr(self.name, name) + + def get_parent_until(self): + return compiled.builtin + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self.name) + + +class MergedArray(Array): + def __init__(self, evaluator, arrays): + super(MergedArray, self).__init__(evaluator, arrays[-1]._array) + self._arrays = arrays + + def get_index_types(self, mixed_index): + return list(chain(*(a.values() for a in self._arrays))) + + def get_exact_index_types(self, mixed_index): + raise IndexError + + def __iter__(self): + for array in self._arrays: + for a in array: + yield a + + def __len__(self): + return sum(len(a) for a in self._arrays) + + +def get_iterator_types(inputs): + """Returns the types of any iterator (arrays, yields, __iter__, etc).""" + iterators = [] + # Take the first statement (for has always only + # one, remember `in`). And follow it. + for it in inputs: + if isinstance(it, (Generator, Array, ArrayInstance)): + iterators.append(it) + else: + if not hasattr(it, 'execute_subscope_by_name'): + debug.warning('iterator/for loop input wrong: %s', it) + continue + try: + iterators += it.execute_subscope_by_name('__iter__') + except KeyError: + debug.warning('iterators: No __iter__ method found.') + + result = [] + from jedi.evaluate.representation import Instance + for it in iterators: + if isinstance(it, Array): + # Array is a little bit special, since this is an internal + # array, but there's also the list builtin, which is + # another thing. + result += it.values() + elif isinstance(it, Instance): + # __iter__ returned an instance. + name = '__next__' if is_py3 else 'next' + try: + result += it.execute_subscope_by_name(name) + except KeyError: + debug.warning('Instance has no __next__ function in %s.', it) + else: + # Is a generator. + result += it.iter_content() + return result + + +def check_array_additions(evaluator, array): + """ Just a mapper function for the internal _check_array_additions """ + if not pr.Array.is_type(array._array, pr.Array.LIST, pr.Array.SET): + # TODO also check for dict updates + return [] + + is_list = array._array.type == 'list' + current_module = array._array.get_parent_until() + res = _check_array_additions(evaluator, array, current_module, is_list) + return res + + +@memoize_default([], evaluator_is_first_arg=True) +def _check_array_additions(evaluator, compare_array, module, is_list): + """ + Checks if a `pr.Array` has "add" statements: + >>> a = [""] + >>> a.append(1) + """ + if not settings.dynamic_array_additions or isinstance(module, compiled.CompiledObject): + return [] + + def check_calls(calls, add_name): + """ + Calls are processed here. The part before the call is searched and + compared with the original Array. + """ + result = [] + for c in calls: + call_path = list(c.generate_call_path()) + call_path_simple = [unicode(n) if isinstance(n, pr.NamePart) else n + for n in call_path] + separate_index = call_path_simple.index(add_name) + if add_name == call_path_simple[-1] or separate_index == 0: + # this means that there is no execution -> [].append + # or the keyword is at the start -> append() + continue + backtrack_path = iter(call_path[:separate_index]) + + position = c.start_pos + scope = c.get_parent_until(pr.IsScope) + + found = evaluator.eval_call_path(backtrack_path, scope, position) + if not compare_array in found: + continue + + params = call_path[separate_index + 1] + if not params.values: + continue # no params: just ignore it + if add_name in ['append', 'add']: + for param in params: + result += evaluator.eval_statement(param) + elif add_name in ['insert']: + try: + second_param = params[1] + except IndexError: + continue + else: + result += evaluator.eval_statement(second_param) + elif add_name in ['extend', 'update']: + for param in params: + iterators = evaluator.eval_statement(param) + result += get_iterator_types(iterators) + return result + + from jedi.evaluate import representation as er + + def get_execution_parent(element, *stop_classes): + """ Used to get an Instance/FunctionExecution parent """ + if isinstance(element, Array): + stmt = element._array.parent + else: + # is an Instance with an ArrayInstance inside + stmt = element.var_args[0].var_args.parent + if isinstance(stmt, er.InstanceElement): + stop_classes = list(stop_classes) + [er.Function] + return stmt.get_parent_until(stop_classes) + + temp_param_add = settings.dynamic_params_for_other_modules + settings.dynamic_params_for_other_modules = False + + search_names = ['append', 'extend', 'insert'] if is_list else \ + ['add', 'update'] + comp_arr_parent = get_execution_parent(compare_array, er.FunctionExecution) + + possible_stmts = [] + res = [] + for n in search_names: + try: + possible_stmts += module.used_names[n] + except KeyError: + continue + for stmt in possible_stmts: + # Check if the original scope is an execution. If it is, one + # can search for the same statement, that is in the module + # dict. Executions are somewhat special in jedi, since they + # literally copy the contents of a function. + if isinstance(comp_arr_parent, er.FunctionExecution): + stmt = comp_arr_parent. \ + get_statement_for_position(stmt.start_pos) + if stmt is None: + continue + # InstanceElements are special, because they don't get copied, + # but have this wrapper around them. + if isinstance(comp_arr_parent, er.InstanceElement): + stmt = er.InstanceElement(comp_arr_parent.instance, stmt) + + if evaluator.recursion_detector.push_stmt(stmt): + # check recursion + continue + + res += check_calls(helpers.scan_statement_for_calls(stmt, n), n) + evaluator.recursion_detector.pop_stmt() + # reset settings + settings.dynamic_params_for_other_modules = temp_param_add + return res + + +def check_array_instances(evaluator, instance): + """Used for set() and list() instances.""" + if not settings.dynamic_arrays_instances: + return instance.var_args + ai = ArrayInstance(evaluator, instance) + return [ai] + + +class ArrayInstance(pr.Base): + """ + Used for the usage of set() and list(). + This is definitely a hack, but a good one :-) + It makes it possible to use set/list conversions. + """ + def __init__(self, evaluator, instance): + self._evaluator = evaluator + self.instance = instance + self.var_args = instance.var_args + + def iter_content(self): + """ + The index is here just ignored, because of all the appends, etc. + lists/sets are too complicated too handle that. + """ + items = [] + from jedi.evaluate.representation import Instance + for stmt in self.var_args: + for typ in self._evaluator.eval_statement(stmt): + if isinstance(typ, Instance) and len(typ.var_args): + array = typ.var_args[0] + if isinstance(array, ArrayInstance): + # Certain combinations can cause recursions, see tests. + if not self._evaluator.recursion_detector.push_stmt(self.var_args): + items += array.iter_content() + self._evaluator.recursion_detector.pop_stmt() + items += get_iterator_types([typ]) + + # TODO check if exclusion of tuple is a problem here. + if isinstance(self.var_args, tuple) or self.var_args.parent is None: + return [] # generated var_args should not be checked for arrays + + module = self.var_args.get_parent_until() + is_list = str(self.instance.name) == 'list' + items += _check_array_additions(self._evaluator, self.instance, module, is_list) + return items + + +def _follow_values(evaluator, values): + """ helper function for the index getters """ + return list(chain.from_iterable(evaluator.eval_statement(v) for v in values)) + + +class Slice(object): + def __init__(self, evaluator, start, stop, step): + self._evaluator = evaluator + # all of them are either a Precedence or None. + self._start = start + self._stop = stop + self._step = step + + @property + def obj(self): + """ + Imitate CompiledObject.obj behavior and return a ``builtin.slice()`` + object. + """ + def get(element): + if element is None: + return None + + result = self._evaluator.process_precedence_element(element) + if len(result) != 1: + # We want slices to be clear defined with just one type. + # Otherwise we will return an empty slice object. + raise IndexError + try: + return result[0].obj + except AttributeError: + return None + + try: + return slice(get(self._start), get(self._stop), get(self._step)) + except IndexError: + return slice(None, None, None) + + +def create_indexes_or_slices(evaluator, index_array): + if not index_array: + return () + + # Just take the first part of the "array", because this is Python stdlib + # behavior. Numpy et al. perform differently, but Jedi won't understand + # that anyway. + expression_list = index_array[0].expression_list() + prec = precedence.create_precedence(expression_list) + + # check for slices + if isinstance(prec, precedence.Precedence) and prec.operator == ':': + start = prec.left + if isinstance(start, precedence.Precedence) and start.operator == ':': + stop = start.right + start = start.left + step = prec.right + else: + stop = prec.right + step = None + return (Slice(evaluator, start, stop, step),) + else: + return tuple(evaluator.process_precedence_element(prec)) diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/iterable.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/iterable.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d0ba0bd694acf49847454f405265fd53585c804 GIT binary patch literal 22580 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 type-error-multiple-values + if [v.parent for v in values] != [v.parent for v in vs]: + vs.extend(values) + break + else: + # default is to merge + argument_list.append((key, values)) + # Normal arguments (including key arguments). + else: + if stmt.assignment_details: + key_arr, op = stmt.assignment_details[0] + # Filter error tokens + key_arr = [x for x in key_arr if isinstance(x, pr.Call)] + # named parameter + if key_arr and isinstance(key_arr[0], pr.Call): + argument_list.append((key_arr[0].name, [stmt])) + else: + argument_list.append((None, [stmt])) + return argument_list + + +def _reorder_var_args(var_args): + """ + Reordering var_args is necessary, because star args sometimes appear after + named argument, but in the actual order it's prepended. + """ + named_index = None + new_args = [] + for i, stmt in enumerate(var_args): + if isinstance(stmt, pr.Statement): + if named_index is None and stmt.assignment_details: + named_index = i + + if named_index is not None: + expression_list = stmt.expression_list() + if expression_list and expression_list[0] == '*': + new_args.insert(named_index, stmt) + named_index += 1 + continue + + new_args.append(stmt) + return new_args + + +def _iterate_star_args(evaluator, array, expression_list, func): + from jedi.evaluate.representation import Instance + if isinstance(array, iterable.Array): + for field_stmt in array: # yield from plz! + yield field_stmt + elif isinstance(array, iterable.Generator): + for field_stmt in array.iter_content(): + yield helpers.FakeStatement([field_stmt]) + elif isinstance(array, Instance) and array.name == 'tuple': + pass + else: + if expression_list: + m = "TypeError: %s() argument after * must be a sequence, not %s" \ + % (func.name, array) + analysis.add(evaluator, 'type-error-star', + expression_list[0], message=m) + + +def _star_star_dict(evaluator, array, expression_list, func): + dct = {} + from jedi.evaluate.representation import Instance + if isinstance(array, Instance) and array.name == 'dict': + # For now ignore this case. In the future add proper iterators and just + # make one call without crazy isinstance checks. + return {} + + if isinstance(array, iterable.Array) and array.type == pr.Array.DICT: + for key_stmt, value_stmt in array.items(): + # first index, is the key if syntactically correct + call = key_stmt.expression_list()[0] + if isinstance(call, pr.Name): + key = call + elif isinstance(call, pr.Call): + key = call.name + else: + continue # We ignore complicated statements here, for now. + + # If the string is a duplicate, we don't care it's illegal Python + # anyway. + dct[str(key)] = key, value_stmt + else: + if expression_list: + m = "TypeError: %s argument after ** must be a mapping, not %s" \ + % (func.name, array) + analysis.add(evaluator, 'type-error-star-star', + expression_list[0], message=m) + return dct + + +def _gen_param_name_copy(func, var_args, param, keys=(), values=(), array_type=None): + """ + Create a param with the original scope (of varargs) as parent. + """ + if isinstance(var_args, pr.Array): + parent = var_args.parent + start_pos = var_args.start_pos + else: + parent = func + start_pos = 0, 0 + + new_param = ExecutedParam.from_param(param, parent, var_args) + + # create an Array (-> needed for *args/**kwargs tuples/dicts) + arr = pr.Array(helpers.FakeSubModule, start_pos, array_type, parent) + arr.values = list(values) # Arrays only work with list. + key_stmts = [] + for key in keys: + key_stmts.append(helpers.FakeStatement([key], start_pos)) + arr.keys = key_stmts + arr.type = array_type + + new_param.set_expression_list([arr]) + + name = copy.copy(param.get_name()) + name.parent = new_param + return name + + +def _error_argument_count(func, actual_count): + default_arguments = sum(1 for p in func.params if p.assignment_details or p.stars) + + if default_arguments == 0: + before = 'exactly ' + else: + before = 'from %s to ' % (len(func.params) - default_arguments) + return ('TypeError: %s() takes %s%s arguments (%s given).' + % (func.name, before, len(func.params), actual_count)) diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/param.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/param.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90320bb8c2185643e90f16ce5a6ecc50892a136f GIT binary patch literal 10497 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/precedence.py b/env/lib/python2.7/site-packages/jedi/evaluate/precedence.py new file mode 100644 index 0000000..39e4afc --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/precedence.py @@ -0,0 +1,297 @@ +""" +Handles operator precedence. +""" + +from jedi._compatibility import unicode +from jedi.parser import representation as pr +from jedi import debug +from jedi.common import PushBackIterator +from jedi.evaluate.compiled import CompiledObject, create, builtin +from jedi.evaluate import analysis + + +class PythonGrammar(object): + """ + Some kind of mirror of http://docs.python.org/3/reference/grammar.html. + """ + + class MultiPart(str): + def __new__(cls, first, second): + self = str.__new__(cls, first) + self.second = second + return self + + def __str__(self): + return str.__str__(self) + ' ' + self.second + + FACTOR = '+', '-', '~' + POWER = '**', + TERM = '*', '/', '%', '//' + ARITH_EXPR = '+', '-' + + SHIFT_EXPR = '<<', '>>' + AND_EXPR = '&', + XOR_EXPR = '^', + EXPR = '|', + + COMPARISON = ('<', '>', '==', '>=', '<=', '!=', 'in', + MultiPart('not', 'in'), MultiPart('is', 'not'), 'is') + + NOT_TEST = 'not', + AND_TEST = 'and', + OR_TEST = 'or', + + #TEST = or_test ['if' or_test 'else' test] | lambdef + + TERNARY = 'if', + SLICE = ':', + + ORDER = (POWER, TERM, ARITH_EXPR, SHIFT_EXPR, AND_EXPR, XOR_EXPR, + EXPR, COMPARISON, AND_TEST, OR_TEST, TERNARY, SLICE) + + FACTOR_PRIORITY = 0 # highest priority + LOWEST_PRIORITY = len(ORDER) + NOT_TEST_PRIORITY = LOWEST_PRIORITY - 4 # priority only lower for `and`/`or` + SLICE_PRIORITY = LOWEST_PRIORITY - 1 # priority only lower for `and`/`or` + + +class Precedence(object): + def __init__(self, left, operator, right): + self.left = left + self.operator = operator + self.right = right + + def parse_tree(self, strip_literals=False): + def process(which): + try: + which = which.parse_tree(strip_literals) + except AttributeError: + pass + if strip_literals and isinstance(which, pr.Literal): + which = which.value + return which + + return (process(self.left), self.operator.string, process(self.right)) + + def __repr__(self): + return '(%s %s %s)' % (self.left, self.operator, self.right) + + +class TernaryPrecedence(Precedence): + def __init__(self, left, operator, right, check): + super(TernaryPrecedence, self).__init__(left, operator, right) + self.check = check + + +def create_precedence(expression_list): + iterator = PushBackIterator(iter(expression_list)) + return _check_operator(iterator) + + +def _syntax_error(element, msg='SyntaxError in precedence'): + debug.warning('%s: %s, %s' % (msg, element, element.start_pos)) + + +def _get_number(iterator, priority=PythonGrammar.LOWEST_PRIORITY): + el = next(iterator) + if isinstance(el, pr.Operator): + if el in PythonGrammar.FACTOR: + right = _get_number(iterator, PythonGrammar.FACTOR_PRIORITY) + elif el in PythonGrammar.NOT_TEST \ + and priority >= PythonGrammar.NOT_TEST_PRIORITY: + right = _get_number(iterator, PythonGrammar.NOT_TEST_PRIORITY) + elif el in PythonGrammar.SLICE \ + and priority >= PythonGrammar.SLICE_PRIORITY: + iterator.push_back(el) + return None + else: + _syntax_error(el) + return _get_number(iterator, priority) + return Precedence(None, el, right) + elif isinstance(el, pr.tokenize.Token): + return _get_number(iterator, priority) + else: + return el + + +class MergedOperator(pr.Operator): + """ + A way to merge the two operators `is not` and `not int`, which are two + words instead of one. + Maybe there's a better way (directly in the tokenizer/parser? but for now + this is fine.) + """ + def __init__(self, first, second): + string = first.string + ' ' + second.string + super(MergedOperator, self).__init__(first._sub_module, string, + first.parent, first.start_pos) + self.first = first + self.second = second + + +def _check_operator(iterator, priority=PythonGrammar.LOWEST_PRIORITY): + try: + left = _get_number(iterator, priority) + except StopIteration: + return None + + for el in iterator: + if not isinstance(el, pr.Operator): + _syntax_error(el) + continue + + operator = None + for check_prio, check in enumerate(PythonGrammar.ORDER): + if check_prio >= priority: + # respect priorities. + iterator.push_back(el) + return left + + try: + match_index = check.index(el) + except ValueError: + continue + + match = check[match_index] + if isinstance(match, PythonGrammar.MultiPart): + next_tok = next(iterator) + if next_tok == match.second: + el = MergedOperator(el, next_tok) + else: + iterator.push_back(next_tok) + if el == 'not': + continue + + operator = el + break + + if operator is None: + _syntax_error(el) + continue + + if operator in PythonGrammar.POWER: + check_prio += 1 # to the power of is right-associative + elif operator in PythonGrammar.TERNARY: + try: + middle = [] + for each in iterator: + if each == 'else': + break + middle.append(each) + middle = create_precedence(middle) + except StopIteration: + _syntax_error(operator, 'SyntaxError ternary incomplete') + right = _check_operator(iterator, check_prio) + if right is None and not operator in PythonGrammar.SLICE: + _syntax_error(iterator.current, 'SyntaxError operand missing') + else: + if operator in PythonGrammar.TERNARY: + left = TernaryPrecedence(left, operator, right, middle) + else: + left = Precedence(left, operator, right) + return left + + +def _literals_to_types(evaluator, result): + # Changes literals ('a', 1, 1.0, etc) to its type instances (str(), + # int(), float(), etc). + for i, r in enumerate(result): + if is_literal(r): + # Literals are only valid as long as the operations are + # correct. Otherwise add a value-free instance. + cls = builtin.get_by_name(r.name) + result[i] = evaluator.execute(cls)[0] + return list(set(result)) + + +def calculate(evaluator, left_result, operator, right_result): + result = [] + if left_result is None and right_result: + # cases like `-1` or `1 + ~1` + for right in right_result: + result.append(_factor_calculate(evaluator, operator, right)) + return result + else: + if not left_result or not right_result: + # illegal slices e.g. cause left/right_result to be None + result = (left_result or []) + (right_result or []) + result = _literals_to_types(evaluator, result) + else: + # I don't think there's a reasonable chance that a string + # operation is still correct, once we pass something like six + # objects. + if len(left_result) * len(right_result) > 6: + result = _literals_to_types(evaluator, left_result + right_result) + else: + for left in left_result: + for right in right_result: + result += _element_calculate(evaluator, left, operator, right) + return result + + +def _factor_calculate(evaluator, operator, right): + if _is_number(right): + if operator == '-': + return create(evaluator, -right.obj) + return right + + +def _is_number(obj): + return isinstance(obj, CompiledObject) \ + and isinstance(obj.obj, (int, float)) + + +def _is_string(obj): + return isinstance(obj, CompiledObject) \ + and isinstance(obj.obj, (str, unicode)) + + +def is_literal(obj): + return _is_number(obj) or _is_string(obj) + + +def _is_tuple(obj): + from jedi.evaluate import iterable + return isinstance(obj, iterable.Array) and obj.type == pr.Array.TUPLE + + +def _is_list(obj): + from jedi.evaluate import iterable + return isinstance(obj, iterable.Array) and obj.type == pr.Array.LIST + + +def _element_calculate(evaluator, left, operator, right): + from jedi.evaluate import iterable, representation as er + l_is_num = _is_number(left) + r_is_num = _is_number(right) + if operator == '*': + # for iterables, ignore * operations + if isinstance(left, iterable.Array) or _is_string(left): + return [left] + elif isinstance(right, iterable.Array) or _is_string(right): + return [right] + elif operator == '+': + if l_is_num and r_is_num or _is_string(left) and _is_string(right): + return [create(evaluator, left.obj + right.obj)] + elif _is_tuple(left) and _is_tuple(right) or _is_list(left) and _is_list(right): + return [iterable.MergedArray(evaluator, (left, right))] + elif operator == '-': + if l_is_num and r_is_num: + return [create(evaluator, left.obj - right.obj)] + elif operator == '%': + # With strings and numbers the left type typically remains. Except for + # `int() % float()`. + return [left] + + def check(obj): + """Checks if a Jedi object is either a float or an int.""" + return isinstance(obj, er.Instance) and obj.name in ('int', 'float') + + # Static analysis, one is a number, the other one is not. + if operator in ('+', '-') and l_is_num != r_is_num \ + and not (check(left) or check(right)): + message = "TypeError: unsupported operand type(s) for +: %s and %s" + analysis.add(evaluator, 'type-error-operation', operator, + message % (left, right)) + + return [left, right] diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/precedence.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/precedence.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfe831c5562a83f10f0b86a777c648958c163359 GIT binary patch literal 11434 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. + +Next to :mod:`jedi.evaluate.cache` this module also makes |jedi| not +thread-safe. Why? ``ExecutionRecursionDecorator`` uses class variables to +count the function calls. +""" +from jedi.parser import representation as pr +from jedi import debug +from jedi import settings +from jedi.evaluate import compiled +from jedi.evaluate import iterable + + +def recursion_decorator(func): + def run(evaluator, stmt, *args, **kwargs): + rec_detect = evaluator.recursion_detector + # print stmt, len(self.node_statements()) + if rec_detect.push_stmt(stmt): + return [] + else: + result = func(evaluator, stmt, *args, **kwargs) + rec_detect.pop_stmt() + return result + return run + + +class RecursionDetector(object): + """ + A decorator to detect recursions in statements. In a recursion a statement + at the same place, in the same module may not be executed two times. + """ + def __init__(self): + self.top = None + self.current = None + + def push_stmt(self, stmt): + self.current = _RecursionNode(stmt, self.current) + check = self._check_recursion() + if check: + debug.warning('catched stmt recursion: %s against %s @%s', stmt, + check.stmt, stmt.start_pos) + self.pop_stmt() + return True + return False + + def pop_stmt(self): + if self.current is not None: + # I don't know how current can be None, but sometimes it happens + # with Python3. + self.current = self.current.parent + + def _check_recursion(self): + test = self.current + while True: + test = test.parent + if self.current == test: + return test + if not test: + return False + + def node_statements(self): + result = [] + n = self.current + while n: + result.insert(0, n.stmt) + n = n.parent + return result + + +class _RecursionNode(object): + """ A node of the RecursionDecorator. """ + def __init__(self, stmt, parent): + self.script = stmt.get_parent_until() + self.position = stmt.start_pos + self.parent = parent + self.stmt = stmt + + # Don't check param instances, they are not causing recursions + # The same's true for the builtins, because the builtins are really + # simple. + self.is_ignored = isinstance(stmt, pr.Param) \ + or (self.script == compiled.builtin) + + def __eq__(self, other): + if not other: + return None + + # List Comprehensions start on the same line as its statement. + # Therefore we have the unfortunate situation of the same start_pos for + # two statements. + is_list_comp = lambda x: isinstance(x, pr.ListComprehension) + return self.script == other.script \ + and self.position == other.position \ + and not is_list_comp(self.stmt.parent) \ + and not is_list_comp(other.parent) \ + and not self.is_ignored and not other.is_ignored + + +def execution_recursion_decorator(func): + def run(execution, evaluate_generator=False): + detector = execution._evaluator.execution_recursion_detector + if detector.push_execution(execution, evaluate_generator): + result = [] + else: + result = func(execution, evaluate_generator) + detector.pop_execution() + return result + + return run + + +class ExecutionRecursionDetector(object): + """ + Catches recursions of executions. + It is designed like a Singelton. Only one instance should exist. + """ + def __init__(self): + self.recursion_level = 0 + self.parent_execution_funcs = [] + self.execution_funcs = set() + self.execution_count = 0 + + def __call__(self, execution, evaluate_generator=False): + debug.dbg('Execution recursions: %s', execution, self.recursion_level, + self.execution_count, len(self.execution_funcs)) + if self.check_recursion(execution, evaluate_generator): + result = [] + else: + result = self.func(execution, evaluate_generator) + self.pop_execution() + return result + + def pop_execution(cls): + cls.parent_execution_funcs.pop() + cls.recursion_level -= 1 + + def push_execution(cls, execution, evaluate_generator): + in_par_execution_funcs = execution.base in cls.parent_execution_funcs + in_execution_funcs = execution.base in cls.execution_funcs + cls.recursion_level += 1 + cls.execution_count += 1 + cls.execution_funcs.add(execution.base) + cls.parent_execution_funcs.append(execution.base) + + if cls.execution_count > settings.max_executions: + return True + + if isinstance(execution.base, (iterable.Array, iterable.Generator)): + return False + module = execution.get_parent_until() + if evaluate_generator or module == compiled.builtin: + return False + + if in_par_execution_funcs: + if cls.recursion_level > settings.max_function_recursion_level: + return True + if in_execution_funcs and \ + len(cls.execution_funcs) > settings.max_until_execution_unique: + return True + if cls.execution_count > settings.max_executions_without_builtins: + return True + return False diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/recursion.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/recursion.pyc new file mode 100644 index 0000000000000000000000000000000000000000..091f0415f6e7f08fd7d925ed25b92f03f99fc9ca GIT binary patch literal 7230 zcmcgxTXP&o74F%av}-9!q}Zgu2?NH7LhKcn0td%9wq+AsP$GytfR(VwbOO|j`VwKr|0@zl`W|8 zqS{$>{hsvuYNwC>g8Bj*4^*`yQHH7>)UjU<31~_5Sr;+3rSt z!qw&$H+P4F!InP8;=;c^E|TlJByFf4McFj6dKgFXf!@VdslnFCG{feZarZLy#qxre z;_+8aw2vD-IC%1*@9*y3I|jKHOl-J$SI0#e*`nOt^`}M~Kh7d!{6|rlMtd3hwiv|4 zG?&}^`_nw;*Fj#Enc*P)4?gPcj(7xM(Y8-9zEA-$pSXqB>FP5DPo% zq@xaH`KhPMi)y6Q_A{Br4ks;j(pG)%8c`JR(UQlcE-AXVqXZhj%?x2_tP-)mIm?+dOn!+#8Xwx9F(V-<|qpOmRG1=>{ zXuw%`cd%*;7E(|E`)C(101H{-`ZN3)o$WiZV|FeeT*SU%nC7Vs!%IAa7XuPKQSdg} zRB$2eQ#33Hg9by*J#`8_79!adC4P#LmMVX%K-D4SD;5AFhfs7+9rn~|2a1l>3!?H+ z-)$&tWl_w#*guXe%x(f{jqOZ)*Zs?I4x=c|;Z4xIb=j;_d&L%p4HmcHgM!yNPHz@s zqxdLnAQDhY!e*#{4u2ESmWaUsHcA^#3KLKYVl_S~r`nSAU%={XF-gIBblsOYA=}SY zI022-J1BTqg@NdJ|BJlKSVZm${*L;p{7%({bSNpMa+x{{MB!IJ8zcsB z0+(L_P{^GxedP8JQEJ=Le$ELA=x$-!(FFH%`~zj-Pd*Sd!GAa;3M7w!yP^0eAPwde z2;6?Sq#m5nJ0jbW`z^NKVs#OfGqV(~NZx8==S%h*IO-aTp=qbC@eh_C!W9Nk>sW*V zH_#Y4=PROxjvc=(YIaT702>1~K*ykgEoc{7ZG}Y-SJeZsqEfCDyQuYs10ri^lP;|Q zT9|PL5J5q^}MK3W~-}&YksWj9$d%jx@}un2->WY?=wqOkAcD z8+?2OqdeBO#Z{%4-;bj*8V4juM7%e}rfDwHPfeJPazy>f z8RT+1hh{XK#OEPrLhM&46;fAVm7&Dl)tTF*?H2xLXn>yvIU8aC7X{H#LYti=Jo2Zv6zaw|Hj?qi#-o52^+s^fD)jD@V*MiC!E_YF?U5fJTjj^JG^ z3cim@0=!?R#%>~6DD{EPnGL$2ggYM3^k@#O6^Pu(qVZl5-TXZ-j-n(Q6gL&nAqKp{ z%yI=+xrCI8(-Pnm(2&v+nZQW~YC`5d^SwG{9)|j17(PI&^4dMG)9rh!_*;YLUT5eK zTw?V-R`l7At?}!s?t9(U0la+4#sTd%5tW%&BSz(Px?(IzcESbBAF&Bmd zjl7^<=^P0$Q_V$ux6V5QZX_xox!2sJ zLx%`&U)z->poU2y5<+U;nQ-O*nH9c?qZnz?6ul*`~_ zF5`zr{tk-y396U+K#ddvxuPd2qRSPLBD!2rQbg*KnV^zXY*TUvGfNu`9c6RzDq*{C zeZ1%-+Q4@p(a2IfGe!P3@&TRMA|Lv{$+IUuGBYHE&K>#YpqOR}c7hf8x~%U#+=77^ z41h?G4Y*86i`Yim>t;a{Q$bR{m7-E&5hN07Qk5{nD_UmhWGZjkP!aM;!bsN0*B#>J z#kuFlXxuH z*&78vM<=*lk7POzZm~nIzL-&p5;Br^k+tN9@1q<1jFp%SH0BnCQ~@!c2*dDm98@I~ ztKJ2%8>_GzV%tey8%3D!qd`95A2>`_Db)e{A&U1~^-G0=C%@<1>P@tSLolYoAr}sC z(>OEp1r-_m45hL#%MMUu}dRRv=vV9Qv?}01&&^L!Bx-KI*9Qa|XuSa8~X(drlo9{Y1U2_8nyZ#)pb+POp&R zeD-W9^ACk5Pejd!uQA#y|LGRBRr!^O2bzEgd{yy?ujGgv)S=V!?3%2=<}OTsT^3;+ z_n>6m?as^SMH%J!mB|sAQcoq>-HVJ4C|m*g3)qj6L<0C|GSPVw5EJs^GLDXC4%Gyb zO-uAhc}VbeyDXz8;$=Uo-KqGl;B6j7)C5sM3Rg)=F*_Ok z6hA>&zCJ&HrSNfzA0?(XtkMPJ!pD!WFlh8s%xju6UpcdoDS}>qB;dU zVMc?r<`Hb(z%h*9k^CUoWIEhi8uU9`@^h2KzEBh(mcP6}4tS3U(5=!CqKPx|aOcoR zllt7xG!9E#8Ssrv;9Be*; literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/representation.py b/env/lib/python2.7/site-packages/jedi/evaluate/representation.py new file mode 100644 index 0000000..74ffcda --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/representation.py @@ -0,0 +1,569 @@ +""" +Like described in the :mod:`jedi.evaluate.parsing_representation` module, +there's a need for an ast like module to represent the states of parsed +modules. + +But now there are also structures in Python that need a little bit more than +that. An ``Instance`` for example is only a ``Class`` before it is +instantiated. This class represents these cases. + +So, why is there also a ``Class`` class here? Well, there are decorators and +they change classes in Python 3. +""" +import copy +import os +import pkgutil + +from jedi._compatibility import use_metaclass, unicode +from jedi.parser import representation as pr +from jedi.parser.tokenize import Token +from jedi import debug +from jedi import common +from jedi.evaluate.cache import memoize_default, CachedMetaClass +from jedi.evaluate import compiled +from jedi.evaluate import recursion +from jedi.evaluate import iterable +from jedi.evaluate import docstrings +from jedi.evaluate import helpers +from jedi.evaluate import param + + +class Executable(pr.IsScope): + """ + An instance is also an executable - because __init__ is called + :param var_args: The param input array, consist of `pr.Array` or list. + """ + def __init__(self, evaluator, base, var_args=()): + self._evaluator = evaluator + self.base = base + self.var_args = var_args + + def get_parent_until(self, *args, **kwargs): + return self.base.get_parent_until(*args, **kwargs) + + @common.safe_property + def parent(self): + return self.base.parent + + +class Instance(use_metaclass(CachedMetaClass, Executable)): + """ + This class is used to evaluate instances. + """ + def __init__(self, evaluator, base, var_args=()): + super(Instance, self).__init__(evaluator, base, var_args) + if str(base.name) in ['list', 'set'] \ + and compiled.builtin == base.get_parent_until(): + # compare the module path with the builtin name. + self.var_args = iterable.check_array_instances(evaluator, self) + else: + # need to execute the __init__ function, because the dynamic param + # searching needs it. + with common.ignored(KeyError): + self.execute_subscope_by_name('__init__', self.var_args) + # Generated instances are classes that are just generated by self + # (No var_args) used. + self.is_generated = False + + @memoize_default() + def _get_method_execution(self, func): + func = InstanceElement(self._evaluator, self, func, True) + return FunctionExecution(self._evaluator, func, self.var_args) + + def _get_func_self_name(self, func): + """ + Returns the name of the first param in a class method (which is + normally self. + """ + try: + return str(func.params[0].get_name()) + except IndexError: + return None + + @memoize_default([]) + def get_self_attributes(self): + def add_self_dot_name(name): + """ + Need to copy and rewrite the name, because names are now + ``instance_usage.variable`` instead of ``self.variable``. + """ + n = copy.copy(name) + n.names = n.names[1:] + n._get_code = unicode(n.names[-1]) + names.append(InstanceElement(self._evaluator, self, n)) + + names = [] + # This loop adds the names of the self object, copies them and removes + # the self. + for sub in self.base.subscopes: + if isinstance(sub, pr.Class): + continue + # Get the self name, if there's one. + self_name = self._get_func_self_name(sub) + if not self_name: + continue + + if sub.name.get_code() == '__init__': + # ``__init__`` is special because the params need are injected + # this way. Therefore an execution is necessary. + if not sub.decorators: + # __init__ decorators should generally just be ignored, + # because to follow them and their self variables is too + # complicated. + sub = self._get_method_execution(sub) + for n in sub.get_defined_names(): + # Only names with the selfname are being added. + # It is also important, that they have a len() of 2, + # because otherwise, they are just something else + if unicode(n.names[0]) == self_name and len(n.names) == 2: + add_self_dot_name(n) + + if not isinstance(self.base, compiled.CompiledObject): + for s in self.base.get_super_classes(): + for inst in self._evaluator.execute(s): + names += inst.get_self_attributes() + return names + + def get_subscope_by_name(self, name): + sub = self.base.get_subscope_by_name(name) + return InstanceElement(self._evaluator, self, sub, True) + + def execute_subscope_by_name(self, name, args=()): + method = self.get_subscope_by_name(name) + return self._evaluator.execute(method, args) + + def get_descriptor_return(self, obj): + """ Throws a KeyError if there's no method. """ + # Arguments in __get__ descriptors are obj, class. + # `method` is the new parent of the array, don't know if that's good. + args = [obj, obj.base] if isinstance(obj, Instance) else [None, obj] + return self.execute_subscope_by_name('__get__', args) + + def scope_names_generator(self, position=None): + """ + An Instance has two scopes: The scope with self names and the class + scope. Instance variables have priority over the class scope. + """ + yield self, self.get_self_attributes() + + names = [] + for var in self.base.instance_names(): + names.append(InstanceElement(self._evaluator, self, var, True)) + yield self, names + + def is_callable(self): + try: + self.get_subscope_by_name('__call__') + return True + except KeyError: + return False + + def get_index_types(self, index_array): + + indexes = iterable.create_indexes_or_slices(self._evaluator, index_array) + if any([isinstance(i, iterable.Slice) for i in indexes]): + # Slice support in Jedi is very marginal, at the moment, so just + # ignore them in case of __getitem__. + # TODO support slices in a more general way. + indexes = [] + + index = helpers.FakeStatement(indexes, parent=compiled.builtin) + try: + return self.execute_subscope_by_name('__getitem__', [index]) + except KeyError: + debug.warning('No __getitem__, cannot access the array.') + return [] + + def __getattr__(self, name): + if name not in ['start_pos', 'end_pos', 'name', 'get_imports', + 'doc', 'raw_doc', 'asserts']: + raise AttributeError("Instance %s: Don't touch this (%s)!" + % (self, name)) + return getattr(self.base, name) + + def __repr__(self): + return "" % \ + (type(self).__name__, self.base, len(self.var_args or [])) + + +class InstanceElement(use_metaclass(CachedMetaClass, pr.Base)): + """ + InstanceElement is a wrapper for any object, that is used as an instance + variable (e.g. self.variable or class methods). + """ + def __init__(self, evaluator, instance, var, is_class_var=False): + self._evaluator = evaluator + if isinstance(var, pr.Function): + var = Function(evaluator, var) + elif isinstance(var, pr.Class): + var = Class(evaluator, var) + self.instance = instance + self.var = var + self.is_class_var = is_class_var + + @common.safe_property + @memoize_default() + def parent(self): + par = self.var.parent + if isinstance(par, Class) and par == self.instance.base \ + or isinstance(par, pr.Class) \ + and par == self.instance.base.base: + par = self.instance + elif not isinstance(par, (pr.Module, compiled.CompiledObject)): + par = InstanceElement(self.instance._evaluator, self.instance, par, self.is_class_var) + return par + + def get_parent_until(self, *args, **kwargs): + return pr.Simple.get_parent_until(self, *args, **kwargs) + + def get_decorated_func(self): + """ Needed because the InstanceElement should not be stripped """ + func = self.var.get_decorated_func() + func = InstanceElement(self._evaluator, self.instance, func) + return func + + def expression_list(self): + # Copy and modify the array. + return [InstanceElement(self._evaluator, self.instance, command, self.is_class_var) + if not isinstance(command, (pr.Operator, Token)) else command + for command in self.var.expression_list()] + + def __iter__(self): + for el in self.var.__iter__(): + yield InstanceElement(self.instance._evaluator, self.instance, el, + self.is_class_var) + + def __getitem__(self, index): + return InstanceElement(self._evaluator, self.instance, self.var[index], + self.is_class_var) + + def __getattr__(self, name): + return getattr(self.var, name) + + def isinstance(self, *cls): + return isinstance(self.var, cls) + + def is_callable(self): + return self.var.is_callable() + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self.var) + + +class Class(use_metaclass(CachedMetaClass, pr.IsScope)): + """ + This class is not only important to extend `pr.Class`, it is also a + important for descriptors (if the descriptor methods are evaluated or not). + """ + def __init__(self, evaluator, base): + self._evaluator = evaluator + self.base = base + + @memoize_default(default=()) + def get_super_classes(self): + supers = [] + # TODO care for mro stuff (multiple super classes). + for s in self.base.supers: + # Super classes are statements. + for cls in self._evaluator.eval_statement(s): + if not isinstance(cls, (Class, compiled.CompiledObject)): + debug.warning('Received non class as a super class.') + continue # Just ignore other stuff (user input error). + supers.append(cls) + if not supers and self.base.parent != compiled.builtin: + # add `object` to classes + supers += self._evaluator.find_types(compiled.builtin, 'object') + return supers + + @memoize_default(default=()) + def instance_names(self): + def in_iterable(name, iterable): + """ checks if the name is in the variable 'iterable'. """ + for i in iterable: + # Only the last name is important, because these names have a + # maximal length of 2, with the first one being `self`. + if unicode(i.names[-1]) == unicode(name.names[-1]): + return True + return False + + result = self.base.get_defined_names() + super_result = [] + # TODO mro! + for cls in self.get_super_classes(): + # Get the inherited names. + for i in cls.instance_names(): + if not in_iterable(i, result): + super_result.append(i) + result += super_result + return result + + def scope_names_generator(self, position=None): + yield self, self.instance_names() + yield self, compiled.type_names + + def get_subscope_by_name(self, name): + for s in [self] + self.get_super_classes(): + for sub in reversed(s.subscopes): + if sub.name.get_code() == name: + return sub + raise KeyError("Couldn't find subscope.") + + def is_callable(self): + return True + + @common.safe_property + def name(self): + return self.base.name + + def __getattr__(self, name): + if name not in ['start_pos', 'end_pos', 'parent', 'asserts', 'raw_doc', + 'doc', 'get_imports', 'get_parent_until', 'get_code', + 'subscopes']: + raise AttributeError("Don't touch this: %s of %s !" % (name, self)) + return getattr(self.base, name) + + def __repr__(self): + return "" % (type(self).__name__, self.base) + + +class Function(use_metaclass(CachedMetaClass, pr.IsScope)): + """ + Needed because of decorators. Decorators are evaluated here. + """ + def __init__(self, evaluator, func, is_decorated=False): + """ This should not be called directly """ + self._evaluator = evaluator + self.base_func = func + self.is_decorated = is_decorated + + @memoize_default() + def _decorated_func(self): + """ + Returns the function, that is to be executed in the end. + This is also the places where the decorators are processed. + """ + f = self.base_func + + # Only enter it, if has not already been processed. + if not self.is_decorated: + for dec in reversed(self.base_func.decorators): + debug.dbg('decorator: %s %s', dec, f) + dec_results = self._evaluator.eval_statement(dec) + if not len(dec_results): + debug.warning('decorator not found: %s on %s', dec, self.base_func) + return None + decorator = dec_results.pop() + if dec_results: + debug.warning('multiple decorators found %s %s', + self.base_func, dec_results) + # Create param array. + old_func = Function(self._evaluator, f, is_decorated=True) + + wrappers = self._evaluator.execute(decorator, (old_func,)) + if not len(wrappers): + debug.warning('no wrappers found %s', self.base_func) + return None + if len(wrappers) > 1: + # TODO resolve issue with multiple wrappers -> multiple types + debug.warning('multiple wrappers found %s %s', + self.base_func, wrappers) + f = wrappers[0] + + debug.dbg('decorator end %s', f) + + if isinstance(f, pr.Function): + f = Function(self._evaluator, f, True) + return f + + def get_decorated_func(self): + """ + This function exists for the sole purpose of returning itself if the + decorator doesn't turn out to "work". + + We just ignore the decorator here, because sometimes decorators are + just really complicated and Jedi cannot understand them. + """ + return self._decorated_func() \ + or Function(self._evaluator, self.base_func, True) + + def get_magic_function_names(self): + return compiled.magic_function_class.get_defined_names() + + def get_magic_function_scope(self): + return compiled.magic_function_class + + def is_callable(self): + return True + + def __getattr__(self, name): + return getattr(self.base_func, name) + + def __repr__(self): + dec_func = self._decorated_func() + dec = '' + if not self.is_decorated and self.base_func.decorators: + dec = " is " + repr(dec_func) + return "" % (type(self).__name__, self.base_func, dec) + + +class FunctionExecution(Executable): + """ + This class is used to evaluate functions and their returns. + + This is the most complicated class, because it contains the logic to + transfer parameters. It is even more complicated, because there may be + multiple calls to functions and recursion has to be avoided. But this is + responsibility of the decorators. + """ + @memoize_default(default=()) + @recursion.execution_recursion_decorator + def get_return_types(self, evaluate_generator=False): + func = self.base + # Feed the listeners, with the params. + for listener in func.listeners: + listener.execute(self._get_params()) + if func.listeners: + # If we do have listeners, that means that there's not a regular + # execution ongoing. In this case Jedi is interested in the + # inserted params, not in the actual execution of the function. + return [] + + if func.is_generator and not evaluate_generator: + return [iterable.Generator(self._evaluator, func, self.var_args)] + else: + stmts = list(docstrings.find_return_types(self._evaluator, func)) + for r in self.returns: + if r is not None: + stmts += self._evaluator.eval_statement(r) + return stmts + + @memoize_default(default=()) + def _get_params(self): + """ + This returns the params for an TODO and is injected as a + 'hack' into the pr.Function class. + This needs to be here, because Instance can have __init__ functions, + which act the same way as normal functions. + """ + return param.get_params(self._evaluator, self.base, self.var_args) + + def get_defined_names(self): + """ + Call the default method with the own instance (self implements all + the necessary functions). Add also the params. + """ + return self._get_params() + pr.Scope.get_defined_names(self) + + def scope_names_generator(self, position=None): + names = pr.filter_after_position(pr.Scope.get_defined_names(self), position) + yield self, self._get_params() + names + + def _copy_properties(self, prop): + """ + Literally copies a property of a Function. Copying is very expensive, + because it is something like `copy.deepcopy`. However, these copied + objects can be used for the executions, as if they were in the + execution. + """ + # Copy all these lists into this local function. + attr = getattr(self.base, prop) + objects = [] + for element in attr: + if element is None: + copied = element + else: + copied = helpers.fast_parent_copy(element) + copied.parent = self._scope_copy(copied.parent) + if isinstance(copied, pr.Function): + copied = Function(self._evaluator, copied) + objects.append(copied) + return objects + + def __getattr__(self, name): + if name not in ['start_pos', 'end_pos', 'imports', '_sub_module']: + raise AttributeError('Tried to access %s: %s. Why?' % (name, self)) + return getattr(self.base, name) + + @memoize_default() + def _scope_copy(self, scope): + """ Copies a scope (e.g. if) in an execution """ + # TODO method uses different scopes than the subscopes property. + + # just check the start_pos, sometimes it's difficult with closures + # to compare the scopes directly. + if scope.start_pos == self.start_pos: + return self + else: + copied = helpers.fast_parent_copy(scope) + copied.parent = self._scope_copy(copied.parent) + return copied + + @common.safe_property + @memoize_default([]) + def returns(self): + return self._copy_properties('returns') + + @common.safe_property + @memoize_default([]) + def asserts(self): + return self._copy_properties('asserts') + + @common.safe_property + @memoize_default([]) + def statements(self): + return self._copy_properties('statements') + + @common.safe_property + @memoize_default([]) + def subscopes(self): + return self._copy_properties('subscopes') + + def get_statement_for_position(self, pos): + return pr.Scope.get_statement_for_position(self, pos) + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self.base) + + +class ModuleWrapper(use_metaclass(CachedMetaClass, pr.Module)): + def __init__(self, evaluator, module): + self._evaluator = evaluator + self._module = module + + def scope_names_generator(self, position=None): + yield self, pr.filter_after_position(self._module.get_defined_names(), position) + yield self, self._module_attributes() + sub_modules = self._sub_modules() + if sub_modules: + yield self, self._sub_modules() + + @memoize_default() + def _module_attributes(self): + names = ['__file__', '__package__', '__doc__', '__name__', '__version__'] + # All the additional module attributes are strings. + parent = Instance(self._evaluator, compiled.create(self._evaluator, str)) + return [helpers.FakeName(n, parent) for n in names] + + @memoize_default() + def _sub_modules(self): + """ + Lists modules in the directory of this module (if this module is a + package). + """ + path = self._module.path + names = [] + if path is not None and path.endswith(os.path.sep + '__init__.py'): + mods = pkgutil.iter_modules([os.path.dirname(path)]) + for module_loader, name, is_pkg in mods: + name = helpers.FakeName(name) + # It's obviously a relative import to the current module. + imp = helpers.FakeImport(name, self, level=1) + name.parent = imp + names.append(name) + return names + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self._module) diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/representation.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/representation.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6826740bbee85fd2e611df2399021ab26f41159 GIT binary patch literal 26743 zcmd5_U2GiJb-uH^{8@^UC`zOxTaL!E6;ZNGrFK#~iY(hA?Zl2lJ3}Q*n9$4R?vPw^ zxl8Q~O)|AnG<5!&)Pd1FBq@?K=|lU_pbgrGplE|4KpzSuKpzYAseQ>y9}1)`(4s~9 zeczd%CFP`T0IoxEu4eAsnS1ZK=l`5LEdKQ9&~NYk*X^21eoFZNDIC$?dCt|Hn@8!n zdcie4H;)rLFSz+adR}z%MV%L2v*b4V+ps^UavMk7 z{1LnEcgQMYl@&7ZXEAzhzx z^QY|kh_1)n{Fq%2>w4VHkK6T8U7vRIr|tTfuFtsnGq^tP!m?XC>y|P65%;=td(M4) z{vKC9;le%_qP)lL6?A(vyM3>#pG2qm|Q(24qTz#yo#o4sQc-G<_u73KhTAayR zoOkuJ?4CorC#&^c{obzU?oZ!*E^BdtOE^1mA6NFrSlOW$8tb8752ISAu@u(*M$3;^ zL;w0lyMBFfEvz>t!&j=!t!f-jZdN-{qqS1$gqxi(3R`hCZnRsAKALVd!>dDht`lC0 z{Hosy@uuZ=$FH{hY83lT_F>KZxb0^zP*)M&6Gnb}*=Gk~eaIR{lS4zdwqn24-e$8- z=vR3(qqZN#ovm8Dg+Xw*FYU&wZH~H%#_YI?{^Gb9`b&)%z2Yg{YhifRc+!8mIMu915$-RAmX6X@>1Ucd=H>Cc7D=GC+zdaZ}GcBdM*I{<2{ zP5|%vHOyrN9kAbh0C;qAsPQxW%uE!pxbaaGTTxiq2;-_6#{;ZsHEQj8IDwUS@i7$H zT4*t?z7O@c+v{N~zpRH#TPt?ikGr+@#zwnk9UaH@M!3;#d@8Ke!{zE$Gmcp|RjsXt z^$(%@DUQ`19<+xy8_lq8HD%Ov!rB&a3vbl8*r*YQo$69E8R-ye>g^g99tfDciqlyQ zo10-Lso=1ILe-6!&7ax9OJlyGhAaILF1K(*??DlQrGa)(f`OIDw_XQh0|P6NR_042 zqqTllFN$<vG+K?gQXwkT zs!hyaueh!e`>#|xm1<`tx(=)gNeI;qym}M(U+r|NyI1{MyA?G+N+6TP&CcZ0tX=d$ zVolUe>Q%K8#>Ip4oWc>ENAarXUUja5lY&lgS=0%p?Z62L@tKJtN`bACkbAom^Hod0 z!b@Y1If0chu3!Pc-zrGSjw7E(#`&!@T z>EX{b7(-{5aYP)av)OTmJhaS2_iT3QisqBzU~NKLY)z#H!#;yPA?p7}8aY=i`!8U8#W9E0y3B&NcghWG9XmRhPrcW~U9Rk9PxhkTNr`{*NH0bKbT)kh+s_g0msvL4qRqBJP9Cr1xD$&=FPSE~{PS9ppCnIEK#P#S= z6k;A-!VC-w469B_ozh>%<{;C^_%c>QUu65bPN8H*lu>f!QGPE;dJfbiE8*ui**rlyTGj6mDSxJsDi5Bv&whp!qRt@HFDn}´SQZ>+SSU(|(29}IV& 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/stdlib.py b/env/lib/python2.7/site-packages/jedi/evaluate/stdlib.py new file mode 100644 index 0000000..adb2a3e --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/evaluate/stdlib.py @@ -0,0 +1,131 @@ +""" +Implementations of standard library functions, because it's not possible to +understand them with Jedi. +""" +from jedi._compatibility import unicode +from jedi.evaluate import compiled +from jedi.evaluate import representation as er +from jedi.evaluate import iterable +from jedi.evaluate.helpers import FakeArray, FakeStatement +from jedi.parser import representation as pr +from jedi import debug + + +class NotInStdLib(LookupError): + pass + + +def execute(evaluator, obj, params): + try: + obj_name = str(obj.name) + except AttributeError: + pass + else: + if obj.parent == compiled.builtin: + module_name = 'builtins' + elif isinstance(obj.parent, pr.Module): + module_name = str(obj.parent.name) + else: + module_name = '' + + # for now we just support builtin functions. + try: + return _implemented[module_name][obj_name](evaluator, obj, params) + except KeyError: + pass + raise NotInStdLib() + + +def _follow_param(evaluator, params, index): + try: + stmt = params[index] + except IndexError: + return [] + else: + if isinstance(stmt, pr.Statement): + return evaluator.eval_statement(stmt) + else: + return [stmt] # just some arbitrary object + + +def builtins_getattr(evaluator, obj, params): + stmts = [] + # follow the first param + objects = _follow_param(evaluator, params, 0) + names = _follow_param(evaluator, params, 1) + for obj in objects: + if not isinstance(obj, (er.Instance, er.Class, pr.Module, compiled.CompiledObject)): + debug.warning('getattr called without instance') + continue + + for name in names: + s = unicode, str + if isinstance(name, compiled.CompiledObject) and isinstance(name.obj, s): + stmts += evaluator.follow_path(iter([name.obj]), [obj], obj) + else: + debug.warning('getattr called without str') + continue + return stmts + + +def builtins_type(evaluator, obj, params): + if len(params) == 1: + # otherwise it would be a metaclass... maybe someday... + objects = _follow_param(evaluator, params, 0) + return [o.base for o in objects if isinstance(o, er.Instance)] + return [] + + +def builtins_super(evaluator, obj, params): + # TODO make this able to detect multiple inheritance super + accept = (pr.Function,) + func = params.get_parent_until(accept) + if func.isinstance(*accept): + cls = func.get_parent_until(accept + (pr.Class,), + include_current=False) + if isinstance(cls, pr.Class): + cls = er.Class(evaluator, cls) + su = cls.get_super_classes() + if su: + return evaluator.execute(su[0]) + return [] + + +def builtins_reversed(evaluator, obj, params): + objects = tuple(_follow_param(evaluator, params, 0)) + if objects: + # unpack the iterator values + objects = tuple(iterable.get_iterator_types(objects)) + if objects: + rev = reversed(objects) + # Repack iterator values and then run it the normal way. This is + # necessary, because `reversed` is a function and autocompletion + # would fail in certain cases like `reversed(x).__iter__` if we + # just returned the result directly. + stmts = [FakeStatement([r]) for r in rev] + objects = (iterable.Array(evaluator, FakeArray(stmts, objects[0].parent)),) + return [er.Instance(evaluator, obj, objects)] + + +def _return_first_param(evaluator, obj, params): + if len(params) == 1: + return _follow_param(evaluator, params, 0) + return [] + + +_implemented = { + 'builtins': { + 'getattr': builtins_getattr, + 'type': builtins_type, + 'super': builtins_super, + 'reversed': builtins_reversed, + }, + 'copy': { + 'copy': _return_first_param, + 'deepcopy': _return_first_param, + }, + 'json': { + 'load': lambda *args: [], + 'loads': lambda *args: [], + }, +} diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/stdlib.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/stdlib.pyc new file mode 100644 index 0000000000000000000000000000000000000000..adae2d94fd93c687e89a1a323e17c1c5b0bc6cea GIT binary patch literal 4698 zcmcInO>Z056}>}Jlt_Kqk|kM*+cIttvvndhEubt~7>(RIP~s@XD1}`D4Kd_ANka{1 zsCkdJ2*^NNbyakg0$z02U3dKhUG`7pcLd!PXwSKiAE}W7T|}bh&HI}7?woV(y>H52 zF4zBX^{-F6GXAUJ{!?6bClHB6S||gFOOgiCFG;H;0o!Fs%hIn%tK!=gZO=)o>f3YL zo|o3VZ&xK{XNBi(HBPs&zx+ zIvcH<5-)0HP2wf3tV_JCm0J?8Xk|mh{5EWvS%=L4L3|&#|_hN z$zHr6dr3*mmc*Or#BB?msG>8z&1K?kbiAgu*HOD8d#&3Ne@l*<-zILSDC!6OL2CLY zbCFB(%r^4lhILUEM@8I7lTHy8qsH+t>+0y+jgIL?Lu(p|yJs6&?iz#K+N6`3hRf^2 zEH;Hc-EgO--*}$5)5eD;PIl_azwy@uQR3!N46~%0$HsRoprf1j2T5vT-?M_A!VC&y zCx*>tCe9QQHf)x-SPjLa=*+xd6w$~nk6TB08+|GN*c`fJ(;1$)Mbr*+caR;q_;J#i zYKeyJUx?R3T=s7$M(g54E(7TWauvvnvOLLdO2w7rtS-e{5(GhZDNi|}EUqHG zIXNpyu}_bAQIYHi;;Q;MM(3rsAXgYoCu^1`%VK7g9)?FocL@GvMYb=?xODT&l3bPL z$ZuWOt^cB12l5oq!!dpbClTn6FLCIIYG;_FF3Bv+2iQv}90#o{V5SHmcYOW#ohy>g z(3zhXMP9&KkwH{I9^q6}l$Eyss4$Nl{3d(+Q~%tCRRf}G9z7D0dEpr z71x*%Y)P~7PH(bx)VKN^x>Ojdt+6O*^-LGvv?SDn%!TO!jWrl$@1T&N9IOY+L8Y`7 z)Pjv*qf{-IgFEc;njxA~&3uf;XoZY}vu%~j8ss9%*o_O<^# z2TtF-f#L8C7SxS8uPM~g4kiw*Do!J7RaN0SCuo9U4%w7Mc3A3Io8DIMO1ln@vN5Z9@Znu0q2g#N3yhzs$!6q+chM7mmqyU>JCQZ2 zs8?VQzt0(jHNQq!$=wuIHyW4^(4ofx3D$t=+aAAp^wL;${6C`t{E%~T_=CH^@q0i= z-4wo0T+msTKjJj=Qky!;M=E?|3z$PbS3!Wd07T)?evG)jWJ+eN1^Ac)-=1To2OmbP zLAI_+@h5fT1=f+3x547k`AbHJ84K`m2GMRhj7_^cESNGqDLgv)xJ<1-8lUkT^#xfm z24ZS^i0P^NV)!OTRPB$V)EZ^a(MdVm4hN=acj=XIgxAsABvh|Zskt-icFn*k<$AEB zF1o2zSGU7!q?qAhO0gRJ33@E^jg*#xRs1%QJLx}5K{eQ#F;4v|<9|g36ftaj7tv4& z+{u1fiqCaa!?~Bie+^9%C$s^AGz)ByR)7j-eF&x-J=U0xRlqVfnD9w zEAISrvhC9YErMN8pHItra`n-<$uOtXxgn1G-UW%fV_qhIda8DL(WdnM!KN_JaELW= zsAnM-ddLnnNmErb|NT0yz1wmVETryRgx^E!8VRNtrvy*T{|ud$qL$z`BH{*^U7EWa z-1qF#zNtUIg$CH=F?Jdc?|y}Bf4rUf)>k4N51HW(3+65jfUju(8sD24uw588EVA}- zf-f+CfPpf^Qo4v>!HqzZ);M9P_mOH9h5ADH024!=-E^><<3nWut=O0W8(q|eQJB{U zxGZr~FxYeG-;Y&&J}OSGGYitPpQKU06GsnzgSy4#H%{{?{{L+a5AfXeQ4@ZM<$sII z+eas&eO4jr**rUJZlh1BX}9CNi_c54$&bOEHb08-S>8#~#EtaiqF=Z=IQdf4lTWDf z({xHfyN$^blUX~bCPjd@-g(ub84`3Q1bTd}`b>> sys.path[0:0] = ['module/path', 'another/module/path'] + """ + + names = statement.get_defined_names() + if len(names) != 1: + return [] + if [unicode(x) for x in names[0].names] != ['sys', 'path']: + return [] + expressions = statement.expression_list() + if len(expressions) != 1 or not isinstance(expressions[0], pr.Array): + return + stmts = (s for s in expressions[0].values if isinstance(s, pr.Statement)) + expression_lists = (s.expression_list() for s in stmts) + return [e.value for exprs in expression_lists for e in exprs + if isinstance(e, pr.Literal) and e.value] + + +def _paths_from_insert(module_path, exe): + """ extract the inserted module path from an "sys.path.insert" statement + """ + exe_type, exe.type = exe.type, pr.Array.NOARRAY + exe_pop = exe.values.pop(0) + res = _execute_code(module_path, exe.get_code()) + exe.type = exe_type + exe.values.insert(0, exe_pop) + return res + + +def _paths_from_call_expression(module_path, call): + """ extract the path from either "sys.path.append" or "sys.path.insert" """ + if call.execution is None: + return + n = call.name + if not isinstance(n, pr.Name) or len(n.names) != 3: + return + names = [unicode(x) for x in n.names] + if names[:2] != ['sys', 'path']: + return + cmd = names[2] + exe = call.execution + if cmd == 'insert' and len(exe) == 2: + path = _paths_from_insert(module_path, exe) + elif cmd == 'append' and len(exe) == 1: + path = _execute_code(module_path, exe.get_code()) + return path and [path] or [] + + +def _check_module(module): + try: + possible_stmts = module.used_names['path'] + except KeyError: + return get_sys_path() + sys_path = list(get_sys_path()) # copy + statements = (p for p in possible_stmts if isinstance(p, pr.Statement)) + for stmt in statements: + expressions = stmt.expression_list() + if len(expressions) == 1 and isinstance(expressions[0], pr.Call): + sys_path.extend( + _paths_from_call_expression(module.path, expressions[0]) or []) + elif ( + hasattr(stmt, 'assignment_details') and + len(stmt.assignment_details) == 1 + ): + sys_path.extend(_paths_from_assignment(stmt) or []) + return sys_path + + +@memoize_default(evaluator_is_first_arg=True) +def sys_path_with_modifications(evaluator, module): + if module.path is None: + # Support for modules without a path is bad, therefore return the + # normal path. + return list(get_sys_path()) + + curdir = os.path.abspath(os.curdir) + with common.ignored(OSError): + os.chdir(os.path.dirname(module.path)) + + result = _check_module(module) + result += _detect_django_path(module.path) + # buildout scripts often contain the same sys.path modifications + # the set here is used to avoid duplicate sys.path entries + buildout_paths = set() + for module_path in _get_buildout_scripts(module.path): + try: + with open(module_path, 'rb') as f: + source = f.read() + except IOError: + pass + else: + p = Parser(common.source_to_unicode(source), module_path) + for path in _check_module(p.module): + if path not in buildout_paths: + buildout_paths.add(path) + result.append(path) + # cleanup, back to old directory + os.chdir(curdir) + return list(result) + + +def _traverse_parents(path): + while True: + new = os.path.dirname(path) + if new == path: + return + path = new + yield path + + +def _get_parent_dir_with_file(path, filename): + for parent in _traverse_parents(path): + if os.path.isfile(os.path.join(parent, filename)): + return parent + return None + + +def _detect_django_path(module_path): + """ Detects the path of the very well known Django library (if used) """ + result = [] + + for parent in _traverse_parents(module_path): + with common.ignored(IOError): + with open(parent + os.path.sep + 'manage.py'): + debug.dbg('Found django path: %s', module_path) + result.append(parent) + return result + + +def _get_buildout_scripts(module_path): + """ + if there is a 'buildout.cfg' file in one of the parent directories of the + given module it will return a list of all files in the buildout bin + directory that look like python files. + + :param module_path: absolute path to the module. + :type module_path: str + """ + project_root = _get_parent_dir_with_file(module_path, 'buildout.cfg') + if not project_root: + return [] + bin_path = os.path.join(project_root, 'bin') + if not os.path.exists(bin_path): + return [] + extra_module_paths = [] + for filename in os.listdir(bin_path): + try: + filepath = os.path.join(bin_path, filename) + with open(filepath, 'r') as f: + firstline = f.readline() + if firstline.startswith('#!') and 'python' in firstline: + extra_module_paths.append(filepath) + except IOError as e: + # either permission error or race cond. because file got deleted + # ignore + debug.warning(unicode(e)) + continue + return extra_module_paths diff --git a/env/lib/python2.7/site-packages/jedi/evaluate/sys_path.pyc b/env/lib/python2.7/site-packages/jedi/evaluate/sys_path.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5f230fd1879f38f226d9073f4fa96bbc464a7bd GIT binary patch literal 8392 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" % (type(self).__name__, self.module) + + def _check_user_stmt(self, simple): + # this is not user checking, just update the used_names + for tok_name in self.module.temp_used_names: + try: + self.module.used_names[tok_name].add(simple) + except KeyError: + self.module.used_names[tok_name] = set([simple]) + self.module.temp_used_names = [] + + def _parse_dot_name(self, pre_used_token=None): + """ + The dot name parser parses a name, variable or function and returns + their names. + + :return: tuple of Name, next_token + """ + def append(el): + names.append(el) + self.module.temp_used_names.append(el[0]) + + names = [] + tok = next(self._gen) if pre_used_token is None else pre_used_token + + if tok.type != tokenize.NAME and tok.string != '*': + return None, tok + + first_pos = tok.start_pos + append((tok.string, first_pos)) + while True: + end_pos = tok.end_pos + tok = next(self._gen) + if tok.string != '.': + break + tok = next(self._gen) + if tok.type != tokenize.NAME: + break + append((tok.string, tok.start_pos)) + + n = pr.Name(self.module, names, first_pos, end_pos) if names else None + return n, tok + + def _parse_import_list(self): + """ + The parser for the imports. Unlike the class and function parse + function, this returns no Import class, but rather an import list, + which is then added later on. + The reason, why this is not done in the same class lies in the nature + of imports. There are two ways to write them: + + - from ... import ... + - import ... + + To distinguish, this has to be processed after the parser. + + :return: List of imports. + :rtype: list + """ + imports = [] + brackets = False + continue_kw = [",", ";", "\n", '\r\n', ')'] \ + + list(set(keyword.kwlist) - set(['as'])) + while True: + defunct = False + tok = next(self._gen) + if tok.string == '(': # python allows only one `(` in the statement. + brackets = True + tok = next(self._gen) + if brackets and tok.type == tokenize.NEWLINE: + tok = next(self._gen) + i, tok = self._parse_dot_name(tok) + if not i: + defunct = True + name2 = None + if tok.string == 'as': + name2, tok = self._parse_dot_name() + imports.append((i, name2, defunct)) + while tok.string not in continue_kw: + tok = next(self._gen) + if not (tok.string == "," or brackets and tok.type == tokenize.NEWLINE): + break + return imports + + def _parse_parentheses(self): + """ + Functions and Classes have params (which means for classes + super-classes). They are parsed here and returned as Statements. + + :return: List of Statements + :rtype: list + """ + names = [] + tok = None + pos = 0 + breaks = [',', ':'] + while tok is None or tok.string not in (')', ':'): + param, tok = self._parse_statement(added_breaks=breaks, + stmt_class=pr.Param) + if param and tok.string == ':': + # parse annotations + annotation, tok = self._parse_statement(added_breaks=breaks) + if annotation: + param.add_annotation(annotation) + + # params without vars are usually syntax errors. + if param and (param.get_defined_names()): + param.position_nr = pos + names.append(param) + pos += 1 + + return names + + def _parse_function(self): + """ + The parser for a text functions. Process the tokens, which follow a + function definition. + + :return: Return a Scope representation of the tokens. + :rtype: Function + """ + first_pos = self._gen.current.start_pos + tok = next(self._gen) + if tok.type != tokenize.NAME: + return None + + fname = pr.Name(self.module, [(tok.string, tok.start_pos)], tok.start_pos, + tok.end_pos) + + tok = next(self._gen) + if tok.string != '(': + return None + params = self._parse_parentheses() + + colon = next(self._gen) + annotation = None + if colon.string in ('-', '->'): + # parse annotations + if colon.string == '-': + # The Python 2 tokenizer doesn't understand this + colon = next(self._gen) + if colon.string != '>': + return None + annotation, colon = self._parse_statement(added_breaks=[':']) + + if colon.string != ':': + return None + + # because of 2 line func param definitions + return pr.Function(self.module, fname, params, first_pos, annotation) + + def _parse_class(self): + """ + The parser for a text class. Process the tokens, which follow a + class definition. + + :return: Return a Scope representation of the tokens. + :rtype: Class + """ + first_pos = self._gen.current.start_pos + cname = next(self._gen) + if cname.type != tokenize.NAME: + debug.warning("class: syntax err, token is not a name@%s (%s: %s)", + cname.start_pos[0], tokenize.tok_name[cname.type], cname.string) + return None + + cname = pr.Name(self.module, [(cname.string, cname.start_pos)], + cname.start_pos, cname.end_pos) + + super = [] + _next = next(self._gen) + if _next.string == '(': + super = self._parse_parentheses() + _next = next(self._gen) + + if _next.string != ':': + debug.warning("class syntax: %s@%s", cname, _next.start_pos[0]) + return None + + return pr.Class(self.module, cname, super, first_pos) + + def _parse_statement(self, pre_used_token=None, added_breaks=None, + stmt_class=pr.Statement, names_are_set_vars=False): + """ + Parses statements like:: + + a = test(b) + a += 3 - 2 or b + + and so on. One line at a time. + + :param pre_used_token: The pre parsed token. + :type pre_used_token: set + :return: Statement + last parsed token. + :rtype: (Statement, str) + """ + set_vars = [] + level = 0 # The level of parentheses + + if pre_used_token: + tok = pre_used_token + else: + tok = next(self._gen) + + while tok.type == tokenize.COMMENT: + # remove newline and comment + next(self._gen) + tok = next(self._gen) + + first_pos = tok.start_pos + opening_brackets = ['{', '(', '['] + closing_brackets = ['}', ')', ']'] + + # the difference between "break" and "always break" is that the latter + # will even break in parentheses. This is true for typical flow + # commands like def and class and the imports, which will never be used + # in a statement. + breaks = set(['\n', '\r\n', ':', ')']) + always_break = [';', 'import', 'from', 'class', 'def', 'try', 'except', + 'finally', 'while', 'return', 'yield'] + not_first_break = ['del', 'raise'] + if added_breaks: + breaks |= set(added_breaks) + + tok_list = [] + as_names = [] + in_lambda_param = False + while not (tok.string in always_break + or tok.string in not_first_break and not tok_list + or tok.string in breaks and level <= 0 + and not (in_lambda_param and tok.string in ',:')): + try: + # print 'parse_stmt', tok, tokenize.tok_name[token_type] + is_kw = tok.string in OPERATOR_KEYWORDS + if tok.type == tokenize.OP or is_kw: + tok_list.append( + pr.Operator(self.module, tok.string, self._scope, tok.start_pos) + ) + else: + tok_list.append(tok) + + if tok.string == 'as': + tok = next(self._gen) + if tok.type == tokenize.NAME: + n, tok = self._parse_dot_name(self._gen.current) + if n: + set_vars.append(n) + as_names.append(n) + tok_list.append(n) + continue + elif tok.string == 'lambda': + breaks.discard(':') + in_lambda_param = True + elif in_lambda_param and tok.string == ':': + in_lambda_param = False + elif tok.type == tokenize.NAME and not is_kw: + n, tok = self._parse_dot_name(self._gen.current) + # removed last entry, because we add Name + tok_list.pop() + if n: + tok_list.append(n) + continue + elif tok.string in opening_brackets: + level += 1 + elif tok.string in closing_brackets: + level -= 1 + + tok = next(self._gen) + except (StopIteration, common.MultiLevelStopIteration): + # comes from tokenizer + break + + if not tok_list: + return None, tok + + first_tok = tok_list[0] + # docstrings + if len(tok_list) == 1 and isinstance(first_tok, tokenize.Token) \ + and first_tok.type == tokenize.STRING: + # Normal docstring check + if self.freshscope and not self.no_docstr: + self._scope.add_docstr(first_tok) + return None, tok + + # Attribute docstring (PEP 224) support (sphinx uses it, e.g.) + # If string literal is being parsed... + elif first_tok.type == tokenize.STRING: + with common.ignored(IndexError, AttributeError): + # ...then set it as a docstring + self._scope.statements[-1].add_docstr(first_tok) + return None, tok + + stmt = stmt_class(self.module, tok_list, first_pos, tok.end_pos, + as_names=as_names, + names_are_set_vars=names_are_set_vars) + + stmt.parent = self._top_module + self._check_user_stmt(stmt) + + if tok.string in always_break + not_first_break: + self._gen.push_last_back() + return stmt, tok + + def _parse(self): + """ + The main part of the program. It analyzes the given code-text and + returns a tree-like scope. For a more detailed description, see the + class description. + + :param text: The code which should be parsed. + :param type: str + + :raises: IndentationError + """ + extended_flow = ['else', 'elif', 'except', 'finally'] + statement_toks = ['{', '[', '(', '`'] + + self._decorators = [] + self.freshscope = True + for tok in self._gen: + token_type = tok.type + tok_str = tok.string + first_pos = tok.start_pos + self.module.temp_used_names = [] + # debug.dbg('main: tok=[%s] type=[%s] indent=[%s]', \ + # tok, tokenize.tok_name[token_type], start_position[0]) + + # check again for unindented stuff. this is true for syntax + # errors. only check for names, because thats relevant here. If + # some docstrings are not indented, I don't care. + while first_pos[1] <= self._scope.start_pos[1] \ + and (token_type == tokenize.NAME or tok_str in ('(', '['))\ + and self._scope != self.module: + self._scope.end_pos = first_pos + self._scope = self._scope.parent + if isinstance(self._scope, pr.Module) \ + and not isinstance(self._scope, pr.SubModule): + self._scope = self.module + + if isinstance(self._scope, pr.SubModule): + use_as_parent_scope = self._top_module + else: + use_as_parent_scope = self._scope + if tok_str == 'def': + func = self._parse_function() + if func is None: + debug.warning("function: syntax error@%s", first_pos[0]) + continue + self.freshscope = True + self._scope = self._scope.add_scope(func, self._decorators) + self._decorators = [] + elif tok_str == 'class': + cls = self._parse_class() + if cls is None: + debug.warning("class: syntax error@%s" % first_pos[0]) + continue + self.freshscope = True + self._scope = self._scope.add_scope(cls, self._decorators) + self._decorators = [] + # import stuff + elif tok_str == 'import': + imports = self._parse_import_list() + for count, (m, alias, defunct) in enumerate(imports): + e = (alias or m or self._gen.previous).end_pos + end_pos = self._gen.previous.end_pos if count + 1 == len(imports) else e + i = pr.Import(self.module, first_pos, end_pos, m, + alias, defunct=defunct) + self._check_user_stmt(i) + self._scope.add_import(i) + if not imports: + i = pr.Import(self.module, first_pos, self._gen.current.end_pos, + None, defunct=True) + self._check_user_stmt(i) + self.freshscope = False + elif tok_str == 'from': + defunct = False + # take care for relative imports + relative_count = 0 + while True: + tok = next(self._gen) + if tok.string != '.': + break + relative_count += 1 + # the from import + mod, tok = self._parse_dot_name(self._gen.current) + tok_str = tok.string + if str(mod) == 'import' and relative_count: + self._gen.push_last_back() + tok_str = 'import' + mod = None + if not mod and not relative_count or tok_str != "import": + debug.warning("from: syntax error@%s", tok.start_pos[0]) + defunct = True + if tok_str != 'import': + self._gen.push_last_back() + names = self._parse_import_list() + for count, (name, alias, defunct2) in enumerate(names): + star = name is not None and unicode(name.names[0]) == '*' + if star: + name = None + e = (alias or name or self._gen.previous).end_pos + end_pos = self._gen.previous.end_pos if count + 1 == len(names) else e + i = pr.Import(self.module, first_pos, end_pos, name, + alias, mod, star, relative_count, + defunct=defunct or defunct2) + self._check_user_stmt(i) + self._scope.add_import(i) + self.freshscope = False + # loops + elif tok_str == 'for': + set_stmt, tok = self._parse_statement(added_breaks=['in'], + names_are_set_vars=True) + if tok.string != 'in': + debug.warning('syntax err, for flow incomplete @%s', tok.start_pos[0]) + + try: + statement, tok = self._parse_statement() + except StopIteration: + statement, tok = None, None + s = [] if statement is None else [statement] + f = pr.ForFlow(self.module, s, first_pos, set_stmt) + self._scope = self._scope.add_statement(f) + if tok is None or tok.string != ':': + debug.warning('syntax err, for flow started @%s', first_pos[0]) + elif tok_str in ['if', 'while', 'try', 'with'] + extended_flow: + added_breaks = [] + command = tok_str + if command in ('except', 'with'): + added_breaks.append(',') + # multiple inputs because of with + inputs = [] + first = True + while first or command == 'with' and tok.string not in (':', '\n', '\r\n'): + statement, tok = \ + self._parse_statement(added_breaks=added_breaks) + if command == 'except' and tok.string == ',': + # the except statement defines a var + # this is only true for python 2 + n, tok = self._parse_dot_name() + if n: + n.parent = statement + statement.as_names.append(n) + if statement: + inputs.append(statement) + first = False + + f = pr.Flow(self.module, command, inputs, first_pos) + if command in extended_flow: + # the last statement has to be another part of + # the flow statement, because a dedent releases the + # main scope, so just take the last statement. + try: + s = self._scope.statements[-1].set_next(f) + except (AttributeError, IndexError): + # If set_next doesn't exist, just add it. + s = self._scope.add_statement(f) + else: + s = self._scope.add_statement(f) + self._scope = s + if tok.string != ':': + debug.warning('syntax err, flow started @%s', tok.start_pos[0]) + # returns + elif tok_str in ('return', 'yield'): + s = tok.start_pos + self.freshscope = False + # add returns to the scope + func = self._scope.get_parent_until(pr.Function) + if tok_str == 'yield': + func.is_generator = True + + stmt, tok = self._parse_statement() + if stmt is not None: + stmt.parent = use_as_parent_scope + try: + func.statements.append(pr.KeywordStatement(tok_str, s, + use_as_parent_scope, stmt)) + func.returns.append(stmt) + # start_pos is the one of the return statement + stmt.start_pos = s + except AttributeError: + debug.warning('return in non-function') + elif tok_str == 'assert': + stmt, tok = self._parse_statement() + if stmt is not None: + stmt.parent = use_as_parent_scope + self._scope.statements.append(stmt) + self._scope.asserts.append(stmt) + elif tok_str in STATEMENT_KEYWORDS: + stmt, _ = self._parse_statement() + kw = pr.KeywordStatement(tok_str, tok.start_pos, + use_as_parent_scope, stmt) + self._scope.add_statement(kw) + if stmt is not None and tok_str == 'global': + for t in stmt._token_list: + if isinstance(t, pr.Name): + # Add the global to the top module, it counts there. + self.module.add_global(t) + # decorator + elif tok_str == '@': + stmt, tok = self._parse_statement() + if stmt is not None: + self._decorators.append(stmt) + elif tok_str == 'pass': + continue + # default + elif token_type in (tokenize.NAME, tokenize.STRING, + tokenize.NUMBER, tokenize.OP) \ + or tok_str in statement_toks: + # this is the main part - a name can be a function or a + # normal var, which can follow anything. but this is done + # by the statement parser. + stmt, tok = self._parse_statement(self._gen.current) + if stmt: + self._scope.add_statement(stmt) + self.freshscope = False + else: + if token_type not in (tokenize.COMMENT, tokenize.NEWLINE, tokenize.ENDMARKER): + debug.warning('Token not used: %s %s %s', tok_str, + tokenize.tok_name[token_type], first_pos) + continue + self.no_docstr = False + + +class PushBackTokenizer(object): + def __init__(self, tokenizer): + self._tokenizer = tokenizer + self._push_backs = [] + self.current = self.previous = tokenize.Token(None, '', (0, 0)) + + def push_last_back(self): + self._push_backs.append(self.current) + + def next(self): + """ Python 2 Compatibility """ + return self.__next__() + + def __next__(self): + if self._push_backs: + return self._push_backs.pop(0) + + previous = self.current + self.current = next(self._tokenizer) + self.previous = previous + return self.current + + def __iter__(self): + return self diff --git a/env/lib/python2.7/site-packages/jedi/parser/__init__.pyc b/env/lib/python2.7/site-packages/jedi/parser/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b02459226b436f439ba322f48d57d0d8ea729a5e GIT binary patch literal 18119 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

-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" % (type(self).__name__, self.name, + self.start_pos[0], self.end_pos[0]) + + +class CachedFastParser(type): + """ This is a metaclass for caching `FastParser`. """ + def __call__(self, source, module_path=None): + if not settings.fast_parser: + return Parser(source, module_path) + + pi = cache.parser_cache.get(module_path, None) + if pi is None or isinstance(pi.parser, Parser): + p = super(CachedFastParser, self).__call__(source, module_path) + else: + p = pi.parser # pi is a `cache.ParserCacheItem` + p.update(source) + return p + + +class ParserNode(object): + def __init__(self, parser, code, parent=None): + self.parent = parent + + self.children = [] + # must be created before new things are added to it. + self.save_contents(parser, code) + + def save_contents(self, parser, code): + self.code = code + self.hash = hash(code) + self.parser = parser + + try: + # with fast_parser we have either 1 subscope or only statements. + self.content_scope = parser.module.subscopes[0] + except IndexError: + self.content_scope = parser.module + + scope = self.content_scope + self._contents = {} + for c in pr.SCOPE_CONTENTS: + self._contents[c] = list(getattr(scope, c)) + self._is_generator = scope.is_generator + + self.old_children = self.children + self.children = [] + + def reset_contents(self): + scope = self.content_scope + for key, c in self._contents.items(): + setattr(scope, key, list(c)) + scope.is_generator = self._is_generator + + if self.parent is None: + # Global vars of the first one can be deleted, in the global scope + # they make no sense. + self.parser.module.global_vars = [] + + for c in self.children: + c.reset_contents() + + def parent_until_indent(self, indent=None): + if indent is None or self.indent >= indent and self.parent: + self.old_children = [] + if self.parent is not None: + return self.parent.parent_until_indent(indent) + return self + + @property + def indent(self): + if not self.parent: + return 0 + module = self.parser.module + try: + el = module.subscopes[0] + except IndexError: + try: + el = module.statements[0] + except IndexError: + try: + el = module.imports[0] + except IndexError: + try: + el = [r for r in module.returns if r is not None][0] + except IndexError: + return self.parent.indent + 1 + return el.start_pos[1] + + def _set_items(self, parser, set_parent=False): + # insert parser objects into current structure + scope = self.content_scope + for c in pr.SCOPE_CONTENTS: + content = getattr(scope, c) + items = getattr(parser.module, c) + if set_parent: + for i in items: + if i is None: + continue # happens with empty returns + i.parent = scope.use_as_parent + if isinstance(i, (pr.Function, pr.Class)): + for d in i.decorators: + d.parent = scope.use_as_parent + content += items + + # global_vars + cur = self + while cur.parent is not None: + cur = cur.parent + cur.parser.module.global_vars += parser.module.global_vars + + scope.is_generator |= parser.module.is_generator + + def add_node(self, node, set_parent=False): + """Adding a node means adding a node that was already added earlier""" + self.children.append(node) + self._set_items(node.parser, set_parent=set_parent) + node.old_children = node.children # TODO potential memory leak? + node.children = [] + + scope = self.content_scope + while scope is not None: + #print('x',scope) + if not isinstance(scope, pr.SubModule): + # TODO This seems like a strange thing. Check again. + scope.end_pos = node.content_scope.end_pos + scope = scope.parent + return node + + def add_parser(self, parser, code): + return self.add_node(ParserNode(parser, code, self), True) + + +class FastParser(use_metaclass(CachedFastParser)): + + _keyword_re = re.compile('^[ \t]*(def|class|@|%s)' % '|'.join(tokenize.FLOWS)) + + def __init__(self, code, module_path=None): + # set values like `pr.Module`. + self.module_path = module_path + + self.current_node = None + self.parsers = [] + self.module = Module(self.parsers) + self.reset_caches() + + try: + self._parse(code) + except: + # FastParser is cached, be careful with exceptions + del self.parsers[:] + raise + + def update(self, code): + self.reset_caches() + + try: + self._parse(code) + except: + # FastParser is cached, be careful with exceptions + del self.parsers[:] + raise + + def _split_parts(self, code): + """ + Split the code into different parts. This makes it possible to parse + each part seperately and therefore cache parts of the file and not + everything. + """ + def gen_part(): + text = '\n'.join(current_lines) + del current_lines[:] + return text + + # Split only new lines. Distinction between \r\n is the tokenizer's + # job. + self._lines = code.split('\n') + current_lines = [] + is_decorator = False + current_indent = 0 + old_indent = 0 + new_indent = False + in_flow = False + # All things within flows are simply being ignored. + for l in self._lines: + # check for dedents + s = l.lstrip('\t ') + indent = len(l) - len(s) + if not s or s[0] in ('#', '\r'): + current_lines.append(l) # just ignore comments and blank lines + continue + + if indent < current_indent: # -> dedent + current_indent = indent + new_indent = False + if not in_flow or indent < old_indent: + if current_lines: + yield gen_part() + in_flow = False + elif new_indent: + current_indent = indent + new_indent = False + + # Check lines for functions/classes and split the code there. + if not in_flow: + m = self._keyword_re.match(l) + if m: + in_flow = m.group(1) in tokenize.FLOWS + if not is_decorator and not in_flow: + if current_lines: + yield gen_part() + is_decorator = '@' == m.group(1) + if not is_decorator: + old_indent = current_indent + current_indent += 1 # it must be higher + new_indent = True + elif is_decorator: + is_decorator = False + + current_lines.append(l) + if current_lines: + yield gen_part() + + def _parse(self, code): + """ :type code: str """ + def empty_parser(): + new, temp = self._get_parser(unicode(''), unicode(''), 0, [], False) + return new + + del self.parsers[:] + + line_offset = 0 + start = 0 + p = None + is_first = True + for code_part in self._split_parts(code): + if is_first or line_offset >= p.module.end_pos[0]: + indent = len(code_part) - len(code_part.lstrip('\t ')) + if is_first and self.current_node is not None: + nodes = [self.current_node] + else: + nodes = [] + if self.current_node is not None: + self.current_node = \ + self.current_node.parent_until_indent(indent) + nodes += self.current_node.old_children + + # check if code_part has already been parsed + # print '#'*45,line_offset, p and p.module.end_pos, '\n', code_part + p, node = self._get_parser(code_part, code[start:], + line_offset, nodes, not is_first) + + # The actual used code_part is different from the given code + # part, because of docstrings for example there's a chance that + # splits are wrong. + used_lines = self._lines[line_offset:p.module.end_pos[0]] + code_part_actually_used = '\n'.join(used_lines) + + if is_first and p.module.subscopes: + # special case, we cannot use a function subscope as a + # base scope, subscopes would save all the other contents + new = empty_parser() + if self.current_node is None: + self.current_node = ParserNode(new, '') + else: + self.current_node.save_contents(new, '') + self.parsers.append(new) + is_first = False + + if is_first: + if self.current_node is None: + self.current_node = ParserNode(p, code_part_actually_used) + else: + self.current_node.save_contents(p, code_part_actually_used) + else: + if node is None: + self.current_node = \ + self.current_node.add_parser(p, code_part_actually_used) + else: + self.current_node = self.current_node.add_node(node) + + self.parsers.append(p) + + is_first = False + #else: + #print '#'*45, line_offset, p.module.end_pos, 'theheck\n', repr(code_part) + + line_offset += code_part.count('\n') + 1 + start += len(code_part) + 1 # +1 for newline + + if self.parsers: + self.current_node = self.current_node.parent_until_indent() + else: + self.parsers.append(empty_parser()) + + self.module.end_pos = self.parsers[-1].module.end_pos + + # print(self.parsers[0].module.get_code()) + + def _get_parser(self, code, parser_code, line_offset, nodes, no_docstr): + h = hash(code) + for index, node in enumerate(nodes): + if node.hash != h or node.code != code: + continue + + if node != self.current_node: + offset = int(nodes[0] == self.current_node) + self.current_node.old_children.pop(index - offset) + p = node.parser + m = p.module + m.line_offset += line_offset + 1 - m.start_pos[0] + break + else: + tokenizer = FastTokenizer(parser_code, line_offset) + p = Parser(parser_code, self.module_path, tokenizer=tokenizer, + top_module=self.module, no_docstr=no_docstr) + p.module.parent = self.module + node = None + + return p, node + + def reset_caches(self): + self.module.reset_caches() + if self.current_node is not None: + self.current_node.reset_contents() + + +class FastTokenizer(object): + """ + Breaks when certain conditions are met, i.e. a new function or class opens. + """ + def __init__(self, source, line_offset=0): + self.source = source + self.gen = source_tokens(source, line_offset) + self.closed = False + + # fast parser options + self.current = self.previous = Token(None, '', (0, 0)) + self.in_flow = False + self.new_indent = False + self.parser_indent = self.old_parser_indent = 0 + self.is_decorator = False + self.first_stmt = True + self.parentheses_level = 0 + + def next(self): + """ Python 2 Compatibility """ + return self.__next__() + + def __next__(self): + if self.closed: + raise common.MultiLevelStopIteration() + + current = next(self.gen) + tok_type = current.type + tok_str = current.string + if tok_type == ENDMARKER: + raise common.MultiLevelStopIteration() + + self.previous = self.current + self.current = current + + # this is exactly the same check as in fast_parser, but this time with + # tokenize and therefore precise. + breaks = ['def', 'class', '@'] + + def close(): + if not self.first_stmt: + self.closed = True + raise common.MultiLevelStopIteration() + + # Ignore comments/newlines, irrelevant for indentation. + if self.previous.type in (None, NEWLINE) \ + and tok_type not in (COMMENT, NEWLINE): + # print c, tok_name[c[0]] + indent = current.start_pos[1] + if self.parentheses_level: + # parentheses ignore the indentation rules. + pass + elif indent < self.parser_indent: # -> dedent + self.parser_indent = indent + self.new_indent = False + if not self.in_flow or indent < self.old_parser_indent: + close() + + self.in_flow = False + elif self.new_indent: + self.parser_indent = indent + self.new_indent = False + + if not self.in_flow: + if tok_str in FLOWS or tok_str in breaks: + self.in_flow = tok_str in FLOWS + if not self.is_decorator and not self.in_flow: + close() + + self.is_decorator = '@' == tok_str + if not self.is_decorator: + self.old_parser_indent = self.parser_indent + self.parser_indent += 1 # new scope: must be higher + self.new_indent = True + + if tok_str != '@': + if self.first_stmt and not self.new_indent: + self.parser_indent = indent + self.first_stmt = False + + # Ignore closing parentheses, because they are all + # irrelevant for the indentation. + + if tok_str in '([{': + self.parentheses_level += 1 + elif tok_str in ')]}': + self.parentheses_level = max(self.parentheses_level - 1, 0) + return current diff --git a/env/lib/python2.7/site-packages/jedi/parser/fast.pyc b/env/lib/python2.7/site-packages/jedi/parser/fast.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0018ab3215496f1f11391a5aedcb06761d38070 GIT binary patch literal 14546 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 from jedi._compatibility import u +>>> from jedi.parser import Parser +>>> parser = Parser(u('import os'), 'example.py') +>>> submodule = parser.module +>>> submodule + + +Any subclasses of :class:`Scope`, including :class:`SubModule` has +attribute :attr:`imports `. This attribute has import +statements in this scope. Check this out: + +>>> submodule.imports +[] + +See also :attr:`Scope.subscopes` and :attr:`Scope.statements`. +""" +import os +import re +from inspect import cleandoc + +from jedi._compatibility import (next, Python3Method, encoding, unicode, + is_py3, u, literal_eval) +from jedi import common +from jedi import debug +from jedi import cache +from jedi.parser import tokenize + + +SCOPE_CONTENTS = 'asserts', 'subscopes', 'imports', 'statements', 'returns' + + +def filter_after_position(names, position): + """ + Removes all names after a certain position. If position is None, just + returns the names list. + """ + if position is None: + return names + + names_new = [] + for n in names: + if n.start_pos[0] is not None and n.start_pos < position: + names_new.append(n) + return names_new + + +class GetCodeState(object): + """A helper class for passing the state of get_code in a thread-safe + manner.""" + __slots__ = ("last_pos",) + + def __init__(self): + self.last_pos = (0, 0) + + +class DocstringMixin(object): + __slots__ = () + + def add_docstr(self, token): + """ Clean up a docstring """ + self._doc_token = token + + @property + def raw_doc(self): + """ Returns a cleaned version of the docstring token. """ + try: + # Returns a literal cleaned version of the ``Token``. + cleaned = cleandoc(literal_eval(self._doc_token.string)) + # Since we want the docstr output to be always unicode, just force + # it. + if is_py3 or isinstance(cleaned, unicode): + return cleaned + else: + return unicode(cleaned, 'UTF-8', 'replace') + except AttributeError: + return u('') + + +class Base(object): + """ + This is just here to have an isinstance check, which is also used on + evaluate classes. But since they have sometimes a special type of + delegation, it is important for those classes to override this method. + + I know that there is a chance to do such things with __instancecheck__, but + since Python 2.5 doesn't support it, I decided to do it this way. + """ + __slots__ = () + + def isinstance(self, *cls): + return isinstance(self, cls) + + @property + def newline(self): + """Returns the newline type for the current code.""" + #TODO: we need newline detection + return "\n" + + @property + def whitespace(self): + """Returns the whitespace type for the current code: tab or space.""" + #TODO: we need tab detection + return " " + + @Python3Method + def get_parent_until(self, classes=(), reverse=False, + include_current=True): + """ + Searches the parent "chain" until the object is an instance of + classes. If classes is empty return the last parent in the chain + (is without a parent). + """ + if type(classes) not in (tuple, list): + classes = (classes,) + scope = self if include_current else self.parent + while scope.parent is not None: + if classes and reverse != scope.isinstance(*classes): + break + scope = scope.parent + return scope + + def is_callable(self): + """ + By default parser objects are not callable, we make them callable by + the ``evaluate.representation`` objects. + """ + return False + + def space(self, from_pos, to_pos): + """Return the space between two tokens""" + linecount = to_pos[0] - from_pos[0] + if linecount == 0: + return self.whitespace * (to_pos[1] - from_pos[1]) + else: + return "%s%s" % ( + self.newline * linecount, + self.whitespace * to_pos[1], + ) + + +class Simple(Base): + """ + The super class for Scope, Import, Name and Statement. Every object in + the parser tree inherits from this class. + """ + __slots__ = ('parent', '_sub_module', '_start_pos', 'use_as_parent', + '_end_pos') + + def __init__(self, module, start_pos, end_pos=(None, None)): + """ + Initialize :class:`Simple`. + + :type module: :class:`SubModule` + :param module: The module in which this Python object locates. + :type start_pos: 2-tuple of int + :param start_pos: Position (line, column) of the Statement. + :type end_pos: 2-tuple of int + :param end_pos: Same as `start_pos`. + """ + self._sub_module = module + self._start_pos = start_pos + self._end_pos = end_pos + + self.parent = None + # use this attribute if parent should be something else than self. + self.use_as_parent = self + + @property + def start_pos(self): + return self._sub_module.line_offset + self._start_pos[0], \ + self._start_pos[1] + + @start_pos.setter + def start_pos(self, value): + self._start_pos = value + + @property + def end_pos(self): + if None in self._end_pos: + return self._end_pos + return self._sub_module.line_offset + self._end_pos[0], \ + self._end_pos[1] + + @end_pos.setter + def end_pos(self, value): + self._end_pos = value + + def __repr__(self): + code = self.get_code().replace('\n', ' ') + if not is_py3: + code = code.encode(encoding, 'replace') + return "<%s: %s@%s,%s>" % \ + (type(self).__name__, code, self.start_pos[0], self.start_pos[1]) + + def is_scope(self): + return False + + +class IsScope(Base): + __slots__ = () + + def is_scope(self): + return True + + +class Scope(IsScope, Simple, DocstringMixin): + """ + Super class for the parser tree, which represents the state of a python + text file. + A Scope manages and owns its subscopes, which are classes and functions, as + well as variables and imports. It is used to access the structure of python + files. + + :param start_pos: The position (line and column) of the scope. + :type start_pos: tuple(int, int) + """ + __slots__ = ('subscopes', 'imports', 'statements', '_doc_token', 'asserts', + 'returns', 'is_generator') + + def __init__(self, module, start_pos): + super(Scope, self).__init__(module, start_pos) + self.subscopes = [] + self.imports = [] + self.statements = [] + self._doc_token = None + self.asserts = [] + # Needed here for fast_parser, because the fast_parser splits and + # returns will be in "normal" modules. + self.returns = [] + self.is_generator = False + + def add_scope(self, sub, decorators): + sub.parent = self.use_as_parent + sub.decorators = decorators + for d in decorators: + # the parent is the same, because the decorator has not the scope + # of the function + d.parent = self.use_as_parent + self.subscopes.append(sub) + return sub + + def add_statement(self, stmt): + """ + Used to add a Statement or a Scope. + A statement would be a normal command (Statement) or a Scope (Flow). + """ + stmt.parent = self.use_as_parent + self.statements.append(stmt) + return stmt + + def add_import(self, imp): + self.imports.append(imp) + imp.parent = self.use_as_parent + + def get_imports(self): + """ Gets also the imports within flow statements """ + i = [] + self.imports + for s in self.statements: + if isinstance(s, Scope): + i += s.get_imports() + return i + + def get_code2(self, state=GetCodeState()): + string = [] + return "".join(string) + + def get_code(self, first_indent=False, indention=' '): + """ + :return: Returns the code of the current scope. + :rtype: str + """ + string = "" + if self._doc_token is not None: + string += '"""' + self.raw_doc + '"""\n' + + objs = self.subscopes + self.imports + self.statements + self.returns + for obj in sorted(objs, key=lambda x: x.start_pos): + if isinstance(obj, Scope): + string += obj.get_code(first_indent=True, indention=indention) + else: + if obj in self.returns and not isinstance(self, Lambda): + string += 'yield ' if self.is_generator else 'return ' + string += obj.get_code() + + if first_indent: + string = common.indent_block(string, indention=indention) + return string + + @Python3Method + def get_defined_names(self): + """ + Get all defined names in this scope. + + >>> from jedi._compatibility import u + >>> from jedi.parser import Parser + >>> parser = Parser(u(''' + ... a = x + ... b = y + ... b.c = z + ... ''')) + >>> parser.module.get_defined_names() + [, , ] + """ + n = [] + for stmt in self.statements: + try: + n += stmt.get_defined_names(True) + except TypeError: + n += stmt.get_defined_names() + + # function and class names + n += [s.name for s in self.subscopes] + + for i in self.imports: + if not i.star: + n += i.get_defined_names() + return n + + @Python3Method + def get_statement_for_position(self, pos, include_imports=False): + checks = self.statements + self.asserts + if include_imports: + checks += self.imports + if self.isinstance(Function): + checks += self.params + self.decorators + checks += [r for r in self.returns if r is not None] + if self.isinstance(Flow): + checks += self.inputs + if self.isinstance(ForFlow) and self.set_stmt is not None: + checks.append(self.set_stmt) + + for s in checks: + if isinstance(s, Flow): + p = s.get_statement_for_position(pos, include_imports) + while s.next and not p: + s = s.next + p = s.get_statement_for_position(pos, include_imports) + if p: + return p + elif s.start_pos <= pos <= s.end_pos: + return s + + for s in self.subscopes: + if s.start_pos <= pos <= s.end_pos: + p = s.get_statement_for_position(pos, include_imports) + if p: + return p + + def __repr__(self): + try: + name = self.path + except AttributeError: + try: + name = self.name + except AttributeError: + name = self.command + + return "<%s: %s@%s-%s>" % (type(self).__name__, name, + self.start_pos[0], self.end_pos[0]) + + def walk(self): + yield self + for s in self.subscopes: + for scope in s.walk(): + yield scope + + for r in self.statements: + while isinstance(r, Flow): + for scope in r.walk(): + yield scope + r = r.next + + +class Module(IsScope): + """ + For isinstance checks. fast_parser.Module also inherits from this. + """ + + +class SubModule(Scope, Module): + """ + The top scope, which is always a module. + Depending on the underlying parser this may be a full module or just a part + of a module. + """ + __slots__ = ('path', 'global_vars', 'used_names', 'temp_used_names', + 'line_offset', 'use_as_parent') + + def __init__(self, path, start_pos=(1, 0), top_module=None): + """ + Initialize :class:`SubModule`. + + :type path: str + :arg path: File path to this module. + + .. todo:: Document `top_module`. + """ + super(SubModule, self).__init__(self, start_pos) + self.path = path + self.global_vars = [] + self.used_names = {} + self.temp_used_names = [] + # this may be changed depending on fast_parser + self.line_offset = 0 + + self.use_as_parent = top_module or self + + def add_global(self, name): + """ + Global means in these context a function (subscope) which has a global + statement. + This is only relevant for the top scope. + + :param name: The name of the global. + :type name: Name + """ + # set no parent here, because globals are not defined in this scope. + self.global_vars.append(name) + + def get_defined_names(self): + n = super(SubModule, self).get_defined_names() + n += self.global_vars + return n + + @property + @cache.underscore_memoization + def name(self): + """ This is used for the goto functions. """ + if self.path is None: + string = '' # no path -> empty name + else: + sep = (re.escape(os.path.sep),) * 2 + r = re.search(r'([^%s]*?)(%s__init__)?(\.py|\.so)?$' % sep, self.path) + # remove PEP 3149 names + string = re.sub('\.[a-z]+-\d{2}[mud]{0,3}$', '', r.group(1)) + # positions are not real therefore choose (0, 0) + names = [(string, (0, 0))] + return Name(self, names, (0, 0), (0, 0), self.use_as_parent) + + @property + def has_explicit_absolute_import(self): + """ + Checks if imports in this module are explicitly absolute, i.e. there + is a ``__future__`` import. + """ + for imp in self.imports: + if imp.from_ns is None or imp.namespace is None: + continue + + namespace, feature = imp.from_ns.names[0], imp.namespace.names[0] + if unicode(namespace) == "__future__" and unicode(feature) == "absolute_import": + return True + + return False + + +class Class(Scope): + """ + Used to store the parsed contents of a python class. + + :param name: The Class name. + :type name: str + :param supers: The super classes of a Class. + :type supers: list + :param start_pos: The start position (line, column) of the class. + :type start_pos: tuple(int, int) + """ + __slots__ = ('name', 'supers', 'decorators') + + def __init__(self, module, name, supers, start_pos): + super(Class, self).__init__(module, start_pos) + self.name = name + name.parent = self.use_as_parent + self.supers = supers + for s in self.supers: + s.parent = self.use_as_parent + self.decorators = [] + + def get_code(self, first_indent=False, indention=' '): + string = "\n".join('@' + stmt.get_code() for stmt in self.decorators) + string += 'class %s' % (self.name) + if len(self.supers) > 0: + sup = ', '.join(stmt.get_code(False) for stmt in self.supers) + string += '(%s)' % sup + string += ':\n' + string += super(Class, self).get_code(True, indention) + return string + + @property + def doc(self): + """ + Return a document string including call signature of __init__. + """ + docstr = "" + if self._doc_token is not None: + docstr = self.raw_doc + for sub in self.subscopes: + if unicode(sub.name.names[-1]) == '__init__': + return '%s\n\n%s' % ( + sub.get_call_signature(funcname=self.name.names[-1]), docstr) + return docstr + + def scope_names_generator(self, position=None): + yield self, filter_after_position(self.get_defined_names(), position) + + +class Function(Scope): + """ + Used to store the parsed contents of a python function. + + :param name: The Function name. + :type name: str + :param params: The parameters (Statement) of a Function. + :type params: list + :param start_pos: The start position (line, column) the Function. + :type start_pos: tuple(int, int) + """ + __slots__ = ('name', 'params', 'decorators', 'listeners', 'annotation') + + def __init__(self, module, name, params, start_pos, annotation): + super(Function, self).__init__(module, start_pos) + self.name = name + if name is not None: + name.parent = self.use_as_parent + self.params = params + for p in params: + p.parent = self.use_as_parent + p.parent_function = self.use_as_parent + self.decorators = [] + self.listeners = set() # not used here, but in evaluation. + + if annotation is not None: + annotation.parent = self.use_as_parent + self.annotation = annotation + + def get_code(self, first_indent=False, indention=' '): + string = "\n".join('@' + stmt.get_code() for stmt in self.decorators) + params = ', '.join([stmt.get_code(False) for stmt in self.params]) + string += "def %s(%s):\n" % (self.name, params) + string += super(Function, self).get_code(True, indention) + return string + + def get_defined_names(self): + n = super(Function, self).get_defined_names() + for p in self.params: + try: + n.append(p.get_name()) + except IndexError: + debug.warning("multiple names in param %s", n) + return n + + def scope_names_generator(self, position=None): + yield self, filter_after_position(self.get_defined_names(), position) + + def get_call_signature(self, width=72, funcname=None): + """ + Generate call signature of this function. + + :param width: Fold lines if a line is longer than this value. + :type width: int + :arg funcname: Override function name when given. + :type funcname: str + + :rtype: str + """ + l = unicode(funcname or self.name.names[-1]) + '(' + lines = [] + for (i, p) in enumerate(self.params): + code = p.get_code(False) + if i != len(self.params) - 1: + code += ', ' + if len(l + code) > width: + lines.append(l[:-1] if l[-1] == ' ' else l) + l = code + else: + l += code + if l: + lines.append(l) + lines[-1] += ')' + return '\n'.join(lines) + + @property + def doc(self): + """ Return a document string including call signature. """ + docstr = "" + if self._doc_token is not None: + docstr = self.raw_doc + return '%s\n\n%s' % (self.get_call_signature(), docstr) + + +class Lambda(Function): + def __init__(self, module, params, start_pos, parent): + super(Lambda, self).__init__(module, None, params, start_pos, None) + self.parent = parent + + def get_code(self, first_indent=False, indention=' '): + params = ','.join([stmt.get_code() for stmt in self.params]) + string = "lambda %s: " % params + return string + super(Function, self).get_code(indention=indention) + + def __repr__(self): + return "<%s @%s (%s-%s)>" % (type(self).__name__, self.start_pos[0], + self.start_pos[1], self.end_pos[1]) + + +class Flow(Scope): + """ + Used to describe programming structure - flow statements, + which indent code, but are not classes or functions: + + - for + - while + - if + - try + - with + + Therefore statements like else, except and finally are also here, + they are now saved in the root flow elements, but in the next variable. + + :param command: The flow command, if, while, else, etc. + :type command: str + :param inputs: The initializations of a flow -> while 'statement'. + :type inputs: list(Statement) + :param start_pos: Position (line, column) of the Flow statement. + :type start_pos: tuple(int, int) + """ + __slots__ = ('next', 'command', '_parent', 'inputs', 'set_vars') + + def __init__(self, module, command, inputs, start_pos): + self.next = None + self.command = command + super(Flow, self).__init__(module, start_pos) + self._parent = None + # These have to be statements, because of with, which takes multiple. + self.inputs = inputs + for s in inputs: + s.parent = self.use_as_parent + self.set_vars = [] + + @property + def parent(self): + return self._parent + + @parent.setter + def parent(self, value): + self._parent = value + try: + self.next.parent = value + except AttributeError: + return + + def get_code(self, first_indent=False, indention=' '): + stmts = [] + for s in self.inputs: + stmts.append(s.get_code(new_line=False)) + stmt = ', '.join(stmts) + string = "%s %s:\n" % (self.command, stmt) + string += super(Flow, self).get_code(True, indention) + if self.next: + string += self.next.get_code() + return string + + def get_defined_names(self, is_internal_call=False): + """ + Get the names for the flow. This includes also a call to the super + class. + + :param is_internal_call: defines an option for internal files to crawl + through this class. Normally it will just call its superiors, to + generate the output. + """ + if is_internal_call: + n = list(self.set_vars) + for s in self.inputs: + n += s.get_defined_names() + if self.next: + n += self.next.get_defined_names(is_internal_call) + n += super(Flow, self).get_defined_names() + return n + else: + return self.get_parent_until((Class, Function)).get_defined_names() + + def get_imports(self): + i = super(Flow, self).get_imports() + if self.next: + i += self.next.get_imports() + return i + + def set_next(self, next): + """Set the next element in the flow, those are else, except, etc.""" + if self.next: + return self.next.set_next(next) + else: + self.next = next + self.next.parent = self.parent + return next + + def scope_names_generator(self, position=None): + # For `with` and `for`. + yield self, filter_after_position(self.get_defined_names(), position) + + +class ForFlow(Flow): + """ + Used for the for loop, because there are two statement parts. + """ + def __init__(self, module, inputs, start_pos, set_stmt): + super(ForFlow, self).__init__(module, 'for', inputs, start_pos) + + self.set_stmt = set_stmt + + if set_stmt is not None: + set_stmt.parent = self.use_as_parent + self.set_vars = set_stmt.get_defined_names() + + for s in self.set_vars: + s.parent.parent = self.use_as_parent + s.parent = self.use_as_parent + + def get_code(self, first_indent=False, indention=" " * 4): + vars = ",".join(x.get_code() for x in self.set_vars) + stmts = [] + for s in self.inputs: + stmts.append(s.get_code(new_line=False)) + stmt = ', '.join(stmts) + s = "for %s in %s:\n" % (vars, stmt) + return s + super(Flow, self).get_code(True, indention) + + +class Import(Simple): + """ + Stores the imports of any Scopes. + + :param start_pos: Position (line, column) of the Import. + :type start_pos: tuple(int, int) + :param namespace: The import, can be empty if a star is given + :type namespace: Name + :param alias: The alias of a namespace(valid in the current namespace). + :type alias: Name + :param from_ns: Like the namespace, can be equally used. + :type from_ns: Name + :param star: If a star is used -> from time import *. + :type star: bool + :param defunct: An Import is valid or not. + :type defunct: bool + """ + def __init__(self, module, start_pos, end_pos, namespace, alias=None, + from_ns=None, star=False, relative_count=0, defunct=False): + super(Import, self).__init__(module, start_pos, end_pos) + + self.namespace = namespace + self.alias = alias + self.from_ns = from_ns + for n in namespace, alias, from_ns: + if n: + n.parent = self.use_as_parent + + self.star = star + self.relative_count = relative_count + self.defunct = defunct + + def get_code(self, new_line=True): + # in case one of the names is None + alias = self.alias or '' + namespace = self.namespace or '' + from_ns = self.from_ns or '' + + if self.alias: + ns_str = "%s as %s" % (namespace, alias) + else: + ns_str = unicode(namespace) + + nl = '\n' if new_line else '' + if self.from_ns or self.relative_count: + if self.star: + ns_str = '*' + dots = '.' * self.relative_count + return "from %s%s import %s%s" % (dots, from_ns, ns_str, nl) + else: + return "import %s%s" % (ns_str, nl) + + def get_defined_names(self): + if self.defunct: + return [] + if self.star: + return [self] + if self.alias: + return [self.alias] + if len(self.namespace) > 1: + o = self.namespace + n = Name(self._sub_module, [(unicode(o.names[0]), o.start_pos)], + o.start_pos, o.end_pos, parent=o.parent) + return [n] + else: + return [self.namespace] + + def get_all_import_names(self): + n = [] + if self.from_ns: + n.append(self.from_ns) + if self.namespace: + n.append(self.namespace) + if self.alias: + n.append(self.alias) + return n + + def is_nested(self): + """ + This checks for the special case of nested imports, without aliases and + from statement:: + + import foo.bar + """ + return not self.alias and not self.from_ns and self.namespace is not None \ + and len(self.namespace.names) > 1 + + +class KeywordStatement(Base): + """ + For the following statements: `assert`, `del`, `global`, `nonlocal`, + `raise`, `return`, `yield`, `pass`, `continue`, `break`, `return`, `yield`. + """ + __slots__ = ('name', 'start_pos', 'stmt', 'parent') + + def __init__(self, name, start_pos, parent, stmt=None): + self.name = name + self.start_pos = start_pos + self.stmt = stmt + self.parent = parent + + if stmt is not None: + stmt.parent = self + + def is_scope(self): + return False + + def __repr__(self): + return "<%s(%s): %s>" % (type(self).__name__, self.name, self.stmt) + + def get_code(self): + if self.stmt is None: + return "%s\n" % self.name + else: + return '%s %s\n' % (self.name, self.stmt) + + def get_defined_names(self): + return [] + + @property + def end_pos(self): + try: + return self.stmt.end_pos + except AttributeError: + return self.start_pos[0], self.start_pos[1] + len(self.name) + + +class Statement(Simple, DocstringMixin): + """ + This is the class for all the possible statements. Which means, this class + stores pretty much all the Python code, except functions, classes, imports, + and flow functions like if, for, etc. + + :type token_list: list + :param token_list: + List of tokens or names. Each element is either an instance + of :class:`Name` or a tuple of token type value (e.g., + :data:`tokenize.NUMBER`), token string (e.g., ``'='``), and + start position (e.g., ``(1, 0)``). + :type start_pos: 2-tuple of int + :param start_pos: Position (line, column) of the Statement. + """ + __slots__ = ('_token_list', '_set_vars', 'as_names', '_expression_list', + '_assignment_details', '_names_are_set_vars', '_doc_token') + + def __init__(self, module, token_list, start_pos, end_pos, parent=None, + as_names=(), names_are_set_vars=False, set_name_parents=True): + super(Statement, self).__init__(module, start_pos, end_pos) + self._token_list = token_list + self._names_are_set_vars = names_are_set_vars + if set_name_parents: + for t in token_list: + if isinstance(t, Name): + t.parent = self.use_as_parent + for n in as_names: + n.parent = self.use_as_parent + self.parent = parent + self._doc_token = None + self._set_vars = None + self.as_names = list(as_names) + + # cache + self._assignment_details = [] + + @property + def end_pos(self): + return self._token_list[-1].end_pos + + def get_code(self, new_line=True): + def assemble(command_list, assignment=None): + pieces = [c.get_code() if isinstance(c, Simple) else c.string if +isinstance(c, tokenize.Token) else unicode(c) + for c in command_list] + if assignment is None: + return ''.join(pieces) + return '%s %s ' % (''.join(pieces), assignment) + + code = ''.join(assemble(*a) for a in self.assignment_details) + code += assemble(self.expression_list()) + if self._doc_token: + code += '\n"""%s"""' % self.raw_doc + + if new_line: + return code + '\n' + else: + return code + + def get_defined_names(self): + """ Get the names for the statement. """ + if self._set_vars is None: + + def search_calls(calls): + for call in calls: + if isinstance(call, Array) and call.type != Array.DICT: + for stmt in call: + search_calls(stmt.expression_list()) + elif isinstance(call, Call): + c = call + # Check if there's an execution in it, if so this is + # not a set_var. + is_execution = False + while c: + if Array.is_type(c.execution, Array.TUPLE): + is_execution = True + c = c.next + if is_execution: + continue + self._set_vars.append(call.name) + + self._set_vars = [] + for calls, operation in self.assignment_details: + search_calls(calls) + + if not self.assignment_details and self._names_are_set_vars: + # In the case of Param, it's also a defining name without ``=`` + search_calls(self.expression_list()) + return self._set_vars + self.as_names + + def is_global(self): + p = self.parent + return isinstance(p, KeywordStatement) and p.name == 'global' + + @property + def assignment_details(self): + """ + Returns an array of tuples of the elements before the assignment. + + For example the following code:: + + x = (y, z) = 2, '' + + would result in ``[(Name(x), '='), (Array([Name(y), Name(z)]), '=')]``. + """ + # parse statement which creates the assignment details. + self.expression_list() + return self._assignment_details + + @cache.underscore_memoization + def expression_list(self): + """ + Parse a statement. + + This is not done in the main parser, because it might be slow and + most of the statements won't need this data anyway. This is something + 'like' a lazy execution. + + This is not really nice written, sorry for that. If you plan to replace + it and make it nicer, that would be cool :-) + """ + def is_assignment(tok): + return isinstance(tok, Operator) and tok.string.endswith('=') \ + and not tok.string in ('>=', '<=', '==', '!=') + + def parse_array(token_iterator, array_type, start_pos, add_el=None): + arr = Array(self._sub_module, start_pos, array_type, self) + if add_el is not None: + arr.add_statement(add_el) + old_stmt = add_el + + maybe_dict = array_type == Array.SET + break_tok = None + is_array = None + while True: + stmt, break_tok = parse_stmt(token_iterator, maybe_dict, + break_on_assignment=bool(add_el)) + if stmt is None: + break + else: + if break_tok == ',': + is_array = True + arr.add_statement(stmt, is_key=maybe_dict and break_tok == ':') + if break_tok in closing_brackets \ + or is_assignment(break_tok): + break + old_stmt = stmt + if arr.type == Array.TUPLE and len(arr) == 1 and not is_array: + arr.type = Array.NOARRAY + if not arr.values and maybe_dict: + # this is a really special case - empty brackets {} are + # always dictionaries and not sets. + arr.type = Array.DICT + + try: + arr.end_pos = (break_tok or stmt or old_stmt).end_pos + except UnboundLocalError: + # In case of something like `(def` + arr.end_pos = start_pos[0], start_pos[1] + 1 + return arr, break_tok + + def parse_stmt(token_iterator, maybe_dict=False, added_breaks=(), + break_on_assignment=False, stmt_class=Statement, + allow_comma=False): + token_list = [] + level = 0 + first = True + end_pos = None, None + tok = None + for tok in token_iterator: + end_pos = tok.end_pos + if first: + start_pos = tok.start_pos + first = False + + if isinstance(tok, Base): + # the token is a Name, which has already been parsed + if not level: + if isinstance(tok, ListComprehension): + # it's not possible to set it earlier + tok.parent = self + elif tok == 'lambda': + lambd, tok = parse_lambda(token_iterator) + if lambd is not None: + token_list.append(lambd) + elif tok == 'for': + list_comp, tok = parse_list_comp(token_iterator, token_list, + start_pos, tok.end_pos) + if list_comp is not None: + token_list = [list_comp] + + if tok in closing_brackets: + level -= 1 + elif tok in brackets.keys(): + level += 1 + + if level == -1 or level == 0 and ( + tok == ',' and not allow_comma + or tok in added_breaks + or maybe_dict and tok == ':' + or is_assignment(tok) and break_on_assignment): + end_pos = end_pos[0], end_pos[1] - 1 + break + + if tok is not None: # Can be None, because of lambda/for. + token_list.append(tok) + + if not token_list: + return None, tok + + statement = stmt_class(self._sub_module, token_list, start_pos, + end_pos, self.parent, set_name_parents=False) + return statement, tok + + def parse_lambda(token_iterator): + params = [] + start_pos = self.start_pos + while True: + param, tok = parse_stmt(token_iterator, added_breaks=[':'], + stmt_class=Param) + if param is None: + break + params.append(param) + if tok == ':': + break + if tok != ':': + return None, tok + + # Since Lambda is a Function scope, it needs Scope parents. + parent = self.get_parent_until(IsScope) + lambd = Lambda(self._sub_module, params, start_pos, parent) + + ret, tok = parse_stmt(token_iterator) + if ret is not None: + ret.parent = lambd + lambd.returns.append(ret) + lambd.end_pos = self.end_pos + return lambd, tok + + def parse_list_comp(token_iterator, token_list, start_pos, end_pos): + def parse_stmt_or_arr(token_iterator, added_breaks=(), + names_are_set_vars=False): + stmt, tok = parse_stmt(token_iterator, allow_comma=True, + added_breaks=added_breaks) + + if stmt is not None: + for t in stmt._token_list: + if isinstance(t, Name): + t.parent = stmt + stmt._names_are_set_vars = names_are_set_vars + return stmt, tok + + st = Statement(self._sub_module, token_list, start_pos, + end_pos, set_name_parents=False) + + middle, tok = parse_stmt_or_arr(token_iterator, ['in'], True) + if tok != 'in' or middle is None: + debug.warning('list comprehension middle %s@%s', tok, start_pos) + return None, tok + + in_clause, tok = parse_stmt_or_arr(token_iterator) + if in_clause is None: + debug.warning('list comprehension in @%s', start_pos) + return None, tok + + return ListComprehension(self._sub_module, st, middle, in_clause, self), tok + + # initializations + result = [] + is_chain = False + brackets = {'(': Array.TUPLE, '[': Array.LIST, '{': Array.SET} + closing_brackets = ')', '}', ']' + + token_iterator = iter(self._token_list) + for tok in token_iterator: + if isinstance(tok, tokenize.Token): + token_type = tok.type + tok_str = tok.string + if tok_str == 'as': # just ignore as, because it sets values + next(token_iterator, None) + continue + else: + # the token is a Name, which has already been parsed + tok_str = tok + token_type = None + + if is_assignment(tok): + # This means, there is an assignment here. + # Add assignments, which can be more than one + self._assignment_details.append((result, tok.string)) + result = [] + is_chain = False + continue + + if tok_str == 'lambda': + lambd, tok_str = parse_lambda(token_iterator) + if lambd is not None: + result.append(lambd) + if tok_str not in (')', ','): + continue + + is_literal = token_type in (tokenize.STRING, tokenize.NUMBER) + if isinstance(tok_str, Name) or is_literal: + cls = Literal if is_literal else Call + + call = cls(self._sub_module, tok_str, tok.start_pos, tok.end_pos, self) + if is_chain: + result[-1].set_next(call) + else: + result.append(call) + is_chain = False + elif tok_str in brackets.keys(): + arr, is_ass = parse_array( + token_iterator, brackets[tok.string], tok.start_pos + ) + if result and isinstance(result[-1], StatementElement): + result[-1].set_execution(arr) + else: + arr.parent = self + result.append(arr) + elif tok_str == '.': + if result and isinstance(result[-1], StatementElement): + is_chain = True + elif tok_str == ',' and result: # implies a tuple + # expression is now an array not a statement anymore + stmt = Statement(self._sub_module, result, result[0].start_pos, + tok.end_pos, self.parent, set_name_parents=False) + stmt._expression_list = result + arr, break_tok = parse_array(token_iterator, Array.TUPLE, + stmt.start_pos, stmt) + result = [arr] + if is_assignment(break_tok): + self._assignment_details.append((result, break_tok)) + result = [] + is_chain = False + else: + # comments, strange tokens (like */**), error tokens to + # reproduce the string correctly. + is_chain = False + result.append(tok) + return result + + def set_expression_list(self, lst): + """It's necessary for some "hacks" to change the expression_list.""" + self._expression_list = lst + + +class Param(Statement): + """ + The class which shows definitions of params of classes and functions. + But this is not to define function calls. + """ + __slots__ = ('position_nr', 'is_generated', 'annotation_stmt', + 'parent_function') + + def __init__(self, *args, **kwargs): + kwargs.pop('names_are_set_vars', None) + super(Param, self).__init__(*args, names_are_set_vars=True, **kwargs) + + # this is defined by the parser later on, not at the initialization + # it is the position in the call (first argument, second...) + self.position_nr = None + self.is_generated = False + self.annotation_stmt = None + self.parent_function = None + + def add_annotation(self, annotation_stmt): + annotation_stmt.parent = self.use_as_parent + self.annotation_stmt = annotation_stmt + + def get_name(self): + """ get the name of the param """ + n = self.get_defined_names() + if len(n) > 1: + debug.warning("Multiple param names (%s).", n) + return n[0] + + @property + def stars(self): + exp = self.expression_list() + if exp and isinstance(exp[0], Operator): + return exp[0].string.count('*') + return 0 + + +class StatementElement(Simple): + __slots__ = ('parent', 'next', 'execution') + + def __init__(self, module, start_pos, end_pos, parent): + super(StatementElement, self).__init__(module, start_pos, end_pos) + + # parent is not the oposite of next. The parent of c: a = [b.c] would + # be an array. + self.parent = parent + self.next = None + self.execution = None + + def set_next(self, call): + """ Adds another part of the statement""" + call.parent = self + if self.next is not None: + self.next.set_next(call) + else: + self.next = call + + def set_execution(self, call): + """ + An execution is nothing else than brackets, with params in them, which + shows access on the internals of this name. + """ + call.parent = self + if self.next is not None: + self.next.set_execution(call) + elif self.execution is not None: + self.execution.set_execution(call) + else: + self.execution = call + + def generate_call_path(self): + """ Helps to get the order in which statements are executed. """ + try: + for name_part in self.name.names: + yield name_part + except AttributeError: + yield self + if self.execution is not None: + for y in self.execution.generate_call_path(): + yield y + if self.next is not None: + for y in self.next.generate_call_path(): + yield y + + def get_code(self): + s = '' + if self.execution is not None: + s += self.execution.get_code() + if self.next is not None: + s += '.' + self.next.get_code() + return s + + +class Call(StatementElement): + __slots__ = ('name',) + + def __init__(self, module, name, start_pos, end_pos, parent=None): + super(Call, self).__init__(module, start_pos, end_pos, parent) + self.name = name + + def get_code(self): + return self.name.get_code() + super(Call, self).get_code() + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self.name) + + +class Literal(StatementElement): + __slots__ = ('literal', 'value') + + def __init__(self, module, literal, start_pos, end_pos, parent=None): + super(Literal, self).__init__(module, start_pos, end_pos, parent) + self.literal = literal + self.value = literal_eval(literal) + + def get_code(self): + return self.literal + super(Literal, self).get_code() + + def __repr__(self): + if is_py3: + s = self.literal + else: + s = self.literal.encode('ascii', 'replace') + return "<%s: %s>" % (type(self).__name__, s) + + +class Array(StatementElement): + """ + Describes the different python types for an array, but also empty + statements. In the Python syntax definitions this type is named 'atom'. + http://docs.python.org/py3k/reference/grammar.html + Array saves sub-arrays as well as normal operators and calls to methods. + + :param array_type: The type of an array, which can be one of the constants + below. + :type array_type: int + """ + __slots__ = ('type', 'end_pos', 'values', 'keys') + NOARRAY = None # just brackets, like `1 * (3 + 2)` + TUPLE = 'tuple' + LIST = 'list' + DICT = 'dict' + SET = 'set' + + def __init__(self, module, start_pos, arr_type=NOARRAY, parent=None): + super(Array, self).__init__(module, start_pos, (None, None), parent) + self.end_pos = None, None + self.type = arr_type + self.values = [] + self.keys = [] + + def add_statement(self, statement, is_key=False): + """Just add a new statement""" + statement.parent = self + if is_key: + self.type = self.DICT + self.keys.append(statement) + else: + self.values.append(statement) + + @staticmethod + def is_type(instance, *types): + """ + This is not only used for calls on the actual object, but for + ducktyping, to invoke this function with anything as `self`. + """ + try: + if instance.type in types: + return True + except AttributeError: + pass + return False + + def __len__(self): + return len(self.values) + + def __getitem__(self, key): + if self.type == self.DICT: + raise TypeError('no dicts allowed') + return self.values[key] + + def __iter__(self): + if self.type == self.DICT: + raise TypeError('no dicts allowed') + return iter(self.values) + + def items(self): + if self.type != self.DICT: + raise TypeError('only dicts allowed') + return zip(self.keys, self.values) + + def get_code(self): + map = { + self.NOARRAY: '(%s)', + self.TUPLE: '(%s)', + self.LIST: '[%s]', + self.DICT: '{%s}', + self.SET: '{%s}' + } + inner = [] + for i, stmt in enumerate(self.values): + s = '' + with common.ignored(IndexError): + key = self.keys[i] + s += key.get_code(new_line=False) + ': ' + s += stmt.get_code(new_line=False) + inner.append(s) + add = ',' if self.type == self.TUPLE and len(self) == 1 else '' + s = map[self.type] % (', '.join(inner) + add) + return s + super(Array, self).get_code() + + def __repr__(self): + if self.type == self.NOARRAY: + typ = 'noarray' + else: + typ = self.type + return "<%s: %s%s>" % (type(self).__name__, typ, self.values) + + +class NamePart(object): + """ + A string. Sometimes it is important to know if the string belongs to a name + or not. + """ + # Unfortunately there's no way to use slots for str (non-zero __itemsize__) + # -> http://utcc.utoronto.ca/~cks/space/blog/python/IntSlotsPython3k + # Therefore don't subclass `str`. + __slots__ = ('parent', '_string', '_line', '_column') + + def __init__(self, string, parent, start_pos): + self._string = string + self.parent = parent + self._line = start_pos[0] + self._column = start_pos[1] + + def __str__(self): + return self._string + + def __unicode__(self): + return self._string + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self._string) + + def get_code(self): + return self._string + + def get_parent_until(self, *args, **kwargs): + return self.parent.get_parent_until(*args, **kwargs) + + def isinstance(self, *cls): + return isinstance(self, cls) + + @property + def start_pos(self): + offset = self.parent._sub_module.line_offset + return offset + self._line, self._column + + @property + def end_pos(self): + return self.start_pos[0], self.start_pos[1] + len(self._string) + + +class Name(Simple): + """ + Used to define names in python. + Which means the whole namespace/class/function stuff. + So a name like "module.class.function" + would result in an array of [module, class, function] + """ + __slots__ = ('names', '_get_code') + + def __init__(self, module, names, start_pos, end_pos, parent=None): + super(Name, self).__init__(module, start_pos, end_pos) + # Cache get_code, because it's used quite often for comparisons + # (seen by using the profiler). + self._get_code = ".".join(n[0] for n in names) + + names = tuple(NamePart(n[0], self, n[1]) for n in names) + self.names = names + if parent is not None: + self.parent = parent + + def get_code(self): + """ Returns the names in a full string format """ + return self._get_code + + @property + def end_pos(self): + return self.names[-1].end_pos + + @property + def docstr(self): + """Return attribute docstring (PEP 257) if exists.""" + return self.parent.docstr + + def __str__(self): + return self.get_code() + + def __len__(self): + return len(self.names) + + +class ListComprehension(ForFlow): + """ Helper class for list comprehensions """ + def __init__(self, module, stmt, middle, input, parent): + self.input = input + nested_lc = input.expression_list()[0] + if isinstance(nested_lc, ListComprehension): + # is nested LC + input = nested_lc.stmt + nested_lc.parent = self + + super(ListComprehension, self).__init__(module, [input], + stmt.start_pos, middle) + self.parent = parent + self.stmt = stmt + self.middle = middle + for s in middle, input: + s.parent = self + # The stmt always refers to the most inner list comprehension. + stmt.parent = self._get_most_inner_lc() + + def _get_most_inner_lc(self): + nested_lc = self.input.expression_list()[0] + if isinstance(nested_lc, ListComprehension): + return nested_lc._get_most_inner_lc() + return self + + @property + def end_pos(self): + return self.stmt.end_pos + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self.get_code()) + + def get_code(self): + statements = self.stmt, self.middle, self.input + code = [s.get_code().replace('\n', '') for s in statements] + return "%s for %s in %s" % tuple(code) + + +class Operator(Simple): + __slots__ = ('string',) + + def __init__(self, module, string, parent, start_pos): + end_pos = start_pos[0], start_pos[1] + len(string) + super(Operator, self).__init__(module, start_pos, end_pos) + self.string = string + self.parent = parent + + def get_code(self): + return self.string + + def __repr__(self): + return "<%s: `%s`>" % (type(self).__name__, self.string) + + def __eq__(self, other): + """Make comparisons easy. Improves the readability of the parser.""" + return self.string == other + + def __ne__(self, other): + """Python 2 compatibility.""" + return self.string != other + + def __hash__(self): + return hash(self.string) diff --git a/env/lib/python2.7/site-packages/jedi/parser/representation.pyc b/env/lib/python2.7/site-packages/jedi/parser/representation.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8669678567c0d143d37d0fa3ee66c85cd01504d4 GIT binary patch literal 65661 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/parser/tokenize.py b/env/lib/python2.7/site-packages/jedi/parser/tokenize.py new file mode 100644 index 0000000..40ecab1 --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/parser/tokenize.py @@ -0,0 +1,299 @@ +# -*- coding: utf-8 -*- +""" +This tokenizer has been copied from the ``tokenize.py`` standard library +tokenizer. The reason was simple: The standard library tokenizer fails +if the indentation is not right. The fast parser of jedi however requires +"wrong" indentation. + +Basically this is a stripped down version of the standard library module, so +you can read the documentation there. Additionally we included some speed and +memory optimizations here. +""" +from __future__ import absolute_import + +import string +import re +from io import StringIO +from token import (tok_name, N_TOKENS, ENDMARKER, STRING, NUMBER, NAME, OP, + ERRORTOKEN, NEWLINE) + +from jedi._compatibility import u + +cookie_re = re.compile("coding[:=]\s*([-\w.]+)") + + +# From here on we have custom stuff (everything before was originally Python +# internal code). +FLOWS = ['if', 'else', 'elif', 'while', 'with', 'try', 'except', 'finally'] + + +namechars = string.ascii_letters + '_' + + +COMMENT = N_TOKENS +tok_name[COMMENT] = 'COMMENT' + + +class Token(object): + """ + The token object is an efficient representation of the structure + (type, token, (start_pos_line, start_pos_col)). It has indexer + methods that maintain compatibility to existing code that expects the above + structure. + + >>> repr(Token(1, "test", (1, 1))) + "" + >>> Token(1, 'bar', (3, 4)).__getstate__() + (1, 'bar', 3, 4) + >>> a = Token(0, 'baz', (0, 0)) + >>> a.__setstate__((1, 'foo', 3, 4)) + >>> a + + >>> a.start_pos + (3, 4) + >>> a.string + 'foo' + >>> a._start_pos_col + 4 + >>> Token(1, u("😷"), (1 ,1)).string + "p" == u("😷p") + True + """ + __slots__ = ("type", "string", "_start_pos_line", "_start_pos_col") + + def __init__(self, type, string, start_pos): + self.type = type + self.string = string + self._start_pos_line = start_pos[0] + self._start_pos_col = start_pos[1] + + def __repr__(self): + typ = tok_name[self.type] + content = typ, self.string, (self._start_pos_line, self._start_pos_col) + return "<%s: %s>" % (type(self).__name__, content) + + @property + def start_pos(self): + return (self._start_pos_line, self._start_pos_col) + + @property + def end_pos(self): + """Returns end position respecting multiline tokens.""" + end_pos_line = self._start_pos_line + lines = self.string.split('\n') + if self.string.endswith('\n'): + lines = lines[:-1] + lines[-1] += '\n' + end_pos_line += len(lines) - 1 + end_pos_col = self._start_pos_col + # Check for multiline token + if self._start_pos_line == end_pos_line: + end_pos_col += len(lines[-1]) + else: + end_pos_col = len(lines[-1]) + return (end_pos_line, end_pos_col) + + # Make cache footprint smaller for faster unpickling + def __getstate__(self): + return (self.type, self.string, self._start_pos_line, self._start_pos_col) + + def __setstate__(self, state): + self.type = state[0] + self.string = state[1] + self._start_pos_line = state[2] + self._start_pos_col = state[3] + + +def group(*choices): + return '(' + '|'.join(choices) + ')' + + +def maybe(*choices): + return group(*choices) + '?' + + +# Note: we use unicode matching for names ("\w") but ascii matching for +# number literals. +whitespace = r'[ \f\t]*' +comment = r'#[^\r\n]*' +name = r'\w+' + +hex_number = r'0[xX][0-9a-fA-F]+' +bin_number = r'0[bB][01]+' +oct_number = r'0[oO][0-7]+' +dec_number = r'(?:0+|[1-9][0-9]*)' +int_number = group(hex_number, bin_number, oct_number, dec_number) +exponent = r'[eE][-+]?[0-9]+' +point_float = group(r'[0-9]+\.[0-9]*', r'\.[0-9]+') + maybe(exponent) +Expfloat = r'[0-9]+' + exponent +float_number = group(point_float, Expfloat) +imag_number = group(r'[0-9]+[jJ]', float_number + r'[jJ]') +number = group(imag_number, float_number, int_number) + +# Tail end of ' string. +single = r"[^'\\]*(?:\\.[^'\\]*)*'" +# Tail end of " string. +double = r'[^"\\]*(?:\\.[^"\\]*)*"' +# Tail end of ''' string. +single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''" +# Tail end of """ string. +double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""' +triple = group("[bB]?[rR]?'''", '[bB]?[rR]?"""') +# Single-line ' or " string. + +# Because of leftmost-then-longest match semantics, be sure to put the +# longest operators first (e.g., if = came before ==, == would get +# recognized as two instances of =). +operator = group(r"\*\*=?", r">>=?", r"<<=?", r"!=", + r"//=?", r"->", + r"[+\-*/%&|^=<>]=?", + r"~") + +bracket = '[][(){}]' +special = group(r'\r?\n', r'\.\.\.', r'[:;.,@]') +funny = group(operator, bracket, special) + +# First (or only) line of ' or " string. +cont_str = group(r"[bBuU]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*" + + group("'", r'\\\r?\n'), + r'[bBuU]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*' + + group('"', r'\\\r?\n')) +pseudo_extras = group(r'\\\r?\n', comment, triple) +pseudo_token = whitespace + group(pseudo_extras, number, funny, cont_str, name) + + +def _compile(expr): + return re.compile(expr, re.UNICODE) + + +pseudoprog, single3prog, double3prog = map( + _compile, (pseudo_token, single3, double3)) +endprogs = {"'": _compile(single), '"': _compile(double), + "'''": single3prog, '"""': double3prog, + "r'''": single3prog, 'r"""': double3prog, + "b'''": single3prog, 'b"""': double3prog, + "u'''": single3prog, 'u"""': double3prog, + "br'''": single3prog, 'br"""': double3prog, + "R'''": single3prog, 'R"""': double3prog, + "B'''": single3prog, 'B"""': double3prog, + "U'''": single3prog, 'U"""': double3prog, + "bR'''": single3prog, 'bR"""': double3prog, + "Br'''": single3prog, 'Br"""': double3prog, + "BR'''": single3prog, 'BR"""': double3prog, + 'r': None, 'R': None, 'b': None, 'B': None} + +triple_quoted = {} +for t in ("'''", '"""', + "r'''", 'r"""', "R'''", 'R"""', + "b'''", 'b"""', "B'''", 'B"""', + "u'''", 'u"""', "U'''", 'U"""', + "br'''", 'br"""', "Br'''", 'Br"""', + "bR'''", 'bR"""', "BR'''", 'BR"""'): + triple_quoted[t] = t +single_quoted = {} +for t in ("'", '"', + "r'", 'r"', "R'", 'R"', + "b'", 'b"', "B'", 'B"', + "u'", 'u""', "U'", 'U"', + "br'", 'br"', "Br'", 'Br"', + "bR'", 'bR"', "BR'", 'BR"'): + single_quoted[t] = t + +del _compile + +tabsize = 8 + + +def source_tokens(source, line_offset=0): + """Generate tokens from a the source code (string).""" + source = source + '\n' # end with \n, because the parser needs it + readline = StringIO(source).readline + return generate_tokens(readline, line_offset) + + +def generate_tokens(readline, line_offset=0): + """ + The original stdlib Python version with minor modifications. + Modified to not care about dedents. + """ + lnum = line_offset + numchars = '0123456789' + contstr = '' + contline = None + while True: # loop over lines in stream + line = readline() # readline returns empty if it's finished. See StringIO + if not line: + if contstr: + yield Token(ERRORTOKEN, contstr, contstr_start) + break + + lnum += 1 + pos, max = 0, len(line) + + if contstr: # continued string + endmatch = endprog.match(line) + if endmatch: + pos = endmatch.end(0) + yield Token(STRING, contstr + line[:pos], contstr_start) + contstr = '' + contline = None + else: + contstr = contstr + line + contline = contline + line + continue + + while pos < max: + pseudomatch = pseudoprog.match(line, pos) + if not pseudomatch: # scan for tokens + txt = line[pos] + if line[pos] in '"\'': + # If a literal starts but doesn't end the whole rest of the + # line is an error token. + txt = txt = line[pos:] + yield Token(ERRORTOKEN, txt, (lnum, pos)) + pos += 1 + continue + + start, pos = pseudomatch.span(1) + spos = (lnum, start) + token, initial = line[start:pos], line[start] + + if (initial in numchars or # ordinary number + (initial == '.' and token != '.' and token != '...')): + yield Token(NUMBER, token, spos) + elif initial in '\r\n': + yield Token(NEWLINE, token, spos) + elif initial == '#': + assert not token.endswith("\n") + yield Token(COMMENT, token, spos) + elif token in triple_quoted: + endprog = endprogs[token] + endmatch = endprog.match(line, pos) + if endmatch: # all on one line + pos = endmatch.end(0) + token = line[start:pos] + yield Token(STRING, token, spos) + else: + contstr_start = (lnum, start) # multiple lines + contstr = line[start:] + contline = line + break + elif initial in single_quoted or \ + token[:2] in single_quoted or \ + token[:3] in single_quoted: + if token[-1] == '\n': # continued string + contstr_start = lnum, start + endprog = (endprogs[initial] or endprogs[token[1]] or + endprogs[token[2]]) + contstr = line[start:] + contline = line + break + else: # ordinary string + yield Token(STRING, token, spos) + elif initial in namechars: # ordinary name + yield Token(NAME, token, spos) + elif initial == '\\' and line[start:] == '\\\n': # continued stmt + continue + else: + yield Token(OP, token, spos) + + yield Token(ENDMARKER, '', (lnum, 0)) diff --git a/env/lib/python2.7/site-packages/jedi/parser/tokenize.pyc b/env/lib/python2.7/site-packages/jedi/parser/tokenize.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6c05de2c8efb2034f997dd9ba2d644a585cc7d6 GIT binary patch literal 9646 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 0: + if tok_str in close_brackets: + level += 1 + if tok_str in open_brackets: + level -= 1 + elif tok_str == '.': + force_point = False + elif force_point: + # Reversed tokenizing, therefore a number is recognized as a + # floating point number. + # The same is true for string prefixes -> represented as a + # combination of string and name. + if tok_type == tokenize.NUMBER and tok_str[0] == '.' \ + or tok_type == tokenize.NAME and last_type == tokenize.STRING: + force_point = False + else: + break + elif tok_str in close_brackets: + level += 1 + elif tok_type in [tokenize.NAME, tokenize.STRING]: + force_point = True + elif tok_type == tokenize.NUMBER: + pass + else: + if tok_str == '-': + next_tok = next(gen) + if next_tok.string == 'e': + gen.push_back(next_tok) + else: + break + else: + break + + x = start_pos[0] - end[0] + 1 + l = self.get_line(x) + l = first_line if x == start_pos[0] else l + start_cursor = x, len(l) - end[1] + string += tok_str + last_type = tok_type + + # string can still contain spaces at the end + return string[::-1].strip(), start_cursor + + def get_path_under_cursor(self): + """ + Return the path under the cursor. If there is a rest of the path left, + it will be added to the stuff before it. + """ + return self.get_path_until_cursor() + self.get_path_after_cursor() + + def get_path_after_cursor(self): + line = self.get_line(self.position[0]) + return re.search("[\w\d]*", line[self.position[1]:]).group(0) + + def get_operator_under_cursor(self): + line = self.get_line(self.position[0]) + after = re.match("[^\w\s]+", line[self.position[1]:]) + before = re.match("[^\w\s]+", line[:self.position[1]][::-1]) + return (before.group(0) if before is not None else '') \ + + (after.group(0) if after is not None else '') + + def get_context(self, yield_positions=False): + self.get_path_until_cursor() # In case _start_cursor_pos is undefined. + pos = self._start_cursor_pos + while True: + # remove non important white space + line = self.get_line(pos[0]) + while True: + if pos[1] == 0: + line = self.get_line(pos[0] - 1) + if line and line[-1] == '\\': + pos = pos[0] - 1, len(line) - 1 + continue + else: + break + + if line[pos[1] - 1].isspace(): + pos = pos[0], pos[1] - 1 + else: + break + + try: + result, pos = self._calc_path_until_cursor(start_pos=pos) + if yield_positions: + yield pos + else: + yield result + except StopIteration: + if yield_positions: + yield None + else: + yield '' + + def get_line(self, line_nr): + if not self._line_cache: + self._line_cache = common.splitlines(self.source) + + if line_nr == 0: + # This is a fix for the zeroth line. We need a newline there, for + # the backwards parser. + return u('') + if line_nr < 0: + raise StopIteration() + try: + return self._line_cache[line_nr - 1] + except IndexError: + raise StopIteration() + + def get_position_line(self): + return self.get_line(self.position[0])[:self.position[1]] + + +class UserContextParser(object): + def __init__(self, source, path, position, user_context): + self._source = source + self._path = path and os.path.abspath(path) + self._position = position + self._user_context = user_context + + @cache.underscore_memoization + def _parser(self): + cache.invalidate_star_import_cache(self._path) + parser = FastParser(self._source, self._path) + # Don't pickle that module, because the main module is changing quickly + cache.save_parser(self._path, None, parser, pickling=False) + return parser + + @cache.underscore_memoization + def user_stmt(self): + module = self.module() + debug.speed('parsed') + return module.get_statement_for_position(self._position, include_imports=True) + + @cache.underscore_memoization + def user_stmt_with_whitespace(self): + """ + Returns the statement under the cursor even if the statement lies + before the cursor. + """ + user_stmt = self.user_stmt() + + if not user_stmt: + # for statements like `from x import ` (cursor not in statement) + # or `abs( ` where the cursor is out in the whitespace. + if self._user_context.get_path_under_cursor(): + # We really should have a user_stmt, but the parser couldn't + # process it - probably a Syntax Error (or in a comment). + debug.warning('No statement under the cursor.') + return + pos = next(self._user_context.get_context(yield_positions=True)) + user_stmt = self.module().get_statement_for_position(pos, include_imports=True) + return user_stmt + + @cache.underscore_memoization + def user_scope(self): + user_stmt = self.user_stmt() + if user_stmt is None: + def scan(scope): + for s in scope.statements + scope.subscopes: + if isinstance(s, representation.Scope): + if s.start_pos <= self._position <= s.end_pos: + return scan(s) or s + + return scan(self.module()) or self.module() + else: + return user_stmt.parent + + def module(self): + return self._parser().module diff --git a/env/lib/python2.7/site-packages/jedi/parser/user_context.pyc b/env/lib/python2.7/site-packages/jedi/parser/user_context.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bbeaaa6aab0fdbd849d8faed76a3bf50090f264 GIT binary patch literal 9048 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 D;n9ol literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/refactoring.py b/env/lib/python2.7/site-packages/jedi/refactoring.py new file mode 100644 index 0000000..fbd9bde --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/refactoring.py @@ -0,0 +1,202 @@ +""" +Introduce some basic refactoring functions to |jedi|. This module is still in a +very early development stage and needs much testing and improvement. + +.. warning:: I won't do too much here, but if anyone wants to step in, please + do. Refactoring is none of my priorities + +It uses the |jedi| `API `_ and supports currently the +following functions (sometimes bug-prone): + +- rename +- extract variable +- inline variable +""" +import difflib + +from jedi import common +from jedi.evaluate import helpers +from jedi.parser import representation as pr + + +class Refactoring(object): + def __init__(self, change_dct): + """ + :param change_dct: dict(old_path=(new_path, old_lines, new_lines)) + """ + self.change_dct = change_dct + + def old_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[new_path] = '\n'.join(new_l) + return dct + + def new_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[new_path] = '\n'.join(new_l) + return dct + + def diff(self): + texts = [] + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + if old_path: + udiff = difflib.unified_diff(old_l, new_l) + else: + udiff = difflib.unified_diff(old_l, new_l, old_path, new_path) + texts.append('\n'.join(udiff)) + return '\n'.join(texts) + + +def rename(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param operation: The refactoring operation to execute. + :type operation: str + :type source: str + :return: list of changed lines/changed files + """ + return Refactoring(_rename(script.usages(), new_name)) + + +def _rename(names, replace_str): + """ For both rename and inline. """ + order = sorted(names, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + + def process(path, old_lines, new_lines): + if new_lines is not None: # goto next file, save last + dct[path] = path, old_lines, new_lines + + dct = {} + current_path = object() + new_lines = old_lines = None + for name in order: + if name.in_builtin_module(): + continue + if current_path != name.module_path: + current_path = name.module_path + + process(current_path, old_lines, new_lines) + if current_path is not None: + # None means take the source that is a normal param. + with open(current_path) as f: + source = f.read() + + new_lines = common.splitlines(common.source_to_unicode(source)) + old_lines = new_lines[:] + + nr, indent = name.line, name.column + line = new_lines[nr - 1] + new_lines[nr - 1] = line[:indent] + replace_str + \ + line[indent + len(name.name):] + process(current_path, old_lines, new_lines) + return dct + + +def extract(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param operation: The refactoring operation to execute. + :type operation: str + :type source: str + :return: list of changed lines/changed files + """ + new_lines = common.splitlines(common.source_to_unicode(script.source)) + old_lines = new_lines[:] + + user_stmt = script._parser.user_stmt() + + # TODO care for multiline extracts + dct = {} + if user_stmt: + pos = script._pos + line_index = pos[0] - 1 + arr, index = helpers.array_for_pos(user_stmt, pos) + if arr is not None: + start_pos = arr[index].start_pos + end_pos = arr[index].end_pos + + # take full line if the start line is different from end line + e = end_pos[1] if end_pos[0] == start_pos[0] else None + start_line = new_lines[start_pos[0] - 1] + text = start_line[start_pos[1]:e] + for l in range(start_pos[0], end_pos[0] - 1): + text += '\n' + l + if e is None: + end_line = new_lines[end_pos[0] - 1] + text += '\n' + end_line[:end_pos[1]] + + # remove code from new lines + t = text.lstrip() + del_start = start_pos[1] + len(text) - len(t) + + text = t.rstrip() + del_end = len(t) - len(text) + if e is None: + new_lines[end_pos[0] - 1] = end_line[end_pos[1] - del_end:] + e = len(start_line) + else: + e = e - del_end + start_line = start_line[:del_start] + new_name + start_line[e:] + new_lines[start_pos[0] - 1] = start_line + new_lines[start_pos[0]:end_pos[0] - 1] = [] + + # add parentheses in multiline case + open_brackets = ['(', '[', '{'] + close_brackets = [')', ']', '}'] + if '\n' in text and not (text[0] in open_brackets and text[-1] == + close_brackets[open_brackets.index(text[0])]): + text = '(%s)' % text + + # add new line before statement + indent = user_stmt.start_pos[1] + new = "%s%s = %s" % (' ' * indent, new_name, text) + new_lines.insert(line_index, new) + dct[script.path] = script.path, old_lines, new_lines + return Refactoring(dct) + + +def inline(script): + """ + :type script: api.Script + """ + new_lines = common.splitlines(common.source_to_unicode(script.source)) + + dct = {} + + definitions = script.goto_assignments() + with common.ignored(AssertionError): + assert len(definitions) == 1 + stmt = definitions[0]._definition + usages = script.usages() + inlines = [r for r in usages + if not stmt.start_pos <= (r.line, r.column) <= stmt.end_pos] + inlines = sorted(inlines, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + expression_list = stmt.expression_list() + # don't allow multiline refactorings for now. + assert stmt.start_pos[0] == stmt.end_pos[0] + index = stmt.start_pos[0] - 1 + + line = new_lines[index] + replace_str = line[expression_list[0].start_pos[1]:stmt.end_pos[1] + 1] + replace_str = replace_str.strip() + # tuples need parentheses + if expression_list and isinstance(expression_list[0], pr.Array): + arr = expression_list[0] + if replace_str[0] not in ['(', '[', '{'] and len(arr) > 1: + replace_str = '(%s)' % replace_str + + # if it's the only assignment, remove the statement + if len(stmt.get_defined_names()) == 1: + line = line[:stmt.start_pos[1]] + line[stmt.end_pos[1]:] + + dct = _rename(inlines, replace_str) + # remove the empty line + new_lines = dct[script.path][2] + if line.strip(): + new_lines[index] = line + else: + new_lines.pop(index) + + return Refactoring(dct) diff --git a/env/lib/python2.7/site-packages/jedi/refactoring.pyc b/env/lib/python2.7/site-packages/jedi/refactoring.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0e07ec2f0307feadc7f4485740c17d0cac1c89e GIT binary patch literal 7193 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 T*!==@vrt()S8voW*022=PpTI- literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/settings.py b/env/lib/python2.7/site-packages/jedi/settings.py new file mode 100644 index 0000000..0daa3fa --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/settings.py @@ -0,0 +1,245 @@ +""" +This module contains variables with global |jedi| settings. To change the +behavior of |jedi|, change the variables defined in :mod:`jedi.settings`. + +Plugins should expose an interface so that the user can adjust the +configuration. + + +Example usage:: + + from jedi import settings + settings.case_insensitive_completion = True + + +Completion output +~~~~~~~~~~~~~~~~~ + +.. autodata:: case_insensitive_completion +.. autodata:: add_dot_after_module +.. autodata:: add_bracket_after_function +.. autodata:: no_completion_duplicates + + +Filesystem cache +~~~~~~~~~~~~~~~~ + +.. autodata:: cache_directory +.. autodata:: use_filesystem_cache + + +Parser +~~~~~~ + +.. autodata:: fast_parser + + +Dynamic stuff +~~~~~~~~~~~~~ + +.. autodata:: dynamic_arrays_instances +.. autodata:: dynamic_array_additions +.. autodata:: dynamic_params +.. autodata:: dynamic_params_for_other_modules +.. autodata:: additional_dynamic_modules +.. autodata:: auto_import_modules + + +.. _settings-recursion: + +Recursions +~~~~~~~~~~ + +Recursion settings are important if you don't want extremly +recursive python code to go absolutely crazy. First of there is a +global limit :data:`max_executions`. This limit is important, to set +a maximum amount of time, the completion may use. + +The default values are based on experiments while completing the |jedi| library +itself (inception!). But I don't think there's any other Python library that +uses recursion in a similarly extreme way. These settings make the completion +definitely worse in some cases. But a completion should also be fast. + +.. autodata:: max_until_execution_unique +.. autodata:: max_function_recursion_level +.. autodata:: max_executions_without_builtins +.. autodata:: max_executions +.. autodata:: scale_call_signatures + + +Caching +~~~~~~~ + +.. autodata:: star_import_cache_validity +.. autodata:: call_signatures_validity + + +""" +import os +import platform + +# ---------------- +# completion output settings +# ---------------- + +case_insensitive_completion = True +""" +The completion is by default case insensitive. +""" + +add_dot_after_module = False +""" +Adds a dot after a module, because a module that is not accessed this way is +definitely not the normal case. However, in VIM this doesn't work, that's why +it isn't used at the moment. +""" + +add_bracket_after_function = False +""" +Adds an opening bracket after a function, because that's normal behaviour. +Removed it again, because in VIM that is not very practical. +""" + +no_completion_duplicates = True +""" +If set, completions with the same name don't appear in the output anymore, +but are in the `same_name_completions` attribute. +""" + +# ---------------- +# Filesystem cache +# ---------------- + +use_filesystem_cache = True +""" +Use filesystem cache to save once parsed files with pickle. +""" + +if platform.system().lower() == 'windows': + _cache_directory = os.path.join(os.getenv('APPDATA') or '~', 'Jedi', + 'Jedi') +elif platform.system().lower() == 'darwin': + _cache_directory = os.path.join('~', 'Library', 'Caches', 'Jedi') +else: + _cache_directory = os.path.join(os.getenv('XDG_CACHE_HOME') or '~/.cache', + 'jedi') +cache_directory = os.path.expanduser(_cache_directory) +""" +The path where all the caches can be found. + +On Linux, this defaults to ``~/.cache/jedi/``, on OS X to +``~/Library/Caches/Jedi/`` and on Windows to ``%APPDATA%\\Jedi\\Jedi\\``. +On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, +``$XDG_CACHE_HOME/jedi`` is used instead of the default one. +""" + +# ---------------- +# parser +# ---------------- + +fast_parser = True +""" +Use the fast parser. This means that reparsing is only being done if +something has been changed e.g. to a function. If this happens, only the +function is being reparsed. +""" + +# ---------------- +# dynamic stuff +# ---------------- + +dynamic_arrays_instances = True +""" +Check for `append`, etc. on array instances like list() +""" + +dynamic_array_additions = True +""" +check for `append`, etc. on arrays: [], {}, () +""" + +dynamic_params = True +""" +A dynamic param completion, finds the callees of the function, which define +the params of a function. +""" + +dynamic_params_for_other_modules = True +""" +Do the same for other modules. +""" + +additional_dynamic_modules = [] +""" +Additional modules in which |jedi| checks if statements are to be found. This +is practical for IDEs, that want to administrate their modules themselves. +""" + +dynamic_flow_information = True +""" +Check for `isinstance` and other information to infer a type. +""" + +auto_import_modules = [ + 'hashlib', # setattr +] +""" +Modules that are not analyzed but imported, although they contain Python code. +This improves autocompletion for libraries that use ``setattr`` or +``globals()`` modifications a lot. +""" + +# ---------------- +# recursions +# ---------------- + +max_until_execution_unique = 50 +""" +This limit is probably the most important one, because if this limit is +exceeded, functions can only be one time executed. So new functions will be +executed, complex recursions with the same functions again and again, are +ignored. +""" + +max_function_recursion_level = 5 +""" +`max_function_recursion_level` is more about whether the recursions are +stopped in deepth or in width. The ratio beetween this and +`max_until_execution_unique` is important here. It stops a recursion (after +the number of function calls in the recursion), if it was already used +earlier. +""" + +max_executions_without_builtins = 200 +""" +.. todo:: Document this. +""" + +max_executions = 250 +""" +A maximum amount of time, the completion may use. +""" + +scale_call_signatures = 0.1 +""" +Because call_signatures is normally used on every single key hit, it has +to be faster than a normal completion. This is the factor that is used to +scale `max_executions` and `max_until_execution_unique`: +""" + +# ---------------- +# caching validity (time) +# ---------------- + +star_import_cache_validity = 60.0 +""" +In huge packages like numpy, checking all star imports on every completion +might be slow, therefore we do a star import caching, that lasts a certain +time span (in seconds). +""" + +call_signatures_validity = 3.0 +""" +Finding function calls might be slow (0.1-0.5s). This is not acceptible for +normal writing. Therefore cache it for a short time. +""" diff --git a/env/lib/python2.7/site-packages/jedi/settings.pyc b/env/lib/python2.7/site-packages/jedi/settings.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28be3a9ada4e6f02eff61835c89bc9bbeba85483 GIT binary patch literal 3271 zcmai0+in~+81`39%*R{bp=v`)b2{XL0Um+nzWQdO9Vked*gV=o?Rz1<7Mng zvZ(4!?sx-u4sLh@?sypP5E6X$?CdGoVrBn${Qv&X2VeN>V)*mvKYI}wu0{NRf}i=S zMu;G!4Ok*OFLr-U4=Iw&rX!#c^| z5LqJ!Yvkaf->eg{Ku&9T4E)nab zeT#?<(!Nc^CDOh_#AVWckBBRz{XP*_N&7Al*GQW>?|rv<-8uDxB|^fzo-#DmqDUl- zbY{8A3_aqx;+;eqdaP`Zb`#y<34MJag?demv{q$Z)1Z5rMm?T&CAB>nc4UtqDV8F3$hlQI1IzH)2~YblvM{_WTdgppSaGgX>cmr(_H}MY z#(8X|QX}FRGst+VB5G_A$J5%( zUKAxM<9W^p#)ZrBEP`3nKA$3E@GBy!vw2idgr{#uvRLO#BM+;%%#v3!c)}{-WdP3* zA~RT-h{F)Om_U72W#U8lxyTI^Mgo6Z?ahQ^CXPqROnEMc3C=T1RZIuEph9Q&Ej@N8 z^2FvcO$OnR{gI^of$br?BP~$fnszni9ix-N%49&Joc}av(B~>gwV~Xd@sMCB4~M-X zQK_=D<@0<$WMu>DbAaxajvMj;0k*nw78#T$M&^xbu&Evnh~Pvrw~tWimhpV28Sg0X1JPD?&M9H#n=T6%BY0XR<4ECK{fO3fmau9pY-AHlzKMSeb|?XuCW~m{Hw~+amW3Ya3k(!>B5NS*y?j@~WbI_hHBlg_57`R5P5%WMQcO z#d>8iEXlFTgg!QYzqPx&v$eNn@iHNA>;mAIm?Jj8M(`Yzp6cr|o&2%WRT{eviXV19 zXWLubFP^a%-@JTgmK~2K#taBND>st-{T??xq>_3B3gwJJD02I&6!i(9{ch6jOL zubvDy%TG4%;oIM5m>LmdwvGdBtP|8vxJAoKy&yNc>}{OBWfWN__c^jh+H2UIH;U}7 zA>#Z2WN!jJZ|r!c=S>Rlv~n7G6%u_cbFX!u+g|A>4L>`Vccqotk-da%IcCN)$%Z&Y z`SVObN^UpsS?0oMY}r+uO$;8dZ`G@3=ZU=m;wj{KiumAGxN>$_Ize6@ot+q!|NJaE zJ13^}iQxxKHy1+xxUp9uz&$FeL>~?p&vSlR+dH`C(DRDf-W?LWrG&k`(}ipO+w#0} z^$N|eNN?o4I^2XVWDLv>KAYbooTm9y=gKrihw;8@A_9yLC0;>9K(_VFyj zv(GeLVKuAn+5nZSh)+t7J${M3c?=NL)@o}(uox@_K@bLuH*4?X1h9U)wo<#Y9;^bl T2%P%`D{H}Wu;Ncvabw{>xT6^S literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jedi/utils.py b/env/lib/python2.7/site-packages/jedi/utils.py new file mode 100644 index 0000000..6b48ef4 --- /dev/null +++ b/env/lib/python2.7/site-packages/jedi/utils.py @@ -0,0 +1,114 @@ +""" +Utilities for end-users. +""" + +from __future__ import absolute_import +import __main__ +from collections import namedtuple +import re +import os +import sys + +from jedi import Interpreter +from jedi.api.helpers import completion_parts +from jedi.parser.user_context import UserContext + + +def setup_readline(namespace_module=__main__): + """ + Install Jedi completer to :mod:`readline`. + + This function setups :mod:`readline` to use Jedi in Python interactive + shell. If you want to use a custom ``PYTHONSTARTUP`` file (typically + ``$HOME/.pythonrc.py``), you can add this piece of code:: + + try: + from jedi.utils import setup_readline + setup_readline() + except ImportError: + # Fallback to the stdlib readline completer if it is installed. + # Taken from http://docs.python.org/2/library/rlcompleter.html + print("Jedi is not installed, falling back to readline") + try: + import readline + import rlcompleter + readline.parse_and_bind("tab: complete") + except ImportError: + print("Readline is not installed either. No tab completion is enabled.") + + This will fallback to the readline completer if Jedi is not installed. + The readline completer will only complete names in the global namespace, + so for example:: + + ran + + will complete to ``range`` + + with both Jedi and readline, but:: + + range(10).cou + + will show complete to ``range(10).count`` only with Jedi. + + You'll also need to add ``export PYTHONSTARTUP=$HOME/.pythonrc.py`` to + your shell profile (usually ``.bash_profile`` or ``.profile`` if you use + bash). + + """ + class JediRL(object): + def complete(self, text, state): + """ + This complete stuff is pretty weird, a generator would make + a lot more sense, but probably due to backwards compatibility + this is still the way how it works. + + The only important part is stuff in the ``state == 0`` flow, + everything else has been copied from the ``rlcompleter`` std. + library module. + """ + if state == 0: + sys.path.insert(0, os.getcwd()) + # Calling python doesn't have a path, so add to sys.path. + try: + interpreter = Interpreter(text, [namespace_module.__dict__]) + + path = UserContext(text, (1, len(text))).get_path_until_cursor() + path, dot, like = completion_parts(path) + before = text[:len(text) - len(like)] + completions = interpreter.completions() + finally: + sys.path.pop(0) + + self.matches = [before + c.name_with_symbols for c in completions] + try: + return self.matches[state] + except IndexError: + return None + + try: + import readline + except ImportError: + print("Module readline not available.") + else: + readline.set_completer(JediRL().complete) + readline.parse_and_bind("tab: complete") + # jedi itself does the case matching + readline.parse_and_bind("set completion-ignore-case on") + # because it's easier to hit the tab just once + readline.parse_and_bind("set show-all-if-unmodified") + readline.parse_and_bind("set show-all-if-ambiguous on") + # don't repeat all the things written in the readline all the time + readline.parse_and_bind("set completion-prefix-display-length 2") + # No delimiters, Jedi handles that. + readline.set_completer_delims('') + + +def version_info(): + """ + Returns a namedtuple of Jedi's version, similar to Python's + ``sys.version_info``. + """ + Version = namedtuple('Version', 'major, minor, micro') + from jedi import __version__ + tupl = re.findall('[a-z]+|\d+', __version__) + return Version(*[x if i == 3 else int(x) for i, x in enumerate(tupl)]) diff --git a/env/lib/python2.7/site-packages/jedi/utils.pyc b/env/lib/python2.7/site-packages/jedi/utils.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31af6afa60d4e65d74272959e0c69ac70bca1a3a GIT binary patch literal 4562 zcmb_fOLH5?5$*-}gh)}gBEQOUP2`jXS|s4;k}Ae>QGO&+DyCISDv}U6i^c8$Sa2W6 z&a6PV$jU*kB$dj4$UXP`ll+q$a`C}m_hLbUQdKSjh~YfDd;0bD)c?EL`1^|=jslu} zYWTmuPh|dyPDs>2>rhyu*rB9GofcPC|;sunL5k!wH4~D$Qt&oQfIa5 zuTf`B`pXorQ_`SLqdc=h@fAuosIyUyS1I14^xdXAVu}P9c=(&{>Thr*F}ctU8Sx!O;@EaLD1QWeQg=4puJ?)-Dd#FAf^>0StCU29V*fxdCy_F{E!Od>*96`f;p& ztHVgm6rgiuGqsmw;a)e_ei%oo?zS4T|7aM&5=9!Ynv~JdtGT?DPs2zh%_vn5r*??V z5$oK?!RJ~?nW2v37DVW)X;!F-pW5oAuY$tZEK%L=!>330zd1NOy5}A}df4r%eiUof zw9|1EK<=qf>UMvA|C_JBYPZJ1DG$);cDHwgZs4cN4?|^H@^PdCt+GC@8tT2h@=mM= zn@{(I77zH-&%u5Kt+Wbwpi!k;l{fY(tt^}nWz3hF+w(995D!(xA^j{IYtmf{bs9q+ZHwzldlf5=25i----}@rFcy&|TqY3$jP+INicMTypdx^vgKb}_?9#$V zuRbKivoxO02`Nr^>>%PwgE;H?aXB~k1HB`1nXF8wCqAdVi-C~)>8D5cKL4zgU#M3; z!rs~KV#7dpyVbfKs$PahB!?O17u!+2!d{|0(9K_bvfT=@;xZ32%qHhIIA>JtPc33! zt~r7Jh1)D6JEx`@4GSd{M z;5>tiw|c%Adb0(VCg;iXG0ew#44F@e@$T)JjCKV{mo?=6ZUK*L`^d#_V@(74=HNjL z9>8PwP!K3!v|%7)#JRqY6F;B>WB}+K*C_uFL(j;ek<8e-UeqN_1Oy>ETO!+_Q$e6-bsnBA)7c8|obTt3pwc_)48*_` z5QC#@^f(0lQlJeMkzwq~00OVkm)~BevvoSffpr>f(%XNm(VzZJr$pXWN{Oah+#g-# z%e{N}IDHd9xg|jPKLJWq22Vi!u(<>Um_GxFMbjL%{E=XrJFBrpAITCqA24sHYNDe& z+)=(7=oC0)VZKRL#Gy)%Fc;|fDn_nLvK)z6r$&n>vq$t0+*1`6nthCedE)1x5x4bi z)Z;>>1f)_PWIx6n{24$lhMb{w3@je{M)fp+A;^G%VTli%hY--`X%?gaJ&TAk z!wTplEMmR5CN)^Z712TS4YY7R7-niL8))p?p*TKJL+2JH4^d`hW}s~_307+@!gF+22%6gu>RA~#v?G8@Zv+|1g@zDACXv$17CI0br~DLgYx zdRc7X@kEJlgP}HXZms}BeIj5i!X9L)ma0=mM#p{WaK(oR!lhW-0Ip zb-OHW?zDc{Hj&l4IDhO9v}uo!RoYUbFvPPms|ffNlYJizH8z}gYjx*F?Ptyn=RN0I z?Ty+;PTkpZHl3!Zvb2FH%@gf-GudF0pMrphC^vAK;A@oFW##VSXV@859Py|F^8p55 zi^I+FL}1u|?ng00Y|Ct7%L3RNmJ~&p#A8{+X3+D4l*G0B>us!ME0H*PYE8zS0J~#@6QF7yH4Hz zi_(6EqCi$8<@~-pZ?1!1;*YX?MCE#gLZ0Cy^#_0VyKirwJ_~P0 z9H%0>%jrat4TrwF%_EK-pd8< + {% for user in users %} +

  • {{ user.username }}
  • + {% endfor %} + + {% endblock %} + + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +__docformat__ = 'restructuredtext en' +__version__ = '2.7.3' + +# high level interface +from jinja2.environment import Environment, Template + +# loaders +from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, \ + DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader, \ + ModuleLoader + +# bytecode caches +from jinja2.bccache import BytecodeCache, FileSystemBytecodeCache, \ + MemcachedBytecodeCache + +# undefined types +from jinja2.runtime import Undefined, DebugUndefined, StrictUndefined + +# exceptions +from jinja2.exceptions import TemplateError, UndefinedError, \ + TemplateNotFound, TemplatesNotFound, TemplateSyntaxError, \ + TemplateAssertionError + +# decorators and public utilities +from jinja2.filters import environmentfilter, contextfilter, \ + evalcontextfilter +from jinja2.utils import Markup, escape, clear_caches, \ + environmentfunction, evalcontextfunction, contextfunction, \ + is_undefined + +__all__ = [ + 'Environment', 'Template', 'BaseLoader', 'FileSystemLoader', + 'PackageLoader', 'DictLoader', 'FunctionLoader', 'PrefixLoader', + 'ChoiceLoader', 'BytecodeCache', 'FileSystemBytecodeCache', + 'MemcachedBytecodeCache', 'Undefined', 'DebugUndefined', + 'StrictUndefined', 'TemplateError', 'UndefinedError', 'TemplateNotFound', + 'TemplatesNotFound', 'TemplateSyntaxError', 'TemplateAssertionError', + 'ModuleLoader', 'environmentfilter', 'contextfilter', 'Markup', 'escape', + 'environmentfunction', 'contextfunction', 'clear_caches', 'is_undefined', + 'evalcontextfilter', 'evalcontextfunction' +] diff --git a/env/lib/python2.7/site-packages/jinja2/__init__.pyc b/env/lib/python2.7/site-packages/jinja2/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0748391817c2d99558504ddd930960233392ad27 GIT binary patch literal 2451 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 T*sHVEI|%x0-Eqtf{$1@q$Uuix literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jinja2/_stringdefs.py b/env/lib/python2.7/site-packages/jinja2/_stringdefs.py new file mode 100644 index 0000000..da5830e --- /dev/null +++ b/env/lib/python2.7/site-packages/jinja2/_stringdefs.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +""" + jinja2._stringdefs + ~~~~~~~~~~~~~~~~~~ + + Strings of all Unicode characters of a certain category. + Used for matching in Unicode-aware languages. Run to regenerate. + + Inspired by chartypes_create.py from the MoinMoin project, original + implementation from Pygments. + + :copyright: Copyright 2006-2009 by the Jinja team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from jinja2._compat import unichr + +Cc = u'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f' + +Cf = u'\xad\u0600\u0601\u0602\u0603\u06dd\u070f\u17b4\u17b5\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb' + +Cn = u'\u0242\u0243\u0244\u0245\u0246\u0247\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u0370\u0371\u0372\u0373\u0376\u0377\u0378\u0379\u037b\u037c\u037d\u037f\u0380\u0381\u0382\u0383\u038b\u038d\u03a2\u03cf\u0487\u04cf\u04fa\u04fb\u04fc\u04fd\u04fe\u04ff\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519\u051a\u051b\u051c\u051d\u051e\u051f\u0520\u0521\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052a\u052b\u052c\u052d\u052e\u052f\u0530\u0557\u0558\u0560\u0588\u058b\u058c\u058d\u058e\u058f\u0590\u05ba\u05c8\u05c9\u05ca\u05cb\u05cc\u05cd\u05ce\u05cf\u05eb\u05ec\u05ed\u05ee\u05ef\u05f5\u05f6\u05f7\u05f8\u05f9\u05fa\u05fb\u05fc\u05fd\u05fe\u05ff\u0604\u0605\u0606\u0607\u0608\u0609\u060a\u0616\u0617\u0618\u0619\u061a\u061c\u061d\u0620\u063b\u063c\u063d\u063e\u063f\u065f\u070e\u074b\u074c\u076e\u076f\u0770\u0771\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779\u077a\u077b\u077c\u077d\u077e\u077f\u07b2\u07b3\u07b4\u07b5\u07b6\u07b7\u07b8\u07b9\u07ba\u07bb\u07bc\u07bd\u07be\u07bf\u07c0\u07c1\u07c2\u07c3\u07c4\u07c5\u07c6\u07c7\u07c8\u07c9\u07ca\u07cb\u07cc\u07cd\u07ce\u07cf\u07d0\u07d1\u07d2\u07d3\u07d4\u07d5\u07d6\u07d7\u07d8\u07d9\u07da\u07db\u07dc\u07dd\u07de\u07df\u07e0\u07e1\u07e2\u07e3\u07e4\u07e5\u07e6\u07e7\u07e8\u07e9\u07ea\u07eb\u07ec\u07ed\u07ee\u07ef\u07f0\u07f1\u07f2\u07f3\u07f4\u07f5\u07f6\u07f7\u07f8\u07f9\u07fa\u07fb\u07fc\u07fd\u07fe\u07ff\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f\u0810\u0811\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819\u081a\u081b\u081c\u081d\u081e\u081f\u0820\u0821\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829\u082a\u082b\u082c\u082d\u082e\u082f\u0830\u0831\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839\u083a\u083b\u083c\u083d\u083e\u083f\u0840\u0841\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849\u084a\u084b\u084c\u084d\u084e\u084f\u0850\u0851\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859\u085a\u085b\u085c\u085d\u085e\u085f\u0860\u0861\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869\u086a\u086b\u086c\u086d\u086e\u086f\u0870\u0871\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879\u087a\u087b\u087c\u087d\u087e\u087f\u0880\u0881\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889\u088a\u088b\u088c\u088d\u088e\u088f\u0890\u0891\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899\u089a\u089b\u089c\u089d\u089e\u089f\u08a0\u08a1\u08a2\u08a3\u08a4\u08a5\u08a6\u08a7\u08a8\u08a9\u08aa\u08ab\u08ac\u08ad\u08ae\u08af\u08b0\u08b1\u08b2\u08b3\u08b4\u08b5\u08b6\u08b7\u08b8\u08b9\u08ba\u08bb\u08bc\u08bd\u08be\u08bf\u08c0\u08c1\u08c2\u08c3\u08c4\u08c5\u08c6\u08c7\u08c8\u08c9\u08ca\u08cb\u08cc\u08cd\u08ce\u08cf\u08d0\u08d1\u08d2\u08d3\u08d4\u08d5\u08d6\u08d7\u08d8\u08d9\u08da\u08db\u08dc\u08dd\u08de\u08df\u08e0\u08e1\u08e2\u08e3\u08e4\u08e5\u08e6\u08e7\u08e8\u08e9\u08ea\u08eb\u08ec\u08ed\u08ee\u08ef\u08f0\u08f1\u08f2\u08f3\u08f4\u08f5\u08f6\u08f7\u08f8\u08f9\u08fa\u08fb\u08fc\u08fd\u08fe\u08ff\u0900\u093a\u093b\u094e\u094f\u0955\u0956\u0957\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097e\u097f\u0980\u0984\u098d\u098e\u0991\u0992\u09a9\u09b1\u09b3\u09b4\u09b5\u09ba\u09bb\u09c5\u09c6\u09c9\u09ca\u09cf\u09d0\u09d1\u09d2\u09d3\u09d4\u09d5\u09d6\u09d8\u09d9\u09da\u09db\u09de\u09e4\u09e5\u09fb\u09fc\u09fd\u09fe\u09ff\u0a00\u0a04\u0a0b\u0a0c\u0a0d\u0a0e\u0a11\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a\u0a3b\u0a3d\u0a43\u0a44\u0a45\u0a46\u0a49\u0a4a\u0a4e\u0a4f\u0a50\u0a51\u0a52\u0a53\u0a54\u0a55\u0a56\u0a57\u0a58\u0a5d\u0a5f\u0a60\u0a61\u0a62\u0a63\u0a64\u0a65\u0a75\u0a76\u0a77\u0a78\u0a79\u0a7a\u0a7b\u0a7c\u0a7d\u0a7e\u0a7f\u0a80\u0a84\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba\u0abb\u0ac6\u0aca\u0ace\u0acf\u0ad1\u0ad2\u0ad3\u0ad4\u0ad5\u0ad6\u0ad7\u0ad8\u0ad9\u0ada\u0adb\u0adc\u0add\u0ade\u0adf\u0ae4\u0ae5\u0af0\u0af2\u0af3\u0af4\u0af5\u0af6\u0af7\u0af8\u0af9\u0afa\u0afb\u0afc\u0afd\u0afe\u0aff\u0b00\u0b04\u0b0d\u0b0e\u0b11\u0b12\u0b29\u0b31\u0b34\u0b3a\u0b3b\u0b44\u0b45\u0b46\u0b49\u0b4a\u0b4e\u0b4f\u0b50\u0b51\u0b52\u0b53\u0b54\u0b55\u0b58\u0b59\u0b5a\u0b5b\u0b5e\u0b62\u0b63\u0b64\u0b65\u0b72\u0b73\u0b74\u0b75\u0b76\u0b77\u0b78\u0b79\u0b7a\u0b7b\u0b7c\u0b7d\u0b7e\u0b7f\u0b80\u0b81\u0b84\u0b8b\u0b8c\u0b8d\u0b91\u0b96\u0b97\u0b98\u0b9b\u0b9d\u0ba0\u0ba1\u0ba2\u0ba5\u0ba6\u0ba7\u0bab\u0bac\u0bad\u0bba\u0bbb\u0bbc\u0bbd\u0bc3\u0bc4\u0bc5\u0bc9\u0bce\u0bcf\u0bd0\u0bd1\u0bd2\u0bd3\u0bd4\u0bd5\u0bd6\u0bd8\u0bd9\u0bda\u0bdb\u0bdc\u0bdd\u0bde\u0bdf\u0be0\u0be1\u0be2\u0be3\u0be4\u0be5\u0bfb\u0bfc\u0bfd\u0bfe\u0bff\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a\u0c3b\u0c3c\u0c3d\u0c45\u0c49\u0c4e\u0c4f\u0c50\u0c51\u0c52\u0c53\u0c54\u0c57\u0c58\u0c59\u0c5a\u0c5b\u0c5c\u0c5d\u0c5e\u0c5f\u0c62\u0c63\u0c64\u0c65\u0c70\u0c71\u0c72\u0c73\u0c74\u0c75\u0c76\u0c77\u0c78\u0c79\u0c7a\u0c7b\u0c7c\u0c7d\u0c7e\u0c7f\u0c80\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba\u0cbb\u0cc5\u0cc9\u0cce\u0ccf\u0cd0\u0cd1\u0cd2\u0cd3\u0cd4\u0cd7\u0cd8\u0cd9\u0cda\u0cdb\u0cdc\u0cdd\u0cdf\u0ce2\u0ce3\u0ce4\u0ce5\u0cf0\u0cf1\u0cf2\u0cf3\u0cf4\u0cf5\u0cf6\u0cf7\u0cf8\u0cf9\u0cfa\u0cfb\u0cfc\u0cfd\u0cfe\u0cff\u0d00\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a\u0d3b\u0d3c\u0d3d\u0d44\u0d45\u0d49\u0d4e\u0d4f\u0d50\u0d51\u0d52\u0d53\u0d54\u0d55\u0d56\u0d58\u0d59\u0d5a\u0d5b\u0d5c\u0d5d\u0d5e\u0d5f\u0d62\u0d63\u0d64\u0d65\u0d70\u0d71\u0d72\u0d73\u0d74\u0d75\u0d76\u0d77\u0d78\u0d79\u0d7a\u0d7b\u0d7c\u0d7d\u0d7e\u0d7f\u0d80\u0d81\u0d84\u0d97\u0d98\u0d99\u0db2\u0dbc\u0dbe\u0dbf\u0dc7\u0dc8\u0dc9\u0dcb\u0dcc\u0dcd\u0dce\u0dd5\u0dd7\u0de0\u0de1\u0de2\u0de3\u0de4\u0de5\u0de6\u0de7\u0de8\u0de9\u0dea\u0deb\u0dec\u0ded\u0dee\u0def\u0df0\u0df1\u0df5\u0df6\u0df7\u0df8\u0df9\u0dfa\u0dfb\u0dfc\u0dfd\u0dfe\u0dff\u0e00\u0e3b\u0e3c\u0e3d\u0e3e\u0e5c\u0e5d\u0e5e\u0e5f\u0e60\u0e61\u0e62\u0e63\u0e64\u0e65\u0e66\u0e67\u0e68\u0e69\u0e6a\u0e6b\u0e6c\u0e6d\u0e6e\u0e6f\u0e70\u0e71\u0e72\u0e73\u0e74\u0e75\u0e76\u0e77\u0e78\u0e79\u0e7a\u0e7b\u0e7c\u0e7d\u0e7e\u0e7f\u0e80\u0e83\u0e85\u0e86\u0e89\u0e8b\u0e8c\u0e8e\u0e8f\u0e90\u0e91\u0e92\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8\u0ea9\u0eac\u0eba\u0ebe\u0ebf\u0ec5\u0ec7\u0ece\u0ecf\u0eda\u0edb\u0ede\u0edf\u0ee0\u0ee1\u0ee2\u0ee3\u0ee4\u0ee5\u0ee6\u0ee7\u0ee8\u0ee9\u0eea\u0eeb\u0eec\u0eed\u0eee\u0eef\u0ef0\u0ef1\u0ef2\u0ef3\u0ef4\u0ef5\u0ef6\u0ef7\u0ef8\u0ef9\u0efa\u0efb\u0efc\u0efd\u0efe\u0eff\u0f48\u0f6b\u0f6c\u0f6d\u0f6e\u0f6f\u0f70\u0f8c\u0f8d\u0f8e\u0f8f\u0f98\u0fbd\u0fcd\u0fce\u0fd2\u0fd3\u0fd4\u0fd5\u0fd6\u0fd7\u0fd8\u0fd9\u0fda\u0fdb\u0fdc\u0fdd\u0fde\u0fdf\u0fe0\u0fe1\u0fe2\u0fe3\u0fe4\u0fe5\u0fe6\u0fe7\u0fe8\u0fe9\u0fea\u0feb\u0fec\u0fed\u0fee\u0fef\u0ff0\u0ff1\u0ff2\u0ff3\u0ff4\u0ff5\u0ff6\u0ff7\u0ff8\u0ff9\u0ffa\u0ffb\u0ffc\u0ffd\u0ffe\u0fff\u1022\u1028\u102b\u1033\u1034\u1035\u103a\u103b\u103c\u103d\u103e\u103f\u105a\u105b\u105c\u105d\u105e\u105f\u1060\u1061\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069\u106a\u106b\u106c\u106d\u106e\u106f\u1070\u1071\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079\u107a\u107b\u107c\u107d\u107e\u107f\u1080\u1081\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089\u108a\u108b\u108c\u108d\u108e\u108f\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u109a\u109b\u109c\u109d\u109e\u109f\u10c6\u10c7\u10c8\u10c9\u10ca\u10cb\u10cc\u10cd\u10ce\u10cf\u10fd\u10fe\u10ff\u115a\u115b\u115c\u115d\u115e\u11a3\u11a4\u11a5\u11a6\u11a7\u11fa\u11fb\u11fc\u11fd\u11fe\u11ff\u1249\u124e\u124f\u1257\u1259\u125e\u125f\u1289\u128e\u128f\u12b1\u12b6\u12b7\u12bf\u12c1\u12c6\u12c7\u12d7\u1311\u1316\u1317\u135b\u135c\u135d\u135e\u137d\u137e\u137f\u139a\u139b\u139c\u139d\u139e\u139f\u13f5\u13f6\u13f7\u13f8\u13f9\u13fa\u13fb\u13fc\u13fd\u13fe\u13ff\u1400\u1677\u1678\u1679\u167a\u167b\u167c\u167d\u167e\u167f\u169d\u169e\u169f\u16f1\u16f2\u16f3\u16f4\u16f5\u16f6\u16f7\u16f8\u16f9\u16fa\u16fb\u16fc\u16fd\u16fe\u16ff\u170d\u1715\u1716\u1717\u1718\u1719\u171a\u171b\u171c\u171d\u171e\u171f\u1737\u1738\u1739\u173a\u173b\u173c\u173d\u173e\u173f\u1754\u1755\u1756\u1757\u1758\u1759\u175a\u175b\u175c\u175d\u175e\u175f\u176d\u1771\u1774\u1775\u1776\u1777\u1778\u1779\u177a\u177b\u177c\u177d\u177e\u177f\u17de\u17df\u17ea\u17eb\u17ec\u17ed\u17ee\u17ef\u17fa\u17fb\u17fc\u17fd\u17fe\u17ff\u180f\u181a\u181b\u181c\u181d\u181e\u181f\u1878\u1879\u187a\u187b\u187c\u187d\u187e\u187f\u18aa\u18ab\u18ac\u18ad\u18ae\u18af\u18b0\u18b1\u18b2\u18b3\u18b4\u18b5\u18b6\u18b7\u18b8\u18b9\u18ba\u18bb\u18bc\u18bd\u18be\u18bf\u18c0\u18c1\u18c2\u18c3\u18c4\u18c5\u18c6\u18c7\u18c8\u18c9\u18ca\u18cb\u18cc\u18cd\u18ce\u18cf\u18d0\u18d1\u18d2\u18d3\u18d4\u18d5\u18d6\u18d7\u18d8\u18d9\u18da\u18db\u18dc\u18dd\u18de\u18df\u18e0\u18e1\u18e2\u18e3\u18e4\u18e5\u18e6\u18e7\u18e8\u18e9\u18ea\u18eb\u18ec\u18ed\u18ee\u18ef\u18f0\u18f1\u18f2\u18f3\u18f4\u18f5\u18f6\u18f7\u18f8\u18f9\u18fa\u18fb\u18fc\u18fd\u18fe\u18ff\u191d\u191e\u191f\u192c\u192d\u192e\u192f\u193c\u193d\u193e\u193f\u1941\u1942\u1943\u196e\u196f\u1975\u1976\u1977\u1978\u1979\u197a\u197b\u197c\u197d\u197e\u197f\u19aa\u19ab\u19ac\u19ad\u19ae\u19af\u19ca\u19cb\u19cc\u19cd\u19ce\u19cf\u19da\u19db\u19dc\u19dd\u1a1c\u1a1d\u1a20\u1a21\u1a22\u1a23\u1a24\u1a25\u1a26\u1a27\u1a28\u1a29\u1a2a\u1a2b\u1a2c\u1a2d\u1a2e\u1a2f\u1a30\u1a31\u1a32\u1a33\u1a34\u1a35\u1a36\u1a37\u1a38\u1a39\u1a3a\u1a3b\u1a3c\u1a3d\u1a3e\u1a3f\u1a40\u1a41\u1a42\u1a43\u1a44\u1a45\u1a46\u1a47\u1a48\u1a49\u1a4a\u1a4b\u1a4c\u1a4d\u1a4e\u1a4f\u1a50\u1a51\u1a52\u1a53\u1a54\u1a55\u1a56\u1a57\u1a58\u1a59\u1a5a\u1a5b\u1a5c\u1a5d\u1a5e\u1a5f\u1a60\u1a61\u1a62\u1a63\u1a64\u1a65\u1a66\u1a67\u1a68\u1a69\u1a6a\u1a6b\u1a6c\u1a6d\u1a6e\u1a6f\u1a70\u1a71\u1a72\u1a73\u1a74\u1a75\u1a76\u1a77\u1a78\u1a79\u1a7a\u1a7b\u1a7c\u1a7d\u1a7e\u1a7f\u1a80\u1a81\u1a82\u1a83\u1a84\u1a85\u1a86\u1a87\u1a88\u1a89\u1a8a\u1a8b\u1a8c\u1a8d\u1a8e\u1a8f\u1a90\u1a91\u1a92\u1a93\u1a94\u1a95\u1a96\u1a97\u1a98\u1a99\u1a9a\u1a9b\u1a9c\u1a9d\u1a9e\u1a9f\u1aa0\u1aa1\u1aa2\u1aa3\u1aa4\u1aa5\u1aa6\u1aa7\u1aa8\u1aa9\u1aaa\u1aab\u1aac\u1aad\u1aae\u1aaf\u1ab0\u1ab1\u1ab2\u1ab3\u1ab4\u1ab5\u1ab6\u1ab7\u1ab8\u1ab9\u1aba\u1abb\u1abc\u1abd\u1abe\u1abf\u1ac0\u1ac1\u1ac2\u1ac3\u1ac4\u1ac5\u1ac6\u1ac7\u1ac8\u1ac9\u1aca\u1acb\u1acc\u1acd\u1ace\u1acf\u1ad0\u1ad1\u1ad2\u1ad3\u1ad4\u1ad5\u1ad6\u1ad7\u1ad8\u1ad9\u1ada\u1adb\u1adc\u1add\u1ade\u1adf\u1ae0\u1ae1\u1ae2\u1ae3\u1ae4\u1ae5\u1ae6\u1ae7\u1ae8\u1ae9\u1aea\u1aeb\u1aec\u1aed\u1aee\u1aef\u1af0\u1af1\u1af2\u1af3\u1af4\u1af5\u1af6\u1af7\u1af8\u1af9\u1afa\u1afb\u1afc\u1afd\u1afe\u1aff\u1b00\u1b01\u1b02\u1b03\u1b04\u1b05\u1b06\u1b07\u1b08\u1b09\u1b0a\u1b0b\u1b0c\u1b0d\u1b0e\u1b0f\u1b10\u1b11\u1b12\u1b13\u1b14\u1b15\u1b16\u1b17\u1b18\u1b19\u1b1a\u1b1b\u1b1c\u1b1d\u1b1e\u1b1f\u1b20\u1b21\u1b22\u1b23\u1b24\u1b25\u1b26\u1b27\u1b28\u1b29\u1b2a\u1b2b\u1b2c\u1b2d\u1b2e\u1b2f\u1b30\u1b31\u1b32\u1b33\u1b34\u1b35\u1b36\u1b37\u1b38\u1b39\u1b3a\u1b3b\u1b3c\u1b3d\u1b3e\u1b3f\u1b40\u1b41\u1b42\u1b43\u1b44\u1b45\u1b46\u1b47\u1b48\u1b49\u1b4a\u1b4b\u1b4c\u1b4d\u1b4e\u1b4f\u1b50\u1b51\u1b52\u1b53\u1b54\u1b55\u1b56\u1b57\u1b58\u1b59\u1b5a\u1b5b\u1b5c\u1b5d\u1b5e\u1b5f\u1b60\u1b61\u1b62\u1b63\u1b64\u1b65\u1b66\u1b67\u1b68\u1b69\u1b6a\u1b6b\u1b6c\u1b6d\u1b6e\u1b6f\u1b70\u1b71\u1b72\u1b73\u1b74\u1b75\u1b76\u1b77\u1b78\u1b79\u1b7a\u1b7b\u1b7c\u1b7d\u1b7e\u1b7f\u1b80\u1b81\u1b82\u1b83\u1b84\u1b85\u1b86\u1b87\u1b88\u1b89\u1b8a\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\u1b92\u1b93\u1b94\u1b95\u1b96\u1b97\u1b98\u1b99\u1b9a\u1b9b\u1b9c\u1b9d\u1b9e\u1b9f\u1ba0\u1ba1\u1ba2\u1ba3\u1ba4\u1ba5\u1ba6\u1ba7\u1ba8\u1ba9\u1baa\u1bab\u1bac\u1bad\u1bae\u1baf\u1bb0\u1bb1\u1bb2\u1bb3\u1bb4\u1bb5\u1bb6\u1bb7\u1bb8\u1bb9\u1bba\u1bbb\u1bbc\u1bbd\u1bbe\u1bbf\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u1bcc\u1bcd\u1bce\u1bcf\u1bd0\u1bd1\u1bd2\u1bd3\u1bd4\u1bd5\u1bd6\u1bd7\u1bd8\u1bd9\u1bda\u1bdb\u1bdc\u1bdd\u1bde\u1bdf\u1be0\u1be1\u1be2\u1be3\u1be4\u1be5\u1be6\u1be7\u1be8\u1be9\u1bea\u1beb\u1bec\u1bed\u1bee\u1bef\u1bf0\u1bf1\u1bf2\u1bf3\u1bf4\u1bf5\u1bf6\u1bf7\u1bf8\u1bf9\u1bfa\u1bfb\u1bfc\u1bfd\u1bfe\u1bff\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c1b\u1c1c\u1c1d\u1c1e\u1c1f\u1c20\u1c21\u1c22\u1c23\u1c24\u1c25\u1c26\u1c27\u1c28\u1c29\u1c2a\u1c2b\u1c2c\u1c2d\u1c2e\u1c2f\u1c30\u1c31\u1c32\u1c33\u1c34\u1c35\u1c36\u1c37\u1c38\u1c39\u1c3a\u1c3b\u1c3c\u1c3d\u1c3e\u1c3f\u1c40\u1c41\u1c42\u1c43\u1c44\u1c45\u1c46\u1c47\u1c48\u1c49\u1c4a\u1c4b\u1c4c\u1c4d\u1c4e\u1c4f\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59\u1c5a\u1c5b\u1c5c\u1c5d\u1c5e\u1c5f\u1c60\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u1c67\u1c68\u1c69\u1c6a\u1c6b\u1c6c\u1c6d\u1c6e\u1c6f\u1c70\u1c71\u1c72\u1c73\u1c74\u1c75\u1c76\u1c77\u1c78\u1c79\u1c7a\u1c7b\u1c7c\u1c7d\u1c7e\u1c7f\u1c80\u1c81\u1c82\u1c83\u1c84\u1c85\u1c86\u1c87\u1c88\u1c89\u1c8a\u1c8b\u1c8c\u1c8d\u1c8e\u1c8f\u1c90\u1c91\u1c92\u1c93\u1c94\u1c95\u1c96\u1c97\u1c98\u1c99\u1c9a\u1c9b\u1c9c\u1c9d\u1c9e\u1c9f\u1ca0\u1ca1\u1ca2\u1ca3\u1ca4\u1ca5\u1ca6\u1ca7\u1ca8\u1ca9\u1caa\u1cab\u1cac\u1cad\u1cae\u1caf\u1cb0\u1cb1\u1cb2\u1cb3\u1cb4\u1cb5\u1cb6\u1cb7\u1cb8\u1cb9\u1cba\u1cbb\u1cbc\u1cbd\u1cbe\u1cbf\u1cc0\u1cc1\u1cc2\u1cc3\u1cc4\u1cc5\u1cc6\u1cc7\u1cc8\u1cc9\u1cca\u1ccb\u1ccc\u1ccd\u1cce\u1ccf\u1cd0\u1cd1\u1cd2\u1cd3\u1cd4\u1cd5\u1cd6\u1cd7\u1cd8\u1cd9\u1cda\u1cdb\u1cdc\u1cdd\u1cde\u1cdf\u1ce0\u1ce1\u1ce2\u1ce3\u1ce4\u1ce5\u1ce6\u1ce7\u1ce8\u1ce9\u1cea\u1ceb\u1cec\u1ced\u1cee\u1cef\u1cf0\u1cf1\u1cf2\u1cf3\u1cf4\u1cf5\u1cf6\u1cf7\u1cf8\u1cf9\u1cfa\u1cfb\u1cfc\u1cfd\u1cfe\u1cff\u1dc4\u1dc5\u1dc6\u1dc7\u1dc8\u1dc9\u1dca\u1dcb\u1dcc\u1dcd\u1dce\u1dcf\u1dd0\u1dd1\u1dd2\u1dd3\u1dd4\u1dd5\u1dd6\u1dd7\u1dd8\u1dd9\u1dda\u1ddb\u1ddc\u1ddd\u1dde\u1ddf\u1de0\u1de1\u1de2\u1de3\u1de4\u1de5\u1de6\u1de7\u1de8\u1de9\u1dea\u1deb\u1dec\u1ded\u1dee\u1def\u1df0\u1df1\u1df2\u1df3\u1df4\u1df5\u1df6\u1df7\u1df8\u1df9\u1dfa\u1dfb\u1dfc\u1dfd\u1dfe\u1dff\u1e9c\u1e9d\u1e9e\u1e9f\u1efa\u1efb\u1efc\u1efd\u1efe\u1eff\u1f16\u1f17\u1f1e\u1f1f\u1f46\u1f47\u1f4e\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e\u1f7f\u1fb5\u1fc5\u1fd4\u1fd5\u1fdc\u1ff0\u1ff1\u1ff5\u1fff\u2064\u2065\u2066\u2067\u2068\u2069\u2072\u2073\u208f\u2095\u2096\u2097\u2098\u2099\u209a\u209b\u209c\u209d\u209e\u209f\u20b6\u20b7\u20b8\u20b9\u20ba\u20bb\u20bc\u20bd\u20be\u20bf\u20c0\u20c1\u20c2\u20c3\u20c4\u20c5\u20c6\u20c7\u20c8\u20c9\u20ca\u20cb\u20cc\u20cd\u20ce\u20cf\u20ec\u20ed\u20ee\u20ef\u20f0\u20f1\u20f2\u20f3\u20f4\u20f5\u20f6\u20f7\u20f8\u20f9\u20fa\u20fb\u20fc\u20fd\u20fe\u20ff\u214d\u214e\u214f\u2150\u2151\u2152\u2184\u2185\u2186\u2187\u2188\u2189\u218a\u218b\u218c\u218d\u218e\u218f\u23dc\u23dd\u23de\u23df\u23e0\u23e1\u23e2\u23e3\u23e4\u23e5\u23e6\u23e7\u23e8\u23e9\u23ea\u23eb\u23ec\u23ed\u23ee\u23ef\u23f0\u23f1\u23f2\u23f3\u23f4\u23f5\u23f6\u23f7\u23f8\u23f9\u23fa\u23fb\u23fc\u23fd\u23fe\u23ff\u2427\u2428\u2429\u242a\u242b\u242c\u242d\u242e\u242f\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437\u2438\u2439\u243a\u243b\u243c\u243d\u243e\u243f\u244b\u244c\u244d\u244e\u244f\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457\u2458\u2459\u245a\u245b\u245c\u245d\u245e\u245f\u269d\u269e\u269f\u26b2\u26b3\u26b4\u26b5\u26b6\u26b7\u26b8\u26b9\u26ba\u26bb\u26bc\u26bd\u26be\u26bf\u26c0\u26c1\u26c2\u26c3\u26c4\u26c5\u26c6\u26c7\u26c8\u26c9\u26ca\u26cb\u26cc\u26cd\u26ce\u26cf\u26d0\u26d1\u26d2\u26d3\u26d4\u26d5\u26d6\u26d7\u26d8\u26d9\u26da\u26db\u26dc\u26dd\u26de\u26df\u26e0\u26e1\u26e2\u26e3\u26e4\u26e5\u26e6\u26e7\u26e8\u26e9\u26ea\u26eb\u26ec\u26ed\u26ee\u26ef\u26f0\u26f1\u26f2\u26f3\u26f4\u26f5\u26f6\u26f7\u26f8\u26f9\u26fa\u26fb\u26fc\u26fd\u26fe\u26ff\u2700\u2705\u270a\u270b\u2728\u274c\u274e\u2753\u2754\u2755\u2757\u275f\u2760\u2795\u2796\u2797\u27b0\u27bf\u27c7\u27c8\u27c9\u27ca\u27cb\u27cc\u27cd\u27ce\u27cf\u27ec\u27ed\u27ee\u27ef\u2b14\u2b15\u2b16\u2b17\u2b18\u2b19\u2b1a\u2b1b\u2b1c\u2b1d\u2b1e\u2b1f\u2b20\u2b21\u2b22\u2b23\u2b24\u2b25\u2b26\u2b27\u2b28\u2b29\u2b2a\u2b2b\u2b2c\u2b2d\u2b2e\u2b2f\u2b30\u2b31\u2b32\u2b33\u2b34\u2b35\u2b36\u2b37\u2b38\u2b39\u2b3a\u2b3b\u2b3c\u2b3d\u2b3e\u2b3f\u2b40\u2b41\u2b42\u2b43\u2b44\u2b45\u2b46\u2b47\u2b48\u2b49\u2b4a\u2b4b\u2b4c\u2b4d\u2b4e\u2b4f\u2b50\u2b51\u2b52\u2b53\u2b54\u2b55\u2b56\u2b57\u2b58\u2b59\u2b5a\u2b5b\u2b5c\u2b5d\u2b5e\u2b5f\u2b60\u2b61\u2b62\u2b63\u2b64\u2b65\u2b66\u2b67\u2b68\u2b69\u2b6a\u2b6b\u2b6c\u2b6d\u2b6e\u2b6f\u2b70\u2b71\u2b72\u2b73\u2b74\u2b75\u2b76\u2b77\u2b78\u2b79\u2b7a\u2b7b\u2b7c\u2b7d\u2b7e\u2b7f\u2b80\u2b81\u2b82\u2b83\u2b84\u2b85\u2b86\u2b87\u2b88\u2b89\u2b8a\u2b8b\u2b8c\u2b8d\u2b8e\u2b8f\u2b90\u2b91\u2b92\u2b93\u2b94\u2b95\u2b96\u2b97\u2b98\u2b99\u2b9a\u2b9b\u2b9c\u2b9d\u2b9e\u2b9f\u2ba0\u2ba1\u2ba2\u2ba3\u2ba4\u2ba5\u2ba6\u2ba7\u2ba8\u2ba9\u2baa\u2bab\u2bac\u2bad\u2bae\u2baf\u2bb0\u2bb1\u2bb2\u2bb3\u2bb4\u2bb5\u2bb6\u2bb7\u2bb8\u2bb9\u2bba\u2bbb\u2bbc\u2bbd\u2bbe\u2bbf\u2bc0\u2bc1\u2bc2\u2bc3\u2bc4\u2bc5\u2bc6\u2bc7\u2bc8\u2bc9\u2bca\u2bcb\u2bcc\u2bcd\u2bce\u2bcf\u2bd0\u2bd1\u2bd2\u2bd3\u2bd4\u2bd5\u2bd6\u2bd7\u2bd8\u2bd9\u2bda\u2bdb\u2bdc\u2bdd\u2bde\u2bdf\u2be0\u2be1\u2be2\u2be3\u2be4\u2be5\u2be6\u2be7\u2be8\u2be9\u2bea\u2beb\u2bec\u2bed\u2bee\u2bef\u2bf0\u2bf1\u2bf2\u2bf3\u2bf4\u2bf5\u2bf6\u2bf7\u2bf8\u2bf9\u2bfa\u2bfb\u2bfc\u2bfd\u2bfe\u2bff\u2c2f\u2c5f\u2c60\u2c61\u2c62\u2c63\u2c64\u2c65\u2c66\u2c67\u2c68\u2c69\u2c6a\u2c6b\u2c6c\u2c6d\u2c6e\u2c6f\u2c70\u2c71\u2c72\u2c73\u2c74\u2c75\u2c76\u2c77\u2c78\u2c79\u2c7a\u2c7b\u2c7c\u2c7d\u2c7e\u2c7f\u2ceb\u2cec\u2ced\u2cee\u2cef\u2cf0\u2cf1\u2cf2\u2cf3\u2cf4\u2cf5\u2cf6\u2cf7\u2cf8\u2d26\u2d27\u2d28\u2d29\u2d2a\u2d2b\u2d2c\u2d2d\u2d2e\u2d2f\u2d66\u2d67\u2d68\u2d69\u2d6a\u2d6b\u2d6c\u2d6d\u2d6e\u2d70\u2d71\u2d72\u2d73\u2d74\u2d75\u2d76\u2d77\u2d78\u2d79\u2d7a\u2d7b\u2d7c\u2d7d\u2d7e\u2d7f\u2d97\u2d98\u2d99\u2d9a\u2d9b\u2d9c\u2d9d\u2d9e\u2d9f\u2da7\u2daf\u2db7\u2dbf\u2dc7\u2dcf\u2dd7\u2ddf\u2de0\u2de1\u2de2\u2de3\u2de4\u2de5\u2de6\u2de7\u2de8\u2de9\u2dea\u2deb\u2dec\u2ded\u2dee\u2def\u2df0\u2df1\u2df2\u2df3\u2df4\u2df5\u2df6\u2df7\u2df8\u2df9\u2dfa\u2dfb\u2dfc\u2dfd\u2dfe\u2dff\u2e18\u2e19\u2e1a\u2e1b\u2e1e\u2e1f\u2e20\u2e21\u2e22\u2e23\u2e24\u2e25\u2e26\u2e27\u2e28\u2e29\u2e2a\u2e2b\u2e2c\u2e2d\u2e2e\u2e2f\u2e30\u2e31\u2e32\u2e33\u2e34\u2e35\u2e36\u2e37\u2e38\u2e39\u2e3a\u2e3b\u2e3c\u2e3d\u2e3e\u2e3f\u2e40\u2e41\u2e42\u2e43\u2e44\u2e45\u2e46\u2e47\u2e48\u2e49\u2e4a\u2e4b\u2e4c\u2e4d\u2e4e\u2e4f\u2e50\u2e51\u2e52\u2e53\u2e54\u2e55\u2e56\u2e57\u2e58\u2e59\u2e5a\u2e5b\u2e5c\u2e5d\u2e5e\u2e5f\u2e60\u2e61\u2e62\u2e63\u2e64\u2e65\u2e66\u2e67\u2e68\u2e69\u2e6a\u2e6b\u2e6c\u2e6d\u2e6e\u2e6f\u2e70\u2e71\u2e72\u2e73\u2e74\u2e75\u2e76\u2e77\u2e78\u2e79\u2e7a\u2e7b\u2e7c\u2e7d\u2e7e\u2e7f\u2e9a\u2ef4\u2ef5\u2ef6\u2ef7\u2ef8\u2ef9\u2efa\u2efb\u2efc\u2efd\u2efe\u2eff\u2fd6\u2fd7\u2fd8\u2fd9\u2fda\u2fdb\u2fdc\u2fdd\u2fde\u2fdf\u2fe0\u2fe1\u2fe2\u2fe3\u2fe4\u2fe5\u2fe6\u2fe7\u2fe8\u2fe9\u2fea\u2feb\u2fec\u2fed\u2fee\u2fef\u2ffc\u2ffd\u2ffe\u2fff\u3040\u3097\u3098\u3100\u3101\u3102\u3103\u3104\u312d\u312e\u312f\u3130\u318f\u31b8\u31b9\u31ba\u31bb\u31bc\u31bd\u31be\u31bf\u31d0\u31d1\u31d2\u31d3\u31d4\u31d5\u31d6\u31d7\u31d8\u31d9\u31da\u31db\u31dc\u31dd\u31de\u31df\u31e0\u31e1\u31e2\u31e3\u31e4\u31e5\u31e6\u31e7\u31e8\u31e9\u31ea\u31eb\u31ec\u31ed\u31ee\u31ef\u321f\u3244\u3245\u3246\u3247\u3248\u3249\u324a\u324b\u324c\u324d\u324e\u324f\u32ff\u4db6\u4db7\u4db8\u4db9\u4dba\u4dbb\u4dbc\u4dbd\u4dbe\u4dbf\u9fbc\u9fbd\u9fbe\u9fbf\u9fc0\u9fc1\u9fc2\u9fc3\u9fc4\u9fc5\u9fc6\u9fc7\u9fc8\u9fc9\u9fca\u9fcb\u9fcc\u9fcd\u9fce\u9fcf\u9fd0\u9fd1\u9fd2\u9fd3\u9fd4\u9fd5\u9fd6\u9fd7\u9fd8\u9fd9\u9fda\u9fdb\u9fdc\u9fdd\u9fde\u9fdf\u9fe0\u9fe1\u9fe2\u9fe3\u9fe4\u9fe5\u9fe6\u9fe7\u9fe8\u9fe9\u9fea\u9feb\u9fec\u9fed\u9fee\u9fef\u9ff0\u9ff1\u9ff2\u9ff3\u9ff4\u9ff5\u9ff6\u9ff7\u9ff8\u9ff9\u9ffa\u9ffb\u9ffc\u9ffd\u9ffe\u9fff\ua48d\ua48e\ua48f\ua4c7\ua4c8\ua4c9\ua4ca\ua4cb\ua4cc\ua4cd\ua4ce\ua4cf\ua4d0\ua4d1\ua4d2\ua4d3\ua4d4\ua4d5\ua4d6\ua4d7\ua4d8\ua4d9\ua4da\ua4db\ua4dc\ua4dd\ua4de\ua4df\ua4e0\ua4e1\ua4e2\ua4e3\ua4e4\ua4e5\ua4e6\ua4e7\ua4e8\ua4e9\ua4ea\ua4eb\ua4ec\ua4ed\ua4ee\ua4ef\ua4f0\ua4f1\ua4f2\ua4f3\ua4f4\ua4f5\ua4f6\ua4f7\ua4f8\ua4f9\ua4fa\ua4fb\ua4fc\ua4fd\ua4fe\ua4ff\ua500\ua501\ua502\ua503\ua504\ua505\ua506\ua507\ua508\ua509\ua50a\ua50b\ua50c\ua50d\ua50e\ua50f\ua510\ua511\ua512\ua513\ua514\ua515\ua516\ua517\ua518\ua519\ua51a\ua51b\ua51c\ua51d\ua51e\ua51f\ua520\ua521\ua522\ua523\ua524\ua525\ua526\ua527\ua528\ua529\ua52a\ua52b\ua52c\ua52d\ua52e\ua52f\ua530\ua531\ua532\ua533\ua534\ua535\ua536\ua537\ua538\ua539\ua53a\ua53b\ua53c\ua53d\ua53e\ua53f\ua540\ua541\ua542\ua543\ua544\ua545\ua546\ua547\ua548\ua549\ua54a\ua54b\ua54c\ua54d\ua54e\ua54f\ua550\ua551\ua552\ua553\ua554\ua555\ua556\ua557\ua558\ua559\ua55a\ua55b\ua55c\ua55d\ua55e\ua55f\ua560\ua561\ua562\ua563\ua564\ua565\ua566\ua567\ua568\ua569\ua56a\ua56b\ua56c\ua56d\ua56e\ua56f\ua570\ua571\ua572\ua573\ua574\ua575\ua576\ua577\ua578\ua579\ua57a\ua57b\ua57c\ua57d\ua57e\ua57f\ua580\ua581\ua582\ua583\ua584\ua585\ua586\ua587\ua588\ua589\ua58a\ua58b\ua58c\ua58d\ua58e\ua58f\ua590\ua591\ua592\ua593\ua594\ua595\ua596\ua597\ua598\ua599\ua59a\ua59b\ua59c\ua59d\ua59e\ua59f\ua5a0\ua5a1\ua5a2\ua5a3\ua5a4\ua5a5\ua5a6\ua5a7\ua5a8\ua5a9\ua5aa\ua5ab\ua5ac\ua5ad\ua5ae\ua5af\ua5b0\ua5b1\ua5b2\ua5b3\ua5b4\ua5b5\ua5b6\ua5b7\ua5b8\ua5b9\ua5ba\ua5bb\ua5bc\ua5bd\ua5be\ua5bf\ua5c0\ua5c1\ua5c2\ua5c3\ua5c4\ua5c5\ua5c6\ua5c7\ua5c8\ua5c9\ua5ca\ua5cb\ua5cc\ua5cd\ua5ce\ua5cf\ua5d0\ua5d1\ua5d2\ua5d3\ua5d4\ua5d5\ua5d6\ua5d7\ua5d8\ua5d9\ua5da\ua5db\ua5dc\ua5dd\ua5de\ua5df\ua5e0\ua5e1\ua5e2\ua5e3\ua5e4\ua5e5\ua5e6\ua5e7\ua5e8\ua5e9\ua5ea\ua5eb\ua5ec\ua5ed\ua5ee\ua5ef\ua5f0\ua5f1\ua5f2\ua5f3\ua5f4\ua5f5\ua5f6\ua5f7\ua5f8\ua5f9\ua5fa\ua5fb\ua5fc\ua5fd\ua5fe\ua5ff\ua600\ua601\ua602\ua603\ua604\ua605\ua606\ua607\ua608\ua609\ua60a\ua60b\ua60c\ua60d\ua60e\ua60f\ua610\ua611\ua612\ua613\ua614\ua615\ua616\ua617\ua618\ua619\ua61a\ua61b\ua61c\ua61d\ua61e\ua61f\ua620\ua621\ua622\ua623\ua624\ua625\ua626\ua627\ua628\ua629\ua62a\ua62b\ua62c\ua62d\ua62e\ua62f\ua630\ua631\ua632\ua633\ua634\ua635\ua636\ua637\ua638\ua639\ua63a\ua63b\ua63c\ua63d\ua63e\ua63f\ua640\ua641\ua642\ua643\ua644\ua645\ua646\ua647\ua648\ua649\ua64a\ua64b\ua64c\ua64d\ua64e\ua64f\ua650\ua651\ua652\ua653\ua654\ua655\ua656\ua657\ua658\ua659\ua65a\ua65b\ua65c\ua65d\ua65e\ua65f\ua660\ua661\ua662\ua663\ua664\ua665\ua666\ua667\ua668\ua669\ua66a\ua66b\ua66c\ua66d\ua66e\ua66f\ua670\ua671\ua672\ua673\ua674\ua675\ua676\ua677\ua678\ua679\ua67a\ua67b\ua67c\ua67d\ua67e\ua67f\ua680\ua681\ua682\ua683\ua684\ua685\ua686\ua687\ua688\ua689\ua68a\ua68b\ua68c\ua68d\ua68e\ua68f\ua690\ua691\ua692\ua693\ua694\ua695\ua696\ua697\ua698\ua699\ua69a\ua69b\ua69c\ua69d\ua69e\ua69f\ua6a0\ua6a1\ua6a2\ua6a3\ua6a4\ua6a5\ua6a6\ua6a7\ua6a8\ua6a9\ua6aa\ua6ab\ua6ac\ua6ad\ua6ae\ua6af\ua6b0\ua6b1\ua6b2\ua6b3\ua6b4\ua6b5\ua6b6\ua6b7\ua6b8\ua6b9\ua6ba\ua6bb\ua6bc\ua6bd\ua6be\ua6bf\ua6c0\ua6c1\ua6c2\ua6c3\ua6c4\ua6c5\ua6c6\ua6c7\ua6c8\ua6c9\ua6ca\ua6cb\ua6cc\ua6cd\ua6ce\ua6cf\ua6d0\ua6d1\ua6d2\ua6d3\ua6d4\ua6d5\ua6d6\ua6d7\ua6d8\ua6d9\ua6da\ua6db\ua6dc\ua6dd\ua6de\ua6df\ua6e0\ua6e1\ua6e2\ua6e3\ua6e4\ua6e5\ua6e6\ua6e7\ua6e8\ua6e9\ua6ea\ua6eb\ua6ec\ua6ed\ua6ee\ua6ef\ua6f0\ua6f1\ua6f2\ua6f3\ua6f4\ua6f5\ua6f6\ua6f7\ua6f8\ua6f9\ua6fa\ua6fb\ua6fc\ua6fd\ua6fe\ua6ff\ua717\ua718\ua719\ua71a\ua71b\ua71c\ua71d\ua71e\ua71f\ua720\ua721\ua722\ua723\ua724\ua725\ua726\ua727\ua728\ua729\ua72a\ua72b\ua72c\ua72d\ua72e\ua72f\ua730\ua731\ua732\ua733\ua734\ua735\ua736\ua737\ua738\ua739\ua73a\ua73b\ua73c\ua73d\ua73e\ua73f\ua740\ua741\ua742\ua743\ua744\ua745\ua746\ua747\ua748\ua749\ua74a\ua74b\ua74c\ua74d\ua74e\ua74f\ua750\ua751\ua752\ua753\ua754\ua755\ua756\ua757\ua758\ua759\ua75a\ua75b\ua75c\ua75d\ua75e\ua75f\ua760\ua761\ua762\ua763\ua764\ua765\ua766\ua767\ua768\ua769\ua76a\ua76b\ua76c\ua76d\ua76e\ua76f\ua770\ua771\ua772\ua773\ua774\ua775\ua776\ua777\ua778\ua779\ua77a\ua77b\ua77c\ua77d\ua77e\ua77f\ua780\ua781\ua782\ua783\ua784\ua785\ua786\ua787\ua788\ua789\ua78a\ua78b\ua78c\ua78d\ua78e\ua78f\ua790\ua791\ua792\ua793\ua794\ua795\ua796\ua797\ua798\ua799\ua79a\ua79b\ua79c\ua79d\ua79e\ua79f\ua7a0\ua7a1\ua7a2\ua7a3\ua7a4\ua7a5\ua7a6\ua7a7\ua7a8\ua7a9\ua7aa\ua7ab\ua7ac\ua7ad\ua7ae\ua7af\ua7b0\ua7b1\ua7b2\ua7b3\ua7b4\ua7b5\ua7b6\ua7b7\ua7b8\ua7b9\ua7ba\ua7bb\ua7bc\ua7bd\ua7be\ua7bf\ua7c0\ua7c1\ua7c2\ua7c3\ua7c4\ua7c5\ua7c6\ua7c7\ua7c8\ua7c9\ua7ca\ua7cb\ua7cc\ua7cd\ua7ce\ua7cf\ua7d0\ua7d1\ua7d2\ua7d3\ua7d4\ua7d5\ua7d6\ua7d7\ua7d8\ua7d9\ua7da\ua7db\ua7dc\ua7dd\ua7de\ua7df\ua7e0\ua7e1\ua7e2\ua7e3\ua7e4\ua7e5\ua7e6\ua7e7\ua7e8\ua7e9\ua7ea\ua7eb\ua7ec\ua7ed\ua7ee\ua7ef\ua7f0\ua7f1\ua7f2\ua7f3\ua7f4\ua7f5\ua7f6\ua7f7\ua7f8\ua7f9\ua7fa\ua7fb\ua7fc\ua7fd\ua7fe\ua7ff\ua82c\ua82d\ua82e\ua82f\ua830\ua831\ua832\ua833\ua834\ua835\ua836\ua837\ua838\ua839\ua83a\ua83b\ua83c\ua83d\ua83e\ua83f\ua840\ua841\ua842\ua843\ua844\ua845\ua846\ua847\ua848\ua849\ua84a\ua84b\ua84c\ua84d\ua84e\ua84f\ua850\ua851\ua852\ua853\ua854\ua855\ua856\ua857\ua858\ua859\ua85a\ua85b\ua85c\ua85d\ua85e\ua85f\ua860\ua861\ua862\ua863\ua864\ua865\ua866\ua867\ua868\ua869\ua86a\ua86b\ua86c\ua86d\ua86e\ua86f\ua870\ua871\ua872\ua873\ua874\ua875\ua876\ua877\ua878\ua879\ua87a\ua87b\ua87c\ua87d\ua87e\ua87f\ua880\ua881\ua882\ua883\ua884\ua885\ua886\ua887\ua888\ua889\ua88a\ua88b\ua88c\ua88d\ua88e\ua88f\ua890\ua891\ua892\ua893\ua894\ua895\ua896\ua897\ua898\ua899\ua89a\ua89b\ua89c\ua89d\ua89e\ua89f\ua8a0\ua8a1\ua8a2\ua8a3\ua8a4\ua8a5\ua8a6\ua8a7\ua8a8\ua8a9\ua8aa\ua8ab\ua8ac\ua8ad\ua8ae\ua8af\ua8b0\ua8b1\ua8b2\ua8b3\ua8b4\ua8b5\ua8b6\ua8b7\ua8b8\ua8b9\ua8ba\ua8bb\ua8bc\ua8bd\ua8be\ua8bf\ua8c0\ua8c1\ua8c2\ua8c3\ua8c4\ua8c5\ua8c6\ua8c7\ua8c8\ua8c9\ua8ca\ua8cb\ua8cc\ua8cd\ua8ce\ua8cf\ua8d0\ua8d1\ua8d2\ua8d3\ua8d4\ua8d5\ua8d6\ua8d7\ua8d8\ua8d9\ua8da\ua8db\ua8dc\ua8dd\ua8de\ua8df\ua8e0\ua8e1\ua8e2\ua8e3\ua8e4\ua8e5\ua8e6\ua8e7\ua8e8\ua8e9\ua8ea\ua8eb\ua8ec\ua8ed\ua8ee\ua8ef\ua8f0\ua8f1\ua8f2\ua8f3\ua8f4\ua8f5\ua8f6\ua8f7\ua8f8\ua8f9\ua8fa\ua8fb\ua8fc\ua8fd\ua8fe\ua8ff\ua900\ua901\ua902\ua903\ua904\ua905\ua906\ua907\ua908\ua909\ua90a\ua90b\ua90c\ua90d\ua90e\ua90f\ua910\ua911\ua912\ua913\ua914\ua915\ua916\ua917\ua918\ua919\ua91a\ua91b\ua91c\ua91d\ua91e\ua91f\ua920\ua921\ua922\ua923\ua924\ua925\ua926\ua927\ua928\ua929\ua92a\ua92b\ua92c\ua92d\ua92e\ua92f\ua930\ua931\ua932\ua933\ua934\ua935\ua936\ua937\ua938\ua939\ua93a\ua93b\ua93c\ua93d\ua93e\ua93f\ua940\ua941\ua942\ua943\ua944\ua945\ua946\ua947\ua948\ua949\ua94a\ua94b\ua94c\ua94d\ua94e\ua94f\ua950\ua951\ua952\ua953\ua954\ua955\ua956\ua957\ua958\ua959\ua95a\ua95b\ua95c\ua95d\ua95e\ua95f\ua960\ua961\ua962\ua963\ua964\ua965\ua966\ua967\ua968\ua969\ua96a\ua96b\ua96c\ua96d\ua96e\ua96f\ua970\ua971\ua972\ua973\ua974\ua975\ua976\ua977\ua978\ua979\ua97a\ua97b\ua97c\ua97d\ua97e\ua97f\ua980\ua981\ua982\ua983\ua984\ua985\ua986\ua987\ua988\ua989\ua98a\ua98b\ua98c\ua98d\ua98e\ua98f\ua990\ua991\ua992\ua993\ua994\ua995\ua996\ua997\ua998\ua999\ua99a\ua99b\ua99c\ua99d\ua99e\ua99f\ua9a0\ua9a1\ua9a2\ua9a3\ua9a4\ua9a5\ua9a6\ua9a7\ua9a8\ua9a9\ua9aa\ua9ab\ua9ac\ua9ad\ua9ae\ua9af\ua9b0\ua9b1\ua9b2\ua9b3\ua9b4\ua9b5\ua9b6\ua9b7\ua9b8\ua9b9\ua9ba\ua9bb\ua9bc\ua9bd\ua9be\ua9bf\ua9c0\ua9c1\ua9c2\ua9c3\ua9c4\ua9c5\ua9c6\ua9c7\ua9c8\ua9c9\ua9ca\ua9cb\ua9cc\ua9cd\ua9ce\ua9cf\ua9d0\ua9d1\ua9d2\ua9d3\ua9d4\ua9d5\ua9d6\ua9d7\ua9d8\ua9d9\ua9da\ua9db\ua9dc\ua9dd\ua9de\ua9df\ua9e0\ua9e1\ua9e2\ua9e3\ua9e4\ua9e5\ua9e6\ua9e7\ua9e8\ua9e9\ua9ea\ua9eb\ua9ec\ua9ed\ua9ee\ua9ef\ua9f0\ua9f1\ua9f2\ua9f3\ua9f4\ua9f5\ua9f6\ua9f7\ua9f8\ua9f9\ua9fa\ua9fb\ua9fc\ua9fd\ua9fe\ua9ff\uaa00\uaa01\uaa02\uaa03\uaa04\uaa05\uaa06\uaa07\uaa08\uaa09\uaa0a\uaa0b\uaa0c\uaa0d\uaa0e\uaa0f\uaa10\uaa11\uaa12\uaa13\uaa14\uaa15\uaa16\uaa17\uaa18\uaa19\uaa1a\uaa1b\uaa1c\uaa1d\uaa1e\uaa1f\uaa20\uaa21\uaa22\uaa23\uaa24\uaa25\uaa26\uaa27\uaa28\uaa29\uaa2a\uaa2b\uaa2c\uaa2d\uaa2e\uaa2f\uaa30\uaa31\uaa32\uaa33\uaa34\uaa35\uaa36\uaa37\uaa38\uaa39\uaa3a\uaa3b\uaa3c\uaa3d\uaa3e\uaa3f\uaa40\uaa41\uaa42\uaa43\uaa44\uaa45\uaa46\uaa47\uaa48\uaa49\uaa4a\uaa4b\uaa4c\uaa4d\uaa4e\uaa4f\uaa50\uaa51\uaa52\uaa53\uaa54\uaa55\uaa56\uaa57\uaa58\uaa59\uaa5a\uaa5b\uaa5c\uaa5d\uaa5e\uaa5f\uaa60\uaa61\uaa62\uaa63\uaa64\uaa65\uaa66\uaa67\uaa68\uaa69\uaa6a\uaa6b\uaa6c\uaa6d\uaa6e\uaa6f\uaa70\uaa71\uaa72\uaa73\uaa74\uaa75\uaa76\uaa77\uaa78\uaa79\uaa7a\uaa7b\uaa7c\uaa7d\uaa7e\uaa7f\uaa80\uaa81\uaa82\uaa83\uaa84\uaa85\uaa86\uaa87\uaa88\uaa89\uaa8a\uaa8b\uaa8c\uaa8d\uaa8e\uaa8f\uaa90\uaa91\uaa92\uaa93\uaa94\uaa95\uaa96\uaa97\uaa98\uaa99\uaa9a\uaa9b\uaa9c\uaa9d\uaa9e\uaa9f\uaaa0\uaaa1\uaaa2\uaaa3\uaaa4\uaaa5\uaaa6\uaaa7\uaaa8\uaaa9\uaaaa\uaaab\uaaac\uaaad\uaaae\uaaaf\uaab0\uaab1\uaab2\uaab3\uaab4\uaab5\uaab6\uaab7\uaab8\uaab9\uaaba\uaabb\uaabc\uaabd\uaabe\uaabf\uaac0\uaac1\uaac2\uaac3\uaac4\uaac5\uaac6\uaac7\uaac8\uaac9\uaaca\uaacb\uaacc\uaacd\uaace\uaacf\uaad0\uaad1\uaad2\uaad3\uaad4\uaad5\uaad6\uaad7\uaad8\uaad9\uaada\uaadb\uaadc\uaadd\uaade\uaadf\uaae0\uaae1\uaae2\uaae3\uaae4\uaae5\uaae6\uaae7\uaae8\uaae9\uaaea\uaaeb\uaaec\uaaed\uaaee\uaaef\uaaf0\uaaf1\uaaf2\uaaf3\uaaf4\uaaf5\uaaf6\uaaf7\uaaf8\uaaf9\uaafa\uaafb\uaafc\uaafd\uaafe\uaaff\uab00\uab01\uab02\uab03\uab04\uab05\uab06\uab07\uab08\uab09\uab0a\uab0b\uab0c\uab0d\uab0e\uab0f\uab10\uab11\uab12\uab13\uab14\uab15\uab16\uab17\uab18\uab19\uab1a\uab1b\uab1c\uab1d\uab1e\uab1f\uab20\uab21\uab22\uab23\uab24\uab25\uab26\uab27\uab28\uab29\uab2a\uab2b\uab2c\uab2d\uab2e\uab2f\uab30\uab31\uab32\uab33\uab34\uab35\uab36\uab37\uab38\uab39\uab3a\uab3b\uab3c\uab3d\uab3e\uab3f\uab40\uab41\uab42\uab43\uab44\uab45\uab46\uab47\uab48\uab49\uab4a\uab4b\uab4c\uab4d\uab4e\uab4f\uab50\uab51\uab52\uab53\uab54\uab55\uab56\uab57\uab58\uab59\uab5a\uab5b\uab5c\uab5d\uab5e\uab5f\uab60\uab61\uab62\uab63\uab64\uab65\uab66\uab67\uab68\uab69\uab6a\uab6b\uab6c\uab6d\uab6e\uab6f\uab70\uab71\uab72\uab73\uab74\uab75\uab76\uab77\uab78\uab79\uab7a\uab7b\uab7c\uab7d\uab7e\uab7f\uab80\uab81\uab82\uab83\uab84\uab85\uab86\uab87\uab88\uab89\uab8a\uab8b\uab8c\uab8d\uab8e\uab8f\uab90\uab91\uab92\uab93\uab94\uab95\uab96\uab97\uab98\uab99\uab9a\uab9b\uab9c\uab9d\uab9e\uab9f\uaba0\uaba1\uaba2\uaba3\uaba4\uaba5\uaba6\uaba7\uaba8\uaba9\uabaa\uabab\uabac\uabad\uabae\uabaf\uabb0\uabb1\uabb2\uabb3\uabb4\uabb5\uabb6\uabb7\uabb8\uabb9\uabba\uabbb\uabbc\uabbd\uabbe\uabbf\uabc0\uabc1\uabc2\uabc3\uabc4\uabc5\uabc6\uabc7\uabc8\uabc9\uabca\uabcb\uabcc\uabcd\uabce\uabcf\uabd0\uabd1\uabd2\uabd3\uabd4\uabd5\uabd6\uabd7\uabd8\uabd9\uabda\uabdb\uabdc\uabdd\uabde\uabdf\uabe0\uabe1\uabe2\uabe3\uabe4\uabe5\uabe6\uabe7\uabe8\uabe9\uabea\uabeb\uabec\uabed\uabee\uabef\uabf0\uabf1\uabf2\uabf3\uabf4\uabf5\uabf6\uabf7\uabf8\uabf9\uabfa\uabfb\uabfc\uabfd\uabfe\uabff\ud7a4\ud7a5\ud7a6\ud7a7\ud7a8\ud7a9\ud7aa\ud7ab\ud7ac\ud7ad\ud7ae\ud7af\ud7b0\ud7b1\ud7b2\ud7b3\ud7b4\ud7b5\ud7b6\ud7b7\ud7b8\ud7b9\ud7ba\ud7bb\ud7bc\ud7bd\ud7be\ud7bf\ud7c0\ud7c1\ud7c2\ud7c3\ud7c4\ud7c5\ud7c6\ud7c7\ud7c8\ud7c9\ud7ca\ud7cb\ud7cc\ud7cd\ud7ce\ud7cf\ud7d0\ud7d1\ud7d2\ud7d3\ud7d4\ud7d5\ud7d6\ud7d7\ud7d8\ud7d9\ud7da\ud7db\ud7dc\ud7dd\ud7de\ud7df\ud7e0\ud7e1\ud7e2\ud7e3\ud7e4\ud7e5\ud7e6\ud7e7\ud7e8\ud7e9\ud7ea\ud7eb\ud7ec\ud7ed\ud7ee\ud7ef\ud7f0\ud7f1\ud7f2\ud7f3\ud7f4\ud7f5\ud7f6\ud7f7\ud7f8\ud7f9\ud7fa\ud7fb\ud7fc\ud7fd\ud7fe\ud7ff\ufa2e\ufa2f\ufa6b\ufa6c\ufa6d\ufa6e\ufa6f\ufada\ufadb\ufadc\ufadd\ufade\ufadf\ufae0\ufae1\ufae2\ufae3\ufae4\ufae5\ufae6\ufae7\ufae8\ufae9\ufaea\ufaeb\ufaec\ufaed\ufaee\ufaef\ufaf0\ufaf1\ufaf2\ufaf3\ufaf4\ufaf5\ufaf6\ufaf7\ufaf8\ufaf9\ufafa\ufafb\ufafc\ufafd\ufafe\ufaff\ufb07\ufb08\ufb09\ufb0a\ufb0b\ufb0c\ufb0d\ufb0e\ufb0f\ufb10\ufb11\ufb12\ufb18\ufb19\ufb1a\ufb1b\ufb1c\ufb37\ufb3d\ufb3f\ufb42\ufb45\ufbb2\ufbb3\ufbb4\ufbb5\ufbb6\ufbb7\ufbb8\ufbb9\ufbba\ufbbb\ufbbc\ufbbd\ufbbe\ufbbf\ufbc0\ufbc1\ufbc2\ufbc3\ufbc4\ufbc5\ufbc6\ufbc7\ufbc8\ufbc9\ufbca\ufbcb\ufbcc\ufbcd\ufbce\ufbcf\ufbd0\ufbd1\ufbd2\ufd40\ufd41\ufd42\ufd43\ufd44\ufd45\ufd46\ufd47\ufd48\ufd49\ufd4a\ufd4b\ufd4c\ufd4d\ufd4e\ufd4f\ufd90\ufd91\ufdc8\ufdc9\ufdca\ufdcb\ufdcc\ufdcd\ufdce\ufdcf\ufdd0\ufdd1\ufdd2\ufdd3\ufdd4\ufdd5\ufdd6\ufdd7\ufdd8\ufdd9\ufdda\ufddb\ufddc\ufddd\ufdde\ufddf\ufde0\ufde1\ufde2\ufde3\ufde4\ufde5\ufde6\ufde7\ufde8\ufde9\ufdea\ufdeb\ufdec\ufded\ufdee\ufdef\ufdfe\ufdff\ufe1a\ufe1b\ufe1c\ufe1d\ufe1e\ufe1f\ufe24\ufe25\ufe26\ufe27\ufe28\ufe29\ufe2a\ufe2b\ufe2c\ufe2d\ufe2e\ufe2f\ufe53\ufe67\ufe6c\ufe6d\ufe6e\ufe6f\ufe75\ufefd\ufefe\uff00\uffbf\uffc0\uffc1\uffc8\uffc9\uffd0\uffd1\uffd8\uffd9\uffdd\uffde\uffdf\uffe7\uffef\ufff0\ufff1\ufff2\ufff3\ufff4\ufff5\ufff6\ufff7\ufff8\ufffe' + +Co = u'\ue000\ue001\ue002\ue003\ue004\ue005\ue006\ue007\ue008\ue009\ue00a\ue00b\ue00c\ue00d\ue00e\ue00f\ue010\ue011\ue012\ue013\ue014\ue015\ue016\ue017\ue018\ue019\ue01a\ue01b\ue01c\ue01d\ue01e\ue01f\ue020\ue021\ue022\ue023\ue024\ue025\ue026\ue027\ue028\ue029\ue02a\ue02b\ue02c\ue02d\ue02e\ue02f\ue030\ue031\ue032\ue033\ue034\ue035\ue036\ue037\ue038\ue039\ue03a\ue03b\ue03c\ue03d\ue03e\ue03f\ue040\ue041\ue042\ue043\ue044\ue045\ue046\ue047\ue048\ue049\ue04a\ue04b\ue04c\ue04d\ue04e\ue04f\ue050\ue051\ue052\ue053\ue054\ue055\ue056\ue057\ue058\ue059\ue05a\ue05b\ue05c\ue05d\ue05e\ue05f\ue060\ue061\ue062\ue063\ue064\ue065\ue066\ue067\ue068\ue069\ue06a\ue06b\ue06c\ue06d\ue06e\ue06f\ue070\ue071\ue072\ue073\ue074\ue075\ue076\ue077\ue078\ue079\ue07a\ue07b\ue07c\ue07d\ue07e\ue07f\ue080\ue081\ue082\ue083\ue084\ue085\ue086\ue087\ue088\ue089\ue08a\ue08b\ue08c\ue08d\ue08e\ue08f\ue090\ue091\ue092\ue093\ue094\ue095\ue096\ue097\ue098\ue099\ue09a\ue09b\ue09c\ue09d\ue09e\ue09f\ue0a0\ue0a1\ue0a2\ue0a3\ue0a4\ue0a5\ue0a6\ue0a7\ue0a8\ue0a9\ue0aa\ue0ab\ue0ac\ue0ad\ue0ae\ue0af\ue0b0\ue0b1\ue0b2\ue0b3\ue0b4\ue0b5\ue0b6\ue0b7\ue0b8\ue0b9\ue0ba\ue0bb\ue0bc\ue0bd\ue0be\ue0bf\ue0c0\ue0c1\ue0c2\ue0c3\ue0c4\ue0c5\ue0c6\ue0c7\ue0c8\ue0c9\ue0ca\ue0cb\ue0cc\ue0cd\ue0ce\ue0cf\ue0d0\ue0d1\ue0d2\ue0d3\ue0d4\ue0d5\ue0d6\ue0d7\ue0d8\ue0d9\ue0da\ue0db\ue0dc\ue0dd\ue0de\ue0df\ue0e0\ue0e1\ue0e2\ue0e3\ue0e4\ue0e5\ue0e6\ue0e7\ue0e8\ue0e9\ue0ea\ue0eb\ue0ec\ue0ed\ue0ee\ue0ef\ue0f0\ue0f1\ue0f2\ue0f3\ue0f4\ue0f5\ue0f6\ue0f7\ue0f8\ue0f9\ue0fa\ue0fb\ue0fc\ue0fd\ue0fe\ue0ff\ue100\ue101\ue102\ue103\ue104\ue105\ue106\ue107\ue108\ue109\ue10a\ue10b\ue10c\ue10d\ue10e\ue10f\ue110\ue111\ue112\ue113\ue114\ue115\ue116\ue117\ue118\ue119\ue11a\ue11b\ue11c\ue11d\ue11e\ue11f\ue120\ue121\ue122\ue123\ue124\ue125\ue126\ue127\ue128\ue129\ue12a\ue12b\ue12c\ue12d\ue12e\ue12f\ue130\ue131\ue132\ue133\ue134\ue135\ue136\ue137\ue138\ue139\ue13a\ue13b\ue13c\ue13d\ue13e\ue13f\ue140\ue141\ue142\ue143\ue144\ue145\ue146\ue147\ue148\ue149\ue14a\ue14b\ue14c\ue14d\ue14e\ue14f\ue150\ue151\ue152\ue153\ue154\ue155\ue156\ue157\ue158\ue159\ue15a\ue15b\ue15c\ue15d\ue15e\ue15f\ue160\ue161\ue162\ue163\ue164\ue165\ue166\ue167\ue168\ue169\ue16a\ue16b\ue16c\ue16d\ue16e\ue16f\ue170\ue171\ue172\ue173\ue174\ue175\ue176\ue177\ue178\ue179\ue17a\ue17b\ue17c\ue17d\ue17e\ue17f\ue180\ue181\ue182\ue183\ue184\ue185\ue186\ue187\ue188\ue189\ue18a\ue18b\ue18c\ue18d\ue18e\ue18f\ue190\ue191\ue192\ue193\ue194\ue195\ue196\ue197\ue198\ue199\ue19a\ue19b\ue19c\ue19d\ue19e\ue19f\ue1a0\ue1a1\ue1a2\ue1a3\ue1a4\ue1a5\ue1a6\ue1a7\ue1a8\ue1a9\ue1aa\ue1ab\ue1ac\ue1ad\ue1ae\ue1af\ue1b0\ue1b1\ue1b2\ue1b3\ue1b4\ue1b5\ue1b6\ue1b7\ue1b8\ue1b9\ue1ba\ue1bb\ue1bc\ue1bd\ue1be\ue1bf\ue1c0\ue1c1\ue1c2\ue1c3\ue1c4\ue1c5\ue1c6\ue1c7\ue1c8\ue1c9\ue1ca\ue1cb\ue1cc\ue1cd\ue1ce\ue1cf\ue1d0\ue1d1\ue1d2\ue1d3\ue1d4\ue1d5\ue1d6\ue1d7\ue1d8\ue1d9\ue1da\ue1db\ue1dc\ue1dd\ue1de\ue1df\ue1e0\ue1e1\ue1e2\ue1e3\ue1e4\ue1e5\ue1e6\ue1e7\ue1e8\ue1e9\ue1ea\ue1eb\ue1ec\ue1ed\ue1ee\ue1ef\ue1f0\ue1f1\ue1f2\ue1f3\ue1f4\ue1f5\ue1f6\ue1f7\ue1f8\ue1f9\ue1fa\ue1fb\ue1fc\ue1fd\ue1fe\ue1ff\ue200\ue201\ue202\ue203\ue204\ue205\ue206\ue207\ue208\ue209\ue20a\ue20b\ue20c\ue20d\ue20e\ue20f\ue210\ue211\ue212\ue213\ue214\ue215\ue216\ue217\ue218\ue219\ue21a\ue21b\ue21c\ue21d\ue21e\ue21f\ue220\ue221\ue222\ue223\ue224\ue225\ue226\ue227\ue228\ue229\ue22a\ue22b\ue22c\ue22d\ue22e\ue22f\ue230\ue231\ue232\ue233\ue234\ue235\ue236\ue237\ue238\ue239\ue23a\ue23b\ue23c\ue23d\ue23e\ue23f\ue240\ue241\ue242\ue243\ue244\ue245\ue246\ue247\ue248\ue249\ue24a\ue24b\ue24c\ue24d\ue24e\ue24f\ue250\ue251\ue252\ue253\ue254\ue255\ue256\ue257\ue258\ue259\ue25a\ue25b\ue25c\ue25d\ue25e\ue25f\ue260\ue261\ue262\ue263\ue264\ue265\ue266\ue267\ue268\ue269\ue26a\ue26b\ue26c\ue26d\ue26e\ue26f\ue270\ue271\ue272\ue273\ue274\ue275\ue276\ue277\ue278\ue279\ue27a\ue27b\ue27c\ue27d\ue27e\ue27f\ue280\ue281\ue282\ue283\ue284\ue285\ue286\ue287\ue288\ue289\ue28a\ue28b\ue28c\ue28d\ue28e\ue28f\ue290\ue291\ue292\ue293\ue294\ue295\ue296\ue297\ue298\ue299\ue29a\ue29b\ue29c\ue29d\ue29e\ue29f\ue2a0\ue2a1\ue2a2\ue2a3\ue2a4\ue2a5\ue2a6\ue2a7\ue2a8\ue2a9\ue2aa\ue2ab\ue2ac\ue2ad\ue2ae\ue2af\ue2b0\ue2b1\ue2b2\ue2b3\ue2b4\ue2b5\ue2b6\ue2b7\ue2b8\ue2b9\ue2ba\ue2bb\ue2bc\ue2bd\ue2be\ue2bf\ue2c0\ue2c1\ue2c2\ue2c3\ue2c4\ue2c5\ue2c6\ue2c7\ue2c8\ue2c9\ue2ca\ue2cb\ue2cc\ue2cd\ue2ce\ue2cf\ue2d0\ue2d1\ue2d2\ue2d3\ue2d4\ue2d5\ue2d6\ue2d7\ue2d8\ue2d9\ue2da\ue2db\ue2dc\ue2dd\ue2de\ue2df\ue2e0\ue2e1\ue2e2\ue2e3\ue2e4\ue2e5\ue2e6\ue2e7\ue2e8\ue2e9\ue2ea\ue2eb\ue2ec\ue2ed\ue2ee\ue2ef\ue2f0\ue2f1\ue2f2\ue2f3\ue2f4\ue2f5\ue2f6\ue2f7\ue2f8\ue2f9\ue2fa\ue2fb\ue2fc\ue2fd\ue2fe\ue2ff\ue300\ue301\ue302\ue303\ue304\ue305\ue306\ue307\ue308\ue309\ue30a\ue30b\ue30c\ue30d\ue30e\ue30f\ue310\ue311\ue312\ue313\ue314\ue315\ue316\ue317\ue318\ue319\ue31a\ue31b\ue31c\ue31d\ue31e\ue31f\ue320\ue321\ue322\ue323\ue324\ue325\ue326\ue327\ue328\ue329\ue32a\ue32b\ue32c\ue32d\ue32e\ue32f\ue330\ue331\ue332\ue333\ue334\ue335\ue336\ue337\ue338\ue339\ue33a\ue33b\ue33c\ue33d\ue33e\ue33f\ue340\ue341\ue342\ue343\ue344\ue345\ue346\ue347\ue348\ue349\ue34a\ue34b\ue34c\ue34d\ue34e\ue34f\ue350\ue351\ue352\ue353\ue354\ue355\ue356\ue357\ue358\ue359\ue35a\ue35b\ue35c\ue35d\ue35e\ue35f\ue360\ue361\ue362\ue363\ue364\ue365\ue366\ue367\ue368\ue369\ue36a\ue36b\ue36c\ue36d\ue36e\ue36f\ue370\ue371\ue372\ue373\ue374\ue375\ue376\ue377\ue378\ue379\ue37a\ue37b\ue37c\ue37d\ue37e\ue37f\ue380\ue381\ue382\ue383\ue384\ue385\ue386\ue387\ue388\ue389\ue38a\ue38b\ue38c\ue38d\ue38e\ue38f\ue390\ue391\ue392\ue393\ue394\ue395\ue396\ue397\ue398\ue399\ue39a\ue39b\ue39c\ue39d\ue39e\ue39f\ue3a0\ue3a1\ue3a2\ue3a3\ue3a4\ue3a5\ue3a6\ue3a7\ue3a8\ue3a9\ue3aa\ue3ab\ue3ac\ue3ad\ue3ae\ue3af\ue3b0\ue3b1\ue3b2\ue3b3\ue3b4\ue3b5\ue3b6\ue3b7\ue3b8\ue3b9\ue3ba\ue3bb\ue3bc\ue3bd\ue3be\ue3bf\ue3c0\ue3c1\ue3c2\ue3c3\ue3c4\ue3c5\ue3c6\ue3c7\ue3c8\ue3c9\ue3ca\ue3cb\ue3cc\ue3cd\ue3ce\ue3cf\ue3d0\ue3d1\ue3d2\ue3d3\ue3d4\ue3d5\ue3d6\ue3d7\ue3d8\ue3d9\ue3da\ue3db\ue3dc\ue3dd\ue3de\ue3df\ue3e0\ue3e1\ue3e2\ue3e3\ue3e4\ue3e5\ue3e6\ue3e7\ue3e8\ue3e9\ue3ea\ue3eb\ue3ec\ue3ed\ue3ee\ue3ef\ue3f0\ue3f1\ue3f2\ue3f3\ue3f4\ue3f5\ue3f6\ue3f7\ue3f8\ue3f9\ue3fa\ue3fb\ue3fc\ue3fd\ue3fe\ue3ff\ue400\ue401\ue402\ue403\ue404\ue405\ue406\ue407\ue408\ue409\ue40a\ue40b\ue40c\ue40d\ue40e\ue40f\ue410\ue411\ue412\ue413\ue414\ue415\ue416\ue417\ue418\ue419\ue41a\ue41b\ue41c\ue41d\ue41e\ue41f\ue420\ue421\ue422\ue423\ue424\ue425\ue426\ue427\ue428\ue429\ue42a\ue42b\ue42c\ue42d\ue42e\ue42f\ue430\ue431\ue432\ue433\ue434\ue435\ue436\ue437\ue438\ue439\ue43a\ue43b\ue43c\ue43d\ue43e\ue43f\ue440\ue441\ue442\ue443\ue444\ue445\ue446\ue447\ue448\ue449\ue44a\ue44b\ue44c\ue44d\ue44e\ue44f\ue450\ue451\ue452\ue453\ue454\ue455\ue456\ue457\ue458\ue459\ue45a\ue45b\ue45c\ue45d\ue45e\ue45f\ue460\ue461\ue462\ue463\ue464\ue465\ue466\ue467\ue468\ue469\ue46a\ue46b\ue46c\ue46d\ue46e\ue46f\ue470\ue471\ue472\ue473\ue474\ue475\ue476\ue477\ue478\ue479\ue47a\ue47b\ue47c\ue47d\ue47e\ue47f\ue480\ue481\ue482\ue483\ue484\ue485\ue486\ue487\ue488\ue489\ue48a\ue48b\ue48c\ue48d\ue48e\ue48f\ue490\ue491\ue492\ue493\ue494\ue495\ue496\ue497\ue498\ue499\ue49a\ue49b\ue49c\ue49d\ue49e\ue49f\ue4a0\ue4a1\ue4a2\ue4a3\ue4a4\ue4a5\ue4a6\ue4a7\ue4a8\ue4a9\ue4aa\ue4ab\ue4ac\ue4ad\ue4ae\ue4af\ue4b0\ue4b1\ue4b2\ue4b3\ue4b4\ue4b5\ue4b6\ue4b7\ue4b8\ue4b9\ue4ba\ue4bb\ue4bc\ue4bd\ue4be\ue4bf\ue4c0\ue4c1\ue4c2\ue4c3\ue4c4\ue4c5\ue4c6\ue4c7\ue4c8\ue4c9\ue4ca\ue4cb\ue4cc\ue4cd\ue4ce\ue4cf\ue4d0\ue4d1\ue4d2\ue4d3\ue4d4\ue4d5\ue4d6\ue4d7\ue4d8\ue4d9\ue4da\ue4db\ue4dc\ue4dd\ue4de\ue4df\ue4e0\ue4e1\ue4e2\ue4e3\ue4e4\ue4e5\ue4e6\ue4e7\ue4e8\ue4e9\ue4ea\ue4eb\ue4ec\ue4ed\ue4ee\ue4ef\ue4f0\ue4f1\ue4f2\ue4f3\ue4f4\ue4f5\ue4f6\ue4f7\ue4f8\ue4f9\ue4fa\ue4fb\ue4fc\ue4fd\ue4fe\ue4ff\ue500\ue501\ue502\ue503\ue504\ue505\ue506\ue507\ue508\ue509\ue50a\ue50b\ue50c\ue50d\ue50e\ue50f\ue510\ue511\ue512\ue513\ue514\ue515\ue516\ue517\ue518\ue519\ue51a\ue51b\ue51c\ue51d\ue51e\ue51f\ue520\ue521\ue522\ue523\ue524\ue525\ue526\ue527\ue528\ue529\ue52a\ue52b\ue52c\ue52d\ue52e\ue52f\ue530\ue531\ue532\ue533\ue534\ue535\ue536\ue537\ue538\ue539\ue53a\ue53b\ue53c\ue53d\ue53e\ue53f\ue540\ue541\ue542\ue543\ue544\ue545\ue546\ue547\ue548\ue549\ue54a\ue54b\ue54c\ue54d\ue54e\ue54f\ue550\ue551\ue552\ue553\ue554\ue555\ue556\ue557\ue558\ue559\ue55a\ue55b\ue55c\ue55d\ue55e\ue55f\ue560\ue561\ue562\ue563\ue564\ue565\ue566\ue567\ue568\ue569\ue56a\ue56b\ue56c\ue56d\ue56e\ue56f\ue570\ue571\ue572\ue573\ue574\ue575\ue576\ue577\ue578\ue579\ue57a\ue57b\ue57c\ue57d\ue57e\ue57f\ue580\ue581\ue582\ue583\ue584\ue585\ue586\ue587\ue588\ue589\ue58a\ue58b\ue58c\ue58d\ue58e\ue58f\ue590\ue591\ue592\ue593\ue594\ue595\ue596\ue597\ue598\ue599\ue59a\ue59b\ue59c\ue59d\ue59e\ue59f\ue5a0\ue5a1\ue5a2\ue5a3\ue5a4\ue5a5\ue5a6\ue5a7\ue5a8\ue5a9\ue5aa\ue5ab\ue5ac\ue5ad\ue5ae\ue5af\ue5b0\ue5b1\ue5b2\ue5b3\ue5b4\ue5b5\ue5b6\ue5b7\ue5b8\ue5b9\ue5ba\ue5bb\ue5bc\ue5bd\ue5be\ue5bf\ue5c0\ue5c1\ue5c2\ue5c3\ue5c4\ue5c5\ue5c6\ue5c7\ue5c8\ue5c9\ue5ca\ue5cb\ue5cc\ue5cd\ue5ce\ue5cf\ue5d0\ue5d1\ue5d2\ue5d3\ue5d4\ue5d5\ue5d6\ue5d7\ue5d8\ue5d9\ue5da\ue5db\ue5dc\ue5dd\ue5de\ue5df\ue5e0\ue5e1\ue5e2\ue5e3\ue5e4\ue5e5\ue5e6\ue5e7\ue5e8\ue5e9\ue5ea\ue5eb\ue5ec\ue5ed\ue5ee\ue5ef\ue5f0\ue5f1\ue5f2\ue5f3\ue5f4\ue5f5\ue5f6\ue5f7\ue5f8\ue5f9\ue5fa\ue5fb\ue5fc\ue5fd\ue5fe\ue5ff\ue600\ue601\ue602\ue603\ue604\ue605\ue606\ue607\ue608\ue609\ue60a\ue60b\ue60c\ue60d\ue60e\ue60f\ue610\ue611\ue612\ue613\ue614\ue615\ue616\ue617\ue618\ue619\ue61a\ue61b\ue61c\ue61d\ue61e\ue61f\ue620\ue621\ue622\ue623\ue624\ue625\ue626\ue627\ue628\ue629\ue62a\ue62b\ue62c\ue62d\ue62e\ue62f\ue630\ue631\ue632\ue633\ue634\ue635\ue636\ue637\ue638\ue639\ue63a\ue63b\ue63c\ue63d\ue63e\ue63f\ue640\ue641\ue642\ue643\ue644\ue645\ue646\ue647\ue648\ue649\ue64a\ue64b\ue64c\ue64d\ue64e\ue64f\ue650\ue651\ue652\ue653\ue654\ue655\ue656\ue657\ue658\ue659\ue65a\ue65b\ue65c\ue65d\ue65e\ue65f\ue660\ue661\ue662\ue663\ue664\ue665\ue666\ue667\ue668\ue669\ue66a\ue66b\ue66c\ue66d\ue66e\ue66f\ue670\ue671\ue672\ue673\ue674\ue675\ue676\ue677\ue678\ue679\ue67a\ue67b\ue67c\ue67d\ue67e\ue67f\ue680\ue681\ue682\ue683\ue684\ue685\ue686\ue687\ue688\ue689\ue68a\ue68b\ue68c\ue68d\ue68e\ue68f\ue690\ue691\ue692\ue693\ue694\ue695\ue696\ue697\ue698\ue699\ue69a\ue69b\ue69c\ue69d\ue69e\ue69f\ue6a0\ue6a1\ue6a2\ue6a3\ue6a4\ue6a5\ue6a6\ue6a7\ue6a8\ue6a9\ue6aa\ue6ab\ue6ac\ue6ad\ue6ae\ue6af\ue6b0\ue6b1\ue6b2\ue6b3\ue6b4\ue6b5\ue6b6\ue6b7\ue6b8\ue6b9\ue6ba\ue6bb\ue6bc\ue6bd\ue6be\ue6bf\ue6c0\ue6c1\ue6c2\ue6c3\ue6c4\ue6c5\ue6c6\ue6c7\ue6c8\ue6c9\ue6ca\ue6cb\ue6cc\ue6cd\ue6ce\ue6cf\ue6d0\ue6d1\ue6d2\ue6d3\ue6d4\ue6d5\ue6d6\ue6d7\ue6d8\ue6d9\ue6da\ue6db\ue6dc\ue6dd\ue6de\ue6df\ue6e0\ue6e1\ue6e2\ue6e3\ue6e4\ue6e5\ue6e6\ue6e7\ue6e8\ue6e9\ue6ea\ue6eb\ue6ec\ue6ed\ue6ee\ue6ef\ue6f0\ue6f1\ue6f2\ue6f3\ue6f4\ue6f5\ue6f6\ue6f7\ue6f8\ue6f9\ue6fa\ue6fb\ue6fc\ue6fd\ue6fe\ue6ff\ue700\ue701\ue702\ue703\ue704\ue705\ue706\ue707\ue708\ue709\ue70a\ue70b\ue70c\ue70d\ue70e\ue70f\ue710\ue711\ue712\ue713\ue714\ue715\ue716\ue717\ue718\ue719\ue71a\ue71b\ue71c\ue71d\ue71e\ue71f\ue720\ue721\ue722\ue723\ue724\ue725\ue726\ue727\ue728\ue729\ue72a\ue72b\ue72c\ue72d\ue72e\ue72f\ue730\ue731\ue732\ue733\ue734\ue735\ue736\ue737\ue738\ue739\ue73a\ue73b\ue73c\ue73d\ue73e\ue73f\ue740\ue741\ue742\ue743\ue744\ue745\ue746\ue747\ue748\ue749\ue74a\ue74b\ue74c\ue74d\ue74e\ue74f\ue750\ue751\ue752\ue753\ue754\ue755\ue756\ue757\ue758\ue759\ue75a\ue75b\ue75c\ue75d\ue75e\ue75f\ue760\ue761\ue762\ue763\ue764\ue765\ue766\ue767\ue768\ue769\ue76a\ue76b\ue76c\ue76d\ue76e\ue76f\ue770\ue771\ue772\ue773\ue774\ue775\ue776\ue777\ue778\ue779\ue77a\ue77b\ue77c\ue77d\ue77e\ue77f\ue780\ue781\ue782\ue783\ue784\ue785\ue786\ue787\ue788\ue789\ue78a\ue78b\ue78c\ue78d\ue78e\ue78f\ue790\ue791\ue792\ue793\ue794\ue795\ue796\ue797\ue798\ue799\ue79a\ue79b\ue79c\ue79d\ue79e\ue79f\ue7a0\ue7a1\ue7a2\ue7a3\ue7a4\ue7a5\ue7a6\ue7a7\ue7a8\ue7a9\ue7aa\ue7ab\ue7ac\ue7ad\ue7ae\ue7af\ue7b0\ue7b1\ue7b2\ue7b3\ue7b4\ue7b5\ue7b6\ue7b7\ue7b8\ue7b9\ue7ba\ue7bb\ue7bc\ue7bd\ue7be\ue7bf\ue7c0\ue7c1\ue7c2\ue7c3\ue7c4\ue7c5\ue7c6\ue7c7\ue7c8\ue7c9\ue7ca\ue7cb\ue7cc\ue7cd\ue7ce\ue7cf\ue7d0\ue7d1\ue7d2\ue7d3\ue7d4\ue7d5\ue7d6\ue7d7\ue7d8\ue7d9\ue7da\ue7db\ue7dc\ue7dd\ue7de\ue7df\ue7e0\ue7e1\ue7e2\ue7e3\ue7e4\ue7e5\ue7e6\ue7e7\ue7e8\ue7e9\ue7ea\ue7eb\ue7ec\ue7ed\ue7ee\ue7ef\ue7f0\ue7f1\ue7f2\ue7f3\ue7f4\ue7f5\ue7f6\ue7f7\ue7f8\ue7f9\ue7fa\ue7fb\ue7fc\ue7fd\ue7fe\ue7ff\ue800\ue801\ue802\ue803\ue804\ue805\ue806\ue807\ue808\ue809\ue80a\ue80b\ue80c\ue80d\ue80e\ue80f\ue810\ue811\ue812\ue813\ue814\ue815\ue816\ue817\ue818\ue819\ue81a\ue81b\ue81c\ue81d\ue81e\ue81f\ue820\ue821\ue822\ue823\ue824\ue825\ue826\ue827\ue828\ue829\ue82a\ue82b\ue82c\ue82d\ue82e\ue82f\ue830\ue831\ue832\ue833\ue834\ue835\ue836\ue837\ue838\ue839\ue83a\ue83b\ue83c\ue83d\ue83e\ue83f\ue840\ue841\ue842\ue843\ue844\ue845\ue846\ue847\ue848\ue849\ue84a\ue84b\ue84c\ue84d\ue84e\ue84f\ue850\ue851\ue852\ue853\ue854\ue855\ue856\ue857\ue858\ue859\ue85a\ue85b\ue85c\ue85d\ue85e\ue85f\ue860\ue861\ue862\ue863\ue864\ue865\ue866\ue867\ue868\ue869\ue86a\ue86b\ue86c\ue86d\ue86e\ue86f\ue870\ue871\ue872\ue873\ue874\ue875\ue876\ue877\ue878\ue879\ue87a\ue87b\ue87c\ue87d\ue87e\ue87f\ue880\ue881\ue882\ue883\ue884\ue885\ue886\ue887\ue888\ue889\ue88a\ue88b\ue88c\ue88d\ue88e\ue88f\ue890\ue891\ue892\ue893\ue894\ue895\ue896\ue897\ue898\ue899\ue89a\ue89b\ue89c\ue89d\ue89e\ue89f\ue8a0\ue8a1\ue8a2\ue8a3\ue8a4\ue8a5\ue8a6\ue8a7\ue8a8\ue8a9\ue8aa\ue8ab\ue8ac\ue8ad\ue8ae\ue8af\ue8b0\ue8b1\ue8b2\ue8b3\ue8b4\ue8b5\ue8b6\ue8b7\ue8b8\ue8b9\ue8ba\ue8bb\ue8bc\ue8bd\ue8be\ue8bf\ue8c0\ue8c1\ue8c2\ue8c3\ue8c4\ue8c5\ue8c6\ue8c7\ue8c8\ue8c9\ue8ca\ue8cb\ue8cc\ue8cd\ue8ce\ue8cf\ue8d0\ue8d1\ue8d2\ue8d3\ue8d4\ue8d5\ue8d6\ue8d7\ue8d8\ue8d9\ue8da\ue8db\ue8dc\ue8dd\ue8de\ue8df\ue8e0\ue8e1\ue8e2\ue8e3\ue8e4\ue8e5\ue8e6\ue8e7\ue8e8\ue8e9\ue8ea\ue8eb\ue8ec\ue8ed\ue8ee\ue8ef\ue8f0\ue8f1\ue8f2\ue8f3\ue8f4\ue8f5\ue8f6\ue8f7\ue8f8\ue8f9\ue8fa\ue8fb\ue8fc\ue8fd\ue8fe\ue8ff\ue900\ue901\ue902\ue903\ue904\ue905\ue906\ue907\ue908\ue909\ue90a\ue90b\ue90c\ue90d\ue90e\ue90f\ue910\ue911\ue912\ue913\ue914\ue915\ue916\ue917\ue918\ue919\ue91a\ue91b\ue91c\ue91d\ue91e\ue91f\ue920\ue921\ue922\ue923\ue924\ue925\ue926\ue927\ue928\ue929\ue92a\ue92b\ue92c\ue92d\ue92e\ue92f\ue930\ue931\ue932\ue933\ue934\ue935\ue936\ue937\ue938\ue939\ue93a\ue93b\ue93c\ue93d\ue93e\ue93f\ue940\ue941\ue942\ue943\ue944\ue945\ue946\ue947\ue948\ue949\ue94a\ue94b\ue94c\ue94d\ue94e\ue94f\ue950\ue951\ue952\ue953\ue954\ue955\ue956\ue957\ue958\ue959\ue95a\ue95b\ue95c\ue95d\ue95e\ue95f\ue960\ue961\ue962\ue963\ue964\ue965\ue966\ue967\ue968\ue969\ue96a\ue96b\ue96c\ue96d\ue96e\ue96f\ue970\ue971\ue972\ue973\ue974\ue975\ue976\ue977\ue978\ue979\ue97a\ue97b\ue97c\ue97d\ue97e\ue97f\ue980\ue981\ue982\ue983\ue984\ue985\ue986\ue987\ue988\ue989\ue98a\ue98b\ue98c\ue98d\ue98e\ue98f\ue990\ue991\ue992\ue993\ue994\ue995\ue996\ue997\ue998\ue999\ue99a\ue99b\ue99c\ue99d\ue99e\ue99f\ue9a0\ue9a1\ue9a2\ue9a3\ue9a4\ue9a5\ue9a6\ue9a7\ue9a8\ue9a9\ue9aa\ue9ab\ue9ac\ue9ad\ue9ae\ue9af\ue9b0\ue9b1\ue9b2\ue9b3\ue9b4\ue9b5\ue9b6\ue9b7\ue9b8\ue9b9\ue9ba\ue9bb\ue9bc\ue9bd\ue9be\ue9bf\ue9c0\ue9c1\ue9c2\ue9c3\ue9c4\ue9c5\ue9c6\ue9c7\ue9c8\ue9c9\ue9ca\ue9cb\ue9cc\ue9cd\ue9ce\ue9cf\ue9d0\ue9d1\ue9d2\ue9d3\ue9d4\ue9d5\ue9d6\ue9d7\ue9d8\ue9d9\ue9da\ue9db\ue9dc\ue9dd\ue9de\ue9df\ue9e0\ue9e1\ue9e2\ue9e3\ue9e4\ue9e5\ue9e6\ue9e7\ue9e8\ue9e9\ue9ea\ue9eb\ue9ec\ue9ed\ue9ee\ue9ef\ue9f0\ue9f1\ue9f2\ue9f3\ue9f4\ue9f5\ue9f6\ue9f7\ue9f8\ue9f9\ue9fa\ue9fb\ue9fc\ue9fd\ue9fe\ue9ff\uea00\uea01\uea02\uea03\uea04\uea05\uea06\uea07\uea08\uea09\uea0a\uea0b\uea0c\uea0d\uea0e\uea0f\uea10\uea11\uea12\uea13\uea14\uea15\uea16\uea17\uea18\uea19\uea1a\uea1b\uea1c\uea1d\uea1e\uea1f\uea20\uea21\uea22\uea23\uea24\uea25\uea26\uea27\uea28\uea29\uea2a\uea2b\uea2c\uea2d\uea2e\uea2f\uea30\uea31\uea32\uea33\uea34\uea35\uea36\uea37\uea38\uea39\uea3a\uea3b\uea3c\uea3d\uea3e\uea3f\uea40\uea41\uea42\uea43\uea44\uea45\uea46\uea47\uea48\uea49\uea4a\uea4b\uea4c\uea4d\uea4e\uea4f\uea50\uea51\uea52\uea53\uea54\uea55\uea56\uea57\uea58\uea59\uea5a\uea5b\uea5c\uea5d\uea5e\uea5f\uea60\uea61\uea62\uea63\uea64\uea65\uea66\uea67\uea68\uea69\uea6a\uea6b\uea6c\uea6d\uea6e\uea6f\uea70\uea71\uea72\uea73\uea74\uea75\uea76\uea77\uea78\uea79\uea7a\uea7b\uea7c\uea7d\uea7e\uea7f\uea80\uea81\uea82\uea83\uea84\uea85\uea86\uea87\uea88\uea89\uea8a\uea8b\uea8c\uea8d\uea8e\uea8f\uea90\uea91\uea92\uea93\uea94\uea95\uea96\uea97\uea98\uea99\uea9a\uea9b\uea9c\uea9d\uea9e\uea9f\ueaa0\ueaa1\ueaa2\ueaa3\ueaa4\ueaa5\ueaa6\ueaa7\ueaa8\ueaa9\ueaaa\ueaab\ueaac\ueaad\ueaae\ueaaf\ueab0\ueab1\ueab2\ueab3\ueab4\ueab5\ueab6\ueab7\ueab8\ueab9\ueaba\ueabb\ueabc\ueabd\ueabe\ueabf\ueac0\ueac1\ueac2\ueac3\ueac4\ueac5\ueac6\ueac7\ueac8\ueac9\ueaca\ueacb\ueacc\ueacd\ueace\ueacf\uead0\uead1\uead2\uead3\uead4\uead5\uead6\uead7\uead8\uead9\ueada\ueadb\ueadc\ueadd\ueade\ueadf\ueae0\ueae1\ueae2\ueae3\ueae4\ueae5\ueae6\ueae7\ueae8\ueae9\ueaea\ueaeb\ueaec\ueaed\ueaee\ueaef\ueaf0\ueaf1\ueaf2\ueaf3\ueaf4\ueaf5\ueaf6\ueaf7\ueaf8\ueaf9\ueafa\ueafb\ueafc\ueafd\ueafe\ueaff\ueb00\ueb01\ueb02\ueb03\ueb04\ueb05\ueb06\ueb07\ueb08\ueb09\ueb0a\ueb0b\ueb0c\ueb0d\ueb0e\ueb0f\ueb10\ueb11\ueb12\ueb13\ueb14\ueb15\ueb16\ueb17\ueb18\ueb19\ueb1a\ueb1b\ueb1c\ueb1d\ueb1e\ueb1f\ueb20\ueb21\ueb22\ueb23\ueb24\ueb25\ueb26\ueb27\ueb28\ueb29\ueb2a\ueb2b\ueb2c\ueb2d\ueb2e\ueb2f\ueb30\ueb31\ueb32\ueb33\ueb34\ueb35\ueb36\ueb37\ueb38\ueb39\ueb3a\ueb3b\ueb3c\ueb3d\ueb3e\ueb3f\ueb40\ueb41\ueb42\ueb43\ueb44\ueb45\ueb46\ueb47\ueb48\ueb49\ueb4a\ueb4b\ueb4c\ueb4d\ueb4e\ueb4f\ueb50\ueb51\ueb52\ueb53\ueb54\ueb55\ueb56\ueb57\ueb58\ueb59\ueb5a\ueb5b\ueb5c\ueb5d\ueb5e\ueb5f\ueb60\ueb61\ueb62\ueb63\ueb64\ueb65\ueb66\ueb67\ueb68\ueb69\ueb6a\ueb6b\ueb6c\ueb6d\ueb6e\ueb6f\ueb70\ueb71\ueb72\ueb73\ueb74\ueb75\ueb76\ueb77\ueb78\ueb79\ueb7a\ueb7b\ueb7c\ueb7d\ueb7e\ueb7f\ueb80\ueb81\ueb82\ueb83\ueb84\ueb85\ueb86\ueb87\ueb88\ueb89\ueb8a\ueb8b\ueb8c\ueb8d\ueb8e\ueb8f\ueb90\ueb91\ueb92\ueb93\ueb94\ueb95\ueb96\ueb97\ueb98\ueb99\ueb9a\ueb9b\ueb9c\ueb9d\ueb9e\ueb9f\ueba0\ueba1\ueba2\ueba3\ueba4\ueba5\ueba6\ueba7\ueba8\ueba9\uebaa\uebab\uebac\uebad\uebae\uebaf\uebb0\uebb1\uebb2\uebb3\uebb4\uebb5\uebb6\uebb7\uebb8\uebb9\uebba\uebbb\uebbc\uebbd\uebbe\uebbf\uebc0\uebc1\uebc2\uebc3\uebc4\uebc5\uebc6\uebc7\uebc8\uebc9\uebca\uebcb\uebcc\uebcd\uebce\uebcf\uebd0\uebd1\uebd2\uebd3\uebd4\uebd5\uebd6\uebd7\uebd8\uebd9\uebda\uebdb\uebdc\uebdd\uebde\uebdf\uebe0\uebe1\uebe2\uebe3\uebe4\uebe5\uebe6\uebe7\uebe8\uebe9\uebea\uebeb\uebec\uebed\uebee\uebef\uebf0\uebf1\uebf2\uebf3\uebf4\uebf5\uebf6\uebf7\uebf8\uebf9\uebfa\uebfb\uebfc\uebfd\uebfe\uebff\uec00\uec01\uec02\uec03\uec04\uec05\uec06\uec07\uec08\uec09\uec0a\uec0b\uec0c\uec0d\uec0e\uec0f\uec10\uec11\uec12\uec13\uec14\uec15\uec16\uec17\uec18\uec19\uec1a\uec1b\uec1c\uec1d\uec1e\uec1f\uec20\uec21\uec22\uec23\uec24\uec25\uec26\uec27\uec28\uec29\uec2a\uec2b\uec2c\uec2d\uec2e\uec2f\uec30\uec31\uec32\uec33\uec34\uec35\uec36\uec37\uec38\uec39\uec3a\uec3b\uec3c\uec3d\uec3e\uec3f\uec40\uec41\uec42\uec43\uec44\uec45\uec46\uec47\uec48\uec49\uec4a\uec4b\uec4c\uec4d\uec4e\uec4f\uec50\uec51\uec52\uec53\uec54\uec55\uec56\uec57\uec58\uec59\uec5a\uec5b\uec5c\uec5d\uec5e\uec5f\uec60\uec61\uec62\uec63\uec64\uec65\uec66\uec67\uec68\uec69\uec6a\uec6b\uec6c\uec6d\uec6e\uec6f\uec70\uec71\uec72\uec73\uec74\uec75\uec76\uec77\uec78\uec79\uec7a\uec7b\uec7c\uec7d\uec7e\uec7f\uec80\uec81\uec82\uec83\uec84\uec85\uec86\uec87\uec88\uec89\uec8a\uec8b\uec8c\uec8d\uec8e\uec8f\uec90\uec91\uec92\uec93\uec94\uec95\uec96\uec97\uec98\uec99\uec9a\uec9b\uec9c\uec9d\uec9e\uec9f\ueca0\ueca1\ueca2\ueca3\ueca4\ueca5\ueca6\ueca7\ueca8\ueca9\uecaa\uecab\uecac\uecad\uecae\uecaf\uecb0\uecb1\uecb2\uecb3\uecb4\uecb5\uecb6\uecb7\uecb8\uecb9\uecba\uecbb\uecbc\uecbd\uecbe\uecbf\uecc0\uecc1\uecc2\uecc3\uecc4\uecc5\uecc6\uecc7\uecc8\uecc9\uecca\ueccb\ueccc\ueccd\uecce\ueccf\uecd0\uecd1\uecd2\uecd3\uecd4\uecd5\uecd6\uecd7\uecd8\uecd9\uecda\uecdb\uecdc\uecdd\uecde\uecdf\uece0\uece1\uece2\uece3\uece4\uece5\uece6\uece7\uece8\uece9\uecea\ueceb\uecec\ueced\uecee\uecef\uecf0\uecf1\uecf2\uecf3\uecf4\uecf5\uecf6\uecf7\uecf8\uecf9\uecfa\uecfb\uecfc\uecfd\uecfe\uecff\ued00\ued01\ued02\ued03\ued04\ued05\ued06\ued07\ued08\ued09\ued0a\ued0b\ued0c\ued0d\ued0e\ued0f\ued10\ued11\ued12\ued13\ued14\ued15\ued16\ued17\ued18\ued19\ued1a\ued1b\ued1c\ued1d\ued1e\ued1f\ued20\ued21\ued22\ued23\ued24\ued25\ued26\ued27\ued28\ued29\ued2a\ued2b\ued2c\ued2d\ued2e\ued2f\ued30\ued31\ued32\ued33\ued34\ued35\ued36\ued37\ued38\ued39\ued3a\ued3b\ued3c\ued3d\ued3e\ued3f\ued40\ued41\ued42\ued43\ued44\ued45\ued46\ued47\ued48\ued49\ued4a\ued4b\ued4c\ued4d\ued4e\ued4f\ued50\ued51\ued52\ued53\ued54\ued55\ued56\ued57\ued58\ued59\ued5a\ued5b\ued5c\ued5d\ued5e\ued5f\ued60\ued61\ued62\ued63\ued64\ued65\ued66\ued67\ued68\ued69\ued6a\ued6b\ued6c\ued6d\ued6e\ued6f\ued70\ued71\ued72\ued73\ued74\ued75\ued76\ued77\ued78\ued79\ued7a\ued7b\ued7c\ued7d\ued7e\ued7f\ued80\ued81\ued82\ued83\ued84\ued85\ued86\ued87\ued88\ued89\ued8a\ued8b\ued8c\ued8d\ued8e\ued8f\ued90\ued91\ued92\ued93\ued94\ued95\ued96\ued97\ued98\ued99\ued9a\ued9b\ued9c\ued9d\ued9e\ued9f\ueda0\ueda1\ueda2\ueda3\ueda4\ueda5\ueda6\ueda7\ueda8\ueda9\uedaa\uedab\uedac\uedad\uedae\uedaf\uedb0\uedb1\uedb2\uedb3\uedb4\uedb5\uedb6\uedb7\uedb8\uedb9\uedba\uedbb\uedbc\uedbd\uedbe\uedbf\uedc0\uedc1\uedc2\uedc3\uedc4\uedc5\uedc6\uedc7\uedc8\uedc9\uedca\uedcb\uedcc\uedcd\uedce\uedcf\uedd0\uedd1\uedd2\uedd3\uedd4\uedd5\uedd6\uedd7\uedd8\uedd9\uedda\ueddb\ueddc\ueddd\uedde\ueddf\uede0\uede1\uede2\uede3\uede4\uede5\uede6\uede7\uede8\uede9\uedea\uedeb\uedec\ueded\uedee\uedef\uedf0\uedf1\uedf2\uedf3\uedf4\uedf5\uedf6\uedf7\uedf8\uedf9\uedfa\uedfb\uedfc\uedfd\uedfe\uedff\uee00\uee01\uee02\uee03\uee04\uee05\uee06\uee07\uee08\uee09\uee0a\uee0b\uee0c\uee0d\uee0e\uee0f\uee10\uee11\uee12\uee13\uee14\uee15\uee16\uee17\uee18\uee19\uee1a\uee1b\uee1c\uee1d\uee1e\uee1f\uee20\uee21\uee22\uee23\uee24\uee25\uee26\uee27\uee28\uee29\uee2a\uee2b\uee2c\uee2d\uee2e\uee2f\uee30\uee31\uee32\uee33\uee34\uee35\uee36\uee37\uee38\uee39\uee3a\uee3b\uee3c\uee3d\uee3e\uee3f\uee40\uee41\uee42\uee43\uee44\uee45\uee46\uee47\uee48\uee49\uee4a\uee4b\uee4c\uee4d\uee4e\uee4f\uee50\uee51\uee52\uee53\uee54\uee55\uee56\uee57\uee58\uee59\uee5a\uee5b\uee5c\uee5d\uee5e\uee5f\uee60\uee61\uee62\uee63\uee64\uee65\uee66\uee67\uee68\uee69\uee6a\uee6b\uee6c\uee6d\uee6e\uee6f\uee70\uee71\uee72\uee73\uee74\uee75\uee76\uee77\uee78\uee79\uee7a\uee7b\uee7c\uee7d\uee7e\uee7f\uee80\uee81\uee82\uee83\uee84\uee85\uee86\uee87\uee88\uee89\uee8a\uee8b\uee8c\uee8d\uee8e\uee8f\uee90\uee91\uee92\uee93\uee94\uee95\uee96\uee97\uee98\uee99\uee9a\uee9b\uee9c\uee9d\uee9e\uee9f\ueea0\ueea1\ueea2\ueea3\ueea4\ueea5\ueea6\ueea7\ueea8\ueea9\ueeaa\ueeab\ueeac\ueead\ueeae\ueeaf\ueeb0\ueeb1\ueeb2\ueeb3\ueeb4\ueeb5\ueeb6\ueeb7\ueeb8\ueeb9\ueeba\ueebb\ueebc\ueebd\ueebe\ueebf\ueec0\ueec1\ueec2\ueec3\ueec4\ueec5\ueec6\ueec7\ueec8\ueec9\ueeca\ueecb\ueecc\ueecd\ueece\ueecf\ueed0\ueed1\ueed2\ueed3\ueed4\ueed5\ueed6\ueed7\ueed8\ueed9\ueeda\ueedb\ueedc\ueedd\ueede\ueedf\ueee0\ueee1\ueee2\ueee3\ueee4\ueee5\ueee6\ueee7\ueee8\ueee9\ueeea\ueeeb\ueeec\ueeed\ueeee\ueeef\ueef0\ueef1\ueef2\ueef3\ueef4\ueef5\ueef6\ueef7\ueef8\ueef9\ueefa\ueefb\ueefc\ueefd\ueefe\ueeff\uef00\uef01\uef02\uef03\uef04\uef05\uef06\uef07\uef08\uef09\uef0a\uef0b\uef0c\uef0d\uef0e\uef0f\uef10\uef11\uef12\uef13\uef14\uef15\uef16\uef17\uef18\uef19\uef1a\uef1b\uef1c\uef1d\uef1e\uef1f\uef20\uef21\uef22\uef23\uef24\uef25\uef26\uef27\uef28\uef29\uef2a\uef2b\uef2c\uef2d\uef2e\uef2f\uef30\uef31\uef32\uef33\uef34\uef35\uef36\uef37\uef38\uef39\uef3a\uef3b\uef3c\uef3d\uef3e\uef3f\uef40\uef41\uef42\uef43\uef44\uef45\uef46\uef47\uef48\uef49\uef4a\uef4b\uef4c\uef4d\uef4e\uef4f\uef50\uef51\uef52\uef53\uef54\uef55\uef56\uef57\uef58\uef59\uef5a\uef5b\uef5c\uef5d\uef5e\uef5f\uef60\uef61\uef62\uef63\uef64\uef65\uef66\uef67\uef68\uef69\uef6a\uef6b\uef6c\uef6d\uef6e\uef6f\uef70\uef71\uef72\uef73\uef74\uef75\uef76\uef77\uef78\uef79\uef7a\uef7b\uef7c\uef7d\uef7e\uef7f\uef80\uef81\uef82\uef83\uef84\uef85\uef86\uef87\uef88\uef89\uef8a\uef8b\uef8c\uef8d\uef8e\uef8f\uef90\uef91\uef92\uef93\uef94\uef95\uef96\uef97\uef98\uef99\uef9a\uef9b\uef9c\uef9d\uef9e\uef9f\uefa0\uefa1\uefa2\uefa3\uefa4\uefa5\uefa6\uefa7\uefa8\uefa9\uefaa\uefab\uefac\uefad\uefae\uefaf\uefb0\uefb1\uefb2\uefb3\uefb4\uefb5\uefb6\uefb7\uefb8\uefb9\uefba\uefbb\uefbc\uefbd\uefbe\uefbf\uefc0\uefc1\uefc2\uefc3\uefc4\uefc5\uefc6\uefc7\uefc8\uefc9\uefca\uefcb\uefcc\uefcd\uefce\uefcf\uefd0\uefd1\uefd2\uefd3\uefd4\uefd5\uefd6\uefd7\uefd8\uefd9\uefda\uefdb\uefdc\uefdd\uefde\uefdf\uefe0\uefe1\uefe2\uefe3\uefe4\uefe5\uefe6\uefe7\uefe8\uefe9\uefea\uefeb\uefec\uefed\uefee\uefef\ueff0\ueff1\ueff2\ueff3\ueff4\ueff5\ueff6\ueff7\ueff8\ueff9\ueffa\ueffb\ueffc\ueffd\ueffe\uefff\uf000\uf001\uf002\uf003\uf004\uf005\uf006\uf007\uf008\uf009\uf00a\uf00b\uf00c\uf00d\uf00e\uf00f\uf010\uf011\uf012\uf013\uf014\uf015\uf016\uf017\uf018\uf019\uf01a\uf01b\uf01c\uf01d\uf01e\uf01f\uf020\uf021\uf022\uf023\uf024\uf025\uf026\uf027\uf028\uf029\uf02a\uf02b\uf02c\uf02d\uf02e\uf02f\uf030\uf031\uf032\uf033\uf034\uf035\uf036\uf037\uf038\uf039\uf03a\uf03b\uf03c\uf03d\uf03e\uf03f\uf040\uf041\uf042\uf043\uf044\uf045\uf046\uf047\uf048\uf049\uf04a\uf04b\uf04c\uf04d\uf04e\uf04f\uf050\uf051\uf052\uf053\uf054\uf055\uf056\uf057\uf058\uf059\uf05a\uf05b\uf05c\uf05d\uf05e\uf05f\uf060\uf061\uf062\uf063\uf064\uf065\uf066\uf067\uf068\uf069\uf06a\uf06b\uf06c\uf06d\uf06e\uf06f\uf070\uf071\uf072\uf073\uf074\uf075\uf076\uf077\uf078\uf079\uf07a\uf07b\uf07c\uf07d\uf07e\uf07f\uf080\uf081\uf082\uf083\uf084\uf085\uf086\uf087\uf088\uf089\uf08a\uf08b\uf08c\uf08d\uf08e\uf08f\uf090\uf091\uf092\uf093\uf094\uf095\uf096\uf097\uf098\uf099\uf09a\uf09b\uf09c\uf09d\uf09e\uf09f\uf0a0\uf0a1\uf0a2\uf0a3\uf0a4\uf0a5\uf0a6\uf0a7\uf0a8\uf0a9\uf0aa\uf0ab\uf0ac\uf0ad\uf0ae\uf0af\uf0b0\uf0b1\uf0b2\uf0b3\uf0b4\uf0b5\uf0b6\uf0b7\uf0b8\uf0b9\uf0ba\uf0bb\uf0bc\uf0bd\uf0be\uf0bf\uf0c0\uf0c1\uf0c2\uf0c3\uf0c4\uf0c5\uf0c6\uf0c7\uf0c8\uf0c9\uf0ca\uf0cb\uf0cc\uf0cd\uf0ce\uf0cf\uf0d0\uf0d1\uf0d2\uf0d3\uf0d4\uf0d5\uf0d6\uf0d7\uf0d8\uf0d9\uf0da\uf0db\uf0dc\uf0dd\uf0de\uf0df\uf0e0\uf0e1\uf0e2\uf0e3\uf0e4\uf0e5\uf0e6\uf0e7\uf0e8\uf0e9\uf0ea\uf0eb\uf0ec\uf0ed\uf0ee\uf0ef\uf0f0\uf0f1\uf0f2\uf0f3\uf0f4\uf0f5\uf0f6\uf0f7\uf0f8\uf0f9\uf0fa\uf0fb\uf0fc\uf0fd\uf0fe\uf0ff\uf100\uf101\uf102\uf103\uf104\uf105\uf106\uf107\uf108\uf109\uf10a\uf10b\uf10c\uf10d\uf10e\uf10f\uf110\uf111\uf112\uf113\uf114\uf115\uf116\uf117\uf118\uf119\uf11a\uf11b\uf11c\uf11d\uf11e\uf11f\uf120\uf121\uf122\uf123\uf124\uf125\uf126\uf127\uf128\uf129\uf12a\uf12b\uf12c\uf12d\uf12e\uf12f\uf130\uf131\uf132\uf133\uf134\uf135\uf136\uf137\uf138\uf139\uf13a\uf13b\uf13c\uf13d\uf13e\uf13f\uf140\uf141\uf142\uf143\uf144\uf145\uf146\uf147\uf148\uf149\uf14a\uf14b\uf14c\uf14d\uf14e\uf14f\uf150\uf151\uf152\uf153\uf154\uf155\uf156\uf157\uf158\uf159\uf15a\uf15b\uf15c\uf15d\uf15e\uf15f\uf160\uf161\uf162\uf163\uf164\uf165\uf166\uf167\uf168\uf169\uf16a\uf16b\uf16c\uf16d\uf16e\uf16f\uf170\uf171\uf172\uf173\uf174\uf175\uf176\uf177\uf178\uf179\uf17a\uf17b\uf17c\uf17d\uf17e\uf17f\uf180\uf181\uf182\uf183\uf184\uf185\uf186\uf187\uf188\uf189\uf18a\uf18b\uf18c\uf18d\uf18e\uf18f\uf190\uf191\uf192\uf193\uf194\uf195\uf196\uf197\uf198\uf199\uf19a\uf19b\uf19c\uf19d\uf19e\uf19f\uf1a0\uf1a1\uf1a2\uf1a3\uf1a4\uf1a5\uf1a6\uf1a7\uf1a8\uf1a9\uf1aa\uf1ab\uf1ac\uf1ad\uf1ae\uf1af\uf1b0\uf1b1\uf1b2\uf1b3\uf1b4\uf1b5\uf1b6\uf1b7\uf1b8\uf1b9\uf1ba\uf1bb\uf1bc\uf1bd\uf1be\uf1bf\uf1c0\uf1c1\uf1c2\uf1c3\uf1c4\uf1c5\uf1c6\uf1c7\uf1c8\uf1c9\uf1ca\uf1cb\uf1cc\uf1cd\uf1ce\uf1cf\uf1d0\uf1d1\uf1d2\uf1d3\uf1d4\uf1d5\uf1d6\uf1d7\uf1d8\uf1d9\uf1da\uf1db\uf1dc\uf1dd\uf1de\uf1df\uf1e0\uf1e1\uf1e2\uf1e3\uf1e4\uf1e5\uf1e6\uf1e7\uf1e8\uf1e9\uf1ea\uf1eb\uf1ec\uf1ed\uf1ee\uf1ef\uf1f0\uf1f1\uf1f2\uf1f3\uf1f4\uf1f5\uf1f6\uf1f7\uf1f8\uf1f9\uf1fa\uf1fb\uf1fc\uf1fd\uf1fe\uf1ff\uf200\uf201\uf202\uf203\uf204\uf205\uf206\uf207\uf208\uf209\uf20a\uf20b\uf20c\uf20d\uf20e\uf20f\uf210\uf211\uf212\uf213\uf214\uf215\uf216\uf217\uf218\uf219\uf21a\uf21b\uf21c\uf21d\uf21e\uf21f\uf220\uf221\uf222\uf223\uf224\uf225\uf226\uf227\uf228\uf229\uf22a\uf22b\uf22c\uf22d\uf22e\uf22f\uf230\uf231\uf232\uf233\uf234\uf235\uf236\uf237\uf238\uf239\uf23a\uf23b\uf23c\uf23d\uf23e\uf23f\uf240\uf241\uf242\uf243\uf244\uf245\uf246\uf247\uf248\uf249\uf24a\uf24b\uf24c\uf24d\uf24e\uf24f\uf250\uf251\uf252\uf253\uf254\uf255\uf256\uf257\uf258\uf259\uf25a\uf25b\uf25c\uf25d\uf25e\uf25f\uf260\uf261\uf262\uf263\uf264\uf265\uf266\uf267\uf268\uf269\uf26a\uf26b\uf26c\uf26d\uf26e\uf26f\uf270\uf271\uf272\uf273\uf274\uf275\uf276\uf277\uf278\uf279\uf27a\uf27b\uf27c\uf27d\uf27e\uf27f\uf280\uf281\uf282\uf283\uf284\uf285\uf286\uf287\uf288\uf289\uf28a\uf28b\uf28c\uf28d\uf28e\uf28f\uf290\uf291\uf292\uf293\uf294\uf295\uf296\uf297\uf298\uf299\uf29a\uf29b\uf29c\uf29d\uf29e\uf29f\uf2a0\uf2a1\uf2a2\uf2a3\uf2a4\uf2a5\uf2a6\uf2a7\uf2a8\uf2a9\uf2aa\uf2ab\uf2ac\uf2ad\uf2ae\uf2af\uf2b0\uf2b1\uf2b2\uf2b3\uf2b4\uf2b5\uf2b6\uf2b7\uf2b8\uf2b9\uf2ba\uf2bb\uf2bc\uf2bd\uf2be\uf2bf\uf2c0\uf2c1\uf2c2\uf2c3\uf2c4\uf2c5\uf2c6\uf2c7\uf2c8\uf2c9\uf2ca\uf2cb\uf2cc\uf2cd\uf2ce\uf2cf\uf2d0\uf2d1\uf2d2\uf2d3\uf2d4\uf2d5\uf2d6\uf2d7\uf2d8\uf2d9\uf2da\uf2db\uf2dc\uf2dd\uf2de\uf2df\uf2e0\uf2e1\uf2e2\uf2e3\uf2e4\uf2e5\uf2e6\uf2e7\uf2e8\uf2e9\uf2ea\uf2eb\uf2ec\uf2ed\uf2ee\uf2ef\uf2f0\uf2f1\uf2f2\uf2f3\uf2f4\uf2f5\uf2f6\uf2f7\uf2f8\uf2f9\uf2fa\uf2fb\uf2fc\uf2fd\uf2fe\uf2ff\uf300\uf301\uf302\uf303\uf304\uf305\uf306\uf307\uf308\uf309\uf30a\uf30b\uf30c\uf30d\uf30e\uf30f\uf310\uf311\uf312\uf313\uf314\uf315\uf316\uf317\uf318\uf319\uf31a\uf31b\uf31c\uf31d\uf31e\uf31f\uf320\uf321\uf322\uf323\uf324\uf325\uf326\uf327\uf328\uf329\uf32a\uf32b\uf32c\uf32d\uf32e\uf32f\uf330\uf331\uf332\uf333\uf334\uf335\uf336\uf337\uf338\uf339\uf33a\uf33b\uf33c\uf33d\uf33e\uf33f\uf340\uf341\uf342\uf343\uf344\uf345\uf346\uf347\uf348\uf349\uf34a\uf34b\uf34c\uf34d\uf34e\uf34f\uf350\uf351\uf352\uf353\uf354\uf355\uf356\uf357\uf358\uf359\uf35a\uf35b\uf35c\uf35d\uf35e\uf35f\uf360\uf361\uf362\uf363\uf364\uf365\uf366\uf367\uf368\uf369\uf36a\uf36b\uf36c\uf36d\uf36e\uf36f\uf370\uf371\uf372\uf373\uf374\uf375\uf376\uf377\uf378\uf379\uf37a\uf37b\uf37c\uf37d\uf37e\uf37f\uf380\uf381\uf382\uf383\uf384\uf385\uf386\uf387\uf388\uf389\uf38a\uf38b\uf38c\uf38d\uf38e\uf38f\uf390\uf391\uf392\uf393\uf394\uf395\uf396\uf397\uf398\uf399\uf39a\uf39b\uf39c\uf39d\uf39e\uf39f\uf3a0\uf3a1\uf3a2\uf3a3\uf3a4\uf3a5\uf3a6\uf3a7\uf3a8\uf3a9\uf3aa\uf3ab\uf3ac\uf3ad\uf3ae\uf3af\uf3b0\uf3b1\uf3b2\uf3b3\uf3b4\uf3b5\uf3b6\uf3b7\uf3b8\uf3b9\uf3ba\uf3bb\uf3bc\uf3bd\uf3be\uf3bf\uf3c0\uf3c1\uf3c2\uf3c3\uf3c4\uf3c5\uf3c6\uf3c7\uf3c8\uf3c9\uf3ca\uf3cb\uf3cc\uf3cd\uf3ce\uf3cf\uf3d0\uf3d1\uf3d2\uf3d3\uf3d4\uf3d5\uf3d6\uf3d7\uf3d8\uf3d9\uf3da\uf3db\uf3dc\uf3dd\uf3de\uf3df\uf3e0\uf3e1\uf3e2\uf3e3\uf3e4\uf3e5\uf3e6\uf3e7\uf3e8\uf3e9\uf3ea\uf3eb\uf3ec\uf3ed\uf3ee\uf3ef\uf3f0\uf3f1\uf3f2\uf3f3\uf3f4\uf3f5\uf3f6\uf3f7\uf3f8\uf3f9\uf3fa\uf3fb\uf3fc\uf3fd\uf3fe\uf3ff\uf400\uf401\uf402\uf403\uf404\uf405\uf406\uf407\uf408\uf409\uf40a\uf40b\uf40c\uf40d\uf40e\uf40f\uf410\uf411\uf412\uf413\uf414\uf415\uf416\uf417\uf418\uf419\uf41a\uf41b\uf41c\uf41d\uf41e\uf41f\uf420\uf421\uf422\uf423\uf424\uf425\uf426\uf427\uf428\uf429\uf42a\uf42b\uf42c\uf42d\uf42e\uf42f\uf430\uf431\uf432\uf433\uf434\uf435\uf436\uf437\uf438\uf439\uf43a\uf43b\uf43c\uf43d\uf43e\uf43f\uf440\uf441\uf442\uf443\uf444\uf445\uf446\uf447\uf448\uf449\uf44a\uf44b\uf44c\uf44d\uf44e\uf44f\uf450\uf451\uf452\uf453\uf454\uf455\uf456\uf457\uf458\uf459\uf45a\uf45b\uf45c\uf45d\uf45e\uf45f\uf460\uf461\uf462\uf463\uf464\uf465\uf466\uf467\uf468\uf469\uf46a\uf46b\uf46c\uf46d\uf46e\uf46f\uf470\uf471\uf472\uf473\uf474\uf475\uf476\uf477\uf478\uf479\uf47a\uf47b\uf47c\uf47d\uf47e\uf47f\uf480\uf481\uf482\uf483\uf484\uf485\uf486\uf487\uf488\uf489\uf48a\uf48b\uf48c\uf48d\uf48e\uf48f\uf490\uf491\uf492\uf493\uf494\uf495\uf496\uf497\uf498\uf499\uf49a\uf49b\uf49c\uf49d\uf49e\uf49f\uf4a0\uf4a1\uf4a2\uf4a3\uf4a4\uf4a5\uf4a6\uf4a7\uf4a8\uf4a9\uf4aa\uf4ab\uf4ac\uf4ad\uf4ae\uf4af\uf4b0\uf4b1\uf4b2\uf4b3\uf4b4\uf4b5\uf4b6\uf4b7\uf4b8\uf4b9\uf4ba\uf4bb\uf4bc\uf4bd\uf4be\uf4bf\uf4c0\uf4c1\uf4c2\uf4c3\uf4c4\uf4c5\uf4c6\uf4c7\uf4c8\uf4c9\uf4ca\uf4cb\uf4cc\uf4cd\uf4ce\uf4cf\uf4d0\uf4d1\uf4d2\uf4d3\uf4d4\uf4d5\uf4d6\uf4d7\uf4d8\uf4d9\uf4da\uf4db\uf4dc\uf4dd\uf4de\uf4df\uf4e0\uf4e1\uf4e2\uf4e3\uf4e4\uf4e5\uf4e6\uf4e7\uf4e8\uf4e9\uf4ea\uf4eb\uf4ec\uf4ed\uf4ee\uf4ef\uf4f0\uf4f1\uf4f2\uf4f3\uf4f4\uf4f5\uf4f6\uf4f7\uf4f8\uf4f9\uf4fa\uf4fb\uf4fc\uf4fd\uf4fe\uf4ff\uf500\uf501\uf502\uf503\uf504\uf505\uf506\uf507\uf508\uf509\uf50a\uf50b\uf50c\uf50d\uf50e\uf50f\uf510\uf511\uf512\uf513\uf514\uf515\uf516\uf517\uf518\uf519\uf51a\uf51b\uf51c\uf51d\uf51e\uf51f\uf520\uf521\uf522\uf523\uf524\uf525\uf526\uf527\uf528\uf529\uf52a\uf52b\uf52c\uf52d\uf52e\uf52f\uf530\uf531\uf532\uf533\uf534\uf535\uf536\uf537\uf538\uf539\uf53a\uf53b\uf53c\uf53d\uf53e\uf53f\uf540\uf541\uf542\uf543\uf544\uf545\uf546\uf547\uf548\uf549\uf54a\uf54b\uf54c\uf54d\uf54e\uf54f\uf550\uf551\uf552\uf553\uf554\uf555\uf556\uf557\uf558\uf559\uf55a\uf55b\uf55c\uf55d\uf55e\uf55f\uf560\uf561\uf562\uf563\uf564\uf565\uf566\uf567\uf568\uf569\uf56a\uf56b\uf56c\uf56d\uf56e\uf56f\uf570\uf571\uf572\uf573\uf574\uf575\uf576\uf577\uf578\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf582\uf583\uf584\uf585\uf586\uf587\uf588\uf589\uf58a\uf58b\uf58c\uf58d\uf58e\uf58f\uf590\uf591\uf592\uf593\uf594\uf595\uf596\uf597\uf598\uf599\uf59a\uf59b\uf59c\uf59d\uf59e\uf59f\uf5a0\uf5a1\uf5a2\uf5a3\uf5a4\uf5a5\uf5a6\uf5a7\uf5a8\uf5a9\uf5aa\uf5ab\uf5ac\uf5ad\uf5ae\uf5af\uf5b0\uf5b1\uf5b2\uf5b3\uf5b4\uf5b5\uf5b6\uf5b7\uf5b8\uf5b9\uf5ba\uf5bb\uf5bc\uf5bd\uf5be\uf5bf\uf5c0\uf5c1\uf5c2\uf5c3\uf5c4\uf5c5\uf5c6\uf5c7\uf5c8\uf5c9\uf5ca\uf5cb\uf5cc\uf5cd\uf5ce\uf5cf\uf5d0\uf5d1\uf5d2\uf5d3\uf5d4\uf5d5\uf5d6\uf5d7\uf5d8\uf5d9\uf5da\uf5db\uf5dc\uf5dd\uf5de\uf5df\uf5e0\uf5e1\uf5e2\uf5e3\uf5e4\uf5e5\uf5e6\uf5e7\uf5e8\uf5e9\uf5ea\uf5eb\uf5ec\uf5ed\uf5ee\uf5ef\uf5f0\uf5f1\uf5f2\uf5f3\uf5f4\uf5f5\uf5f6\uf5f7\uf5f8\uf5f9\uf5fa\uf5fb\uf5fc\uf5fd\uf5fe\uf5ff\uf600\uf601\uf602\uf603\uf604\uf605\uf606\uf607\uf608\uf609\uf60a\uf60b\uf60c\uf60d\uf60e\uf60f\uf610\uf611\uf612\uf613\uf614\uf615\uf616\uf617\uf618\uf619\uf61a\uf61b\uf61c\uf61d\uf61e\uf61f\uf620\uf621\uf622\uf623\uf624\uf625\uf626\uf627\uf628\uf629\uf62a\uf62b\uf62c\uf62d\uf62e\uf62f\uf630\uf631\uf632\uf633\uf634\uf635\uf636\uf637\uf638\uf639\uf63a\uf63b\uf63c\uf63d\uf63e\uf63f\uf640\uf641\uf642\uf643\uf644\uf645\uf646\uf647\uf648\uf649\uf64a\uf64b\uf64c\uf64d\uf64e\uf64f\uf650\uf651\uf652\uf653\uf654\uf655\uf656\uf657\uf658\uf659\uf65a\uf65b\uf65c\uf65d\uf65e\uf65f\uf660\uf661\uf662\uf663\uf664\uf665\uf666\uf667\uf668\uf669\uf66a\uf66b\uf66c\uf66d\uf66e\uf66f\uf670\uf671\uf672\uf673\uf674\uf675\uf676\uf677\uf678\uf679\uf67a\uf67b\uf67c\uf67d\uf67e\uf67f\uf680\uf681\uf682\uf683\uf684\uf685\uf686\uf687\uf688\uf689\uf68a\uf68b\uf68c\uf68d\uf68e\uf68f\uf690\uf691\uf692\uf693\uf694\uf695\uf696\uf697\uf698\uf699\uf69a\uf69b\uf69c\uf69d\uf69e\uf69f\uf6a0\uf6a1\uf6a2\uf6a3\uf6a4\uf6a5\uf6a6\uf6a7\uf6a8\uf6a9\uf6aa\uf6ab\uf6ac\uf6ad\uf6ae\uf6af\uf6b0\uf6b1\uf6b2\uf6b3\uf6b4\uf6b5\uf6b6\uf6b7\uf6b8\uf6b9\uf6ba\uf6bb\uf6bc\uf6bd\uf6be\uf6bf\uf6c0\uf6c1\uf6c2\uf6c3\uf6c4\uf6c5\uf6c6\uf6c7\uf6c8\uf6c9\uf6ca\uf6cb\uf6cc\uf6cd\uf6ce\uf6cf\uf6d0\uf6d1\uf6d2\uf6d3\uf6d4\uf6d5\uf6d6\uf6d7\uf6d8\uf6d9\uf6da\uf6db\uf6dc\uf6dd\uf6de\uf6df\uf6e0\uf6e1\uf6e2\uf6e3\uf6e4\uf6e5\uf6e6\uf6e7\uf6e8\uf6e9\uf6ea\uf6eb\uf6ec\uf6ed\uf6ee\uf6ef\uf6f0\uf6f1\uf6f2\uf6f3\uf6f4\uf6f5\uf6f6\uf6f7\uf6f8\uf6f9\uf6fa\uf6fb\uf6fc\uf6fd\uf6fe\uf6ff\uf700\uf701\uf702\uf703\uf704\uf705\uf706\uf707\uf708\uf709\uf70a\uf70b\uf70c\uf70d\uf70e\uf70f\uf710\uf711\uf712\uf713\uf714\uf715\uf716\uf717\uf718\uf719\uf71a\uf71b\uf71c\uf71d\uf71e\uf71f\uf720\uf721\uf722\uf723\uf724\uf725\uf726\uf727\uf728\uf729\uf72a\uf72b\uf72c\uf72d\uf72e\uf72f\uf730\uf731\uf732\uf733\uf734\uf735\uf736\uf737\uf738\uf739\uf73a\uf73b\uf73c\uf73d\uf73e\uf73f\uf740\uf741\uf742\uf743\uf744\uf745\uf746\uf747\uf748\uf749\uf74a\uf74b\uf74c\uf74d\uf74e\uf74f\uf750\uf751\uf752\uf753\uf754\uf755\uf756\uf757\uf758\uf759\uf75a\uf75b\uf75c\uf75d\uf75e\uf75f\uf760\uf761\uf762\uf763\uf764\uf765\uf766\uf767\uf768\uf769\uf76a\uf76b\uf76c\uf76d\uf76e\uf76f\uf770\uf771\uf772\uf773\uf774\uf775\uf776\uf777\uf778\uf779\uf77a\uf77b\uf77c\uf77d\uf77e\uf77f\uf780\uf781\uf782\uf783\uf784\uf785\uf786\uf787\uf788\uf789\uf78a\uf78b\uf78c\uf78d\uf78e\uf78f\uf790\uf791\uf792\uf793\uf794\uf795\uf796\uf797\uf798\uf799\uf79a\uf79b\uf79c\uf79d\uf79e\uf79f\uf7a0\uf7a1\uf7a2\uf7a3\uf7a4\uf7a5\uf7a6\uf7a7\uf7a8\uf7a9\uf7aa\uf7ab\uf7ac\uf7ad\uf7ae\uf7af\uf7b0\uf7b1\uf7b2\uf7b3\uf7b4\uf7b5\uf7b6\uf7b7\uf7b8\uf7b9\uf7ba\uf7bb\uf7bc\uf7bd\uf7be\uf7bf\uf7c0\uf7c1\uf7c2\uf7c3\uf7c4\uf7c5\uf7c6\uf7c7\uf7c8\uf7c9\uf7ca\uf7cb\uf7cc\uf7cd\uf7ce\uf7cf\uf7d0\uf7d1\uf7d2\uf7d3\uf7d4\uf7d5\uf7d6\uf7d7\uf7d8\uf7d9\uf7da\uf7db\uf7dc\uf7dd\uf7de\uf7df\uf7e0\uf7e1\uf7e2\uf7e3\uf7e4\uf7e5\uf7e6\uf7e7\uf7e8\uf7e9\uf7ea\uf7eb\uf7ec\uf7ed\uf7ee\uf7ef\uf7f0\uf7f1\uf7f2\uf7f3\uf7f4\uf7f5\uf7f6\uf7f7\uf7f8\uf7f9\uf7fa\uf7fb\uf7fc\uf7fd\uf7fe\uf7ff\uf800\uf801\uf802\uf803\uf804\uf805\uf806\uf807\uf808\uf809\uf80a\uf80b\uf80c\uf80d\uf80e\uf80f\uf810\uf811\uf812\uf813\uf814\uf815\uf816\uf817\uf818\uf819\uf81a\uf81b\uf81c\uf81d\uf81e\uf81f\uf820\uf821\uf822\uf823\uf824\uf825\uf826\uf827\uf828\uf829\uf82a\uf82b\uf82c\uf82d\uf82e\uf82f\uf830\uf831\uf832\uf833\uf834\uf835\uf836\uf837\uf838\uf839\uf83a\uf83b\uf83c\uf83d\uf83e\uf83f\uf840\uf841\uf842\uf843\uf844\uf845\uf846\uf847\uf848\uf849\uf84a\uf84b\uf84c\uf84d\uf84e\uf84f\uf850\uf851\uf852\uf853\uf854\uf855\uf856\uf857\uf858\uf859\uf85a\uf85b\uf85c\uf85d\uf85e\uf85f\uf860\uf861\uf862\uf863\uf864\uf865\uf866\uf867\uf868\uf869\uf86a\uf86b\uf86c\uf86d\uf86e\uf86f\uf870\uf871\uf872\uf873\uf874\uf875\uf876\uf877\uf878\uf879\uf87a\uf87b\uf87c\uf87d\uf87e\uf87f\uf880\uf881\uf882\uf883\uf884\uf885\uf886\uf887\uf888\uf889\uf88a\uf88b\uf88c\uf88d\uf88e\uf88f\uf890\uf891\uf892\uf893\uf894\uf895\uf896\uf897\uf898\uf899\uf89a\uf89b\uf89c\uf89d\uf89e\uf89f\uf8a0\uf8a1\uf8a2\uf8a3\uf8a4\uf8a5\uf8a6\uf8a7\uf8a8\uf8a9\uf8aa\uf8ab\uf8ac\uf8ad\uf8ae\uf8af\uf8b0\uf8b1\uf8b2\uf8b3\uf8b4\uf8b5\uf8b6\uf8b7\uf8b8\uf8b9\uf8ba\uf8bb\uf8bc\uf8bd\uf8be\uf8bf\uf8c0\uf8c1\uf8c2\uf8c3\uf8c4\uf8c5\uf8c6\uf8c7\uf8c8\uf8c9\uf8ca\uf8cb\uf8cc\uf8cd\uf8ce\uf8cf\uf8d0\uf8d1\uf8d2\uf8d3\uf8d4\uf8d5\uf8d6\uf8d7\uf8d8\uf8d9\uf8da\uf8db\uf8dc\uf8dd\uf8de\uf8df\uf8e0\uf8e1\uf8e2\uf8e3\uf8e4\uf8e5\uf8e6\uf8e7\uf8e8\uf8e9\uf8ea\uf8eb\uf8ec\uf8ed\uf8ee\uf8ef\uf8f0\uf8f1\uf8f2\uf8f3\uf8f4\uf8f5\uf8f6\uf8f7\uf8f8\uf8f9\uf8fa\uf8fb\uf8fc\uf8fd\uf8fe\uf8ff' + +try: + Cs = eval(r"'\ud800\ud801\ud802\ud803\ud804\ud805\ud806\ud807\ud808\ud809\ud80a\ud80b\ud80c\ud80d\ud80e\ud80f\ud810\ud811\ud812\ud813\ud814\ud815\ud816\ud817\ud818\ud819\ud81a\ud81b\ud81c\ud81d\ud81e\ud81f\ud820\ud821\ud822\ud823\ud824\ud825\ud826\ud827\ud828\ud829\ud82a\ud82b\ud82c\ud82d\ud82e\ud82f\ud830\ud831\ud832\ud833\ud834\ud835\ud836\ud837\ud838\ud839\ud83a\ud83b\ud83c\ud83d\ud83e\ud83f\ud840\ud841\ud842\ud843\ud844\ud845\ud846\ud847\ud848\ud849\ud84a\ud84b\ud84c\ud84d\ud84e\ud84f\ud850\ud851\ud852\ud853\ud854\ud855\ud856\ud857\ud858\ud859\ud85a\ud85b\ud85c\ud85d\ud85e\ud85f\ud860\ud861\ud862\ud863\ud864\ud865\ud866\ud867\ud868\ud869\ud86a\ud86b\ud86c\ud86d\ud86e\ud86f\ud870\ud871\ud872\ud873\ud874\ud875\ud876\ud877\ud878\ud879\ud87a\ud87b\ud87c\ud87d\ud87e\ud87f\ud880\ud881\ud882\ud883\ud884\ud885\ud886\ud887\ud888\ud889\ud88a\ud88b\ud88c\ud88d\ud88e\ud88f\ud890\ud891\ud892\ud893\ud894\ud895\ud896\ud897\ud898\ud899\ud89a\ud89b\ud89c\ud89d\ud89e\ud89f\ud8a0\ud8a1\ud8a2\ud8a3\ud8a4\ud8a5\ud8a6\ud8a7\ud8a8\ud8a9\ud8aa\ud8ab\ud8ac\ud8ad\ud8ae\ud8af\ud8b0\ud8b1\ud8b2\ud8b3\ud8b4\ud8b5\ud8b6\ud8b7\ud8b8\ud8b9\ud8ba\ud8bb\ud8bc\ud8bd\ud8be\ud8bf\ud8c0\ud8c1\ud8c2\ud8c3\ud8c4\ud8c5\ud8c6\ud8c7\ud8c8\ud8c9\ud8ca\ud8cb\ud8cc\ud8cd\ud8ce\ud8cf\ud8d0\ud8d1\ud8d2\ud8d3\ud8d4\ud8d5\ud8d6\ud8d7\ud8d8\ud8d9\ud8da\ud8db\ud8dc\ud8dd\ud8de\ud8df\ud8e0\ud8e1\ud8e2\ud8e3\ud8e4\ud8e5\ud8e6\ud8e7\ud8e8\ud8e9\ud8ea\ud8eb\ud8ec\ud8ed\ud8ee\ud8ef\ud8f0\ud8f1\ud8f2\ud8f3\ud8f4\ud8f5\ud8f6\ud8f7\ud8f8\ud8f9\ud8fa\ud8fb\ud8fc\ud8fd\ud8fe\ud8ff\ud900\ud901\ud902\ud903\ud904\ud905\ud906\ud907\ud908\ud909\ud90a\ud90b\ud90c\ud90d\ud90e\ud90f\ud910\ud911\ud912\ud913\ud914\ud915\ud916\ud917\ud918\ud919\ud91a\ud91b\ud91c\ud91d\ud91e\ud91f\ud920\ud921\ud922\ud923\ud924\ud925\ud926\ud927\ud928\ud929\ud92a\ud92b\ud92c\ud92d\ud92e\ud92f\ud930\ud931\ud932\ud933\ud934\ud935\ud936\ud937\ud938\ud939\ud93a\ud93b\ud93c\ud93d\ud93e\ud93f\ud940\ud941\ud942\ud943\ud944\ud945\ud946\ud947\ud948\ud949\ud94a\ud94b\ud94c\ud94d\ud94e\ud94f\ud950\ud951\ud952\ud953\ud954\ud955\ud956\ud957\ud958\ud959\ud95a\ud95b\ud95c\ud95d\ud95e\ud95f\ud960\ud961\ud962\ud963\ud964\ud965\ud966\ud967\ud968\ud969\ud96a\ud96b\ud96c\ud96d\ud96e\ud96f\ud970\ud971\ud972\ud973\ud974\ud975\ud976\ud977\ud978\ud979\ud97a\ud97b\ud97c\ud97d\ud97e\ud97f\ud980\ud981\ud982\ud983\ud984\ud985\ud986\ud987\ud988\ud989\ud98a\ud98b\ud98c\ud98d\ud98e\ud98f\ud990\ud991\ud992\ud993\ud994\ud995\ud996\ud997\ud998\ud999\ud99a\ud99b\ud99c\ud99d\ud99e\ud99f\ud9a0\ud9a1\ud9a2\ud9a3\ud9a4\ud9a5\ud9a6\ud9a7\ud9a8\ud9a9\ud9aa\ud9ab\ud9ac\ud9ad\ud9ae\ud9af\ud9b0\ud9b1\ud9b2\ud9b3\ud9b4\ud9b5\ud9b6\ud9b7\ud9b8\ud9b9\ud9ba\ud9bb\ud9bc\ud9bd\ud9be\ud9bf\ud9c0\ud9c1\ud9c2\ud9c3\ud9c4\ud9c5\ud9c6\ud9c7\ud9c8\ud9c9\ud9ca\ud9cb\ud9cc\ud9cd\ud9ce\ud9cf\ud9d0\ud9d1\ud9d2\ud9d3\ud9d4\ud9d5\ud9d6\ud9d7\ud9d8\ud9d9\ud9da\ud9db\ud9dc\ud9dd\ud9de\ud9df\ud9e0\ud9e1\ud9e2\ud9e3\ud9e4\ud9e5\ud9e6\ud9e7\ud9e8\ud9e9\ud9ea\ud9eb\ud9ec\ud9ed\ud9ee\ud9ef\ud9f0\ud9f1\ud9f2\ud9f3\ud9f4\ud9f5\ud9f6\ud9f7\ud9f8\ud9f9\ud9fa\ud9fb\ud9fc\ud9fd\ud9fe\ud9ff\uda00\uda01\uda02\uda03\uda04\uda05\uda06\uda07\uda08\uda09\uda0a\uda0b\uda0c\uda0d\uda0e\uda0f\uda10\uda11\uda12\uda13\uda14\uda15\uda16\uda17\uda18\uda19\uda1a\uda1b\uda1c\uda1d\uda1e\uda1f\uda20\uda21\uda22\uda23\uda24\uda25\uda26\uda27\uda28\uda29\uda2a\uda2b\uda2c\uda2d\uda2e\uda2f\uda30\uda31\uda32\uda33\uda34\uda35\uda36\uda37\uda38\uda39\uda3a\uda3b\uda3c\uda3d\uda3e\uda3f\uda40\uda41\uda42\uda43\uda44\uda45\uda46\uda47\uda48\uda49\uda4a\uda4b\uda4c\uda4d\uda4e\uda4f\uda50\uda51\uda52\uda53\uda54\uda55\uda56\uda57\uda58\uda59\uda5a\uda5b\uda5c\uda5d\uda5e\uda5f\uda60\uda61\uda62\uda63\uda64\uda65\uda66\uda67\uda68\uda69\uda6a\uda6b\uda6c\uda6d\uda6e\uda6f\uda70\uda71\uda72\uda73\uda74\uda75\uda76\uda77\uda78\uda79\uda7a\uda7b\uda7c\uda7d\uda7e\uda7f\uda80\uda81\uda82\uda83\uda84\uda85\uda86\uda87\uda88\uda89\uda8a\uda8b\uda8c\uda8d\uda8e\uda8f\uda90\uda91\uda92\uda93\uda94\uda95\uda96\uda97\uda98\uda99\uda9a\uda9b\uda9c\uda9d\uda9e\uda9f\udaa0\udaa1\udaa2\udaa3\udaa4\udaa5\udaa6\udaa7\udaa8\udaa9\udaaa\udaab\udaac\udaad\udaae\udaaf\udab0\udab1\udab2\udab3\udab4\udab5\udab6\udab7\udab8\udab9\udaba\udabb\udabc\udabd\udabe\udabf\udac0\udac1\udac2\udac3\udac4\udac5\udac6\udac7\udac8\udac9\udaca\udacb\udacc\udacd\udace\udacf\udad0\udad1\udad2\udad3\udad4\udad5\udad6\udad7\udad8\udad9\udada\udadb\udadc\udadd\udade\udadf\udae0\udae1\udae2\udae3\udae4\udae5\udae6\udae7\udae8\udae9\udaea\udaeb\udaec\udaed\udaee\udaef\udaf0\udaf1\udaf2\udaf3\udaf4\udaf5\udaf6\udaf7\udaf8\udaf9\udafa\udafb\udafc\udafd\udafe\udaff\udb00\udb01\udb02\udb03\udb04\udb05\udb06\udb07\udb08\udb09\udb0a\udb0b\udb0c\udb0d\udb0e\udb0f\udb10\udb11\udb12\udb13\udb14\udb15\udb16\udb17\udb18\udb19\udb1a\udb1b\udb1c\udb1d\udb1e\udb1f\udb20\udb21\udb22\udb23\udb24\udb25\udb26\udb27\udb28\udb29\udb2a\udb2b\udb2c\udb2d\udb2e\udb2f\udb30\udb31\udb32\udb33\udb34\udb35\udb36\udb37\udb38\udb39\udb3a\udb3b\udb3c\udb3d\udb3e\udb3f\udb40\udb41\udb42\udb43\udb44\udb45\udb46\udb47\udb48\udb49\udb4a\udb4b\udb4c\udb4d\udb4e\udb4f\udb50\udb51\udb52\udb53\udb54\udb55\udb56\udb57\udb58\udb59\udb5a\udb5b\udb5c\udb5d\udb5e\udb5f\udb60\udb61\udb62\udb63\udb64\udb65\udb66\udb67\udb68\udb69\udb6a\udb6b\udb6c\udb6d\udb6e\udb6f\udb70\udb71\udb72\udb73\udb74\udb75\udb76\udb77\udb78\udb79\udb7a\udb7b\udb7c\udb7d\udb7e\udb7f\udb80\udb81\udb82\udb83\udb84\udb85\udb86\udb87\udb88\udb89\udb8a\udb8b\udb8c\udb8d\udb8e\udb8f\udb90\udb91\udb92\udb93\udb94\udb95\udb96\udb97\udb98\udb99\udb9a\udb9b\udb9c\udb9d\udb9e\udb9f\udba0\udba1\udba2\udba3\udba4\udba5\udba6\udba7\udba8\udba9\udbaa\udbab\udbac\udbad\udbae\udbaf\udbb0\udbb1\udbb2\udbb3\udbb4\udbb5\udbb6\udbb7\udbb8\udbb9\udbba\udbbb\udbbc\udbbd\udbbe\udbbf\udbc0\udbc1\udbc2\udbc3\udbc4\udbc5\udbc6\udbc7\udbc8\udbc9\udbca\udbcb\udbcc\udbcd\udbce\udbcf\udbd0\udbd1\udbd2\udbd3\udbd4\udbd5\udbd6\udbd7\udbd8\udbd9\udbda\udbdb\udbdc\udbdd\udbde\udbdf\udbe0\udbe1\udbe2\udbe3\udbe4\udbe5\udbe6\udbe7\udbe8\udbe9\udbea\udbeb\udbec\udbed\udbee\udbef\udbf0\udbf1\udbf2\udbf3\udbf4\udbf5\udbf6\udbf7\udbf8\udbf9\udbfa\udbfb\udbfc\udbfd\udbfe\U0010fc00\udc01\udc02\udc03\udc04\udc05\udc06\udc07\udc08\udc09\udc0a\udc0b\udc0c\udc0d\udc0e\udc0f\udc10\udc11\udc12\udc13\udc14\udc15\udc16\udc17\udc18\udc19\udc1a\udc1b\udc1c\udc1d\udc1e\udc1f\udc20\udc21\udc22\udc23\udc24\udc25\udc26\udc27\udc28\udc29\udc2a\udc2b\udc2c\udc2d\udc2e\udc2f\udc30\udc31\udc32\udc33\udc34\udc35\udc36\udc37\udc38\udc39\udc3a\udc3b\udc3c\udc3d\udc3e\udc3f\udc40\udc41\udc42\udc43\udc44\udc45\udc46\udc47\udc48\udc49\udc4a\udc4b\udc4c\udc4d\udc4e\udc4f\udc50\udc51\udc52\udc53\udc54\udc55\udc56\udc57\udc58\udc59\udc5a\udc5b\udc5c\udc5d\udc5e\udc5f\udc60\udc61\udc62\udc63\udc64\udc65\udc66\udc67\udc68\udc69\udc6a\udc6b\udc6c\udc6d\udc6e\udc6f\udc70\udc71\udc72\udc73\udc74\udc75\udc76\udc77\udc78\udc79\udc7a\udc7b\udc7c\udc7d\udc7e\udc7f\udc80\udc81\udc82\udc83\udc84\udc85\udc86\udc87\udc88\udc89\udc8a\udc8b\udc8c\udc8d\udc8e\udc8f\udc90\udc91\udc92\udc93\udc94\udc95\udc96\udc97\udc98\udc99\udc9a\udc9b\udc9c\udc9d\udc9e\udc9f\udca0\udca1\udca2\udca3\udca4\udca5\udca6\udca7\udca8\udca9\udcaa\udcab\udcac\udcad\udcae\udcaf\udcb0\udcb1\udcb2\udcb3\udcb4\udcb5\udcb6\udcb7\udcb8\udcb9\udcba\udcbb\udcbc\udcbd\udcbe\udcbf\udcc0\udcc1\udcc2\udcc3\udcc4\udcc5\udcc6\udcc7\udcc8\udcc9\udcca\udccb\udccc\udccd\udcce\udccf\udcd0\udcd1\udcd2\udcd3\udcd4\udcd5\udcd6\udcd7\udcd8\udcd9\udcda\udcdb\udcdc\udcdd\udcde\udcdf\udce0\udce1\udce2\udce3\udce4\udce5\udce6\udce7\udce8\udce9\udcea\udceb\udcec\udced\udcee\udcef\udcf0\udcf1\udcf2\udcf3\udcf4\udcf5\udcf6\udcf7\udcf8\udcf9\udcfa\udcfb\udcfc\udcfd\udcfe\udcff\udd00\udd01\udd02\udd03\udd04\udd05\udd06\udd07\udd08\udd09\udd0a\udd0b\udd0c\udd0d\udd0e\udd0f\udd10\udd11\udd12\udd13\udd14\udd15\udd16\udd17\udd18\udd19\udd1a\udd1b\udd1c\udd1d\udd1e\udd1f\udd20\udd21\udd22\udd23\udd24\udd25\udd26\udd27\udd28\udd29\udd2a\udd2b\udd2c\udd2d\udd2e\udd2f\udd30\udd31\udd32\udd33\udd34\udd35\udd36\udd37\udd38\udd39\udd3a\udd3b\udd3c\udd3d\udd3e\udd3f\udd40\udd41\udd42\udd43\udd44\udd45\udd46\udd47\udd48\udd49\udd4a\udd4b\udd4c\udd4d\udd4e\udd4f\udd50\udd51\udd52\udd53\udd54\udd55\udd56\udd57\udd58\udd59\udd5a\udd5b\udd5c\udd5d\udd5e\udd5f\udd60\udd61\udd62\udd63\udd64\udd65\udd66\udd67\udd68\udd69\udd6a\udd6b\udd6c\udd6d\udd6e\udd6f\udd70\udd71\udd72\udd73\udd74\udd75\udd76\udd77\udd78\udd79\udd7a\udd7b\udd7c\udd7d\udd7e\udd7f\udd80\udd81\udd82\udd83\udd84\udd85\udd86\udd87\udd88\udd89\udd8a\udd8b\udd8c\udd8d\udd8e\udd8f\udd90\udd91\udd92\udd93\udd94\udd95\udd96\udd97\udd98\udd99\udd9a\udd9b\udd9c\udd9d\udd9e\udd9f\udda0\udda1\udda2\udda3\udda4\udda5\udda6\udda7\udda8\udda9\uddaa\uddab\uddac\uddad\uddae\uddaf\uddb0\uddb1\uddb2\uddb3\uddb4\uddb5\uddb6\uddb7\uddb8\uddb9\uddba\uddbb\uddbc\uddbd\uddbe\uddbf\uddc0\uddc1\uddc2\uddc3\uddc4\uddc5\uddc6\uddc7\uddc8\uddc9\uddca\uddcb\uddcc\uddcd\uddce\uddcf\uddd0\uddd1\uddd2\uddd3\uddd4\uddd5\uddd6\uddd7\uddd8\uddd9\uddda\udddb\udddc\udddd\uddde\udddf\udde0\udde1\udde2\udde3\udde4\udde5\udde6\udde7\udde8\udde9\uddea\uddeb\uddec\udded\uddee\uddef\uddf0\uddf1\uddf2\uddf3\uddf4\uddf5\uddf6\uddf7\uddf8\uddf9\uddfa\uddfb\uddfc\uddfd\uddfe\uddff\ude00\ude01\ude02\ude03\ude04\ude05\ude06\ude07\ude08\ude09\ude0a\ude0b\ude0c\ude0d\ude0e\ude0f\ude10\ude11\ude12\ude13\ude14\ude15\ude16\ude17\ude18\ude19\ude1a\ude1b\ude1c\ude1d\ude1e\ude1f\ude20\ude21\ude22\ude23\ude24\ude25\ude26\ude27\ude28\ude29\ude2a\ude2b\ude2c\ude2d\ude2e\ude2f\ude30\ude31\ude32\ude33\ude34\ude35\ude36\ude37\ude38\ude39\ude3a\ude3b\ude3c\ude3d\ude3e\ude3f\ude40\ude41\ude42\ude43\ude44\ude45\ude46\ude47\ude48\ude49\ude4a\ude4b\ude4c\ude4d\ude4e\ude4f\ude50\ude51\ude52\ude53\ude54\ude55\ude56\ude57\ude58\ude59\ude5a\ude5b\ude5c\ude5d\ude5e\ude5f\ude60\ude61\ude62\ude63\ude64\ude65\ude66\ude67\ude68\ude69\ude6a\ude6b\ude6c\ude6d\ude6e\ude6f\ude70\ude71\ude72\ude73\ude74\ude75\ude76\ude77\ude78\ude79\ude7a\ude7b\ude7c\ude7d\ude7e\ude7f\ude80\ude81\ude82\ude83\ude84\ude85\ude86\ude87\ude88\ude89\ude8a\ude8b\ude8c\ude8d\ude8e\ude8f\ude90\ude91\ude92\ude93\ude94\ude95\ude96\ude97\ude98\ude99\ude9a\ude9b\ude9c\ude9d\ude9e\ude9f\udea0\udea1\udea2\udea3\udea4\udea5\udea6\udea7\udea8\udea9\udeaa\udeab\udeac\udead\udeae\udeaf\udeb0\udeb1\udeb2\udeb3\udeb4\udeb5\udeb6\udeb7\udeb8\udeb9\udeba\udebb\udebc\udebd\udebe\udebf\udec0\udec1\udec2\udec3\udec4\udec5\udec6\udec7\udec8\udec9\udeca\udecb\udecc\udecd\udece\udecf\uded0\uded1\uded2\uded3\uded4\uded5\uded6\uded7\uded8\uded9\udeda\udedb\udedc\udedd\udede\udedf\udee0\udee1\udee2\udee3\udee4\udee5\udee6\udee7\udee8\udee9\udeea\udeeb\udeec\udeed\udeee\udeef\udef0\udef1\udef2\udef3\udef4\udef5\udef6\udef7\udef8\udef9\udefa\udefb\udefc\udefd\udefe\udeff\udf00\udf01\udf02\udf03\udf04\udf05\udf06\udf07\udf08\udf09\udf0a\udf0b\udf0c\udf0d\udf0e\udf0f\udf10\udf11\udf12\udf13\udf14\udf15\udf16\udf17\udf18\udf19\udf1a\udf1b\udf1c\udf1d\udf1e\udf1f\udf20\udf21\udf22\udf23\udf24\udf25\udf26\udf27\udf28\udf29\udf2a\udf2b\udf2c\udf2d\udf2e\udf2f\udf30\udf31\udf32\udf33\udf34\udf35\udf36\udf37\udf38\udf39\udf3a\udf3b\udf3c\udf3d\udf3e\udf3f\udf40\udf41\udf42\udf43\udf44\udf45\udf46\udf47\udf48\udf49\udf4a\udf4b\udf4c\udf4d\udf4e\udf4f\udf50\udf51\udf52\udf53\udf54\udf55\udf56\udf57\udf58\udf59\udf5a\udf5b\udf5c\udf5d\udf5e\udf5f\udf60\udf61\udf62\udf63\udf64\udf65\udf66\udf67\udf68\udf69\udf6a\udf6b\udf6c\udf6d\udf6e\udf6f\udf70\udf71\udf72\udf73\udf74\udf75\udf76\udf77\udf78\udf79\udf7a\udf7b\udf7c\udf7d\udf7e\udf7f\udf80\udf81\udf82\udf83\udf84\udf85\udf86\udf87\udf88\udf89\udf8a\udf8b\udf8c\udf8d\udf8e\udf8f\udf90\udf91\udf92\udf93\udf94\udf95\udf96\udf97\udf98\udf99\udf9a\udf9b\udf9c\udf9d\udf9e\udf9f\udfa0\udfa1\udfa2\udfa3\udfa4\udfa5\udfa6\udfa7\udfa8\udfa9\udfaa\udfab\udfac\udfad\udfae\udfaf\udfb0\udfb1\udfb2\udfb3\udfb4\udfb5\udfb6\udfb7\udfb8\udfb9\udfba\udfbb\udfbc\udfbd\udfbe\udfbf\udfc0\udfc1\udfc2\udfc3\udfc4\udfc5\udfc6\udfc7\udfc8\udfc9\udfca\udfcb\udfcc\udfcd\udfce\udfcf\udfd0\udfd1\udfd2\udfd3\udfd4\udfd5\udfd6\udfd7\udfd8\udfd9\udfda\udfdb\udfdc\udfdd\udfde\udfdf\udfe0\udfe1\udfe2\udfe3\udfe4\udfe5\udfe6\udfe7\udfe8\udfe9\udfea\udfeb\udfec\udfed\udfee\udfef\udff0\udff1\udff2\udff3\udff4\udff5\udff6\udff7\udff8\udff9\udffa\udffb\udffc\udffd\udffe\udfff'") +except UnicodeDecodeError: + Cs = '' # Jython can't handle isolated surrogates + +Ll = u'abcdefghijklmnopqrstuvwxyz\xaa\xb5\xba\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e\u017f\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199\u019a\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd\u01be\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023c\u023f\u0240\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025a\u025b\u025c\u025d\u025e\u025f\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026a\u026b\u026c\u026d\u026e\u026f\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027a\u027b\u027c\u027d\u027e\u027f\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028a\u028b\u028c\u028d\u028e\u028f\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029a\u029b\u029c\u029d\u029e\u029f\u02a0\u02a1\u02a2\u02a3\u02a4\u02a5\u02a6\u02a7\u02a8\u02a9\u02aa\u02ab\u02ac\u02ad\u02ae\u02af\u0390\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03d0\u03d1\u03d5\u03d6\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef\u03f0\u03f1\u03f2\u03f3\u03f5\u03f8\u03fb\u03fc\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045d\u045e\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056a\u056b\u056c\u056d\u056e\u056f\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057a\u057b\u057c\u057d\u057e\u057f\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0587\u1d00\u1d01\u1d02\u1d03\u1d04\u1d05\u1d06\u1d07\u1d08\u1d09\u1d0a\u1d0b\u1d0c\u1d0d\u1d0e\u1d0f\u1d10\u1d11\u1d12\u1d13\u1d14\u1d15\u1d16\u1d17\u1d18\u1d19\u1d1a\u1d1b\u1d1c\u1d1d\u1d1e\u1d1f\u1d20\u1d21\u1d22\u1d23\u1d24\u1d25\u1d26\u1d27\u1d28\u1d29\u1d2a\u1d2b\u1d62\u1d63\u1d64\u1d65\u1d66\u1d67\u1d68\u1d69\u1d6a\u1d6b\u1d6c\u1d6d\u1d6e\u1d6f\u1d70\u1d71\u1d72\u1d73\u1d74\u1d75\u1d76\u1d77\u1d79\u1d7a\u1d7b\u1d7c\u1d7d\u1d7e\u1d7f\u1d80\u1d81\u1d82\u1d83\u1d84\u1d85\u1d86\u1d87\u1d88\u1d89\u1d8a\u1d8b\u1d8c\u1d8d\u1d8e\u1d8f\u1d90\u1d91\u1d92\u1d93\u1d94\u1d95\u1d96\u1d97\u1d98\u1d99\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95\u1e96\u1e97\u1e98\u1e99\u1e9a\u1e9b\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1f00\u1f01\u1f02\u1f03\u1f04\u1f05\u1f06\u1f07\u1f10\u1f11\u1f12\u1f13\u1f14\u1f15\u1f20\u1f21\u1f22\u1f23\u1f24\u1f25\u1f26\u1f27\u1f30\u1f31\u1f32\u1f33\u1f34\u1f35\u1f36\u1f37\u1f40\u1f41\u1f42\u1f43\u1f44\u1f45\u1f50\u1f51\u1f52\u1f53\u1f54\u1f55\u1f56\u1f57\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u1f66\u1f67\u1f70\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u1f7b\u1f7c\u1f7d\u1f80\u1f81\u1f82\u1f83\u1f84\u1f85\u1f86\u1f87\u1f90\u1f91\u1f92\u1f93\u1f94\u1f95\u1f96\u1f97\u1fa0\u1fa1\u1fa2\u1fa3\u1fa4\u1fa5\u1fa6\u1fa7\u1fb0\u1fb1\u1fb2\u1fb3\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2\u1fc3\u1fc4\u1fc6\u1fc7\u1fd0\u1fd1\u1fd2\u1fd3\u1fd6\u1fd7\u1fe0\u1fe1\u1fe2\u1fe3\u1fe4\u1fe5\u1fe6\u1fe7\u1ff2\u1ff3\u1ff4\u1ff6\u1ff7\u2071\u207f\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146\u2147\u2148\u2149\u2c30\u2c31\u2c32\u2c33\u2c34\u2c35\u2c36\u2c37\u2c38\u2c39\u2c3a\u2c3b\u2c3c\u2c3d\u2c3e\u2c3f\u2c40\u2c41\u2c42\u2c43\u2c44\u2c45\u2c46\u2c47\u2c48\u2c49\u2c4a\u2c4b\u2c4c\u2c4d\u2c4e\u2c4f\u2c50\u2c51\u2c52\u2c53\u2c54\u2c55\u2c56\u2c57\u2c58\u2c59\u2c5a\u2c5b\u2c5c\u2c5d\u2c5e\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2d00\u2d01\u2d02\u2d03\u2d04\u2d05\u2d06\u2d07\u2d08\u2d09\u2d0a\u2d0b\u2d0c\u2d0d\u2d0e\u2d0f\u2d10\u2d11\u2d12\u2d13\u2d14\u2d15\u2d16\u2d17\u2d18\u2d19\u2d1a\u2d1b\u2d1c\u2d1d\u2d1e\u2d1f\u2d20\u2d21\u2d22\u2d23\u2d24\u2d25\ufb00\ufb01\ufb02\ufb03\ufb04\ufb05\ufb06\ufb13\ufb14\ufb15\ufb16\ufb17\uff41\uff42\uff43\uff44\uff45\uff46\uff47\uff48\uff49\uff4a\uff4b\uff4c\uff4d\uff4e\uff4f\uff50\uff51\uff52\uff53\uff54\uff55\uff56\uff57\uff58\uff59\uff5a' + +Lm = u'\u02b0\u02b1\u02b2\u02b3\u02b4\u02b5\u02b6\u02b7\u02b8\u02b9\u02ba\u02bb\u02bc\u02bd\u02be\u02bf\u02c0\u02c1\u02c6\u02c7\u02c8\u02c9\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u02d0\u02d1\u02e0\u02e1\u02e2\u02e3\u02e4\u02ee\u037a\u0559\u0640\u06e5\u06e6\u0e46\u0ec6\u10fc\u17d7\u1843\u1d2c\u1d2d\u1d2e\u1d2f\u1d30\u1d31\u1d32\u1d33\u1d34\u1d35\u1d36\u1d37\u1d38\u1d39\u1d3a\u1d3b\u1d3c\u1d3d\u1d3e\u1d3f\u1d40\u1d41\u1d42\u1d43\u1d44\u1d45\u1d46\u1d47\u1d48\u1d49\u1d4a\u1d4b\u1d4c\u1d4d\u1d4e\u1d4f\u1d50\u1d51\u1d52\u1d53\u1d54\u1d55\u1d56\u1d57\u1d58\u1d59\u1d5a\u1d5b\u1d5c\u1d5d\u1d5e\u1d5f\u1d60\u1d61\u1d78\u1d9b\u1d9c\u1d9d\u1d9e\u1d9f\u1da0\u1da1\u1da2\u1da3\u1da4\u1da5\u1da6\u1da7\u1da8\u1da9\u1daa\u1dab\u1dac\u1dad\u1dae\u1daf\u1db0\u1db1\u1db2\u1db3\u1db4\u1db5\u1db6\u1db7\u1db8\u1db9\u1dba\u1dbb\u1dbc\u1dbd\u1dbe\u1dbf\u2090\u2091\u2092\u2093\u2094\u2d6f\u3005\u3031\u3032\u3033\u3034\u3035\u303b\u309d\u309e\u30fc\u30fd\u30fe\ua015\uff70\uff9e\uff9f' + +Lo = u'\u01bb\u01c0\u01c1\u01c2\u01c3\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05f0\u05f1\u05f2\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u066e\u066f\u0671\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679\u067a\u067b\u067c\u067d\u067e\u067f\u0680\u0681\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689\u068a\u068b\u068c\u068d\u068e\u068f\u0690\u0691\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699\u069a\u069b\u069c\u069d\u069e\u069f\u06a0\u06a1\u06a2\u06a3\u06a4\u06a5\u06a6\u06a7\u06a8\u06a9\u06aa\u06ab\u06ac\u06ad\u06ae\u06af\u06b0\u06b1\u06b2\u06b3\u06b4\u06b5\u06b6\u06b7\u06b8\u06b9\u06ba\u06bb\u06bc\u06bd\u06be\u06bf\u06c0\u06c1\u06c2\u06c3\u06c4\u06c5\u06c6\u06c7\u06c8\u06c9\u06ca\u06cb\u06cc\u06cd\u06ce\u06cf\u06d0\u06d1\u06d2\u06d3\u06d5\u06ee\u06ef\u06fa\u06fb\u06fc\u06ff\u0710\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719\u071a\u071b\u071c\u071d\u071e\u071f\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729\u072a\u072b\u072c\u072d\u072e\u072f\u074d\u074e\u074f\u0750\u0751\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759\u075a\u075b\u075c\u075d\u075e\u075f\u0760\u0761\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769\u076a\u076b\u076c\u076d\u0780\u0781\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789\u078a\u078b\u078c\u078d\u078e\u078f\u0790\u0791\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799\u079a\u079b\u079c\u079d\u079e\u079f\u07a0\u07a1\u07a2\u07a3\u07a4\u07a5\u07b1\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093d\u0950\u0958\u0959\u095a\u095b\u095c\u095d\u095e\u095f\u0960\u0961\u097d\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bd\u09ce\u09dc\u09dd\u09df\u09e0\u09e1\u09f0\u09f1\u0a05\u0a06\u0a07\u0a08\u0a09\u0a0a\u0a0f\u0a10\u0a13\u0a14\u0a15\u0a16\u0a17\u0a18\u0a19\u0a1a\u0a1b\u0a1c\u0a1d\u0a1e\u0a1f\u0a20\u0a21\u0a22\u0a23\u0a24\u0a25\u0a26\u0a27\u0a28\u0a2a\u0a2b\u0a2c\u0a2d\u0a2e\u0a2f\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5a\u0a5b\u0a5c\u0a5e\u0a72\u0a73\u0a74\u0a85\u0a86\u0a87\u0a88\u0a89\u0a8a\u0a8b\u0a8c\u0a8d\u0a8f\u0a90\u0a91\u0a93\u0a94\u0a95\u0a96\u0a97\u0a98\u0a99\u0a9a\u0a9b\u0a9c\u0a9d\u0a9e\u0a9f\u0aa0\u0aa1\u0aa2\u0aa3\u0aa4\u0aa5\u0aa6\u0aa7\u0aa8\u0aaa\u0aab\u0aac\u0aad\u0aae\u0aaf\u0ab0\u0ab2\u0ab3\u0ab5\u0ab6\u0ab7\u0ab8\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05\u0b06\u0b07\u0b08\u0b09\u0b0a\u0b0b\u0b0c\u0b0f\u0b10\u0b13\u0b14\u0b15\u0b16\u0b17\u0b18\u0b19\u0b1a\u0b1b\u0b1c\u0b1d\u0b1e\u0b1f\u0b20\u0b21\u0b22\u0b23\u0b24\u0b25\u0b26\u0b27\u0b28\u0b2a\u0b2b\u0b2c\u0b2d\u0b2e\u0b2f\u0b30\u0b32\u0b33\u0b35\u0b36\u0b37\u0b38\u0b39\u0b3d\u0b5c\u0b5d\u0b5f\u0b60\u0b61\u0b71\u0b83\u0b85\u0b86\u0b87\u0b88\u0b89\u0b8a\u0b8e\u0b8f\u0b90\u0b92\u0b93\u0b94\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0ba9\u0baa\u0bae\u0baf\u0bb0\u0bb1\u0bb2\u0bb3\u0bb4\u0bb5\u0bb6\u0bb7\u0bb8\u0bb9\u0c05\u0c06\u0c07\u0c08\u0c09\u0c0a\u0c0b\u0c0c\u0c0e\u0c0f\u0c10\u0c12\u0c13\u0c14\u0c15\u0c16\u0c17\u0c18\u0c19\u0c1a\u0c1b\u0c1c\u0c1d\u0c1e\u0c1f\u0c20\u0c21\u0c22\u0c23\u0c24\u0c25\u0c26\u0c27\u0c28\u0c2a\u0c2b\u0c2c\u0c2d\u0c2e\u0c2f\u0c30\u0c31\u0c32\u0c33\u0c35\u0c36\u0c37\u0c38\u0c39\u0c60\u0c61\u0c85\u0c86\u0c87\u0c88\u0c89\u0c8a\u0c8b\u0c8c\u0c8e\u0c8f\u0c90\u0c92\u0c93\u0c94\u0c95\u0c96\u0c97\u0c98\u0c99\u0c9a\u0c9b\u0c9c\u0c9d\u0c9e\u0c9f\u0ca0\u0ca1\u0ca2\u0ca3\u0ca4\u0ca5\u0ca6\u0ca7\u0ca8\u0caa\u0cab\u0cac\u0cad\u0cae\u0caf\u0cb0\u0cb1\u0cb2\u0cb3\u0cb5\u0cb6\u0cb7\u0cb8\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0d05\u0d06\u0d07\u0d08\u0d09\u0d0a\u0d0b\u0d0c\u0d0e\u0d0f\u0d10\u0d12\u0d13\u0d14\u0d15\u0d16\u0d17\u0d18\u0d19\u0d1a\u0d1b\u0d1c\u0d1d\u0d1e\u0d1f\u0d20\u0d21\u0d22\u0d23\u0d24\u0d25\u0d26\u0d27\u0d28\u0d2a\u0d2b\u0d2c\u0d2d\u0d2e\u0d2f\u0d30\u0d31\u0d32\u0d33\u0d34\u0d35\u0d36\u0d37\u0d38\u0d39\u0d60\u0d61\u0d85\u0d86\u0d87\u0d88\u0d89\u0d8a\u0d8b\u0d8c\u0d8d\u0d8e\u0d8f\u0d90\u0d91\u0d92\u0d93\u0d94\u0d95\u0d96\u0d9a\u0d9b\u0d9c\u0d9d\u0d9e\u0d9f\u0da0\u0da1\u0da2\u0da3\u0da4\u0da5\u0da6\u0da7\u0da8\u0da9\u0daa\u0dab\u0dac\u0dad\u0dae\u0daf\u0db0\u0db1\u0db3\u0db4\u0db5\u0db6\u0db7\u0db8\u0db9\u0dba\u0dbb\u0dbd\u0dc0\u0dc1\u0dc2\u0dc3\u0dc4\u0dc5\u0dc6\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e32\u0e33\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94\u0e95\u0e96\u0e97\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea1\u0ea2\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eaf\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\u0edc\u0edd\u0f00\u0f40\u0f41\u0f42\u0f43\u0f44\u0f45\u0f46\u0f47\u0f49\u0f4a\u0f4b\u0f4c\u0f4d\u0f4e\u0f4f\u0f50\u0f51\u0f52\u0f53\u0f54\u0f55\u0f56\u0f57\u0f58\u0f59\u0f5a\u0f5b\u0f5c\u0f5d\u0f5e\u0f5f\u0f60\u0f61\u0f62\u0f63\u0f64\u0f65\u0f66\u0f67\u0f68\u0f69\u0f6a\u0f88\u0f89\u0f8a\u0f8b\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100a\u100b\u100c\u100d\u100e\u100f\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101a\u101b\u101c\u101d\u101e\u101f\u1020\u1021\u1023\u1024\u1025\u1026\u1027\u1029\u102a\u1050\u1051\u1052\u1053\u1054\u1055\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10e3\u10e4\u10e5\u10e6\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10ef\u10f0\u10f1\u10f2\u10f3\u10f4\u10f5\u10f6\u10f7\u10f8\u10f9\u10fa\u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110a\u110b\u110c\u110d\u110e\u110f\u1110\u1111\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119\u111a\u111b\u111c\u111d\u111e\u111f\u1120\u1121\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129\u112a\u112b\u112c\u112d\u112e\u112f\u1130\u1131\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139\u113a\u113b\u113c\u113d\u113e\u113f\u1140\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149\u114a\u114b\u114c\u114d\u114e\u114f\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159\u115f\u1160\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\u116a\u116b\u116c\u116d\u116e\u116f\u1170\u1171\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179\u117a\u117b\u117c\u117d\u117e\u117f\u1180\u1181\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189\u118a\u118b\u118c\u118d\u118e\u118f\u1190\u1191\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199\u119a\u119b\u119c\u119d\u119e\u119f\u11a0\u11a1\u11a2\u11a8\u11a9\u11aa\u11ab\u11ac\u11ad\u11ae\u11af\u11b0\u11b1\u11b2\u11b3\u11b4\u11b5\u11b6\u11b7\u11b8\u11b9\u11ba\u11bb\u11bc\u11bd\u11be\u11bf\u11c0\u11c1\u11c2\u11c3\u11c4\u11c5\u11c6\u11c7\u11c8\u11c9\u11ca\u11cb\u11cc\u11cd\u11ce\u11cf\u11d0\u11d1\u11d2\u11d3\u11d4\u11d5\u11d6\u11d7\u11d8\u11d9\u11da\u11db\u11dc\u11dd\u11de\u11df\u11e0\u11e1\u11e2\u11e3\u11e4\u11e5\u11e6\u11e7\u11e8\u11e9\u11ea\u11eb\u11ec\u11ed\u11ee\u11ef\u11f0\u11f1\u11f2\u11f3\u11f4\u11f5\u11f6\u11f7\u11f8\u11f9\u1200\u1201\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209\u120a\u120b\u120c\u120d\u120e\u120f\u1210\u1211\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219\u121a\u121b\u121c\u121d\u121e\u121f\u1220\u1221\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229\u122a\u122b\u122c\u122d\u122e\u122f\u1230\u1231\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239\u123a\u123b\u123c\u123d\u123e\u123f\u1240\u1241\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u124a\u124b\u124c\u124d\u1250\u1251\u1252\u1253\u1254\u1255\u1256\u1258\u125a\u125b\u125c\u125d\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269\u126a\u126b\u126c\u126d\u126e\u126f\u1270\u1271\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279\u127a\u127b\u127c\u127d\u127e\u127f\u1280\u1281\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u128a\u128b\u128c\u128d\u1290\u1291\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299\u129a\u129b\u129c\u129d\u129e\u129f\u12a0\u12a1\u12a2\u12a3\u12a4\u12a5\u12a6\u12a7\u12a8\u12a9\u12aa\u12ab\u12ac\u12ad\u12ae\u12af\u12b0\u12b2\u12b3\u12b4\u12b5\u12b8\u12b9\u12ba\u12bb\u12bc\u12bd\u12be\u12c0\u12c2\u12c3\u12c4\u12c5\u12c8\u12c9\u12ca\u12cb\u12cc\u12cd\u12ce\u12cf\u12d0\u12d1\u12d2\u12d3\u12d4\u12d5\u12d6\u12d8\u12d9\u12da\u12db\u12dc\u12dd\u12de\u12df\u12e0\u12e1\u12e2\u12e3\u12e4\u12e5\u12e6\u12e7\u12e8\u12e9\u12ea\u12eb\u12ec\u12ed\u12ee\u12ef\u12f0\u12f1\u12f2\u12f3\u12f4\u12f5\u12f6\u12f7\u12f8\u12f9\u12fa\u12fb\u12fc\u12fd\u12fe\u12ff\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130a\u130b\u130c\u130d\u130e\u130f\u1310\u1312\u1313\u1314\u1315\u1318\u1319\u131a\u131b\u131c\u131d\u131e\u131f\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132a\u132b\u132c\u132d\u132e\u132f\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133a\u133b\u133c\u133d\u133e\u133f\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134a\u134b\u134c\u134d\u134e\u134f\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135a\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138a\u138b\u138c\u138d\u138e\u138f\u13a0\u13a1\u13a2\u13a3\u13a4\u13a5\u13a6\u13a7\u13a8\u13a9\u13aa\u13ab\u13ac\u13ad\u13ae\u13af\u13b0\u13b1\u13b2\u13b3\u13b4\u13b5\u13b6\u13b7\u13b8\u13b9\u13ba\u13bb\u13bc\u13bd\u13be\u13bf\u13c0\u13c1\u13c2\u13c3\u13c4\u13c5\u13c6\u13c7\u13c8\u13c9\u13ca\u13cb\u13cc\u13cd\u13ce\u13cf\u13d0\u13d1\u13d2\u13d3\u13d4\u13d5\u13d6\u13d7\u13d8\u13d9\u13da\u13db\u13dc\u13dd\u13de\u13df\u13e0\u13e1\u13e2\u13e3\u13e4\u13e5\u13e6\u13e7\u13e8\u13e9\u13ea\u13eb\u13ec\u13ed\u13ee\u13ef\u13f0\u13f1\u13f2\u13f3\u13f4\u1401\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409\u140a\u140b\u140c\u140d\u140e\u140f\u1410\u1411\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419\u141a\u141b\u141c\u141d\u141e\u141f\u1420\u1421\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429\u142a\u142b\u142c\u142d\u142e\u142f\u1430\u1431\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439\u143a\u143b\u143c\u143d\u143e\u143f\u1440\u1441\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449\u144a\u144b\u144c\u144d\u144e\u144f\u1450\u1451\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459\u145a\u145b\u145c\u145d\u145e\u145f\u1460\u1461\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469\u146a\u146b\u146c\u146d\u146e\u146f\u1470\u1471\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479\u147a\u147b\u147c\u147d\u147e\u147f\u1480\u1481\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489\u148a\u148b\u148c\u148d\u148e\u148f\u1490\u1491\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499\u149a\u149b\u149c\u149d\u149e\u149f\u14a0\u14a1\u14a2\u14a3\u14a4\u14a5\u14a6\u14a7\u14a8\u14a9\u14aa\u14ab\u14ac\u14ad\u14ae\u14af\u14b0\u14b1\u14b2\u14b3\u14b4\u14b5\u14b6\u14b7\u14b8\u14b9\u14ba\u14bb\u14bc\u14bd\u14be\u14bf\u14c0\u14c1\u14c2\u14c3\u14c4\u14c5\u14c6\u14c7\u14c8\u14c9\u14ca\u14cb\u14cc\u14cd\u14ce\u14cf\u14d0\u14d1\u14d2\u14d3\u14d4\u14d5\u14d6\u14d7\u14d8\u14d9\u14da\u14db\u14dc\u14dd\u14de\u14df\u14e0\u14e1\u14e2\u14e3\u14e4\u14e5\u14e6\u14e7\u14e8\u14e9\u14ea\u14eb\u14ec\u14ed\u14ee\u14ef\u14f0\u14f1\u14f2\u14f3\u14f4\u14f5\u14f6\u14f7\u14f8\u14f9\u14fa\u14fb\u14fc\u14fd\u14fe\u14ff\u1500\u1501\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509\u150a\u150b\u150c\u150d\u150e\u150f\u1510\u1511\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519\u151a\u151b\u151c\u151d\u151e\u151f\u1520\u1521\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529\u152a\u152b\u152c\u152d\u152e\u152f\u1530\u1531\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539\u153a\u153b\u153c\u153d\u153e\u153f\u1540\u1541\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549\u154a\u154b\u154c\u154d\u154e\u154f\u1550\u1551\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559\u155a\u155b\u155c\u155d\u155e\u155f\u1560\u1561\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569\u156a\u156b\u156c\u156d\u156e\u156f\u1570\u1571\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579\u157a\u157b\u157c\u157d\u157e\u157f\u1580\u1581\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589\u158a\u158b\u158c\u158d\u158e\u158f\u1590\u1591\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599\u159a\u159b\u159c\u159d\u159e\u159f\u15a0\u15a1\u15a2\u15a3\u15a4\u15a5\u15a6\u15a7\u15a8\u15a9\u15aa\u15ab\u15ac\u15ad\u15ae\u15af\u15b0\u15b1\u15b2\u15b3\u15b4\u15b5\u15b6\u15b7\u15b8\u15b9\u15ba\u15bb\u15bc\u15bd\u15be\u15bf\u15c0\u15c1\u15c2\u15c3\u15c4\u15c5\u15c6\u15c7\u15c8\u15c9\u15ca\u15cb\u15cc\u15cd\u15ce\u15cf\u15d0\u15d1\u15d2\u15d3\u15d4\u15d5\u15d6\u15d7\u15d8\u15d9\u15da\u15db\u15dc\u15dd\u15de\u15df\u15e0\u15e1\u15e2\u15e3\u15e4\u15e5\u15e6\u15e7\u15e8\u15e9\u15ea\u15eb\u15ec\u15ed\u15ee\u15ef\u15f0\u15f1\u15f2\u15f3\u15f4\u15f5\u15f6\u15f7\u15f8\u15f9\u15fa\u15fb\u15fc\u15fd\u15fe\u15ff\u1600\u1601\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609\u160a\u160b\u160c\u160d\u160e\u160f\u1610\u1611\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619\u161a\u161b\u161c\u161d\u161e\u161f\u1620\u1621\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629\u162a\u162b\u162c\u162d\u162e\u162f\u1630\u1631\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639\u163a\u163b\u163c\u163d\u163e\u163f\u1640\u1641\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649\u164a\u164b\u164c\u164d\u164e\u164f\u1650\u1651\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659\u165a\u165b\u165c\u165d\u165e\u165f\u1660\u1661\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669\u166a\u166b\u166c\u166f\u1670\u1671\u1672\u1673\u1674\u1675\u1676\u1681\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689\u168a\u168b\u168c\u168d\u168e\u168f\u1690\u1691\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699\u169a\u16a0\u16a1\u16a2\u16a3\u16a4\u16a5\u16a6\u16a7\u16a8\u16a9\u16aa\u16ab\u16ac\u16ad\u16ae\u16af\u16b0\u16b1\u16b2\u16b3\u16b4\u16b5\u16b6\u16b7\u16b8\u16b9\u16ba\u16bb\u16bc\u16bd\u16be\u16bf\u16c0\u16c1\u16c2\u16c3\u16c4\u16c5\u16c6\u16c7\u16c8\u16c9\u16ca\u16cb\u16cc\u16cd\u16ce\u16cf\u16d0\u16d1\u16d2\u16d3\u16d4\u16d5\u16d6\u16d7\u16d8\u16d9\u16da\u16db\u16dc\u16dd\u16de\u16df\u16e0\u16e1\u16e2\u16e3\u16e4\u16e5\u16e6\u16e7\u16e8\u16e9\u16ea\u1700\u1701\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709\u170a\u170b\u170c\u170e\u170f\u1710\u1711\u1720\u1721\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729\u172a\u172b\u172c\u172d\u172e\u172f\u1730\u1731\u1740\u1741\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749\u174a\u174b\u174c\u174d\u174e\u174f\u1750\u1751\u1760\u1761\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769\u176a\u176b\u176c\u176e\u176f\u1770\u1780\u1781\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789\u178a\u178b\u178c\u178d\u178e\u178f\u1790\u1791\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799\u179a\u179b\u179c\u179d\u179e\u179f\u17a0\u17a1\u17a2\u17a3\u17a4\u17a5\u17a6\u17a7\u17a8\u17a9\u17aa\u17ab\u17ac\u17ad\u17ae\u17af\u17b0\u17b1\u17b2\u17b3\u17dc\u1820\u1821\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829\u182a\u182b\u182c\u182d\u182e\u182f\u1830\u1831\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839\u183a\u183b\u183c\u183d\u183e\u183f\u1840\u1841\u1842\u1844\u1845\u1846\u1847\u1848\u1849\u184a\u184b\u184c\u184d\u184e\u184f\u1850\u1851\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859\u185a\u185b\u185c\u185d\u185e\u185f\u1860\u1861\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869\u186a\u186b\u186c\u186d\u186e\u186f\u1870\u1871\u1872\u1873\u1874\u1875\u1876\u1877\u1880\u1881\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889\u188a\u188b\u188c\u188d\u188e\u188f\u1890\u1891\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899\u189a\u189b\u189c\u189d\u189e\u189f\u18a0\u18a1\u18a2\u18a3\u18a4\u18a5\u18a6\u18a7\u18a8\u1900\u1901\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909\u190a\u190b\u190c\u190d\u190e\u190f\u1910\u1911\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919\u191a\u191b\u191c\u1950\u1951\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959\u195a\u195b\u195c\u195d\u195e\u195f\u1960\u1961\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969\u196a\u196b\u196c\u196d\u1970\u1971\u1972\u1973\u1974\u1980\u1981\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989\u198a\u198b\u198c\u198d\u198e\u198f\u1990\u1991\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999\u199a\u199b\u199c\u199d\u199e\u199f\u19a0\u19a1\u19a2\u19a3\u19a4\u19a5\u19a6\u19a7\u19a8\u19a9\u19c1\u19c2\u19c3\u19c4\u19c5\u19c6\u19c7\u1a00\u1a01\u1a02\u1a03\u1a04\u1a05\u1a06\u1a07\u1a08\u1a09\u1a0a\u1a0b\u1a0c\u1a0d\u1a0e\u1a0f\u1a10\u1a11\u1a12\u1a13\u1a14\u1a15\u1a16\u2135\u2136\u2137\u2138\u2d30\u2d31\u2d32\u2d33\u2d34\u2d35\u2d36\u2d37\u2d38\u2d39\u2d3a\u2d3b\u2d3c\u2d3d\u2d3e\u2d3f\u2d40\u2d41\u2d42\u2d43\u2d44\u2d45\u2d46\u2d47\u2d48\u2d49\u2d4a\u2d4b\u2d4c\u2d4d\u2d4e\u2d4f\u2d50\u2d51\u2d52\u2d53\u2d54\u2d55\u2d56\u2d57\u2d58\u2d59\u2d5a\u2d5b\u2d5c\u2d5d\u2d5e\u2d5f\u2d60\u2d61\u2d62\u2d63\u2d64\u2d65\u2d80\u2d81\u2d82\u2d83\u2d84\u2d85\u2d86\u2d87\u2d88\u2d89\u2d8a\u2d8b\u2d8c\u2d8d\u2d8e\u2d8f\u2d90\u2d91\u2d92\u2d93\u2d94\u2d95\u2d96\u2da0\u2da1\u2da2\u2da3\u2da4\u2da5\u2da6\u2da8\u2da9\u2daa\u2dab\u2dac\u2dad\u2dae\u2db0\u2db1\u2db2\u2db3\u2db4\u2db5\u2db6\u2db8\u2db9\u2dba\u2dbb\u2dbc\u2dbd\u2dbe\u2dc0\u2dc1\u2dc2\u2dc3\u2dc4\u2dc5\u2dc6\u2dc8\u2dc9\u2dca\u2dcb\u2dcc\u2dcd\u2dce\u2dd0\u2dd1\u2dd2\u2dd3\u2dd4\u2dd5\u2dd6\u2dd8\u2dd9\u2dda\u2ddb\u2ddc\u2ddd\u2dde\u3006\u303c\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\u3090\u3091\u3092\u3093\u3094\u3095\u3096\u309f\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30ff\u3105\u3106\u3107\u3108\u3109\u310a\u310b\u310c\u310d\u310e\u310f\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311a\u311b\u311c\u311d\u311e\u311f\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\u312a\u312b\u312c\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313a\u313b\u313c\u313d\u313e\u313f\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e\u314f\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316a\u316b\u316c\u316d\u316e\u316f\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317a\u317b\u317c\u317d\u317e\u317f\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318a\u318b\u318c\u318d\u318e\u31a0\u31a1\u31a2\u31a3\u31a4\u31a5\u31a6\u31a7\u31a8\u31a9\u31aa\u31ab\u31ac\u31ad\u31ae\u31af\u31b0\u31b1\u31b2\u31b3\u31b4\u31b5\u31b6\u31b7\u31f0\u31f1\u31f2\u31f3\u31f4\u31f5\u31f6\u31f7\u31f8\u31f9\u31fa\u31fb\u31fc\u31fd\u31fe\u31ff\u3400\u3401\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409\u340a\u340b\u340c\u340d\u340e\u340f\u3410\u3411\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419\u341a\u341b\u341c\u341d\u341e\u341f\u3420\u3421\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429\u342a\u342b\u342c\u342d\u342e\u342f\u3430\u3431\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439\u343a\u343b\u343c\u343d\u343e\u343f\u3440\u3441\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449\u344a\u344b\u344c\u344d\u344e\u344f\u3450\u3451\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459\u345a\u345b\u345c\u345d\u345e\u345f\u3460\u3461\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469\u346a\u346b\u346c\u346d\u346e\u346f\u3470\u3471\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479\u347a\u347b\u347c\u347d\u347e\u347f\u3480\u3481\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489\u348a\u348b\u348c\u348d\u348e\u348f\u3490\u3491\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499\u349a\u349b\u349c\u349d\u349e\u349f\u34a0\u34a1\u34a2\u34a3\u34a4\u34a5\u34a6\u34a7\u34a8\u34a9\u34aa\u34ab\u34ac\u34ad\u34ae\u34af\u34b0\u34b1\u34b2\u34b3\u34b4\u34b5\u34b6\u34b7\u34b8\u34b9\u34ba\u34bb\u34bc\u34bd\u34be\u34bf\u34c0\u34c1\u34c2\u34c3\u34c4\u34c5\u34c6\u34c7\u34c8\u34c9\u34ca\u34cb\u34cc\u34cd\u34ce\u34cf\u34d0\u34d1\u34d2\u34d3\u34d4\u34d5\u34d6\u34d7\u34d8\u34d9\u34da\u34db\u34dc\u34dd\u34de\u34df\u34e0\u34e1\u34e2\u34e3\u34e4\u34e5\u34e6\u34e7\u34e8\u34e9\u34ea\u34eb\u34ec\u34ed\u34ee\u34ef\u34f0\u34f1\u34f2\u34f3\u34f4\u34f5\u34f6\u34f7\u34f8\u34f9\u34fa\u34fb\u34fc\u34fd\u34fe\u34ff\u3500\u3501\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u350a\u350b\u350c\u350d\u350e\u350f\u3510\u3511\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519\u351a\u351b\u351c\u351d\u351e\u351f\u3520\u3521\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529\u352a\u352b\u352c\u352d\u352e\u352f\u3530\u3531\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539\u353a\u353b\u353c\u353d\u353e\u353f\u3540\u3541\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549\u354a\u354b\u354c\u354d\u354e\u354f\u3550\u3551\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559\u355a\u355b\u355c\u355d\u355e\u355f\u3560\u3561\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569\u356a\u356b\u356c\u356d\u356e\u356f\u3570\u3571\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579\u357a\u357b\u357c\u357d\u357e\u357f\u3580\u3581\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589\u358a\u358b\u358c\u358d\u358e\u358f\u3590\u3591\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359a\u359b\u359c\u359d\u359e\u359f\u35a0\u35a1\u35a2\u35a3\u35a4\u35a5\u35a6\u35a7\u35a8\u35a9\u35aa\u35ab\u35ac\u35ad\u35ae\u35af\u35b0\u35b1\u35b2\u35b3\u35b4\u35b5\u35b6\u35b7\u35b8\u35b9\u35ba\u35bb\u35bc\u35bd\u35be\u35bf\u35c0\u35c1\u35c2\u35c3\u35c4\u35c5\u35c6\u35c7\u35c8\u35c9\u35ca\u35cb\u35cc\u35cd\u35ce\u35cf\u35d0\u35d1\u35d2\u35d3\u35d4\u35d5\u35d6\u35d7\u35d8\u35d9\u35da\u35db\u35dc\u35dd\u35de\u35df\u35e0\u35e1\u35e2\u35e3\u35e4\u35e5\u35e6\u35e7\u35e8\u35e9\u35ea\u35eb\u35ec\u35ed\u35ee\u35ef\u35f0\u35f1\u35f2\u35f3\u35f4\u35f5\u35f6\u35f7\u35f8\u35f9\u35fa\u35fb\u35fc\u35fd\u35fe\u35ff\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607\u3608\u3609\u360a\u360b\u360c\u360d\u360e\u360f\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617\u3618\u3619\u361a\u361b\u361c\u361d\u361e\u361f\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627\u3628\u3629\u362a\u362b\u362c\u362d\u362e\u362f\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637\u3638\u3639\u363a\u363b\u363c\u363d\u363e\u363f\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647\u3648\u3649\u364a\u364b\u364c\u364d\u364e\u364f\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657\u3658\u3659\u365a\u365b\u365c\u365d\u365e\u365f\u3660\u3661\u3662\u3663\u3664\u3665\u3666\u3667\u3668\u3669\u366a\u366b\u366c\u366d\u366e\u366f\u3670\u3671\u3672\u3673\u3674\u3675\u3676\u3677\u3678\u3679\u367a\u367b\u367c\u367d\u367e\u367f\u3680\u3681\u3682\u3683\u3684\u3685\u3686\u3687\u3688\u3689\u368a\u368b\u368c\u368d\u368e\u368f\u3690\u3691\u3692\u3693\u3694\u3695\u3696\u3697\u3698\u3699\u369a\u369b\u369c\u369d\u369e\u369f\u36a0\u36a1\u36a2\u36a3\u36a4\u36a5\u36a6\u36a7\u36a8\u36a9\u36aa\u36ab\u36ac\u36ad\u36ae\u36af\u36b0\u36b1\u36b2\u36b3\u36b4\u36b5\u36b6\u36b7\u36b8\u36b9\u36ba\u36bb\u36bc\u36bd\u36be\u36bf\u36c0\u36c1\u36c2\u36c3\u36c4\u36c5\u36c6\u36c7\u36c8\u36c9\u36ca\u36cb\u36cc\u36cd\u36ce\u36cf\u36d0\u36d1\u36d2\u36d3\u36d4\u36d5\u36d6\u36d7\u36d8\u36d9\u36da\u36db\u36dc\u36dd\u36de\u36df\u36e0\u36e1\u36e2\u36e3\u36e4\u36e5\u36e6\u36e7\u36e8\u36e9\u36ea\u36eb\u36ec\u36ed\u36ee\u36ef\u36f0\u36f1\u36f2\u36f3\u36f4\u36f5\u36f6\u36f7\u36f8\u36f9\u36fa\u36fb\u36fc\u36fd\u36fe\u36ff\u3700\u3701\u3702\u3703\u3704\u3705\u3706\u3707\u3708\u3709\u370a\u370b\u370c\u370d\u370e\u370f\u3710\u3711\u3712\u3713\u3714\u3715\u3716\u3717\u3718\u3719\u371a\u371b\u371c\u371d\u371e\u371f\u3720\u3721\u3722\u3723\u3724\u3725\u3726\u3727\u3728\u3729\u372a\u372b\u372c\u372d\u372e\u372f\u3730\u3731\u3732\u3733\u3734\u3735\u3736\u3737\u3738\u3739\u373a\u373b\u373c\u373d\u373e\u373f\u3740\u3741\u3742\u3743\u3744\u3745\u3746\u3747\u3748\u3749\u374a\u374b\u374c\u374d\u374e\u374f\u3750\u3751\u3752\u3753\u3754\u3755\u3756\u3757\u3758\u3759\u375a\u375b\u375c\u375d\u375e\u375f\u3760\u3761\u3762\u3763\u3764\u3765\u3766\u3767\u3768\u3769\u376a\u376b\u376c\u376d\u376e\u376f\u3770\u3771\u3772\u3773\u3774\u3775\u3776\u3777\u3778\u3779\u377a\u377b\u377c\u377d\u377e\u377f\u3780\u3781\u3782\u3783\u3784\u3785\u3786\u3787\u3788\u3789\u378a\u378b\u378c\u378d\u378e\u378f\u3790\u3791\u3792\u3793\u3794\u3795\u3796\u3797\u3798\u3799\u379a\u379b\u379c\u379d\u379e\u379f\u37a0\u37a1\u37a2\u37a3\u37a4\u37a5\u37a6\u37a7\u37a8\u37a9\u37aa\u37ab\u37ac\u37ad\u37ae\u37af\u37b0\u37b1\u37b2\u37b3\u37b4\u37b5\u37b6\u37b7\u37b8\u37b9\u37ba\u37bb\u37bc\u37bd\u37be\u37bf\u37c0\u37c1\u37c2\u37c3\u37c4\u37c5\u37c6\u37c7\u37c8\u37c9\u37ca\u37cb\u37cc\u37cd\u37ce\u37cf\u37d0\u37d1\u37d2\u37d3\u37d4\u37d5\u37d6\u37d7\u37d8\u37d9\u37da\u37db\u37dc\u37dd\u37de\u37df\u37e0\u37e1\u37e2\u37e3\u37e4\u37e5\u37e6\u37e7\u37e8\u37e9\u37ea\u37eb\u37ec\u37ed\u37ee\u37ef\u37f0\u37f1\u37f2\u37f3\u37f4\u37f5\u37f6\u37f7\u37f8\u37f9\u37fa\u37fb\u37fc\u37fd\u37fe\u37ff\u3800\u3801\u3802\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380a\u380b\u380c\u380d\u380e\u380f\u3810\u3811\u3812\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381a\u381b\u381c\u381d\u381e\u381f\u3820\u3821\u3822\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382a\u382b\u382c\u382d\u382e\u382f\u3830\u3831\u3832\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383a\u383b\u383c\u383d\u383e\u383f\u3840\u3841\u3842\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384a\u384b\u384c\u384d\u384e\u384f\u3850\u3851\u3852\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385a\u385b\u385c\u385d\u385e\u385f\u3860\u3861\u3862\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386a\u386b\u386c\u386d\u386e\u386f\u3870\u3871\u3872\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387a\u387b\u387c\u387d\u387e\u387f\u3880\u3881\u3882\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388a\u388b\u388c\u388d\u388e\u388f\u3890\u3891\u3892\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389a\u389b\u389c\u389d\u389e\u389f\u38a0\u38a1\u38a2\u38a3\u38a4\u38a5\u38a6\u38a7\u38a8\u38a9\u38aa\u38ab\u38ac\u38ad\u38ae\u38af\u38b0\u38b1\u38b2\u38b3\u38b4\u38b5\u38b6\u38b7\u38b8\u38b9\u38ba\u38bb\u38bc\u38bd\u38be\u38bf\u38c0\u38c1\u38c2\u38c3\u38c4\u38c5\u38c6\u38c7\u38c8\u38c9\u38ca\u38cb\u38cc\u38cd\u38ce\u38cf\u38d0\u38d1\u38d2\u38d3\u38d4\u38d5\u38d6\u38d7\u38d8\u38d9\u38da\u38db\u38dc\u38dd\u38de\u38df\u38e0\u38e1\u38e2\u38e3\u38e4\u38e5\u38e6\u38e7\u38e8\u38e9\u38ea\u38eb\u38ec\u38ed\u38ee\u38ef\u38f0\u38f1\u38f2\u38f3\u38f4\u38f5\u38f6\u38f7\u38f8\u38f9\u38fa\u38fb\u38fc\u38fd\u38fe\u38ff\u3900\u3901\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909\u390a\u390b\u390c\u390d\u390e\u390f\u3910\u3911\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919\u391a\u391b\u391c\u391d\u391e\u391f\u3920\u3921\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929\u392a\u392b\u392c\u392d\u392e\u392f\u3930\u3931\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939\u393a\u393b\u393c\u393d\u393e\u393f\u3940\u3941\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949\u394a\u394b\u394c\u394d\u394e\u394f\u3950\u3951\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959\u395a\u395b\u395c\u395d\u395e\u395f\u3960\u3961\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969\u396a\u396b\u396c\u396d\u396e\u396f\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979\u397a\u397b\u397c\u397d\u397e\u397f\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u3989\u398a\u398b\u398c\u398d\u398e\u398f\u3990\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998\u3999\u399a\u399b\u399c\u399d\u399e\u399f\u39a0\u39a1\u39a2\u39a3\u39a4\u39a5\u39a6\u39a7\u39a8\u39a9\u39aa\u39ab\u39ac\u39ad\u39ae\u39af\u39b0\u39b1\u39b2\u39b3\u39b4\u39b5\u39b6\u39b7\u39b8\u39b9\u39ba\u39bb\u39bc\u39bd\u39be\u39bf\u39c0\u39c1\u39c2\u39c3\u39c4\u39c5\u39c6\u39c7\u39c8\u39c9\u39ca\u39cb\u39cc\u39cd\u39ce\u39cf\u39d0\u39d1\u39d2\u39d3\u39d4\u39d5\u39d6\u39d7\u39d8\u39d9\u39da\u39db\u39dc\u39dd\u39de\u39df\u39e0\u39e1\u39e2\u39e3\u39e4\u39e5\u39e6\u39e7\u39e8\u39e9\u39ea\u39eb\u39ec\u39ed\u39ee\u39ef\u39f0\u39f1\u39f2\u39f3\u39f4\u39f5\u39f6\u39f7\u39f8\u39f9\u39fa\u39fb\u39fc\u39fd\u39fe\u39ff\u3a00\u3a01\u3a02\u3a03\u3a04\u3a05\u3a06\u3a07\u3a08\u3a09\u3a0a\u3a0b\u3a0c\u3a0d\u3a0e\u3a0f\u3a10\u3a11\u3a12\u3a13\u3a14\u3a15\u3a16\u3a17\u3a18\u3a19\u3a1a\u3a1b\u3a1c\u3a1d\u3a1e\u3a1f\u3a20\u3a21\u3a22\u3a23\u3a24\u3a25\u3a26\u3a27\u3a28\u3a29\u3a2a\u3a2b\u3a2c\u3a2d\u3a2e\u3a2f\u3a30\u3a31\u3a32\u3a33\u3a34\u3a35\u3a36\u3a37\u3a38\u3a39\u3a3a\u3a3b\u3a3c\u3a3d\u3a3e\u3a3f\u3a40\u3a41\u3a42\u3a43\u3a44\u3a45\u3a46\u3a47\u3a48\u3a49\u3a4a\u3a4b\u3a4c\u3a4d\u3a4e\u3a4f\u3a50\u3a51\u3a52\u3a53\u3a54\u3a55\u3a56\u3a57\u3a58\u3a59\u3a5a\u3a5b\u3a5c\u3a5d\u3a5e\u3a5f\u3a60\u3a61\u3a62\u3a63\u3a64\u3a65\u3a66\u3a67\u3a68\u3a69\u3a6a\u3a6b\u3a6c\u3a6d\u3a6e\u3a6f\u3a70\u3a71\u3a72\u3a73\u3a74\u3a75\u3a76\u3a77\u3a78\u3a79\u3a7a\u3a7b\u3a7c\u3a7d\u3a7e\u3a7f\u3a80\u3a81\u3a82\u3a83\u3a84\u3a85\u3a86\u3a87\u3a88\u3a89\u3a8a\u3a8b\u3a8c\u3a8d\u3a8e\u3a8f\u3a90\u3a91\u3a92\u3a93\u3a94\u3a95\u3a96\u3a97\u3a98\u3a99\u3a9a\u3a9b\u3a9c\u3a9d\u3a9e\u3a9f\u3aa0\u3aa1\u3aa2\u3aa3\u3aa4\u3aa5\u3aa6\u3aa7\u3aa8\u3aa9\u3aaa\u3aab\u3aac\u3aad\u3aae\u3aaf\u3ab0\u3ab1\u3ab2\u3ab3\u3ab4\u3ab5\u3ab6\u3ab7\u3ab8\u3ab9\u3aba\u3abb\u3abc\u3abd\u3abe\u3abf\u3ac0\u3ac1\u3ac2\u3ac3\u3ac4\u3ac5\u3ac6\u3ac7\u3ac8\u3ac9\u3aca\u3acb\u3acc\u3acd\u3ace\u3acf\u3ad0\u3ad1\u3ad2\u3ad3\u3ad4\u3ad5\u3ad6\u3ad7\u3ad8\u3ad9\u3ada\u3adb\u3adc\u3add\u3ade\u3adf\u3ae0\u3ae1\u3ae2\u3ae3\u3ae4\u3ae5\u3ae6\u3ae7\u3ae8\u3ae9\u3aea\u3aeb\u3aec\u3aed\u3aee\u3aef\u3af0\u3af1\u3af2\u3af3\u3af4\u3af5\u3af6\u3af7\u3af8\u3af9\u3afa\u3afb\u3afc\u3afd\u3afe\u3aff\u3b00\u3b01\u3b02\u3b03\u3b04\u3b05\u3b06\u3b07\u3b08\u3b09\u3b0a\u3b0b\u3b0c\u3b0d\u3b0e\u3b0f\u3b10\u3b11\u3b12\u3b13\u3b14\u3b15\u3b16\u3b17\u3b18\u3b19\u3b1a\u3b1b\u3b1c\u3b1d\u3b1e\u3b1f\u3b20\u3b21\u3b22\u3b23\u3b24\u3b25\u3b26\u3b27\u3b28\u3b29\u3b2a\u3b2b\u3b2c\u3b2d\u3b2e\u3b2f\u3b30\u3b31\u3b32\u3b33\u3b34\u3b35\u3b36\u3b37\u3b38\u3b39\u3b3a\u3b3b\u3b3c\u3b3d\u3b3e\u3b3f\u3b40\u3b41\u3b42\u3b43\u3b44\u3b45\u3b46\u3b47\u3b48\u3b49\u3b4a\u3b4b\u3b4c\u3b4d\u3b4e\u3b4f\u3b50\u3b51\u3b52\u3b53\u3b54\u3b55\u3b56\u3b57\u3b58\u3b59\u3b5a\u3b5b\u3b5c\u3b5d\u3b5e\u3b5f\u3b60\u3b61\u3b62\u3b63\u3b64\u3b65\u3b66\u3b67\u3b68\u3b69\u3b6a\u3b6b\u3b6c\u3b6d\u3b6e\u3b6f\u3b70\u3b71\u3b72\u3b73\u3b74\u3b75\u3b76\u3b77\u3b78\u3b79\u3b7a\u3b7b\u3b7c\u3b7d\u3b7e\u3b7f\u3b80\u3b81\u3b82\u3b83\u3b84\u3b85\u3b86\u3b87\u3b88\u3b89\u3b8a\u3b8b\u3b8c\u3b8d\u3b8e\u3b8f\u3b90\u3b91\u3b92\u3b93\u3b94\u3b95\u3b96\u3b97\u3b98\u3b99\u3b9a\u3b9b\u3b9c\u3b9d\u3b9e\u3b9f\u3ba0\u3ba1\u3ba2\u3ba3\u3ba4\u3ba5\u3ba6\u3ba7\u3ba8\u3ba9\u3baa\u3bab\u3bac\u3bad\u3bae\u3baf\u3bb0\u3bb1\u3bb2\u3bb3\u3bb4\u3bb5\u3bb6\u3bb7\u3bb8\u3bb9\u3bba\u3bbb\u3bbc\u3bbd\u3bbe\u3bbf\u3bc0\u3bc1\u3bc2\u3bc3\u3bc4\u3bc5\u3bc6\u3bc7\u3bc8\u3bc9\u3bca\u3bcb\u3bcc\u3bcd\u3bce\u3bcf\u3bd0\u3bd1\u3bd2\u3bd3\u3bd4\u3bd5\u3bd6\u3bd7\u3bd8\u3bd9\u3bda\u3bdb\u3bdc\u3bdd\u3bde\u3bdf\u3be0\u3be1\u3be2\u3be3\u3be4\u3be5\u3be6\u3be7\u3be8\u3be9\u3bea\u3beb\u3bec\u3bed\u3bee\u3bef\u3bf0\u3bf1\u3bf2\u3bf3\u3bf4\u3bf5\u3bf6\u3bf7\u3bf8\u3bf9\u3bfa\u3bfb\u3bfc\u3bfd\u3bfe\u3bff\u3c00\u3c01\u3c02\u3c03\u3c04\u3c05\u3c06\u3c07\u3c08\u3c09\u3c0a\u3c0b\u3c0c\u3c0d\u3c0e\u3c0f\u3c10\u3c11\u3c12\u3c13\u3c14\u3c15\u3c16\u3c17\u3c18\u3c19\u3c1a\u3c1b\u3c1c\u3c1d\u3c1e\u3c1f\u3c20\u3c21\u3c22\u3c23\u3c24\u3c25\u3c26\u3c27\u3c28\u3c29\u3c2a\u3c2b\u3c2c\u3c2d\u3c2e\u3c2f\u3c30\u3c31\u3c32\u3c33\u3c34\u3c35\u3c36\u3c37\u3c38\u3c39\u3c3a\u3c3b\u3c3c\u3c3d\u3c3e\u3c3f\u3c40\u3c41\u3c42\u3c43\u3c44\u3c45\u3c46\u3c47\u3c48\u3c49\u3c4a\u3c4b\u3c4c\u3c4d\u3c4e\u3c4f\u3c50\u3c51\u3c52\u3c53\u3c54\u3c55\u3c56\u3c57\u3c58\u3c59\u3c5a\u3c5b\u3c5c\u3c5d\u3c5e\u3c5f\u3c60\u3c61\u3c62\u3c63\u3c64\u3c65\u3c66\u3c67\u3c68\u3c69\u3c6a\u3c6b\u3c6c\u3c6d\u3c6e\u3c6f\u3c70\u3c71\u3c72\u3c73\u3c74\u3c75\u3c76\u3c77\u3c78\u3c79\u3c7a\u3c7b\u3c7c\u3c7d\u3c7e\u3c7f\u3c80\u3c81\u3c82\u3c83\u3c84\u3c85\u3c86\u3c87\u3c88\u3c89\u3c8a\u3c8b\u3c8c\u3c8d\u3c8e\u3c8f\u3c90\u3c91\u3c92\u3c93\u3c94\u3c95\u3c96\u3c97\u3c98\u3c99\u3c9a\u3c9b\u3c9c\u3c9d\u3c9e\u3c9f\u3ca0\u3ca1\u3ca2\u3ca3\u3ca4\u3ca5\u3ca6\u3ca7\u3ca8\u3ca9\u3caa\u3cab\u3cac\u3cad\u3cae\u3caf\u3cb0\u3cb1\u3cb2\u3cb3\u3cb4\u3cb5\u3cb6\u3cb7\u3cb8\u3cb9\u3cba\u3cbb\u3cbc\u3cbd\u3cbe\u3cbf\u3cc0\u3cc1\u3cc2\u3cc3\u3cc4\u3cc5\u3cc6\u3cc7\u3cc8\u3cc9\u3cca\u3ccb\u3ccc\u3ccd\u3cce\u3ccf\u3cd0\u3cd1\u3cd2\u3cd3\u3cd4\u3cd5\u3cd6\u3cd7\u3cd8\u3cd9\u3cda\u3cdb\u3cdc\u3cdd\u3cde\u3cdf\u3ce0\u3ce1\u3ce2\u3ce3\u3ce4\u3ce5\u3ce6\u3ce7\u3ce8\u3ce9\u3cea\u3ceb\u3cec\u3ced\u3cee\u3cef\u3cf0\u3cf1\u3cf2\u3cf3\u3cf4\u3cf5\u3cf6\u3cf7\u3cf8\u3cf9\u3cfa\u3cfb\u3cfc\u3cfd\u3cfe\u3cff\u3d00\u3d01\u3d02\u3d03\u3d04\u3d05\u3d06\u3d07\u3d08\u3d09\u3d0a\u3d0b\u3d0c\u3d0d\u3d0e\u3d0f\u3d10\u3d11\u3d12\u3d13\u3d14\u3d15\u3d16\u3d17\u3d18\u3d19\u3d1a\u3d1b\u3d1c\u3d1d\u3d1e\u3d1f\u3d20\u3d21\u3d22\u3d23\u3d24\u3d25\u3d26\u3d27\u3d28\u3d29\u3d2a\u3d2b\u3d2c\u3d2d\u3d2e\u3d2f\u3d30\u3d31\u3d32\u3d33\u3d34\u3d35\u3d36\u3d37\u3d38\u3d39\u3d3a\u3d3b\u3d3c\u3d3d\u3d3e\u3d3f\u3d40\u3d41\u3d42\u3d43\u3d44\u3d45\u3d46\u3d47\u3d48\u3d49\u3d4a\u3d4b\u3d4c\u3d4d\u3d4e\u3d4f\u3d50\u3d51\u3d52\u3d53\u3d54\u3d55\u3d56\u3d57\u3d58\u3d59\u3d5a\u3d5b\u3d5c\u3d5d\u3d5e\u3d5f\u3d60\u3d61\u3d62\u3d63\u3d64\u3d65\u3d66\u3d67\u3d68\u3d69\u3d6a\u3d6b\u3d6c\u3d6d\u3d6e\u3d6f\u3d70\u3d71\u3d72\u3d73\u3d74\u3d75\u3d76\u3d77\u3d78\u3d79\u3d7a\u3d7b\u3d7c\u3d7d\u3d7e\u3d7f\u3d80\u3d81\u3d82\u3d83\u3d84\u3d85\u3d86\u3d87\u3d88\u3d89\u3d8a\u3d8b\u3d8c\u3d8d\u3d8e\u3d8f\u3d90\u3d91\u3d92\u3d93\u3d94\u3d95\u3d96\u3d97\u3d98\u3d99\u3d9a\u3d9b\u3d9c\u3d9d\u3d9e\u3d9f\u3da0\u3da1\u3da2\u3da3\u3da4\u3da5\u3da6\u3da7\u3da8\u3da9\u3daa\u3dab\u3dac\u3dad\u3dae\u3daf\u3db0\u3db1\u3db2\u3db3\u3db4\u3db5\u3db6\u3db7\u3db8\u3db9\u3dba\u3dbb\u3dbc\u3dbd\u3dbe\u3dbf\u3dc0\u3dc1\u3dc2\u3dc3\u3dc4\u3dc5\u3dc6\u3dc7\u3dc8\u3dc9\u3dca\u3dcb\u3dcc\u3dcd\u3dce\u3dcf\u3dd0\u3dd1\u3dd2\u3dd3\u3dd4\u3dd5\u3dd6\u3dd7\u3dd8\u3dd9\u3dda\u3ddb\u3ddc\u3ddd\u3dde\u3ddf\u3de0\u3de1\u3de2\u3de3\u3de4\u3de5\u3de6\u3de7\u3de8\u3de9\u3dea\u3deb\u3dec\u3ded\u3dee\u3def\u3df0\u3df1\u3df2\u3df3\u3df4\u3df5\u3df6\u3df7\u3df8\u3df9\u3dfa\u3dfb\u3dfc\u3dfd\u3dfe\u3dff\u3e00\u3e01\u3e02\u3e03\u3e04\u3e05\u3e06\u3e07\u3e08\u3e09\u3e0a\u3e0b\u3e0c\u3e0d\u3e0e\u3e0f\u3e10\u3e11\u3e12\u3e13\u3e14\u3e15\u3e16\u3e17\u3e18\u3e19\u3e1a\u3e1b\u3e1c\u3e1d\u3e1e\u3e1f\u3e20\u3e21\u3e22\u3e23\u3e24\u3e25\u3e26\u3e27\u3e28\u3e29\u3e2a\u3e2b\u3e2c\u3e2d\u3e2e\u3e2f\u3e30\u3e31\u3e32\u3e33\u3e34\u3e35\u3e36\u3e37\u3e38\u3e39\u3e3a\u3e3b\u3e3c\u3e3d\u3e3e\u3e3f\u3e40\u3e41\u3e42\u3e43\u3e44\u3e45\u3e46\u3e47\u3e48\u3e49\u3e4a\u3e4b\u3e4c\u3e4d\u3e4e\u3e4f\u3e50\u3e51\u3e52\u3e53\u3e54\u3e55\u3e56\u3e57\u3e58\u3e59\u3e5a\u3e5b\u3e5c\u3e5d\u3e5e\u3e5f\u3e60\u3e61\u3e62\u3e63\u3e64\u3e65\u3e66\u3e67\u3e68\u3e69\u3e6a\u3e6b\u3e6c\u3e6d\u3e6e\u3e6f\u3e70\u3e71\u3e72\u3e73\u3e74\u3e75\u3e76\u3e77\u3e78\u3e79\u3e7a\u3e7b\u3e7c\u3e7d\u3e7e\u3e7f\u3e80\u3e81\u3e82\u3e83\u3e84\u3e85\u3e86\u3e87\u3e88\u3e89\u3e8a\u3e8b\u3e8c\u3e8d\u3e8e\u3e8f\u3e90\u3e91\u3e92\u3e93\u3e94\u3e95\u3e96\u3e97\u3e98\u3e99\u3e9a\u3e9b\u3e9c\u3e9d\u3e9e\u3e9f\u3ea0\u3ea1\u3ea2\u3ea3\u3ea4\u3ea5\u3ea6\u3ea7\u3ea8\u3ea9\u3eaa\u3eab\u3eac\u3ead\u3eae\u3eaf\u3eb0\u3eb1\u3eb2\u3eb3\u3eb4\u3eb5\u3eb6\u3eb7\u3eb8\u3eb9\u3eba\u3ebb\u3ebc\u3ebd\u3ebe\u3ebf\u3ec0\u3ec1\u3ec2\u3ec3\u3ec4\u3ec5\u3ec6\u3ec7\u3ec8\u3ec9\u3eca\u3ecb\u3ecc\u3ecd\u3ece\u3ecf\u3ed0\u3ed1\u3ed2\u3ed3\u3ed4\u3ed5\u3ed6\u3ed7\u3ed8\u3ed9\u3eda\u3edb\u3edc\u3edd\u3ede\u3edf\u3ee0\u3ee1\u3ee2\u3ee3\u3ee4\u3ee5\u3ee6\u3ee7\u3ee8\u3ee9\u3eea\u3eeb\u3eec\u3eed\u3eee\u3eef\u3ef0\u3ef1\u3ef2\u3ef3\u3ef4\u3ef5\u3ef6\u3ef7\u3ef8\u3ef9\u3efa\u3efb\u3efc\u3efd\u3efe\u3eff\u3f00\u3f01\u3f02\u3f03\u3f04\u3f05\u3f06\u3f07\u3f08\u3f09\u3f0a\u3f0b\u3f0c\u3f0d\u3f0e\u3f0f\u3f10\u3f11\u3f12\u3f13\u3f14\u3f15\u3f16\u3f17\u3f18\u3f19\u3f1a\u3f1b\u3f1c\u3f1d\u3f1e\u3f1f\u3f20\u3f21\u3f22\u3f23\u3f24\u3f25\u3f26\u3f27\u3f28\u3f29\u3f2a\u3f2b\u3f2c\u3f2d\u3f2e\u3f2f\u3f30\u3f31\u3f32\u3f33\u3f34\u3f35\u3f36\u3f37\u3f38\u3f39\u3f3a\u3f3b\u3f3c\u3f3d\u3f3e\u3f3f\u3f40\u3f41\u3f42\u3f43\u3f44\u3f45\u3f46\u3f47\u3f48\u3f49\u3f4a\u3f4b\u3f4c\u3f4d\u3f4e\u3f4f\u3f50\u3f51\u3f52\u3f53\u3f54\u3f55\u3f56\u3f57\u3f58\u3f59\u3f5a\u3f5b\u3f5c\u3f5d\u3f5e\u3f5f\u3f60\u3f61\u3f62\u3f63\u3f64\u3f65\u3f66\u3f67\u3f68\u3f69\u3f6a\u3f6b\u3f6c\u3f6d\u3f6e\u3f6f\u3f70\u3f71\u3f72\u3f73\u3f74\u3f75\u3f76\u3f77\u3f78\u3f79\u3f7a\u3f7b\u3f7c\u3f7d\u3f7e\u3f7f\u3f80\u3f81\u3f82\u3f83\u3f84\u3f85\u3f86\u3f87\u3f88\u3f89\u3f8a\u3f8b\u3f8c\u3f8d\u3f8e\u3f8f\u3f90\u3f91\u3f92\u3f93\u3f94\u3f95\u3f96\u3f97\u3f98\u3f99\u3f9a\u3f9b\u3f9c\u3f9d\u3f9e\u3f9f\u3fa0\u3fa1\u3fa2\u3fa3\u3fa4\u3fa5\u3fa6\u3fa7\u3fa8\u3fa9\u3faa\u3fab\u3fac\u3fad\u3fae\u3faf\u3fb0\u3fb1\u3fb2\u3fb3\u3fb4\u3fb5\u3fb6\u3fb7\u3fb8\u3fb9\u3fba\u3fbb\u3fbc\u3fbd\u3fbe\u3fbf\u3fc0\u3fc1\u3fc2\u3fc3\u3fc4\u3fc5\u3fc6\u3fc7\u3fc8\u3fc9\u3fca\u3fcb\u3fcc\u3fcd\u3fce\u3fcf\u3fd0\u3fd1\u3fd2\u3fd3\u3fd4\u3fd5\u3fd6\u3fd7\u3fd8\u3fd9\u3fda\u3fdb\u3fdc\u3fdd\u3fde\u3fdf\u3fe0\u3fe1\u3fe2\u3fe3\u3fe4\u3fe5\u3fe6\u3fe7\u3fe8\u3fe9\u3fea\u3feb\u3fec\u3fed\u3fee\u3fef\u3ff0\u3ff1\u3ff2\u3ff3\u3ff4\u3ff5\u3ff6\u3ff7\u3ff8\u3ff9\u3ffa\u3ffb\u3ffc\u3ffd\u3ffe\u3fff\u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\u4040\u4041\u4042\u4043\u4044\u4045\u4046\u4047\u4048\u4049\u404a\u404b\u404c\u404d\u404e\u404f\u4050\u4051\u4052\u4053\u4054\u4055\u4056\u4057\u4058\u4059\u405a\u405b\u405c\u405d\u405e\u405f\u4060\u4061\u4062\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406a\u406b\u406c\u406d\u406e\u406f\u4070\u4071\u4072\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407a\u407b\u407c\u407d\u407e\u407f\u4080\u4081\u4082\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408a\u408b\u408c\u408d\u408e\u408f\u4090\u4091\u4092\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409a\u409b\u409c\u409d\u409e\u409f\u40a0\u40a1\u40a2\u40a3\u40a4\u40a5\u40a6\u40a7\u40a8\u40a9\u40aa\u40ab\u40ac\u40ad\u40ae\u40af\u40b0\u40b1\u40b2\u40b3\u40b4\u40b5\u40b6\u40b7\u40b8\u40b9\u40ba\u40bb\u40bc\u40bd\u40be\u40bf\u40c0\u40c1\u40c2\u40c3\u40c4\u40c5\u40c6\u40c7\u40c8\u40c9\u40ca\u40cb\u40cc\u40cd\u40ce\u40cf\u40d0\u40d1\u40d2\u40d3\u40d4\u40d5\u40d6\u40d7\u40d8\u40d9\u40da\u40db\u40dc\u40dd\u40de\u40df\u40e0\u40e1\u40e2\u40e3\u40e4\u40e5\u40e6\u40e7\u40e8\u40e9\u40ea\u40eb\u40ec\u40ed\u40ee\u40ef\u40f0\u40f1\u40f2\u40f3\u40f4\u40f5\u40f6\u40f7\u40f8\u40f9\u40fa\u40fb\u40fc\u40fd\u40fe\u40ff\u4100\u4101\u4102\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410a\u410b\u410c\u410d\u410e\u410f\u4110\u4111\u4112\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411a\u411b\u411c\u411d\u411e\u411f\u4120\u4121\u4122\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412a\u412b\u412c\u412d\u412e\u412f\u4130\u4131\u4132\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413a\u413b\u413c\u413d\u413e\u413f\u4140\u4141\u4142\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414a\u414b\u414c\u414d\u414e\u414f\u4150\u4151\u4152\u4153\u4154\u4155\u4156\u4157\u4158\u4159\u415a\u415b\u415c\u415d\u415e\u415f\u4160\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169\u416a\u416b\u416c\u416d\u416e\u416f\u4170\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179\u417a\u417b\u417c\u417d\u417e\u417f\u4180\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189\u418a\u418b\u418c\u418d\u418e\u418f\u4190\u4191\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199\u419a\u419b\u419c\u419d\u419e\u419f\u41a0\u41a1\u41a2\u41a3\u41a4\u41a5\u41a6\u41a7\u41a8\u41a9\u41aa\u41ab\u41ac\u41ad\u41ae\u41af\u41b0\u41b1\u41b2\u41b3\u41b4\u41b5\u41b6\u41b7\u41b8\u41b9\u41ba\u41bb\u41bc\u41bd\u41be\u41bf\u41c0\u41c1\u41c2\u41c3\u41c4\u41c5\u41c6\u41c7\u41c8\u41c9\u41ca\u41cb\u41cc\u41cd\u41ce\u41cf\u41d0\u41d1\u41d2\u41d3\u41d4\u41d5\u41d6\u41d7\u41d8\u41d9\u41da\u41db\u41dc\u41dd\u41de\u41df\u41e0\u41e1\u41e2\u41e3\u41e4\u41e5\u41e6\u41e7\u41e8\u41e9\u41ea\u41eb\u41ec\u41ed\u41ee\u41ef\u41f0\u41f1\u41f2\u41f3\u41f4\u41f5\u41f6\u41f7\u41f8\u41f9\u41fa\u41fb\u41fc\u41fd\u41fe\u41ff\u4200\u4201\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209\u420a\u420b\u420c\u420d\u420e\u420f\u4210\u4211\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219\u421a\u421b\u421c\u421d\u421e\u421f\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229\u422a\u422b\u422c\u422d\u422e\u422f\u4230\u4231\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239\u423a\u423b\u423c\u423d\u423e\u423f\u4240\u4241\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249\u424a\u424b\u424c\u424d\u424e\u424f\u4250\u4251\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259\u425a\u425b\u425c\u425d\u425e\u425f\u4260\u4261\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269\u426a\u426b\u426c\u426d\u426e\u426f\u4270\u4271\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279\u427a\u427b\u427c\u427d\u427e\u427f\u4280\u4281\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289\u428a\u428b\u428c\u428d\u428e\u428f\u4290\u4291\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299\u429a\u429b\u429c\u429d\u429e\u429f\u42a0\u42a1\u42a2\u42a3\u42a4\u42a5\u42a6\u42a7\u42a8\u42a9\u42aa\u42ab\u42ac\u42ad\u42ae\u42af\u42b0\u42b1\u42b2\u42b3\u42b4\u42b5\u42b6\u42b7\u42b8\u42b9\u42ba\u42bb\u42bc\u42bd\u42be\u42bf\u42c0\u42c1\u42c2\u42c3\u42c4\u42c5\u42c6\u42c7\u42c8\u42c9\u42ca\u42cb\u42cc\u42cd\u42ce\u42cf\u42d0\u42d1\u42d2\u42d3\u42d4\u42d5\u42d6\u42d7\u42d8\u42d9\u42da\u42db\u42dc\u42dd\u42de\u42df\u42e0\u42e1\u42e2\u42e3\u42e4\u42e5\u42e6\u42e7\u42e8\u42e9\u42ea\u42eb\u42ec\u42ed\u42ee\u42ef\u42f0\u42f1\u42f2\u42f3\u42f4\u42f5\u42f6\u42f7\u42f8\u42f9\u42fa\u42fb\u42fc\u42fd\u42fe\u42ff\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307\u4308\u4309\u430a\u430b\u430c\u430d\u430e\u430f\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317\u4318\u4319\u431a\u431b\u431c\u431d\u431e\u431f\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327\u4328\u4329\u432a\u432b\u432c\u432d\u432e\u432f\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337\u4338\u4339\u433a\u433b\u433c\u433d\u433e\u433f\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347\u4348\u4349\u434a\u434b\u434c\u434d\u434e\u434f\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357\u4358\u4359\u435a\u435b\u435c\u435d\u435e\u435f\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367\u4368\u4369\u436a\u436b\u436c\u436d\u436e\u436f\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377\u4378\u4379\u437a\u437b\u437c\u437d\u437e\u437f\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387\u4388\u4389\u438a\u438b\u438c\u438d\u438e\u438f\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397\u4398\u4399\u439a\u439b\u439c\u439d\u439e\u439f\u43a0\u43a1\u43a2\u43a3\u43a4\u43a5\u43a6\u43a7\u43a8\u43a9\u43aa\u43ab\u43ac\u43ad\u43ae\u43af\u43b0\u43b1\u43b2\u43b3\u43b4\u43b5\u43b6\u43b7\u43b8\u43b9\u43ba\u43bb\u43bc\u43bd\u43be\u43bf\u43c0\u43c1\u43c2\u43c3\u43c4\u43c5\u43c6\u43c7\u43c8\u43c9\u43ca\u43cb\u43cc\u43cd\u43ce\u43cf\u43d0\u43d1\u43d2\u43d3\u43d4\u43d5\u43d6\u43d7\u43d8\u43d9\u43da\u43db\u43dc\u43dd\u43de\u43df\u43e0\u43e1\u43e2\u43e3\u43e4\u43e5\u43e6\u43e7\u43e8\u43e9\u43ea\u43eb\u43ec\u43ed\u43ee\u43ef\u43f0\u43f1\u43f2\u43f3\u43f4\u43f5\u43f6\u43f7\u43f8\u43f9\u43fa\u43fb\u43fc\u43fd\u43fe\u43ff\u4400\u4401\u4402\u4403\u4404\u4405\u4406\u4407\u4408\u4409\u440a\u440b\u440c\u440d\u440e\u440f\u4410\u4411\u4412\u4413\u4414\u4415\u4416\u4417\u4418\u4419\u441a\u441b\u441c\u441d\u441e\u441f\u4420\u4421\u4422\u4423\u4424\u4425\u4426\u4427\u4428\u4429\u442a\u442b\u442c\u442d\u442e\u442f\u4430\u4431\u4432\u4433\u4434\u4435\u4436\u4437\u4438\u4439\u443a\u443b\u443c\u443d\u443e\u443f\u4440\u4441\u4442\u4443\u4444\u4445\u4446\u4447\u4448\u4449\u444a\u444b\u444c\u444d\u444e\u444f\u4450\u4451\u4452\u4453\u4454\u4455\u4456\u4457\u4458\u4459\u445a\u445b\u445c\u445d\u445e\u445f\u4460\u4461\u4462\u4463\u4464\u4465\u4466\u4467\u4468\u4469\u446a\u446b\u446c\u446d\u446e\u446f\u4470\u4471\u4472\u4473\u4474\u4475\u4476\u4477\u4478\u4479\u447a\u447b\u447c\u447d\u447e\u447f\u4480\u4481\u4482\u4483\u4484\u4485\u4486\u4487\u4488\u4489\u448a\u448b\u448c\u448d\u448e\u448f\u4490\u4491\u4492\u4493\u4494\u4495\u4496\u4497\u4498\u4499\u449a\u449b\u449c\u449d\u449e\u449f\u44a0\u44a1\u44a2\u44a3\u44a4\u44a5\u44a6\u44a7\u44a8\u44a9\u44aa\u44ab\u44ac\u44ad\u44ae\u44af\u44b0\u44b1\u44b2\u44b3\u44b4\u44b5\u44b6\u44b7\u44b8\u44b9\u44ba\u44bb\u44bc\u44bd\u44be\u44bf\u44c0\u44c1\u44c2\u44c3\u44c4\u44c5\u44c6\u44c7\u44c8\u44c9\u44ca\u44cb\u44cc\u44cd\u44ce\u44cf\u44d0\u44d1\u44d2\u44d3\u44d4\u44d5\u44d6\u44d7\u44d8\u44d9\u44da\u44db\u44dc\u44dd\u44de\u44df\u44e0\u44e1\u44e2\u44e3\u44e4\u44e5\u44e6\u44e7\u44e8\u44e9\u44ea\u44eb\u44ec\u44ed\u44ee\u44ef\u44f0\u44f1\u44f2\u44f3\u44f4\u44f5\u44f6\u44f7\u44f8\u44f9\u44fa\u44fb\u44fc\u44fd\u44fe\u44ff\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507\u4508\u4509\u450a\u450b\u450c\u450d\u450e\u450f\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517\u4518\u4519\u451a\u451b\u451c\u451d\u451e\u451f\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527\u4528\u4529\u452a\u452b\u452c\u452d\u452e\u452f\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537\u4538\u4539\u453a\u453b\u453c\u453d\u453e\u453f\u4540\u4541\u4542\u4543\u4544\u4545\u4546\u4547\u4548\u4549\u454a\u454b\u454c\u454d\u454e\u454f\u4550\u4551\u4552\u4553\u4554\u4555\u4556\u4557\u4558\u4559\u455a\u455b\u455c\u455d\u455e\u455f\u4560\u4561\u4562\u4563\u4564\u4565\u4566\u4567\u4568\u4569\u456a\u456b\u456c\u456d\u456e\u456f\u4570\u4571\u4572\u4573\u4574\u4575\u4576\u4577\u4578\u4579\u457a\u457b\u457c\u457d\u457e\u457f\u4580\u4581\u4582\u4583\u4584\u4585\u4586\u4587\u4588\u4589\u458a\u458b\u458c\u458d\u458e\u458f\u4590\u4591\u4592\u4593\u4594\u4595\u4596\u4597\u4598\u4599\u459a\u459b\u459c\u459d\u459e\u459f\u45a0\u45a1\u45a2\u45a3\u45a4\u45a5\u45a6\u45a7\u45a8\u45a9\u45aa\u45ab\u45ac\u45ad\u45ae\u45af\u45b0\u45b1\u45b2\u45b3\u45b4\u45b5\u45b6\u45b7\u45b8\u45b9\u45ba\u45bb\u45bc\u45bd\u45be\u45bf\u45c0\u45c1\u45c2\u45c3\u45c4\u45c5\u45c6\u45c7\u45c8\u45c9\u45ca\u45cb\u45cc\u45cd\u45ce\u45cf\u45d0\u45d1\u45d2\u45d3\u45d4\u45d5\u45d6\u45d7\u45d8\u45d9\u45da\u45db\u45dc\u45dd\u45de\u45df\u45e0\u45e1\u45e2\u45e3\u45e4\u45e5\u45e6\u45e7\u45e8\u45e9\u45ea\u45eb\u45ec\u45ed\u45ee\u45ef\u45f0\u45f1\u45f2\u45f3\u45f4\u45f5\u45f6\u45f7\u45f8\u45f9\u45fa\u45fb\u45fc\u45fd\u45fe\u45ff\u4600\u4601\u4602\u4603\u4604\u4605\u4606\u4607\u4608\u4609\u460a\u460b\u460c\u460d\u460e\u460f\u4610\u4611\u4612\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461a\u461b\u461c\u461d\u461e\u461f\u4620\u4621\u4622\u4623\u4624\u4625\u4626\u4627\u4628\u4629\u462a\u462b\u462c\u462d\u462e\u462f\u4630\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638\u4639\u463a\u463b\u463c\u463d\u463e\u463f\u4640\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648\u4649\u464a\u464b\u464c\u464d\u464e\u464f\u4650\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658\u4659\u465a\u465b\u465c\u465d\u465e\u465f\u4660\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668\u4669\u466a\u466b\u466c\u466d\u466e\u466f\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678\u4679\u467a\u467b\u467c\u467d\u467e\u467f\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688\u4689\u468a\u468b\u468c\u468d\u468e\u468f\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698\u4699\u469a\u469b\u469c\u469d\u469e\u469f\u46a0\u46a1\u46a2\u46a3\u46a4\u46a5\u46a6\u46a7\u46a8\u46a9\u46aa\u46ab\u46ac\u46ad\u46ae\u46af\u46b0\u46b1\u46b2\u46b3\u46b4\u46b5\u46b6\u46b7\u46b8\u46b9\u46ba\u46bb\u46bc\u46bd\u46be\u46bf\u46c0\u46c1\u46c2\u46c3\u46c4\u46c5\u46c6\u46c7\u46c8\u46c9\u46ca\u46cb\u46cc\u46cd\u46ce\u46cf\u46d0\u46d1\u46d2\u46d3\u46d4\u46d5\u46d6\u46d7\u46d8\u46d9\u46da\u46db\u46dc\u46dd\u46de\u46df\u46e0\u46e1\u46e2\u46e3\u46e4\u46e5\u46e6\u46e7\u46e8\u46e9\u46ea\u46eb\u46ec\u46ed\u46ee\u46ef\u46f0\u46f1\u46f2\u46f3\u46f4\u46f5\u46f6\u46f7\u46f8\u46f9\u46fa\u46fb\u46fc\u46fd\u46fe\u46ff\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708\u4709\u470a\u470b\u470c\u470d\u470e\u470f\u4710\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718\u4719\u471a\u471b\u471c\u471d\u471e\u471f\u4720\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728\u4729\u472a\u472b\u472c\u472d\u472e\u472f\u4730\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738\u4739\u473a\u473b\u473c\u473d\u473e\u473f\u4740\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748\u4749\u474a\u474b\u474c\u474d\u474e\u474f\u4750\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758\u4759\u475a\u475b\u475c\u475d\u475e\u475f\u4760\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768\u4769\u476a\u476b\u476c\u476d\u476e\u476f\u4770\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778\u4779\u477a\u477b\u477c\u477d\u477e\u477f\u4780\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788\u4789\u478a\u478b\u478c\u478d\u478e\u478f\u4790\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798\u4799\u479a\u479b\u479c\u479d\u479e\u479f\u47a0\u47a1\u47a2\u47a3\u47a4\u47a5\u47a6\u47a7\u47a8\u47a9\u47aa\u47ab\u47ac\u47ad\u47ae\u47af\u47b0\u47b1\u47b2\u47b3\u47b4\u47b5\u47b6\u47b7\u47b8\u47b9\u47ba\u47bb\u47bc\u47bd\u47be\u47bf\u47c0\u47c1\u47c2\u47c3\u47c4\u47c5\u47c6\u47c7\u47c8\u47c9\u47ca\u47cb\u47cc\u47cd\u47ce\u47cf\u47d0\u47d1\u47d2\u47d3\u47d4\u47d5\u47d6\u47d7\u47d8\u47d9\u47da\u47db\u47dc\u47dd\u47de\u47df\u47e0\u47e1\u47e2\u47e3\u47e4\u47e5\u47e6\u47e7\u47e8\u47e9\u47ea\u47eb\u47ec\u47ed\u47ee\u47ef\u47f0\u47f1\u47f2\u47f3\u47f4\u47f5\u47f6\u47f7\u47f8\u47f9\u47fa\u47fb\u47fc\u47fd\u47fe\u47ff\u4800\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808\u4809\u480a\u480b\u480c\u480d\u480e\u480f\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818\u4819\u481a\u481b\u481c\u481d\u481e\u481f\u4820\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828\u4829\u482a\u482b\u482c\u482d\u482e\u482f\u4830\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838\u4839\u483a\u483b\u483c\u483d\u483e\u483f\u4840\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848\u4849\u484a\u484b\u484c\u484d\u484e\u484f\u4850\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858\u4859\u485a\u485b\u485c\u485d\u485e\u485f\u4860\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868\u4869\u486a\u486b\u486c\u486d\u486e\u486f\u4870\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878\u4879\u487a\u487b\u487c\u487d\u487e\u487f\u4880\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888\u4889\u488a\u488b\u488c\u488d\u488e\u488f\u4890\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898\u4899\u489a\u489b\u489c\u489d\u489e\u489f\u48a0\u48a1\u48a2\u48a3\u48a4\u48a5\u48a6\u48a7\u48a8\u48a9\u48aa\u48ab\u48ac\u48ad\u48ae\u48af\u48b0\u48b1\u48b2\u48b3\u48b4\u48b5\u48b6\u48b7\u48b8\u48b9\u48ba\u48bb\u48bc\u48bd\u48be\u48bf\u48c0\u48c1\u48c2\u48c3\u48c4\u48c5\u48c6\u48c7\u48c8\u48c9\u48ca\u48cb\u48cc\u48cd\u48ce\u48cf\u48d0\u48d1\u48d2\u48d3\u48d4\u48d5\u48d6\u48d7\u48d8\u48d9\u48da\u48db\u48dc\u48dd\u48de\u48df\u48e0\u48e1\u48e2\u48e3\u48e4\u48e5\u48e6\u48e7\u48e8\u48e9\u48ea\u48eb\u48ec\u48ed\u48ee\u48ef\u48f0\u48f1\u48f2\u48f3\u48f4\u48f5\u48f6\u48f7\u48f8\u48f9\u48fa\u48fb\u48fc\u48fd\u48fe\u48ff\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907\u4908\u4909\u490a\u490b\u490c\u490d\u490e\u490f\u4910\u4911\u4912\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491a\u491b\u491c\u491d\u491e\u491f\u4920\u4921\u4922\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492a\u492b\u492c\u492d\u492e\u492f\u4930\u4931\u4932\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493a\u493b\u493c\u493d\u493e\u493f\u4940\u4941\u4942\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494a\u494b\u494c\u494d\u494e\u494f\u4950\u4951\u4952\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495a\u495b\u495c\u495d\u495e\u495f\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496a\u496b\u496c\u496d\u496e\u496f\u4970\u4971\u4972\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497a\u497b\u497c\u497d\u497e\u497f\u4980\u4981\u4982\u4983\u4984\u4985\u4986\u4987\u4988\u4989\u498a\u498b\u498c\u498d\u498e\u498f\u4990\u4991\u4992\u4993\u4994\u4995\u4996\u4997\u4998\u4999\u499a\u499b\u499c\u499d\u499e\u499f\u49a0\u49a1\u49a2\u49a3\u49a4\u49a5\u49a6\u49a7\u49a8\u49a9\u49aa\u49ab\u49ac\u49ad\u49ae\u49af\u49b0\u49b1\u49b2\u49b3\u49b4\u49b5\u49b6\u49b7\u49b8\u49b9\u49ba\u49bb\u49bc\u49bd\u49be\u49bf\u49c0\u49c1\u49c2\u49c3\u49c4\u49c5\u49c6\u49c7\u49c8\u49c9\u49ca\u49cb\u49cc\u49cd\u49ce\u49cf\u49d0\u49d1\u49d2\u49d3\u49d4\u49d5\u49d6\u49d7\u49d8\u49d9\u49da\u49db\u49dc\u49dd\u49de\u49df\u49e0\u49e1\u49e2\u49e3\u49e4\u49e5\u49e6\u49e7\u49e8\u49e9\u49ea\u49eb\u49ec\u49ed\u49ee\u49ef\u49f0\u49f1\u49f2\u49f3\u49f4\u49f5\u49f6\u49f7\u49f8\u49f9\u49fa\u49fb\u49fc\u49fd\u49fe\u49ff\u4a00\u4a01\u4a02\u4a03\u4a04\u4a05\u4a06\u4a07\u4a08\u4a09\u4a0a\u4a0b\u4a0c\u4a0d\u4a0e\u4a0f\u4a10\u4a11\u4a12\u4a13\u4a14\u4a15\u4a16\u4a17\u4a18\u4a19\u4a1a\u4a1b\u4a1c\u4a1d\u4a1e\u4a1f\u4a20\u4a21\u4a22\u4a23\u4a24\u4a25\u4a26\u4a27\u4a28\u4a29\u4a2a\u4a2b\u4a2c\u4a2d\u4a2e\u4a2f\u4a30\u4a31\u4a32\u4a33\u4a34\u4a35\u4a36\u4a37\u4a38\u4a39\u4a3a\u4a3b\u4a3c\u4a3d\u4a3e\u4a3f\u4a40\u4a41\u4a42\u4a43\u4a44\u4a45\u4a46\u4a47\u4a48\u4a49\u4a4a\u4a4b\u4a4c\u4a4d\u4a4e\u4a4f\u4a50\u4a51\u4a52\u4a53\u4a54\u4a55\u4a56\u4a57\u4a58\u4a59\u4a5a\u4a5b\u4a5c\u4a5d\u4a5e\u4a5f\u4a60\u4a61\u4a62\u4a63\u4a64\u4a65\u4a66\u4a67\u4a68\u4a69\u4a6a\u4a6b\u4a6c\u4a6d\u4a6e\u4a6f\u4a70\u4a71\u4a72\u4a73\u4a74\u4a75\u4a76\u4a77\u4a78\u4a79\u4a7a\u4a7b\u4a7c\u4a7d\u4a7e\u4a7f\u4a80\u4a81\u4a82\u4a83\u4a84\u4a85\u4a86\u4a87\u4a88\u4a89\u4a8a\u4a8b\u4a8c\u4a8d\u4a8e\u4a8f\u4a90\u4a91\u4a92\u4a93\u4a94\u4a95\u4a96\u4a97\u4a98\u4a99\u4a9a\u4a9b\u4a9c\u4a9d\u4a9e\u4a9f\u4aa0\u4aa1\u4aa2\u4aa3\u4aa4\u4aa5\u4aa6\u4aa7\u4aa8\u4aa9\u4aaa\u4aab\u4aac\u4aad\u4aae\u4aaf\u4ab0\u4ab1\u4ab2\u4ab3\u4ab4\u4ab5\u4ab6\u4ab7\u4ab8\u4ab9\u4aba\u4abb\u4abc\u4abd\u4abe\u4abf\u4ac0\u4ac1\u4ac2\u4ac3\u4ac4\u4ac5\u4ac6\u4ac7\u4ac8\u4ac9\u4aca\u4acb\u4acc\u4acd\u4ace\u4acf\u4ad0\u4ad1\u4ad2\u4ad3\u4ad4\u4ad5\u4ad6\u4ad7\u4ad8\u4ad9\u4ada\u4adb\u4adc\u4add\u4ade\u4adf\u4ae0\u4ae1\u4ae2\u4ae3\u4ae4\u4ae5\u4ae6\u4ae7\u4ae8\u4ae9\u4aea\u4aeb\u4aec\u4aed\u4aee\u4aef\u4af0\u4af1\u4af2\u4af3\u4af4\u4af5\u4af6\u4af7\u4af8\u4af9\u4afa\u4afb\u4afc\u4afd\u4afe\u4aff\u4b00\u4b01\u4b02\u4b03\u4b04\u4b05\u4b06\u4b07\u4b08\u4b09\u4b0a\u4b0b\u4b0c\u4b0d\u4b0e\u4b0f\u4b10\u4b11\u4b12\u4b13\u4b14\u4b15\u4b16\u4b17\u4b18\u4b19\u4b1a\u4b1b\u4b1c\u4b1d\u4b1e\u4b1f\u4b20\u4b21\u4b22\u4b23\u4b24\u4b25\u4b26\u4b27\u4b28\u4b29\u4b2a\u4b2b\u4b2c\u4b2d\u4b2e\u4b2f\u4b30\u4b31\u4b32\u4b33\u4b34\u4b35\u4b36\u4b37\u4b38\u4b39\u4b3a\u4b3b\u4b3c\u4b3d\u4b3e\u4b3f\u4b40\u4b41\u4b42\u4b43\u4b44\u4b45\u4b46\u4b47\u4b48\u4b49\u4b4a\u4b4b\u4b4c\u4b4d\u4b4e\u4b4f\u4b50\u4b51\u4b52\u4b53\u4b54\u4b55\u4b56\u4b57\u4b58\u4b59\u4b5a\u4b5b\u4b5c\u4b5d\u4b5e\u4b5f\u4b60\u4b61\u4b62\u4b63\u4b64\u4b65\u4b66\u4b67\u4b68\u4b69\u4b6a\u4b6b\u4b6c\u4b6d\u4b6e\u4b6f\u4b70\u4b71\u4b72\u4b73\u4b74\u4b75\u4b76\u4b77\u4b78\u4b79\u4b7a\u4b7b\u4b7c\u4b7d\u4b7e\u4b7f\u4b80\u4b81\u4b82\u4b83\u4b84\u4b85\u4b86\u4b87\u4b88\u4b89\u4b8a\u4b8b\u4b8c\u4b8d\u4b8e\u4b8f\u4b90\u4b91\u4b92\u4b93\u4b94\u4b95\u4b96\u4b97\u4b98\u4b99\u4b9a\u4b9b\u4b9c\u4b9d\u4b9e\u4b9f\u4ba0\u4ba1\u4ba2\u4ba3\u4ba4\u4ba5\u4ba6\u4ba7\u4ba8\u4ba9\u4baa\u4bab\u4bac\u4bad\u4bae\u4baf\u4bb0\u4bb1\u4bb2\u4bb3\u4bb4\u4bb5\u4bb6\u4bb7\u4bb8\u4bb9\u4bba\u4bbb\u4bbc\u4bbd\u4bbe\u4bbf\u4bc0\u4bc1\u4bc2\u4bc3\u4bc4\u4bc5\u4bc6\u4bc7\u4bc8\u4bc9\u4bca\u4bcb\u4bcc\u4bcd\u4bce\u4bcf\u4bd0\u4bd1\u4bd2\u4bd3\u4bd4\u4bd5\u4bd6\u4bd7\u4bd8\u4bd9\u4bda\u4bdb\u4bdc\u4bdd\u4bde\u4bdf\u4be0\u4be1\u4be2\u4be3\u4be4\u4be5\u4be6\u4be7\u4be8\u4be9\u4bea\u4beb\u4bec\u4bed\u4bee\u4bef\u4bf0\u4bf1\u4bf2\u4bf3\u4bf4\u4bf5\u4bf6\u4bf7\u4bf8\u4bf9\u4bfa\u4bfb\u4bfc\u4bfd\u4bfe\u4bff\u4c00\u4c01\u4c02\u4c03\u4c04\u4c05\u4c06\u4c07\u4c08\u4c09\u4c0a\u4c0b\u4c0c\u4c0d\u4c0e\u4c0f\u4c10\u4c11\u4c12\u4c13\u4c14\u4c15\u4c16\u4c17\u4c18\u4c19\u4c1a\u4c1b\u4c1c\u4c1d\u4c1e\u4c1f\u4c20\u4c21\u4c22\u4c23\u4c24\u4c25\u4c26\u4c27\u4c28\u4c29\u4c2a\u4c2b\u4c2c\u4c2d\u4c2e\u4c2f\u4c30\u4c31\u4c32\u4c33\u4c34\u4c35\u4c36\u4c37\u4c38\u4c39\u4c3a\u4c3b\u4c3c\u4c3d\u4c3e\u4c3f\u4c40\u4c41\u4c42\u4c43\u4c44\u4c45\u4c46\u4c47\u4c48\u4c49\u4c4a\u4c4b\u4c4c\u4c4d\u4c4e\u4c4f\u4c50\u4c51\u4c52\u4c53\u4c54\u4c55\u4c56\u4c57\u4c58\u4c59\u4c5a\u4c5b\u4c5c\u4c5d\u4c5e\u4c5f\u4c60\u4c61\u4c62\u4c63\u4c64\u4c65\u4c66\u4c67\u4c68\u4c69\u4c6a\u4c6b\u4c6c\u4c6d\u4c6e\u4c6f\u4c70\u4c71\u4c72\u4c73\u4c74\u4c75\u4c76\u4c77\u4c78\u4c79\u4c7a\u4c7b\u4c7c\u4c7d\u4c7e\u4c7f\u4c80\u4c81\u4c82\u4c83\u4c84\u4c85\u4c86\u4c87\u4c88\u4c89\u4c8a\u4c8b\u4c8c\u4c8d\u4c8e\u4c8f\u4c90\u4c91\u4c92\u4c93\u4c94\u4c95\u4c96\u4c97\u4c98\u4c99\u4c9a\u4c9b\u4c9c\u4c9d\u4c9e\u4c9f\u4ca0\u4ca1\u4ca2\u4ca3\u4ca4\u4ca5\u4ca6\u4ca7\u4ca8\u4ca9\u4caa\u4cab\u4cac\u4cad\u4cae\u4caf\u4cb0\u4cb1\u4cb2\u4cb3\u4cb4\u4cb5\u4cb6\u4cb7\u4cb8\u4cb9\u4cba\u4cbb\u4cbc\u4cbd\u4cbe\u4cbf\u4cc0\u4cc1\u4cc2\u4cc3\u4cc4\u4cc5\u4cc6\u4cc7\u4cc8\u4cc9\u4cca\u4ccb\u4ccc\u4ccd\u4cce\u4ccf\u4cd0\u4cd1\u4cd2\u4cd3\u4cd4\u4cd5\u4cd6\u4cd7\u4cd8\u4cd9\u4cda\u4cdb\u4cdc\u4cdd\u4cde\u4cdf\u4ce0\u4ce1\u4ce2\u4ce3\u4ce4\u4ce5\u4ce6\u4ce7\u4ce8\u4ce9\u4cea\u4ceb\u4cec\u4ced\u4cee\u4cef\u4cf0\u4cf1\u4cf2\u4cf3\u4cf4\u4cf5\u4cf6\u4cf7\u4cf8\u4cf9\u4cfa\u4cfb\u4cfc\u4cfd\u4cfe\u4cff\u4d00\u4d01\u4d02\u4d03\u4d04\u4d05\u4d06\u4d07\u4d08\u4d09\u4d0a\u4d0b\u4d0c\u4d0d\u4d0e\u4d0f\u4d10\u4d11\u4d12\u4d13\u4d14\u4d15\u4d16\u4d17\u4d18\u4d19\u4d1a\u4d1b\u4d1c\u4d1d\u4d1e\u4d1f\u4d20\u4d21\u4d22\u4d23\u4d24\u4d25\u4d26\u4d27\u4d28\u4d29\u4d2a\u4d2b\u4d2c\u4d2d\u4d2e\u4d2f\u4d30\u4d31\u4d32\u4d33\u4d34\u4d35\u4d36\u4d37\u4d38\u4d39\u4d3a\u4d3b\u4d3c\u4d3d\u4d3e\u4d3f\u4d40\u4d41\u4d42\u4d43\u4d44\u4d45\u4d46\u4d47\u4d48\u4d49\u4d4a\u4d4b\u4d4c\u4d4d\u4d4e\u4d4f\u4d50\u4d51\u4d52\u4d53\u4d54\u4d55\u4d56\u4d57\u4d58\u4d59\u4d5a\u4d5b\u4d5c\u4d5d\u4d5e\u4d5f\u4d60\u4d61\u4d62\u4d63\u4d64\u4d65\u4d66\u4d67\u4d68\u4d69\u4d6a\u4d6b\u4d6c\u4d6d\u4d6e\u4d6f\u4d70\u4d71\u4d72\u4d73\u4d74\u4d75\u4d76\u4d77\u4d78\u4d79\u4d7a\u4d7b\u4d7c\u4d7d\u4d7e\u4d7f\u4d80\u4d81\u4d82\u4d83\u4d84\u4d85\u4d86\u4d87\u4d88\u4d89\u4d8a\u4d8b\u4d8c\u4d8d\u4d8e\u4d8f\u4d90\u4d91\u4d92\u4d93\u4d94\u4d95\u4d96\u4d97\u4d98\u4d99\u4d9a\u4d9b\u4d9c\u4d9d\u4d9e\u4d9f\u4da0\u4da1\u4da2\u4da3\u4da4\u4da5\u4da6\u4da7\u4da8\u4da9\u4daa\u4dab\u4dac\u4dad\u4dae\u4daf\u4db0\u4db1\u4db2\u4db3\u4db4\u4db5\u4e00\u4e01\u4e02\u4e03\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e0d\u4e0e\u4e0f\u4e10\u4e11\u4e12\u4e13\u4e14\u4e15\u4e16\u4e17\u4e18\u4e19\u4e1a\u4e1b\u4e1c\u4e1d\u4e1e\u4e1f\u4e20\u4e21\u4e22\u4e23\u4e24\u4e25\u4e26\u4e27\u4e28\u4e29\u4e2a\u4e2b\u4e2c\u4e2d\u4e2e\u4e2f\u4e30\u4e31\u4e32\u4e33\u4e34\u4e35\u4e36\u4e37\u4e38\u4e39\u4e3a\u4e3b\u4e3c\u4e3d\u4e3e\u4e3f\u4e40\u4e41\u4e42\u4e43\u4e44\u4e45\u4e46\u4e47\u4e48\u4e49\u4e4a\u4e4b\u4e4c\u4e4d\u4e4e\u4e4f\u4e50\u4e51\u4e52\u4e53\u4e54\u4e55\u4e56\u4e57\u4e58\u4e59\u4e5a\u4e5b\u4e5c\u4e5d\u4e5e\u4e5f\u4e60\u4e61\u4e62\u4e63\u4e64\u4e65\u4e66\u4e67\u4e68\u4e69\u4e6a\u4e6b\u4e6c\u4e6d\u4e6e\u4e6f\u4e70\u4e71\u4e72\u4e73\u4e74\u4e75\u4e76\u4e77\u4e78\u4e79\u4e7a\u4e7b\u4e7c\u4e7d\u4e7e\u4e7f\u4e80\u4e81\u4e82\u4e83\u4e84\u4e85\u4e86\u4e87\u4e88\u4e89\u4e8a\u4e8b\u4e8c\u4e8d\u4e8e\u4e8f\u4e90\u4e91\u4e92\u4e93\u4e94\u4e95\u4e96\u4e97\u4e98\u4e99\u4e9a\u4e9b\u4e9c\u4e9d\u4e9e\u4e9f\u4ea0\u4ea1\u4ea2\u4ea3\u4ea4\u4ea5\u4ea6\u4ea7\u4ea8\u4ea9\u4eaa\u4eab\u4eac\u4ead\u4eae\u4eaf\u4eb0\u4eb1\u4eb2\u4eb3\u4eb4\u4eb5\u4eb6\u4eb7\u4eb8\u4eb9\u4eba\u4ebb\u4ebc\u4ebd\u4ebe\u4ebf\u4ec0\u4ec1\u4ec2\u4ec3\u4ec4\u4ec5\u4ec6\u4ec7\u4ec8\u4ec9\u4eca\u4ecb\u4ecc\u4ecd\u4ece\u4ecf\u4ed0\u4ed1\u4ed2\u4ed3\u4ed4\u4ed5\u4ed6\u4ed7\u4ed8\u4ed9\u4eda\u4edb\u4edc\u4edd\u4ede\u4edf\u4ee0\u4ee1\u4ee2\u4ee3\u4ee4\u4ee5\u4ee6\u4ee7\u4ee8\u4ee9\u4eea\u4eeb\u4eec\u4eed\u4eee\u4eef\u4ef0\u4ef1\u4ef2\u4ef3\u4ef4\u4ef5\u4ef6\u4ef7\u4ef8\u4ef9\u4efa\u4efb\u4efc\u4efd\u4efe\u4eff\u4f00\u4f01\u4f02\u4f03\u4f04\u4f05\u4f06\u4f07\u4f08\u4f09\u4f0a\u4f0b\u4f0c\u4f0d\u4f0e\u4f0f\u4f10\u4f11\u4f12\u4f13\u4f14\u4f15\u4f16\u4f17\u4f18\u4f19\u4f1a\u4f1b\u4f1c\u4f1d\u4f1e\u4f1f\u4f20\u4f21\u4f22\u4f23\u4f24\u4f25\u4f26\u4f27\u4f28\u4f29\u4f2a\u4f2b\u4f2c\u4f2d\u4f2e\u4f2f\u4f30\u4f31\u4f32\u4f33\u4f34\u4f35\u4f36\u4f37\u4f38\u4f39\u4f3a\u4f3b\u4f3c\u4f3d\u4f3e\u4f3f\u4f40\u4f41\u4f42\u4f43\u4f44\u4f45\u4f46\u4f47\u4f48\u4f49\u4f4a\u4f4b\u4f4c\u4f4d\u4f4e\u4f4f\u4f50\u4f51\u4f52\u4f53\u4f54\u4f55\u4f56\u4f57\u4f58\u4f59\u4f5a\u4f5b\u4f5c\u4f5d\u4f5e\u4f5f\u4f60\u4f61\u4f62\u4f63\u4f64\u4f65\u4f66\u4f67\u4f68\u4f69\u4f6a\u4f6b\u4f6c\u4f6d\u4f6e\u4f6f\u4f70\u4f71\u4f72\u4f73\u4f74\u4f75\u4f76\u4f77\u4f78\u4f79\u4f7a\u4f7b\u4f7c\u4f7d\u4f7e\u4f7f\u4f80\u4f81\u4f82\u4f83\u4f84\u4f85\u4f86\u4f87\u4f88\u4f89\u4f8a\u4f8b\u4f8c\u4f8d\u4f8e\u4f8f\u4f90\u4f91\u4f92\u4f93\u4f94\u4f95\u4f96\u4f97\u4f98\u4f99\u4f9a\u4f9b\u4f9c\u4f9d\u4f9e\u4f9f\u4fa0\u4fa1\u4fa2\u4fa3\u4fa4\u4fa5\u4fa6\u4fa7\u4fa8\u4fa9\u4faa\u4fab\u4fac\u4fad\u4fae\u4faf\u4fb0\u4fb1\u4fb2\u4fb3\u4fb4\u4fb5\u4fb6\u4fb7\u4fb8\u4fb9\u4fba\u4fbb\u4fbc\u4fbd\u4fbe\u4fbf\u4fc0\u4fc1\u4fc2\u4fc3\u4fc4\u4fc5\u4fc6\u4fc7\u4fc8\u4fc9\u4fca\u4fcb\u4fcc\u4fcd\u4fce\u4fcf\u4fd0\u4fd1\u4fd2\u4fd3\u4fd4\u4fd5\u4fd6\u4fd7\u4fd8\u4fd9\u4fda\u4fdb\u4fdc\u4fdd\u4fde\u4fdf\u4fe0\u4fe1\u4fe2\u4fe3\u4fe4\u4fe5\u4fe6\u4fe7\u4fe8\u4fe9\u4fea\u4feb\u4fec\u4fed\u4fee\u4fef\u4ff0\u4ff1\u4ff2\u4ff3\u4ff4\u4ff5\u4ff6\u4ff7\u4ff8\u4ff9\u4ffa\u4ffb\u4ffc\u4ffd\u4ffe\u4fff\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500a\u500b\u500c\u500d\u500e\u500f\u5010\u5011\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019\u501a\u501b\u501c\u501d\u501e\u501f\u5020\u5021\u5022\u5023\u5024\u5025\u5026\u5027\u5028\u5029\u502a\u502b\u502c\u502d\u502e\u502f\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503a\u503b\u503c\u503d\u503e\u503f\u5040\u5041\u5042\u5043\u5044\u5045\u5046\u5047\u5048\u5049\u504a\u504b\u504c\u504d\u504e\u504f\u5050\u5051\u5052\u5053\u5054\u5055\u5056\u5057\u5058\u5059\u505a\u505b\u505c\u505d\u505e\u505f\u5060\u5061\u5062\u5063\u5064\u5065\u5066\u5067\u5068\u5069\u506a\u506b\u506c\u506d\u506e\u506f\u5070\u5071\u5072\u5073\u5074\u5075\u5076\u5077\u5078\u5079\u507a\u507b\u507c\u507d\u507e\u507f\u5080\u5081\u5082\u5083\u5084\u5085\u5086\u5087\u5088\u5089\u508a\u508b\u508c\u508d\u508e\u508f\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u5098\u5099\u509a\u509b\u509c\u509d\u509e\u509f\u50a0\u50a1\u50a2\u50a3\u50a4\u50a5\u50a6\u50a7\u50a8\u50a9\u50aa\u50ab\u50ac\u50ad\u50ae\u50af\u50b0\u50b1\u50b2\u50b3\u50b4\u50b5\u50b6\u50b7\u50b8\u50b9\u50ba\u50bb\u50bc\u50bd\u50be\u50bf\u50c0\u50c1\u50c2\u50c3\u50c4\u50c5\u50c6\u50c7\u50c8\u50c9\u50ca\u50cb\u50cc\u50cd\u50ce\u50cf\u50d0\u50d1\u50d2\u50d3\u50d4\u50d5\u50d6\u50d7\u50d8\u50d9\u50da\u50db\u50dc\u50dd\u50de\u50df\u50e0\u50e1\u50e2\u50e3\u50e4\u50e5\u50e6\u50e7\u50e8\u50e9\u50ea\u50eb\u50ec\u50ed\u50ee\u50ef\u50f0\u50f1\u50f2\u50f3\u50f4\u50f5\u50f6\u50f7\u50f8\u50f9\u50fa\u50fb\u50fc\u50fd\u50fe\u50ff\u5100\u5101\u5102\u5103\u5104\u5105\u5106\u5107\u5108\u5109\u510a\u510b\u510c\u510d\u510e\u510f\u5110\u5111\u5112\u5113\u5114\u5115\u5116\u5117\u5118\u5119\u511a\u511b\u511c\u511d\u511e\u511f\u5120\u5121\u5122\u5123\u5124\u5125\u5126\u5127\u5128\u5129\u512a\u512b\u512c\u512d\u512e\u512f\u5130\u5131\u5132\u5133\u5134\u5135\u5136\u5137\u5138\u5139\u513a\u513b\u513c\u513d\u513e\u513f\u5140\u5141\u5142\u5143\u5144\u5145\u5146\u5147\u5148\u5149\u514a\u514b\u514c\u514d\u514e\u514f\u5150\u5151\u5152\u5153\u5154\u5155\u5156\u5157\u5158\u5159\u515a\u515b\u515c\u515d\u515e\u515f\u5160\u5161\u5162\u5163\u5164\u5165\u5166\u5167\u5168\u5169\u516a\u516b\u516c\u516d\u516e\u516f\u5170\u5171\u5172\u5173\u5174\u5175\u5176\u5177\u5178\u5179\u517a\u517b\u517c\u517d\u517e\u517f\u5180\u5181\u5182\u5183\u5184\u5185\u5186\u5187\u5188\u5189\u518a\u518b\u518c\u518d\u518e\u518f\u5190\u5191\u5192\u5193\u5194\u5195\u5196\u5197\u5198\u5199\u519a\u519b\u519c\u519d\u519e\u519f\u51a0\u51a1\u51a2\u51a3\u51a4\u51a5\u51a6\u51a7\u51a8\u51a9\u51aa\u51ab\u51ac\u51ad\u51ae\u51af\u51b0\u51b1\u51b2\u51b3\u51b4\u51b5\u51b6\u51b7\u51b8\u51b9\u51ba\u51bb\u51bc\u51bd\u51be\u51bf\u51c0\u51c1\u51c2\u51c3\u51c4\u51c5\u51c6\u51c7\u51c8\u51c9\u51ca\u51cb\u51cc\u51cd\u51ce\u51cf\u51d0\u51d1\u51d2\u51d3\u51d4\u51d5\u51d6\u51d7\u51d8\u51d9\u51da\u51db\u51dc\u51dd\u51de\u51df\u51e0\u51e1\u51e2\u51e3\u51e4\u51e5\u51e6\u51e7\u51e8\u51e9\u51ea\u51eb\u51ec\u51ed\u51ee\u51ef\u51f0\u51f1\u51f2\u51f3\u51f4\u51f5\u51f6\u51f7\u51f8\u51f9\u51fa\u51fb\u51fc\u51fd\u51fe\u51ff\u5200\u5201\u5202\u5203\u5204\u5205\u5206\u5207\u5208\u5209\u520a\u520b\u520c\u520d\u520e\u520f\u5210\u5211\u5212\u5213\u5214\u5215\u5216\u5217\u5218\u5219\u521a\u521b\u521c\u521d\u521e\u521f\u5220\u5221\u5222\u5223\u5224\u5225\u5226\u5227\u5228\u5229\u522a\u522b\u522c\u522d\u522e\u522f\u5230\u5231\u5232\u5233\u5234\u5235\u5236\u5237\u5238\u5239\u523a\u523b\u523c\u523d\u523e\u523f\u5240\u5241\u5242\u5243\u5244\u5245\u5246\u5247\u5248\u5249\u524a\u524b\u524c\u524d\u524e\u524f\u5250\u5251\u5252\u5253\u5254\u5255\u5256\u5257\u5258\u5259\u525a\u525b\u525c\u525d\u525e\u525f\u5260\u5261\u5262\u5263\u5264\u5265\u5266\u5267\u5268\u5269\u526a\u526b\u526c\u526d\u526e\u526f\u5270\u5271\u5272\u5273\u5274\u5275\u5276\u5277\u5278\u5279\u527a\u527b\u527c\u527d\u527e\u527f\u5280\u5281\u5282\u5283\u5284\u5285\u5286\u5287\u5288\u5289\u528a\u528b\u528c\u528d\u528e\u528f\u5290\u5291\u5292\u5293\u5294\u5295\u5296\u5297\u5298\u5299\u529a\u529b\u529c\u529d\u529e\u529f\u52a0\u52a1\u52a2\u52a3\u52a4\u52a5\u52a6\u52a7\u52a8\u52a9\u52aa\u52ab\u52ac\u52ad\u52ae\u52af\u52b0\u52b1\u52b2\u52b3\u52b4\u52b5\u52b6\u52b7\u52b8\u52b9\u52ba\u52bb\u52bc\u52bd\u52be\u52bf\u52c0\u52c1\u52c2\u52c3\u52c4\u52c5\u52c6\u52c7\u52c8\u52c9\u52ca\u52cb\u52cc\u52cd\u52ce\u52cf\u52d0\u52d1\u52d2\u52d3\u52d4\u52d5\u52d6\u52d7\u52d8\u52d9\u52da\u52db\u52dc\u52dd\u52de\u52df\u52e0\u52e1\u52e2\u52e3\u52e4\u52e5\u52e6\u52e7\u52e8\u52e9\u52ea\u52eb\u52ec\u52ed\u52ee\u52ef\u52f0\u52f1\u52f2\u52f3\u52f4\u52f5\u52f6\u52f7\u52f8\u52f9\u52fa\u52fb\u52fc\u52fd\u52fe\u52ff\u5300\u5301\u5302\u5303\u5304\u5305\u5306\u5307\u5308\u5309\u530a\u530b\u530c\u530d\u530e\u530f\u5310\u5311\u5312\u5313\u5314\u5315\u5316\u5317\u5318\u5319\u531a\u531b\u531c\u531d\u531e\u531f\u5320\u5321\u5322\u5323\u5324\u5325\u5326\u5327\u5328\u5329\u532a\u532b\u532c\u532d\u532e\u532f\u5330\u5331\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u5339\u533a\u533b\u533c\u533d\u533e\u533f\u5340\u5341\u5342\u5343\u5344\u5345\u5346\u5347\u5348\u5349\u534a\u534b\u534c\u534d\u534e\u534f\u5350\u5351\u5352\u5353\u5354\u5355\u5356\u5357\u5358\u5359\u535a\u535b\u535c\u535d\u535e\u535f\u5360\u5361\u5362\u5363\u5364\u5365\u5366\u5367\u5368\u5369\u536a\u536b\u536c\u536d\u536e\u536f\u5370\u5371\u5372\u5373\u5374\u5375\u5376\u5377\u5378\u5379\u537a\u537b\u537c\u537d\u537e\u537f\u5380\u5381\u5382\u5383\u5384\u5385\u5386\u5387\u5388\u5389\u538a\u538b\u538c\u538d\u538e\u538f\u5390\u5391\u5392\u5393\u5394\u5395\u5396\u5397\u5398\u5399\u539a\u539b\u539c\u539d\u539e\u539f\u53a0\u53a1\u53a2\u53a3\u53a4\u53a5\u53a6\u53a7\u53a8\u53a9\u53aa\u53ab\u53ac\u53ad\u53ae\u53af\u53b0\u53b1\u53b2\u53b3\u53b4\u53b5\u53b6\u53b7\u53b8\u53b9\u53ba\u53bb\u53bc\u53bd\u53be\u53bf\u53c0\u53c1\u53c2\u53c3\u53c4\u53c5\u53c6\u53c7\u53c8\u53c9\u53ca\u53cb\u53cc\u53cd\u53ce\u53cf\u53d0\u53d1\u53d2\u53d3\u53d4\u53d5\u53d6\u53d7\u53d8\u53d9\u53da\u53db\u53dc\u53dd\u53de\u53df\u53e0\u53e1\u53e2\u53e3\u53e4\u53e5\u53e6\u53e7\u53e8\u53e9\u53ea\u53eb\u53ec\u53ed\u53ee\u53ef\u53f0\u53f1\u53f2\u53f3\u53f4\u53f5\u53f6\u53f7\u53f8\u53f9\u53fa\u53fb\u53fc\u53fd\u53fe\u53ff\u5400\u5401\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409\u540a\u540b\u540c\u540d\u540e\u540f\u5410\u5411\u5412\u5413\u5414\u5415\u5416\u5417\u5418\u5419\u541a\u541b\u541c\u541d\u541e\u541f\u5420\u5421\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429\u542a\u542b\u542c\u542d\u542e\u542f\u5430\u5431\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439\u543a\u543b\u543c\u543d\u543e\u543f\u5440\u5441\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449\u544a\u544b\u544c\u544d\u544e\u544f\u5450\u5451\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459\u545a\u545b\u545c\u545d\u545e\u545f\u5460\u5461\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469\u546a\u546b\u546c\u546d\u546e\u546f\u5470\u5471\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479\u547a\u547b\u547c\u547d\u547e\u547f\u5480\u5481\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489\u548a\u548b\u548c\u548d\u548e\u548f\u5490\u5491\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499\u549a\u549b\u549c\u549d\u549e\u549f\u54a0\u54a1\u54a2\u54a3\u54a4\u54a5\u54a6\u54a7\u54a8\u54a9\u54aa\u54ab\u54ac\u54ad\u54ae\u54af\u54b0\u54b1\u54b2\u54b3\u54b4\u54b5\u54b6\u54b7\u54b8\u54b9\u54ba\u54bb\u54bc\u54bd\u54be\u54bf\u54c0\u54c1\u54c2\u54c3\u54c4\u54c5\u54c6\u54c7\u54c8\u54c9\u54ca\u54cb\u54cc\u54cd\u54ce\u54cf\u54d0\u54d1\u54d2\u54d3\u54d4\u54d5\u54d6\u54d7\u54d8\u54d9\u54da\u54db\u54dc\u54dd\u54de\u54df\u54e0\u54e1\u54e2\u54e3\u54e4\u54e5\u54e6\u54e7\u54e8\u54e9\u54ea\u54eb\u54ec\u54ed\u54ee\u54ef\u54f0\u54f1\u54f2\u54f3\u54f4\u54f5\u54f6\u54f7\u54f8\u54f9\u54fa\u54fb\u54fc\u54fd\u54fe\u54ff\u5500\u5501\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509\u550a\u550b\u550c\u550d\u550e\u550f\u5510\u5511\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519\u551a\u551b\u551c\u551d\u551e\u551f\u5520\u5521\u5522\u5523\u5524\u5525\u5526\u5527\u5528\u5529\u552a\u552b\u552c\u552d\u552e\u552f\u5530\u5531\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539\u553a\u553b\u553c\u553d\u553e\u553f\u5540\u5541\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549\u554a\u554b\u554c\u554d\u554e\u554f\u5550\u5551\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u5559\u555a\u555b\u555c\u555d\u555e\u555f\u5560\u5561\u5562\u5563\u5564\u5565\u5566\u5567\u5568\u5569\u556a\u556b\u556c\u556d\u556e\u556f\u5570\u5571\u5572\u5573\u5574\u5575\u5576\u5577\u5578\u5579\u557a\u557b\u557c\u557d\u557e\u557f\u5580\u5581\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589\u558a\u558b\u558c\u558d\u558e\u558f\u5590\u5591\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599\u559a\u559b\u559c\u559d\u559e\u559f\u55a0\u55a1\u55a2\u55a3\u55a4\u55a5\u55a6\u55a7\u55a8\u55a9\u55aa\u55ab\u55ac\u55ad\u55ae\u55af\u55b0\u55b1\u55b2\u55b3\u55b4\u55b5\u55b6\u55b7\u55b8\u55b9\u55ba\u55bb\u55bc\u55bd\u55be\u55bf\u55c0\u55c1\u55c2\u55c3\u55c4\u55c5\u55c6\u55c7\u55c8\u55c9\u55ca\u55cb\u55cc\u55cd\u55ce\u55cf\u55d0\u55d1\u55d2\u55d3\u55d4\u55d5\u55d6\u55d7\u55d8\u55d9\u55da\u55db\u55dc\u55dd\u55de\u55df\u55e0\u55e1\u55e2\u55e3\u55e4\u55e5\u55e6\u55e7\u55e8\u55e9\u55ea\u55eb\u55ec\u55ed\u55ee\u55ef\u55f0\u55f1\u55f2\u55f3\u55f4\u55f5\u55f6\u55f7\u55f8\u55f9\u55fa\u55fb\u55fc\u55fd\u55fe\u55ff\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607\u5608\u5609\u560a\u560b\u560c\u560d\u560e\u560f\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5618\u5619\u561a\u561b\u561c\u561d\u561e\u561f\u5620\u5621\u5622\u5623\u5624\u5625\u5626\u5627\u5628\u5629\u562a\u562b\u562c\u562d\u562e\u562f\u5630\u5631\u5632\u5633\u5634\u5635\u5636\u5637\u5638\u5639\u563a\u563b\u563c\u563d\u563e\u563f\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649\u564a\u564b\u564c\u564d\u564e\u564f\u5650\u5651\u5652\u5653\u5654\u5655\u5656\u5657\u5658\u5659\u565a\u565b\u565c\u565d\u565e\u565f\u5660\u5661\u5662\u5663\u5664\u5665\u5666\u5667\u5668\u5669\u566a\u566b\u566c\u566d\u566e\u566f\u5670\u5671\u5672\u5673\u5674\u5675\u5676\u5677\u5678\u5679\u567a\u567b\u567c\u567d\u567e\u567f\u5680\u5681\u5682\u5683\u5684\u5685\u5686\u5687\u5688\u5689\u568a\u568b\u568c\u568d\u568e\u568f\u5690\u5691\u5692\u5693\u5694\u5695\u5696\u5697\u5698\u5699\u569a\u569b\u569c\u569d\u569e\u569f\u56a0\u56a1\u56a2\u56a3\u56a4\u56a5\u56a6\u56a7\u56a8\u56a9\u56aa\u56ab\u56ac\u56ad\u56ae\u56af\u56b0\u56b1\u56b2\u56b3\u56b4\u56b5\u56b6\u56b7\u56b8\u56b9\u56ba\u56bb\u56bc\u56bd\u56be\u56bf\u56c0\u56c1\u56c2\u56c3\u56c4\u56c5\u56c6\u56c7\u56c8\u56c9\u56ca\u56cb\u56cc\u56cd\u56ce\u56cf\u56d0\u56d1\u56d2\u56d3\u56d4\u56d5\u56d6\u56d7\u56d8\u56d9\u56da\u56db\u56dc\u56dd\u56de\u56df\u56e0\u56e1\u56e2\u56e3\u56e4\u56e5\u56e6\u56e7\u56e8\u56e9\u56ea\u56eb\u56ec\u56ed\u56ee\u56ef\u56f0\u56f1\u56f2\u56f3\u56f4\u56f5\u56f6\u56f7\u56f8\u56f9\u56fa\u56fb\u56fc\u56fd\u56fe\u56ff\u5700\u5701\u5702\u5703\u5704\u5705\u5706\u5707\u5708\u5709\u570a\u570b\u570c\u570d\u570e\u570f\u5710\u5711\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719\u571a\u571b\u571c\u571d\u571e\u571f\u5720\u5721\u5722\u5723\u5724\u5725\u5726\u5727\u5728\u5729\u572a\u572b\u572c\u572d\u572e\u572f\u5730\u5731\u5732\u5733\u5734\u5735\u5736\u5737\u5738\u5739\u573a\u573b\u573c\u573d\u573e\u573f\u5740\u5741\u5742\u5743\u5744\u5745\u5746\u5747\u5748\u5749\u574a\u574b\u574c\u574d\u574e\u574f\u5750\u5751\u5752\u5753\u5754\u5755\u5756\u5757\u5758\u5759\u575a\u575b\u575c\u575d\u575e\u575f\u5760\u5761\u5762\u5763\u5764\u5765\u5766\u5767\u5768\u5769\u576a\u576b\u576c\u576d\u576e\u576f\u5770\u5771\u5772\u5773\u5774\u5775\u5776\u5777\u5778\u5779\u577a\u577b\u577c\u577d\u577e\u577f\u5780\u5781\u5782\u5783\u5784\u5785\u5786\u5787\u5788\u5789\u578a\u578b\u578c\u578d\u578e\u578f\u5790\u5791\u5792\u5793\u5794\u5795\u5796\u5797\u5798\u5799\u579a\u579b\u579c\u579d\u579e\u579f\u57a0\u57a1\u57a2\u57a3\u57a4\u57a5\u57a6\u57a7\u57a8\u57a9\u57aa\u57ab\u57ac\u57ad\u57ae\u57af\u57b0\u57b1\u57b2\u57b3\u57b4\u57b5\u57b6\u57b7\u57b8\u57b9\u57ba\u57bb\u57bc\u57bd\u57be\u57bf\u57c0\u57c1\u57c2\u57c3\u57c4\u57c5\u57c6\u57c7\u57c8\u57c9\u57ca\u57cb\u57cc\u57cd\u57ce\u57cf\u57d0\u57d1\u57d2\u57d3\u57d4\u57d5\u57d6\u57d7\u57d8\u57d9\u57da\u57db\u57dc\u57dd\u57de\u57df\u57e0\u57e1\u57e2\u57e3\u57e4\u57e5\u57e6\u57e7\u57e8\u57e9\u57ea\u57eb\u57ec\u57ed\u57ee\u57ef\u57f0\u57f1\u57f2\u57f3\u57f4\u57f5\u57f6\u57f7\u57f8\u57f9\u57fa\u57fb\u57fc\u57fd\u57fe\u57ff\u5800\u5801\u5802\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580a\u580b\u580c\u580d\u580e\u580f\u5810\u5811\u5812\u5813\u5814\u5815\u5816\u5817\u5818\u5819\u581a\u581b\u581c\u581d\u581e\u581f\u5820\u5821\u5822\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582a\u582b\u582c\u582d\u582e\u582f\u5830\u5831\u5832\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583a\u583b\u583c\u583d\u583e\u583f\u5840\u5841\u5842\u5843\u5844\u5845\u5846\u5847\u5848\u5849\u584a\u584b\u584c\u584d\u584e\u584f\u5850\u5851\u5852\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585a\u585b\u585c\u585d\u585e\u585f\u5860\u5861\u5862\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586a\u586b\u586c\u586d\u586e\u586f\u5870\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587a\u587b\u587c\u587d\u587e\u587f\u5880\u5881\u5882\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588a\u588b\u588c\u588d\u588e\u588f\u5890\u5891\u5892\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u589a\u589b\u589c\u589d\u589e\u589f\u58a0\u58a1\u58a2\u58a3\u58a4\u58a5\u58a6\u58a7\u58a8\u58a9\u58aa\u58ab\u58ac\u58ad\u58ae\u58af\u58b0\u58b1\u58b2\u58b3\u58b4\u58b5\u58b6\u58b7\u58b8\u58b9\u58ba\u58bb\u58bc\u58bd\u58be\u58bf\u58c0\u58c1\u58c2\u58c3\u58c4\u58c5\u58c6\u58c7\u58c8\u58c9\u58ca\u58cb\u58cc\u58cd\u58ce\u58cf\u58d0\u58d1\u58d2\u58d3\u58d4\u58d5\u58d6\u58d7\u58d8\u58d9\u58da\u58db\u58dc\u58dd\u58de\u58df\u58e0\u58e1\u58e2\u58e3\u58e4\u58e5\u58e6\u58e7\u58e8\u58e9\u58ea\u58eb\u58ec\u58ed\u58ee\u58ef\u58f0\u58f1\u58f2\u58f3\u58f4\u58f5\u58f6\u58f7\u58f8\u58f9\u58fa\u58fb\u58fc\u58fd\u58fe\u58ff\u5900\u5901\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u5909\u590a\u590b\u590c\u590d\u590e\u590f\u5910\u5911\u5912\u5913\u5914\u5915\u5916\u5917\u5918\u5919\u591a\u591b\u591c\u591d\u591e\u591f\u5920\u5921\u5922\u5923\u5924\u5925\u5926\u5927\u5928\u5929\u592a\u592b\u592c\u592d\u592e\u592f\u5930\u5931\u5932\u5933\u5934\u5935\u5936\u5937\u5938\u5939\u593a\u593b\u593c\u593d\u593e\u593f\u5940\u5941\u5942\u5943\u5944\u5945\u5946\u5947\u5948\u5949\u594a\u594b\u594c\u594d\u594e\u594f\u5950\u5951\u5952\u5953\u5954\u5955\u5956\u5957\u5958\u5959\u595a\u595b\u595c\u595d\u595e\u595f\u5960\u5961\u5962\u5963\u5964\u5965\u5966\u5967\u5968\u5969\u596a\u596b\u596c\u596d\u596e\u596f\u5970\u5971\u5972\u5973\u5974\u5975\u5976\u5977\u5978\u5979\u597a\u597b\u597c\u597d\u597e\u597f\u5980\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988\u5989\u598a\u598b\u598c\u598d\u598e\u598f\u5990\u5991\u5992\u5993\u5994\u5995\u5996\u5997\u5998\u5999\u599a\u599b\u599c\u599d\u599e\u599f\u59a0\u59a1\u59a2\u59a3\u59a4\u59a5\u59a6\u59a7\u59a8\u59a9\u59aa\u59ab\u59ac\u59ad\u59ae\u59af\u59b0\u59b1\u59b2\u59b3\u59b4\u59b5\u59b6\u59b7\u59b8\u59b9\u59ba\u59bb\u59bc\u59bd\u59be\u59bf\u59c0\u59c1\u59c2\u59c3\u59c4\u59c5\u59c6\u59c7\u59c8\u59c9\u59ca\u59cb\u59cc\u59cd\u59ce\u59cf\u59d0\u59d1\u59d2\u59d3\u59d4\u59d5\u59d6\u59d7\u59d8\u59d9\u59da\u59db\u59dc\u59dd\u59de\u59df\u59e0\u59e1\u59e2\u59e3\u59e4\u59e5\u59e6\u59e7\u59e8\u59e9\u59ea\u59eb\u59ec\u59ed\u59ee\u59ef\u59f0\u59f1\u59f2\u59f3\u59f4\u59f5\u59f6\u59f7\u59f8\u59f9\u59fa\u59fb\u59fc\u59fd\u59fe\u59ff\u5a00\u5a01\u5a02\u5a03\u5a04\u5a05\u5a06\u5a07\u5a08\u5a09\u5a0a\u5a0b\u5a0c\u5a0d\u5a0e\u5a0f\u5a10\u5a11\u5a12\u5a13\u5a14\u5a15\u5a16\u5a17\u5a18\u5a19\u5a1a\u5a1b\u5a1c\u5a1d\u5a1e\u5a1f\u5a20\u5a21\u5a22\u5a23\u5a24\u5a25\u5a26\u5a27\u5a28\u5a29\u5a2a\u5a2b\u5a2c\u5a2d\u5a2e\u5a2f\u5a30\u5a31\u5a32\u5a33\u5a34\u5a35\u5a36\u5a37\u5a38\u5a39\u5a3a\u5a3b\u5a3c\u5a3d\u5a3e\u5a3f\u5a40\u5a41\u5a42\u5a43\u5a44\u5a45\u5a46\u5a47\u5a48\u5a49\u5a4a\u5a4b\u5a4c\u5a4d\u5a4e\u5a4f\u5a50\u5a51\u5a52\u5a53\u5a54\u5a55\u5a56\u5a57\u5a58\u5a59\u5a5a\u5a5b\u5a5c\u5a5d\u5a5e\u5a5f\u5a60\u5a61\u5a62\u5a63\u5a64\u5a65\u5a66\u5a67\u5a68\u5a69\u5a6a\u5a6b\u5a6c\u5a6d\u5a6e\u5a6f\u5a70\u5a71\u5a72\u5a73\u5a74\u5a75\u5a76\u5a77\u5a78\u5a79\u5a7a\u5a7b\u5a7c\u5a7d\u5a7e\u5a7f\u5a80\u5a81\u5a82\u5a83\u5a84\u5a85\u5a86\u5a87\u5a88\u5a89\u5a8a\u5a8b\u5a8c\u5a8d\u5a8e\u5a8f\u5a90\u5a91\u5a92\u5a93\u5a94\u5a95\u5a96\u5a97\u5a98\u5a99\u5a9a\u5a9b\u5a9c\u5a9d\u5a9e\u5a9f\u5aa0\u5aa1\u5aa2\u5aa3\u5aa4\u5aa5\u5aa6\u5aa7\u5aa8\u5aa9\u5aaa\u5aab\u5aac\u5aad\u5aae\u5aaf\u5ab0\u5ab1\u5ab2\u5ab3\u5ab4\u5ab5\u5ab6\u5ab7\u5ab8\u5ab9\u5aba\u5abb\u5abc\u5abd\u5abe\u5abf\u5ac0\u5ac1\u5ac2\u5ac3\u5ac4\u5ac5\u5ac6\u5ac7\u5ac8\u5ac9\u5aca\u5acb\u5acc\u5acd\u5ace\u5acf\u5ad0\u5ad1\u5ad2\u5ad3\u5ad4\u5ad5\u5ad6\u5ad7\u5ad8\u5ad9\u5ada\u5adb\u5adc\u5add\u5ade\u5adf\u5ae0\u5ae1\u5ae2\u5ae3\u5ae4\u5ae5\u5ae6\u5ae7\u5ae8\u5ae9\u5aea\u5aeb\u5aec\u5aed\u5aee\u5aef\u5af0\u5af1\u5af2\u5af3\u5af4\u5af5\u5af6\u5af7\u5af8\u5af9\u5afa\u5afb\u5afc\u5afd\u5afe\u5aff\u5b00\u5b01\u5b02\u5b03\u5b04\u5b05\u5b06\u5b07\u5b08\u5b09\u5b0a\u5b0b\u5b0c\u5b0d\u5b0e\u5b0f\u5b10\u5b11\u5b12\u5b13\u5b14\u5b15\u5b16\u5b17\u5b18\u5b19\u5b1a\u5b1b\u5b1c\u5b1d\u5b1e\u5b1f\u5b20\u5b21\u5b22\u5b23\u5b24\u5b25\u5b26\u5b27\u5b28\u5b29\u5b2a\u5b2b\u5b2c\u5b2d\u5b2e\u5b2f\u5b30\u5b31\u5b32\u5b33\u5b34\u5b35\u5b36\u5b37\u5b38\u5b39\u5b3a\u5b3b\u5b3c\u5b3d\u5b3e\u5b3f\u5b40\u5b41\u5b42\u5b43\u5b44\u5b45\u5b46\u5b47\u5b48\u5b49\u5b4a\u5b4b\u5b4c\u5b4d\u5b4e\u5b4f\u5b50\u5b51\u5b52\u5b53\u5b54\u5b55\u5b56\u5b57\u5b58\u5b59\u5b5a\u5b5b\u5b5c\u5b5d\u5b5e\u5b5f\u5b60\u5b61\u5b62\u5b63\u5b64\u5b65\u5b66\u5b67\u5b68\u5b69\u5b6a\u5b6b\u5b6c\u5b6d\u5b6e\u5b6f\u5b70\u5b71\u5b72\u5b73\u5b74\u5b75\u5b76\u5b77\u5b78\u5b79\u5b7a\u5b7b\u5b7c\u5b7d\u5b7e\u5b7f\u5b80\u5b81\u5b82\u5b83\u5b84\u5b85\u5b86\u5b87\u5b88\u5b89\u5b8a\u5b8b\u5b8c\u5b8d\u5b8e\u5b8f\u5b90\u5b91\u5b92\u5b93\u5b94\u5b95\u5b96\u5b97\u5b98\u5b99\u5b9a\u5b9b\u5b9c\u5b9d\u5b9e\u5b9f\u5ba0\u5ba1\u5ba2\u5ba3\u5ba4\u5ba5\u5ba6\u5ba7\u5ba8\u5ba9\u5baa\u5bab\u5bac\u5bad\u5bae\u5baf\u5bb0\u5bb1\u5bb2\u5bb3\u5bb4\u5bb5\u5bb6\u5bb7\u5bb8\u5bb9\u5bba\u5bbb\u5bbc\u5bbd\u5bbe\u5bbf\u5bc0\u5bc1\u5bc2\u5bc3\u5bc4\u5bc5\u5bc6\u5bc7\u5bc8\u5bc9\u5bca\u5bcb\u5bcc\u5bcd\u5bce\u5bcf\u5bd0\u5bd1\u5bd2\u5bd3\u5bd4\u5bd5\u5bd6\u5bd7\u5bd8\u5bd9\u5bda\u5bdb\u5bdc\u5bdd\u5bde\u5bdf\u5be0\u5be1\u5be2\u5be3\u5be4\u5be5\u5be6\u5be7\u5be8\u5be9\u5bea\u5beb\u5bec\u5bed\u5bee\u5bef\u5bf0\u5bf1\u5bf2\u5bf3\u5bf4\u5bf5\u5bf6\u5bf7\u5bf8\u5bf9\u5bfa\u5bfb\u5bfc\u5bfd\u5bfe\u5bff\u5c00\u5c01\u5c02\u5c03\u5c04\u5c05\u5c06\u5c07\u5c08\u5c09\u5c0a\u5c0b\u5c0c\u5c0d\u5c0e\u5c0f\u5c10\u5c11\u5c12\u5c13\u5c14\u5c15\u5c16\u5c17\u5c18\u5c19\u5c1a\u5c1b\u5c1c\u5c1d\u5c1e\u5c1f\u5c20\u5c21\u5c22\u5c23\u5c24\u5c25\u5c26\u5c27\u5c28\u5c29\u5c2a\u5c2b\u5c2c\u5c2d\u5c2e\u5c2f\u5c30\u5c31\u5c32\u5c33\u5c34\u5c35\u5c36\u5c37\u5c38\u5c39\u5c3a\u5c3b\u5c3c\u5c3d\u5c3e\u5c3f\u5c40\u5c41\u5c42\u5c43\u5c44\u5c45\u5c46\u5c47\u5c48\u5c49\u5c4a\u5c4b\u5c4c\u5c4d\u5c4e\u5c4f\u5c50\u5c51\u5c52\u5c53\u5c54\u5c55\u5c56\u5c57\u5c58\u5c59\u5c5a\u5c5b\u5c5c\u5c5d\u5c5e\u5c5f\u5c60\u5c61\u5c62\u5c63\u5c64\u5c65\u5c66\u5c67\u5c68\u5c69\u5c6a\u5c6b\u5c6c\u5c6d\u5c6e\u5c6f\u5c70\u5c71\u5c72\u5c73\u5c74\u5c75\u5c76\u5c77\u5c78\u5c79\u5c7a\u5c7b\u5c7c\u5c7d\u5c7e\u5c7f\u5c80\u5c81\u5c82\u5c83\u5c84\u5c85\u5c86\u5c87\u5c88\u5c89\u5c8a\u5c8b\u5c8c\u5c8d\u5c8e\u5c8f\u5c90\u5c91\u5c92\u5c93\u5c94\u5c95\u5c96\u5c97\u5c98\u5c99\u5c9a\u5c9b\u5c9c\u5c9d\u5c9e\u5c9f\u5ca0\u5ca1\u5ca2\u5ca3\u5ca4\u5ca5\u5ca6\u5ca7\u5ca8\u5ca9\u5caa\u5cab\u5cac\u5cad\u5cae\u5caf\u5cb0\u5cb1\u5cb2\u5cb3\u5cb4\u5cb5\u5cb6\u5cb7\u5cb8\u5cb9\u5cba\u5cbb\u5cbc\u5cbd\u5cbe\u5cbf\u5cc0\u5cc1\u5cc2\u5cc3\u5cc4\u5cc5\u5cc6\u5cc7\u5cc8\u5cc9\u5cca\u5ccb\u5ccc\u5ccd\u5cce\u5ccf\u5cd0\u5cd1\u5cd2\u5cd3\u5cd4\u5cd5\u5cd6\u5cd7\u5cd8\u5cd9\u5cda\u5cdb\u5cdc\u5cdd\u5cde\u5cdf\u5ce0\u5ce1\u5ce2\u5ce3\u5ce4\u5ce5\u5ce6\u5ce7\u5ce8\u5ce9\u5cea\u5ceb\u5cec\u5ced\u5cee\u5cef\u5cf0\u5cf1\u5cf2\u5cf3\u5cf4\u5cf5\u5cf6\u5cf7\u5cf8\u5cf9\u5cfa\u5cfb\u5cfc\u5cfd\u5cfe\u5cff\u5d00\u5d01\u5d02\u5d03\u5d04\u5d05\u5d06\u5d07\u5d08\u5d09\u5d0a\u5d0b\u5d0c\u5d0d\u5d0e\u5d0f\u5d10\u5d11\u5d12\u5d13\u5d14\u5d15\u5d16\u5d17\u5d18\u5d19\u5d1a\u5d1b\u5d1c\u5d1d\u5d1e\u5d1f\u5d20\u5d21\u5d22\u5d23\u5d24\u5d25\u5d26\u5d27\u5d28\u5d29\u5d2a\u5d2b\u5d2c\u5d2d\u5d2e\u5d2f\u5d30\u5d31\u5d32\u5d33\u5d34\u5d35\u5d36\u5d37\u5d38\u5d39\u5d3a\u5d3b\u5d3c\u5d3d\u5d3e\u5d3f\u5d40\u5d41\u5d42\u5d43\u5d44\u5d45\u5d46\u5d47\u5d48\u5d49\u5d4a\u5d4b\u5d4c\u5d4d\u5d4e\u5d4f\u5d50\u5d51\u5d52\u5d53\u5d54\u5d55\u5d56\u5d57\u5d58\u5d59\u5d5a\u5d5b\u5d5c\u5d5d\u5d5e\u5d5f\u5d60\u5d61\u5d62\u5d63\u5d64\u5d65\u5d66\u5d67\u5d68\u5d69\u5d6a\u5d6b\u5d6c\u5d6d\u5d6e\u5d6f\u5d70\u5d71\u5d72\u5d73\u5d74\u5d75\u5d76\u5d77\u5d78\u5d79\u5d7a\u5d7b\u5d7c\u5d7d\u5d7e\u5d7f\u5d80\u5d81\u5d82\u5d83\u5d84\u5d85\u5d86\u5d87\u5d88\u5d89\u5d8a\u5d8b\u5d8c\u5d8d\u5d8e\u5d8f\u5d90\u5d91\u5d92\u5d93\u5d94\u5d95\u5d96\u5d97\u5d98\u5d99\u5d9a\u5d9b\u5d9c\u5d9d\u5d9e\u5d9f\u5da0\u5da1\u5da2\u5da3\u5da4\u5da5\u5da6\u5da7\u5da8\u5da9\u5daa\u5dab\u5dac\u5dad\u5dae\u5daf\u5db0\u5db1\u5db2\u5db3\u5db4\u5db5\u5db6\u5db7\u5db8\u5db9\u5dba\u5dbb\u5dbc\u5dbd\u5dbe\u5dbf\u5dc0\u5dc1\u5dc2\u5dc3\u5dc4\u5dc5\u5dc6\u5dc7\u5dc8\u5dc9\u5dca\u5dcb\u5dcc\u5dcd\u5dce\u5dcf\u5dd0\u5dd1\u5dd2\u5dd3\u5dd4\u5dd5\u5dd6\u5dd7\u5dd8\u5dd9\u5dda\u5ddb\u5ddc\u5ddd\u5dde\u5ddf\u5de0\u5de1\u5de2\u5de3\u5de4\u5de5\u5de6\u5de7\u5de8\u5de9\u5dea\u5deb\u5dec\u5ded\u5dee\u5def\u5df0\u5df1\u5df2\u5df3\u5df4\u5df5\u5df6\u5df7\u5df8\u5df9\u5dfa\u5dfb\u5dfc\u5dfd\u5dfe\u5dff\u5e00\u5e01\u5e02\u5e03\u5e04\u5e05\u5e06\u5e07\u5e08\u5e09\u5e0a\u5e0b\u5e0c\u5e0d\u5e0e\u5e0f\u5e10\u5e11\u5e12\u5e13\u5e14\u5e15\u5e16\u5e17\u5e18\u5e19\u5e1a\u5e1b\u5e1c\u5e1d\u5e1e\u5e1f\u5e20\u5e21\u5e22\u5e23\u5e24\u5e25\u5e26\u5e27\u5e28\u5e29\u5e2a\u5e2b\u5e2c\u5e2d\u5e2e\u5e2f\u5e30\u5e31\u5e32\u5e33\u5e34\u5e35\u5e36\u5e37\u5e38\u5e39\u5e3a\u5e3b\u5e3c\u5e3d\u5e3e\u5e3f\u5e40\u5e41\u5e42\u5e43\u5e44\u5e45\u5e46\u5e47\u5e48\u5e49\u5e4a\u5e4b\u5e4c\u5e4d\u5e4e\u5e4f\u5e50\u5e51\u5e52\u5e53\u5e54\u5e55\u5e56\u5e57\u5e58\u5e59\u5e5a\u5e5b\u5e5c\u5e5d\u5e5e\u5e5f\u5e60\u5e61\u5e62\u5e63\u5e64\u5e65\u5e66\u5e67\u5e68\u5e69\u5e6a\u5e6b\u5e6c\u5e6d\u5e6e\u5e6f\u5e70\u5e71\u5e72\u5e73\u5e74\u5e75\u5e76\u5e77\u5e78\u5e79\u5e7a\u5e7b\u5e7c\u5e7d\u5e7e\u5e7f\u5e80\u5e81\u5e82\u5e83\u5e84\u5e85\u5e86\u5e87\u5e88\u5e89\u5e8a\u5e8b\u5e8c\u5e8d\u5e8e\u5e8f\u5e90\u5e91\u5e92\u5e93\u5e94\u5e95\u5e96\u5e97\u5e98\u5e99\u5e9a\u5e9b\u5e9c\u5e9d\u5e9e\u5e9f\u5ea0\u5ea1\u5ea2\u5ea3\u5ea4\u5ea5\u5ea6\u5ea7\u5ea8\u5ea9\u5eaa\u5eab\u5eac\u5ead\u5eae\u5eaf\u5eb0\u5eb1\u5eb2\u5eb3\u5eb4\u5eb5\u5eb6\u5eb7\u5eb8\u5eb9\u5eba\u5ebb\u5ebc\u5ebd\u5ebe\u5ebf\u5ec0\u5ec1\u5ec2\u5ec3\u5ec4\u5ec5\u5ec6\u5ec7\u5ec8\u5ec9\u5eca\u5ecb\u5ecc\u5ecd\u5ece\u5ecf\u5ed0\u5ed1\u5ed2\u5ed3\u5ed4\u5ed5\u5ed6\u5ed7\u5ed8\u5ed9\u5eda\u5edb\u5edc\u5edd\u5ede\u5edf\u5ee0\u5ee1\u5ee2\u5ee3\u5ee4\u5ee5\u5ee6\u5ee7\u5ee8\u5ee9\u5eea\u5eeb\u5eec\u5eed\u5eee\u5eef\u5ef0\u5ef1\u5ef2\u5ef3\u5ef4\u5ef5\u5ef6\u5ef7\u5ef8\u5ef9\u5efa\u5efb\u5efc\u5efd\u5efe\u5eff\u5f00\u5f01\u5f02\u5f03\u5f04\u5f05\u5f06\u5f07\u5f08\u5f09\u5f0a\u5f0b\u5f0c\u5f0d\u5f0e\u5f0f\u5f10\u5f11\u5f12\u5f13\u5f14\u5f15\u5f16\u5f17\u5f18\u5f19\u5f1a\u5f1b\u5f1c\u5f1d\u5f1e\u5f1f\u5f20\u5f21\u5f22\u5f23\u5f24\u5f25\u5f26\u5f27\u5f28\u5f29\u5f2a\u5f2b\u5f2c\u5f2d\u5f2e\u5f2f\u5f30\u5f31\u5f32\u5f33\u5f34\u5f35\u5f36\u5f37\u5f38\u5f39\u5f3a\u5f3b\u5f3c\u5f3d\u5f3e\u5f3f\u5f40\u5f41\u5f42\u5f43\u5f44\u5f45\u5f46\u5f47\u5f48\u5f49\u5f4a\u5f4b\u5f4c\u5f4d\u5f4e\u5f4f\u5f50\u5f51\u5f52\u5f53\u5f54\u5f55\u5f56\u5f57\u5f58\u5f59\u5f5a\u5f5b\u5f5c\u5f5d\u5f5e\u5f5f\u5f60\u5f61\u5f62\u5f63\u5f64\u5f65\u5f66\u5f67\u5f68\u5f69\u5f6a\u5f6b\u5f6c\u5f6d\u5f6e\u5f6f\u5f70\u5f71\u5f72\u5f73\u5f74\u5f75\u5f76\u5f77\u5f78\u5f79\u5f7a\u5f7b\u5f7c\u5f7d\u5f7e\u5f7f\u5f80\u5f81\u5f82\u5f83\u5f84\u5f85\u5f86\u5f87\u5f88\u5f89\u5f8a\u5f8b\u5f8c\u5f8d\u5f8e\u5f8f\u5f90\u5f91\u5f92\u5f93\u5f94\u5f95\u5f96\u5f97\u5f98\u5f99\u5f9a\u5f9b\u5f9c\u5f9d\u5f9e\u5f9f\u5fa0\u5fa1\u5fa2\u5fa3\u5fa4\u5fa5\u5fa6\u5fa7\u5fa8\u5fa9\u5faa\u5fab\u5fac\u5fad\u5fae\u5faf\u5fb0\u5fb1\u5fb2\u5fb3\u5fb4\u5fb5\u5fb6\u5fb7\u5fb8\u5fb9\u5fba\u5fbb\u5fbc\u5fbd\u5fbe\u5fbf\u5fc0\u5fc1\u5fc2\u5fc3\u5fc4\u5fc5\u5fc6\u5fc7\u5fc8\u5fc9\u5fca\u5fcb\u5fcc\u5fcd\u5fce\u5fcf\u5fd0\u5fd1\u5fd2\u5fd3\u5fd4\u5fd5\u5fd6\u5fd7\u5fd8\u5fd9\u5fda\u5fdb\u5fdc\u5fdd\u5fde\u5fdf\u5fe0\u5fe1\u5fe2\u5fe3\u5fe4\u5fe5\u5fe6\u5fe7\u5fe8\u5fe9\u5fea\u5feb\u5fec\u5fed\u5fee\u5fef\u5ff0\u5ff1\u5ff2\u5ff3\u5ff4\u5ff5\u5ff6\u5ff7\u5ff8\u5ff9\u5ffa\u5ffb\u5ffc\u5ffd\u5ffe\u5fff\u6000\u6001\u6002\u6003\u6004\u6005\u6006\u6007\u6008\u6009\u600a\u600b\u600c\u600d\u600e\u600f\u6010\u6011\u6012\u6013\u6014\u6015\u6016\u6017\u6018\u6019\u601a\u601b\u601c\u601d\u601e\u601f\u6020\u6021\u6022\u6023\u6024\u6025\u6026\u6027\u6028\u6029\u602a\u602b\u602c\u602d\u602e\u602f\u6030\u6031\u6032\u6033\u6034\u6035\u6036\u6037\u6038\u6039\u603a\u603b\u603c\u603d\u603e\u603f\u6040\u6041\u6042\u6043\u6044\u6045\u6046\u6047\u6048\u6049\u604a\u604b\u604c\u604d\u604e\u604f\u6050\u6051\u6052\u6053\u6054\u6055\u6056\u6057\u6058\u6059\u605a\u605b\u605c\u605d\u605e\u605f\u6060\u6061\u6062\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606a\u606b\u606c\u606d\u606e\u606f\u6070\u6071\u6072\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607a\u607b\u607c\u607d\u607e\u607f\u6080\u6081\u6082\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608a\u608b\u608c\u608d\u608e\u608f\u6090\u6091\u6092\u6093\u6094\u6095\u6096\u6097\u6098\u6099\u609a\u609b\u609c\u609d\u609e\u609f\u60a0\u60a1\u60a2\u60a3\u60a4\u60a5\u60a6\u60a7\u60a8\u60a9\u60aa\u60ab\u60ac\u60ad\u60ae\u60af\u60b0\u60b1\u60b2\u60b3\u60b4\u60b5\u60b6\u60b7\u60b8\u60b9\u60ba\u60bb\u60bc\u60bd\u60be\u60bf\u60c0\u60c1\u60c2\u60c3\u60c4\u60c5\u60c6\u60c7\u60c8\u60c9\u60ca\u60cb\u60cc\u60cd\u60ce\u60cf\u60d0\u60d1\u60d2\u60d3\u60d4\u60d5\u60d6\u60d7\u60d8\u60d9\u60da\u60db\u60dc\u60dd\u60de\u60df\u60e0\u60e1\u60e2\u60e3\u60e4\u60e5\u60e6\u60e7\u60e8\u60e9\u60ea\u60eb\u60ec\u60ed\u60ee\u60ef\u60f0\u60f1\u60f2\u60f3\u60f4\u60f5\u60f6\u60f7\u60f8\u60f9\u60fa\u60fb\u60fc\u60fd\u60fe\u60ff\u6100\u6101\u6102\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610a\u610b\u610c\u610d\u610e\u610f\u6110\u6111\u6112\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611a\u611b\u611c\u611d\u611e\u611f\u6120\u6121\u6122\u6123\u6124\u6125\u6126\u6127\u6128\u6129\u612a\u612b\u612c\u612d\u612e\u612f\u6130\u6131\u6132\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613a\u613b\u613c\u613d\u613e\u613f\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147\u6148\u6149\u614a\u614b\u614c\u614d\u614e\u614f\u6150\u6151\u6152\u6153\u6154\u6155\u6156\u6157\u6158\u6159\u615a\u615b\u615c\u615d\u615e\u615f\u6160\u6161\u6162\u6163\u6164\u6165\u6166\u6167\u6168\u6169\u616a\u616b\u616c\u616d\u616e\u616f\u6170\u6171\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179\u617a\u617b\u617c\u617d\u617e\u617f\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189\u618a\u618b\u618c\u618d\u618e\u618f\u6190\u6191\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199\u619a\u619b\u619c\u619d\u619e\u619f\u61a0\u61a1\u61a2\u61a3\u61a4\u61a5\u61a6\u61a7\u61a8\u61a9\u61aa\u61ab\u61ac\u61ad\u61ae\u61af\u61b0\u61b1\u61b2\u61b3\u61b4\u61b5\u61b6\u61b7\u61b8\u61b9\u61ba\u61bb\u61bc\u61bd\u61be\u61bf\u61c0\u61c1\u61c2\u61c3\u61c4\u61c5\u61c6\u61c7\u61c8\u61c9\u61ca\u61cb\u61cc\u61cd\u61ce\u61cf\u61d0\u61d1\u61d2\u61d3\u61d4\u61d5\u61d6\u61d7\u61d8\u61d9\u61da\u61db\u61dc\u61dd\u61de\u61df\u61e0\u61e1\u61e2\u61e3\u61e4\u61e5\u61e6\u61e7\u61e8\u61e9\u61ea\u61eb\u61ec\u61ed\u61ee\u61ef\u61f0\u61f1\u61f2\u61f3\u61f4\u61f5\u61f6\u61f7\u61f8\u61f9\u61fa\u61fb\u61fc\u61fd\u61fe\u61ff\u6200\u6201\u6202\u6203\u6204\u6205\u6206\u6207\u6208\u6209\u620a\u620b\u620c\u620d\u620e\u620f\u6210\u6211\u6212\u6213\u6214\u6215\u6216\u6217\u6218\u6219\u621a\u621b\u621c\u621d\u621e\u621f\u6220\u6221\u6222\u6223\u6224\u6225\u6226\u6227\u6228\u6229\u622a\u622b\u622c\u622d\u622e\u622f\u6230\u6231\u6232\u6233\u6234\u6235\u6236\u6237\u6238\u6239\u623a\u623b\u623c\u623d\u623e\u623f\u6240\u6241\u6242\u6243\u6244\u6245\u6246\u6247\u6248\u6249\u624a\u624b\u624c\u624d\u624e\u624f\u6250\u6251\u6252\u6253\u6254\u6255\u6256\u6257\u6258\u6259\u625a\u625b\u625c\u625d\u625e\u625f\u6260\u6261\u6262\u6263\u6264\u6265\u6266\u6267\u6268\u6269\u626a\u626b\u626c\u626d\u626e\u626f\u6270\u6271\u6272\u6273\u6274\u6275\u6276\u6277\u6278\u6279\u627a\u627b\u627c\u627d\u627e\u627f\u6280\u6281\u6282\u6283\u6284\u6285\u6286\u6287\u6288\u6289\u628a\u628b\u628c\u628d\u628e\u628f\u6290\u6291\u6292\u6293\u6294\u6295\u6296\u6297\u6298\u6299\u629a\u629b\u629c\u629d\u629e\u629f\u62a0\u62a1\u62a2\u62a3\u62a4\u62a5\u62a6\u62a7\u62a8\u62a9\u62aa\u62ab\u62ac\u62ad\u62ae\u62af\u62b0\u62b1\u62b2\u62b3\u62b4\u62b5\u62b6\u62b7\u62b8\u62b9\u62ba\u62bb\u62bc\u62bd\u62be\u62bf\u62c0\u62c1\u62c2\u62c3\u62c4\u62c5\u62c6\u62c7\u62c8\u62c9\u62ca\u62cb\u62cc\u62cd\u62ce\u62cf\u62d0\u62d1\u62d2\u62d3\u62d4\u62d5\u62d6\u62d7\u62d8\u62d9\u62da\u62db\u62dc\u62dd\u62de\u62df\u62e0\u62e1\u62e2\u62e3\u62e4\u62e5\u62e6\u62e7\u62e8\u62e9\u62ea\u62eb\u62ec\u62ed\u62ee\u62ef\u62f0\u62f1\u62f2\u62f3\u62f4\u62f5\u62f6\u62f7\u62f8\u62f9\u62fa\u62fb\u62fc\u62fd\u62fe\u62ff\u6300\u6301\u6302\u6303\u6304\u6305\u6306\u6307\u6308\u6309\u630a\u630b\u630c\u630d\u630e\u630f\u6310\u6311\u6312\u6313\u6314\u6315\u6316\u6317\u6318\u6319\u631a\u631b\u631c\u631d\u631e\u631f\u6320\u6321\u6322\u6323\u6324\u6325\u6326\u6327\u6328\u6329\u632a\u632b\u632c\u632d\u632e\u632f\u6330\u6331\u6332\u6333\u6334\u6335\u6336\u6337\u6338\u6339\u633a\u633b\u633c\u633d\u633e\u633f\u6340\u6341\u6342\u6343\u6344\u6345\u6346\u6347\u6348\u6349\u634a\u634b\u634c\u634d\u634e\u634f\u6350\u6351\u6352\u6353\u6354\u6355\u6356\u6357\u6358\u6359\u635a\u635b\u635c\u635d\u635e\u635f\u6360\u6361\u6362\u6363\u6364\u6365\u6366\u6367\u6368\u6369\u636a\u636b\u636c\u636d\u636e\u636f\u6370\u6371\u6372\u6373\u6374\u6375\u6376\u6377\u6378\u6379\u637a\u637b\u637c\u637d\u637e\u637f\u6380\u6381\u6382\u6383\u6384\u6385\u6386\u6387\u6388\u6389\u638a\u638b\u638c\u638d\u638e\u638f\u6390\u6391\u6392\u6393\u6394\u6395\u6396\u6397\u6398\u6399\u639a\u639b\u639c\u639d\u639e\u639f\u63a0\u63a1\u63a2\u63a3\u63a4\u63a5\u63a6\u63a7\u63a8\u63a9\u63aa\u63ab\u63ac\u63ad\u63ae\u63af\u63b0\u63b1\u63b2\u63b3\u63b4\u63b5\u63b6\u63b7\u63b8\u63b9\u63ba\u63bb\u63bc\u63bd\u63be\u63bf\u63c0\u63c1\u63c2\u63c3\u63c4\u63c5\u63c6\u63c7\u63c8\u63c9\u63ca\u63cb\u63cc\u63cd\u63ce\u63cf\u63d0\u63d1\u63d2\u63d3\u63d4\u63d5\u63d6\u63d7\u63d8\u63d9\u63da\u63db\u63dc\u63dd\u63de\u63df\u63e0\u63e1\u63e2\u63e3\u63e4\u63e5\u63e6\u63e7\u63e8\u63e9\u63ea\u63eb\u63ec\u63ed\u63ee\u63ef\u63f0\u63f1\u63f2\u63f3\u63f4\u63f5\u63f6\u63f7\u63f8\u63f9\u63fa\u63fb\u63fc\u63fd\u63fe\u63ff\u6400\u6401\u6402\u6403\u6404\u6405\u6406\u6407\u6408\u6409\u640a\u640b\u640c\u640d\u640e\u640f\u6410\u6411\u6412\u6413\u6414\u6415\u6416\u6417\u6418\u6419\u641a\u641b\u641c\u641d\u641e\u641f\u6420\u6421\u6422\u6423\u6424\u6425\u6426\u6427\u6428\u6429\u642a\u642b\u642c\u642d\u642e\u642f\u6430\u6431\u6432\u6433\u6434\u6435\u6436\u6437\u6438\u6439\u643a\u643b\u643c\u643d\u643e\u643f\u6440\u6441\u6442\u6443\u6444\u6445\u6446\u6447\u6448\u6449\u644a\u644b\u644c\u644d\u644e\u644f\u6450\u6451\u6452\u6453\u6454\u6455\u6456\u6457\u6458\u6459\u645a\u645b\u645c\u645d\u645e\u645f\u6460\u6461\u6462\u6463\u6464\u6465\u6466\u6467\u6468\u6469\u646a\u646b\u646c\u646d\u646e\u646f\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u6478\u6479\u647a\u647b\u647c\u647d\u647e\u647f\u6480\u6481\u6482\u6483\u6484\u6485\u6486\u6487\u6488\u6489\u648a\u648b\u648c\u648d\u648e\u648f\u6490\u6491\u6492\u6493\u6494\u6495\u6496\u6497\u6498\u6499\u649a\u649b\u649c\u649d\u649e\u649f\u64a0\u64a1\u64a2\u64a3\u64a4\u64a5\u64a6\u64a7\u64a8\u64a9\u64aa\u64ab\u64ac\u64ad\u64ae\u64af\u64b0\u64b1\u64b2\u64b3\u64b4\u64b5\u64b6\u64b7\u64b8\u64b9\u64ba\u64bb\u64bc\u64bd\u64be\u64bf\u64c0\u64c1\u64c2\u64c3\u64c4\u64c5\u64c6\u64c7\u64c8\u64c9\u64ca\u64cb\u64cc\u64cd\u64ce\u64cf\u64d0\u64d1\u64d2\u64d3\u64d4\u64d5\u64d6\u64d7\u64d8\u64d9\u64da\u64db\u64dc\u64dd\u64de\u64df\u64e0\u64e1\u64e2\u64e3\u64e4\u64e5\u64e6\u64e7\u64e8\u64e9\u64ea\u64eb\u64ec\u64ed\u64ee\u64ef\u64f0\u64f1\u64f2\u64f3\u64f4\u64f5\u64f6\u64f7\u64f8\u64f9\u64fa\u64fb\u64fc\u64fd\u64fe\u64ff\u6500\u6501\u6502\u6503\u6504\u6505\u6506\u6507\u6508\u6509\u650a\u650b\u650c\u650d\u650e\u650f\u6510\u6511\u6512\u6513\u6514\u6515\u6516\u6517\u6518\u6519\u651a\u651b\u651c\u651d\u651e\u651f\u6520\u6521\u6522\u6523\u6524\u6525\u6526\u6527\u6528\u6529\u652a\u652b\u652c\u652d\u652e\u652f\u6530\u6531\u6532\u6533\u6534\u6535\u6536\u6537\u6538\u6539\u653a\u653b\u653c\u653d\u653e\u653f\u6540\u6541\u6542\u6543\u6544\u6545\u6546\u6547\u6548\u6549\u654a\u654b\u654c\u654d\u654e\u654f\u6550\u6551\u6552\u6553\u6554\u6555\u6556\u6557\u6558\u6559\u655a\u655b\u655c\u655d\u655e\u655f\u6560\u6561\u6562\u6563\u6564\u6565\u6566\u6567\u6568\u6569\u656a\u656b\u656c\u656d\u656e\u656f\u6570\u6571\u6572\u6573\u6574\u6575\u6576\u6577\u6578\u6579\u657a\u657b\u657c\u657d\u657e\u657f\u6580\u6581\u6582\u6583\u6584\u6585\u6586\u6587\u6588\u6589\u658a\u658b\u658c\u658d\u658e\u658f\u6590\u6591\u6592\u6593\u6594\u6595\u6596\u6597\u6598\u6599\u659a\u659b\u659c\u659d\u659e\u659f\u65a0\u65a1\u65a2\u65a3\u65a4\u65a5\u65a6\u65a7\u65a8\u65a9\u65aa\u65ab\u65ac\u65ad\u65ae\u65af\u65b0\u65b1\u65b2\u65b3\u65b4\u65b5\u65b6\u65b7\u65b8\u65b9\u65ba\u65bb\u65bc\u65bd\u65be\u65bf\u65c0\u65c1\u65c2\u65c3\u65c4\u65c5\u65c6\u65c7\u65c8\u65c9\u65ca\u65cb\u65cc\u65cd\u65ce\u65cf\u65d0\u65d1\u65d2\u65d3\u65d4\u65d5\u65d6\u65d7\u65d8\u65d9\u65da\u65db\u65dc\u65dd\u65de\u65df\u65e0\u65e1\u65e2\u65e3\u65e4\u65e5\u65e6\u65e7\u65e8\u65e9\u65ea\u65eb\u65ec\u65ed\u65ee\u65ef\u65f0\u65f1\u65f2\u65f3\u65f4\u65f5\u65f6\u65f7\u65f8\u65f9\u65fa\u65fb\u65fc\u65fd\u65fe\u65ff\u6600\u6601\u6602\u6603\u6604\u6605\u6606\u6607\u6608\u6609\u660a\u660b\u660c\u660d\u660e\u660f\u6610\u6611\u6612\u6613\u6614\u6615\u6616\u6617\u6618\u6619\u661a\u661b\u661c\u661d\u661e\u661f\u6620\u6621\u6622\u6623\u6624\u6625\u6626\u6627\u6628\u6629\u662a\u662b\u662c\u662d\u662e\u662f\u6630\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638\u6639\u663a\u663b\u663c\u663d\u663e\u663f\u6640\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648\u6649\u664a\u664b\u664c\u664d\u664e\u664f\u6650\u6651\u6652\u6653\u6654\u6655\u6656\u6657\u6658\u6659\u665a\u665b\u665c\u665d\u665e\u665f\u6660\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668\u6669\u666a\u666b\u666c\u666d\u666e\u666f\u6670\u6671\u6672\u6673\u6674\u6675\u6676\u6677\u6678\u6679\u667a\u667b\u667c\u667d\u667e\u667f\u6680\u6681\u6682\u6683\u6684\u6685\u6686\u6687\u6688\u6689\u668a\u668b\u668c\u668d\u668e\u668f\u6690\u6691\u6692\u6693\u6694\u6695\u6696\u6697\u6698\u6699\u669a\u669b\u669c\u669d\u669e\u669f\u66a0\u66a1\u66a2\u66a3\u66a4\u66a5\u66a6\u66a7\u66a8\u66a9\u66aa\u66ab\u66ac\u66ad\u66ae\u66af\u66b0\u66b1\u66b2\u66b3\u66b4\u66b5\u66b6\u66b7\u66b8\u66b9\u66ba\u66bb\u66bc\u66bd\u66be\u66bf\u66c0\u66c1\u66c2\u66c3\u66c4\u66c5\u66c6\u66c7\u66c8\u66c9\u66ca\u66cb\u66cc\u66cd\u66ce\u66cf\u66d0\u66d1\u66d2\u66d3\u66d4\u66d5\u66d6\u66d7\u66d8\u66d9\u66da\u66db\u66dc\u66dd\u66de\u66df\u66e0\u66e1\u66e2\u66e3\u66e4\u66e5\u66e6\u66e7\u66e8\u66e9\u66ea\u66eb\u66ec\u66ed\u66ee\u66ef\u66f0\u66f1\u66f2\u66f3\u66f4\u66f5\u66f6\u66f7\u66f8\u66f9\u66fa\u66fb\u66fc\u66fd\u66fe\u66ff\u6700\u6701\u6702\u6703\u6704\u6705\u6706\u6707\u6708\u6709\u670a\u670b\u670c\u670d\u670e\u670f\u6710\u6711\u6712\u6713\u6714\u6715\u6716\u6717\u6718\u6719\u671a\u671b\u671c\u671d\u671e\u671f\u6720\u6721\u6722\u6723\u6724\u6725\u6726\u6727\u6728\u6729\u672a\u672b\u672c\u672d\u672e\u672f\u6730\u6731\u6732\u6733\u6734\u6735\u6736\u6737\u6738\u6739\u673a\u673b\u673c\u673d\u673e\u673f\u6740\u6741\u6742\u6743\u6744\u6745\u6746\u6747\u6748\u6749\u674a\u674b\u674c\u674d\u674e\u674f\u6750\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758\u6759\u675a\u675b\u675c\u675d\u675e\u675f\u6760\u6761\u6762\u6763\u6764\u6765\u6766\u6767\u6768\u6769\u676a\u676b\u676c\u676d\u676e\u676f\u6770\u6771\u6772\u6773\u6774\u6775\u6776\u6777\u6778\u6779\u677a\u677b\u677c\u677d\u677e\u677f\u6780\u6781\u6782\u6783\u6784\u6785\u6786\u6787\u6788\u6789\u678a\u678b\u678c\u678d\u678e\u678f\u6790\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798\u6799\u679a\u679b\u679c\u679d\u679e\u679f\u67a0\u67a1\u67a2\u67a3\u67a4\u67a5\u67a6\u67a7\u67a8\u67a9\u67aa\u67ab\u67ac\u67ad\u67ae\u67af\u67b0\u67b1\u67b2\u67b3\u67b4\u67b5\u67b6\u67b7\u67b8\u67b9\u67ba\u67bb\u67bc\u67bd\u67be\u67bf\u67c0\u67c1\u67c2\u67c3\u67c4\u67c5\u67c6\u67c7\u67c8\u67c9\u67ca\u67cb\u67cc\u67cd\u67ce\u67cf\u67d0\u67d1\u67d2\u67d3\u67d4\u67d5\u67d6\u67d7\u67d8\u67d9\u67da\u67db\u67dc\u67dd\u67de\u67df\u67e0\u67e1\u67e2\u67e3\u67e4\u67e5\u67e6\u67e7\u67e8\u67e9\u67ea\u67eb\u67ec\u67ed\u67ee\u67ef\u67f0\u67f1\u67f2\u67f3\u67f4\u67f5\u67f6\u67f7\u67f8\u67f9\u67fa\u67fb\u67fc\u67fd\u67fe\u67ff\u6800\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808\u6809\u680a\u680b\u680c\u680d\u680e\u680f\u6810\u6811\u6812\u6813\u6814\u6815\u6816\u6817\u6818\u6819\u681a\u681b\u681c\u681d\u681e\u681f\u6820\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u6829\u682a\u682b\u682c\u682d\u682e\u682f\u6830\u6831\u6832\u6833\u6834\u6835\u6836\u6837\u6838\u6839\u683a\u683b\u683c\u683d\u683e\u683f\u6840\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848\u6849\u684a\u684b\u684c\u684d\u684e\u684f\u6850\u6851\u6852\u6853\u6854\u6855\u6856\u6857\u6858\u6859\u685a\u685b\u685c\u685d\u685e\u685f\u6860\u6861\u6862\u6863\u6864\u6865\u6866\u6867\u6868\u6869\u686a\u686b\u686c\u686d\u686e\u686f\u6870\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878\u6879\u687a\u687b\u687c\u687d\u687e\u687f\u6880\u6881\u6882\u6883\u6884\u6885\u6886\u6887\u6888\u6889\u688a\u688b\u688c\u688d\u688e\u688f\u6890\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898\u6899\u689a\u689b\u689c\u689d\u689e\u689f\u68a0\u68a1\u68a2\u68a3\u68a4\u68a5\u68a6\u68a7\u68a8\u68a9\u68aa\u68ab\u68ac\u68ad\u68ae\u68af\u68b0\u68b1\u68b2\u68b3\u68b4\u68b5\u68b6\u68b7\u68b8\u68b9\u68ba\u68bb\u68bc\u68bd\u68be\u68bf\u68c0\u68c1\u68c2\u68c3\u68c4\u68c5\u68c6\u68c7\u68c8\u68c9\u68ca\u68cb\u68cc\u68cd\u68ce\u68cf\u68d0\u68d1\u68d2\u68d3\u68d4\u68d5\u68d6\u68d7\u68d8\u68d9\u68da\u68db\u68dc\u68dd\u68de\u68df\u68e0\u68e1\u68e2\u68e3\u68e4\u68e5\u68e6\u68e7\u68e8\u68e9\u68ea\u68eb\u68ec\u68ed\u68ee\u68ef\u68f0\u68f1\u68f2\u68f3\u68f4\u68f5\u68f6\u68f7\u68f8\u68f9\u68fa\u68fb\u68fc\u68fd\u68fe\u68ff\u6900\u6901\u6902\u6903\u6904\u6905\u6906\u6907\u6908\u6909\u690a\u690b\u690c\u690d\u690e\u690f\u6910\u6911\u6912\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691a\u691b\u691c\u691d\u691e\u691f\u6920\u6921\u6922\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692a\u692b\u692c\u692d\u692e\u692f\u6930\u6931\u6932\u6933\u6934\u6935\u6936\u6937\u6938\u6939\u693a\u693b\u693c\u693d\u693e\u693f\u6940\u6941\u6942\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694a\u694b\u694c\u694d\u694e\u694f\u6950\u6951\u6952\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695a\u695b\u695c\u695d\u695e\u695f\u6960\u6961\u6962\u6963\u6964\u6965\u6966\u6967\u6968\u6969\u696a\u696b\u696c\u696d\u696e\u696f\u6970\u6971\u6972\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697a\u697b\u697c\u697d\u697e\u697f\u6980\u6981\u6982\u6983\u6984\u6985\u6986\u6987\u6988\u6989\u698a\u698b\u698c\u698d\u698e\u698f\u6990\u6991\u6992\u6993\u6994\u6995\u6996\u6997\u6998\u6999\u699a\u699b\u699c\u699d\u699e\u699f\u69a0\u69a1\u69a2\u69a3\u69a4\u69a5\u69a6\u69a7\u69a8\u69a9\u69aa\u69ab\u69ac\u69ad\u69ae\u69af\u69b0\u69b1\u69b2\u69b3\u69b4\u69b5\u69b6\u69b7\u69b8\u69b9\u69ba\u69bb\u69bc\u69bd\u69be\u69bf\u69c0\u69c1\u69c2\u69c3\u69c4\u69c5\u69c6\u69c7\u69c8\u69c9\u69ca\u69cb\u69cc\u69cd\u69ce\u69cf\u69d0\u69d1\u69d2\u69d3\u69d4\u69d5\u69d6\u69d7\u69d8\u69d9\u69da\u69db\u69dc\u69dd\u69de\u69df\u69e0\u69e1\u69e2\u69e3\u69e4\u69e5\u69e6\u69e7\u69e8\u69e9\u69ea\u69eb\u69ec\u69ed\u69ee\u69ef\u69f0\u69f1\u69f2\u69f3\u69f4\u69f5\u69f6\u69f7\u69f8\u69f9\u69fa\u69fb\u69fc\u69fd\u69fe\u69ff\u6a00\u6a01\u6a02\u6a03\u6a04\u6a05\u6a06\u6a07\u6a08\u6a09\u6a0a\u6a0b\u6a0c\u6a0d\u6a0e\u6a0f\u6a10\u6a11\u6a12\u6a13\u6a14\u6a15\u6a16\u6a17\u6a18\u6a19\u6a1a\u6a1b\u6a1c\u6a1d\u6a1e\u6a1f\u6a20\u6a21\u6a22\u6a23\u6a24\u6a25\u6a26\u6a27\u6a28\u6a29\u6a2a\u6a2b\u6a2c\u6a2d\u6a2e\u6a2f\u6a30\u6a31\u6a32\u6a33\u6a34\u6a35\u6a36\u6a37\u6a38\u6a39\u6a3a\u6a3b\u6a3c\u6a3d\u6a3e\u6a3f\u6a40\u6a41\u6a42\u6a43\u6a44\u6a45\u6a46\u6a47\u6a48\u6a49\u6a4a\u6a4b\u6a4c\u6a4d\u6a4e\u6a4f\u6a50\u6a51\u6a52\u6a53\u6a54\u6a55\u6a56\u6a57\u6a58\u6a59\u6a5a\u6a5b\u6a5c\u6a5d\u6a5e\u6a5f\u6a60\u6a61\u6a62\u6a63\u6a64\u6a65\u6a66\u6a67\u6a68\u6a69\u6a6a\u6a6b\u6a6c\u6a6d\u6a6e\u6a6f\u6a70\u6a71\u6a72\u6a73\u6a74\u6a75\u6a76\u6a77\u6a78\u6a79\u6a7a\u6a7b\u6a7c\u6a7d\u6a7e\u6a7f\u6a80\u6a81\u6a82\u6a83\u6a84\u6a85\u6a86\u6a87\u6a88\u6a89\u6a8a\u6a8b\u6a8c\u6a8d\u6a8e\u6a8f\u6a90\u6a91\u6a92\u6a93\u6a94\u6a95\u6a96\u6a97\u6a98\u6a99\u6a9a\u6a9b\u6a9c\u6a9d\u6a9e\u6a9f\u6aa0\u6aa1\u6aa2\u6aa3\u6aa4\u6aa5\u6aa6\u6aa7\u6aa8\u6aa9\u6aaa\u6aab\u6aac\u6aad\u6aae\u6aaf\u6ab0\u6ab1\u6ab2\u6ab3\u6ab4\u6ab5\u6ab6\u6ab7\u6ab8\u6ab9\u6aba\u6abb\u6abc\u6abd\u6abe\u6abf\u6ac0\u6ac1\u6ac2\u6ac3\u6ac4\u6ac5\u6ac6\u6ac7\u6ac8\u6ac9\u6aca\u6acb\u6acc\u6acd\u6ace\u6acf\u6ad0\u6ad1\u6ad2\u6ad3\u6ad4\u6ad5\u6ad6\u6ad7\u6ad8\u6ad9\u6ada\u6adb\u6adc\u6add\u6ade\u6adf\u6ae0\u6ae1\u6ae2\u6ae3\u6ae4\u6ae5\u6ae6\u6ae7\u6ae8\u6ae9\u6aea\u6aeb\u6aec\u6aed\u6aee\u6aef\u6af0\u6af1\u6af2\u6af3\u6af4\u6af5\u6af6\u6af7\u6af8\u6af9\u6afa\u6afb\u6afc\u6afd\u6afe\u6aff\u6b00\u6b01\u6b02\u6b03\u6b04\u6b05\u6b06\u6b07\u6b08\u6b09\u6b0a\u6b0b\u6b0c\u6b0d\u6b0e\u6b0f\u6b10\u6b11\u6b12\u6b13\u6b14\u6b15\u6b16\u6b17\u6b18\u6b19\u6b1a\u6b1b\u6b1c\u6b1d\u6b1e\u6b1f\u6b20\u6b21\u6b22\u6b23\u6b24\u6b25\u6b26\u6b27\u6b28\u6b29\u6b2a\u6b2b\u6b2c\u6b2d\u6b2e\u6b2f\u6b30\u6b31\u6b32\u6b33\u6b34\u6b35\u6b36\u6b37\u6b38\u6b39\u6b3a\u6b3b\u6b3c\u6b3d\u6b3e\u6b3f\u6b40\u6b41\u6b42\u6b43\u6b44\u6b45\u6b46\u6b47\u6b48\u6b49\u6b4a\u6b4b\u6b4c\u6b4d\u6b4e\u6b4f\u6b50\u6b51\u6b52\u6b53\u6b54\u6b55\u6b56\u6b57\u6b58\u6b59\u6b5a\u6b5b\u6b5c\u6b5d\u6b5e\u6b5f\u6b60\u6b61\u6b62\u6b63\u6b64\u6b65\u6b66\u6b67\u6b68\u6b69\u6b6a\u6b6b\u6b6c\u6b6d\u6b6e\u6b6f\u6b70\u6b71\u6b72\u6b73\u6b74\u6b75\u6b76\u6b77\u6b78\u6b79\u6b7a\u6b7b\u6b7c\u6b7d\u6b7e\u6b7f\u6b80\u6b81\u6b82\u6b83\u6b84\u6b85\u6b86\u6b87\u6b88\u6b89\u6b8a\u6b8b\u6b8c\u6b8d\u6b8e\u6b8f\u6b90\u6b91\u6b92\u6b93\u6b94\u6b95\u6b96\u6b97\u6b98\u6b99\u6b9a\u6b9b\u6b9c\u6b9d\u6b9e\u6b9f\u6ba0\u6ba1\u6ba2\u6ba3\u6ba4\u6ba5\u6ba6\u6ba7\u6ba8\u6ba9\u6baa\u6bab\u6bac\u6bad\u6bae\u6baf\u6bb0\u6bb1\u6bb2\u6bb3\u6bb4\u6bb5\u6bb6\u6bb7\u6bb8\u6bb9\u6bba\u6bbb\u6bbc\u6bbd\u6bbe\u6bbf\u6bc0\u6bc1\u6bc2\u6bc3\u6bc4\u6bc5\u6bc6\u6bc7\u6bc8\u6bc9\u6bca\u6bcb\u6bcc\u6bcd\u6bce\u6bcf\u6bd0\u6bd1\u6bd2\u6bd3\u6bd4\u6bd5\u6bd6\u6bd7\u6bd8\u6bd9\u6bda\u6bdb\u6bdc\u6bdd\u6bde\u6bdf\u6be0\u6be1\u6be2\u6be3\u6be4\u6be5\u6be6\u6be7\u6be8\u6be9\u6bea\u6beb\u6bec\u6bed\u6bee\u6bef\u6bf0\u6bf1\u6bf2\u6bf3\u6bf4\u6bf5\u6bf6\u6bf7\u6bf8\u6bf9\u6bfa\u6bfb\u6bfc\u6bfd\u6bfe\u6bff\u6c00\u6c01\u6c02\u6c03\u6c04\u6c05\u6c06\u6c07\u6c08\u6c09\u6c0a\u6c0b\u6c0c\u6c0d\u6c0e\u6c0f\u6c10\u6c11\u6c12\u6c13\u6c14\u6c15\u6c16\u6c17\u6c18\u6c19\u6c1a\u6c1b\u6c1c\u6c1d\u6c1e\u6c1f\u6c20\u6c21\u6c22\u6c23\u6c24\u6c25\u6c26\u6c27\u6c28\u6c29\u6c2a\u6c2b\u6c2c\u6c2d\u6c2e\u6c2f\u6c30\u6c31\u6c32\u6c33\u6c34\u6c35\u6c36\u6c37\u6c38\u6c39\u6c3a\u6c3b\u6c3c\u6c3d\u6c3e\u6c3f\u6c40\u6c41\u6c42\u6c43\u6c44\u6c45\u6c46\u6c47\u6c48\u6c49\u6c4a\u6c4b\u6c4c\u6c4d\u6c4e\u6c4f\u6c50\u6c51\u6c52\u6c53\u6c54\u6c55\u6c56\u6c57\u6c58\u6c59\u6c5a\u6c5b\u6c5c\u6c5d\u6c5e\u6c5f\u6c60\u6c61\u6c62\u6c63\u6c64\u6c65\u6c66\u6c67\u6c68\u6c69\u6c6a\u6c6b\u6c6c\u6c6d\u6c6e\u6c6f\u6c70\u6c71\u6c72\u6c73\u6c74\u6c75\u6c76\u6c77\u6c78\u6c79\u6c7a\u6c7b\u6c7c\u6c7d\u6c7e\u6c7f\u6c80\u6c81\u6c82\u6c83\u6c84\u6c85\u6c86\u6c87\u6c88\u6c89\u6c8a\u6c8b\u6c8c\u6c8d\u6c8e\u6c8f\u6c90\u6c91\u6c92\u6c93\u6c94\u6c95\u6c96\u6c97\u6c98\u6c99\u6c9a\u6c9b\u6c9c\u6c9d\u6c9e\u6c9f\u6ca0\u6ca1\u6ca2\u6ca3\u6ca4\u6ca5\u6ca6\u6ca7\u6ca8\u6ca9\u6caa\u6cab\u6cac\u6cad\u6cae\u6caf\u6cb0\u6cb1\u6cb2\u6cb3\u6cb4\u6cb5\u6cb6\u6cb7\u6cb8\u6cb9\u6cba\u6cbb\u6cbc\u6cbd\u6cbe\u6cbf\u6cc0\u6cc1\u6cc2\u6cc3\u6cc4\u6cc5\u6cc6\u6cc7\u6cc8\u6cc9\u6cca\u6ccb\u6ccc\u6ccd\u6cce\u6ccf\u6cd0\u6cd1\u6cd2\u6cd3\u6cd4\u6cd5\u6cd6\u6cd7\u6cd8\u6cd9\u6cda\u6cdb\u6cdc\u6cdd\u6cde\u6cdf\u6ce0\u6ce1\u6ce2\u6ce3\u6ce4\u6ce5\u6ce6\u6ce7\u6ce8\u6ce9\u6cea\u6ceb\u6cec\u6ced\u6cee\u6cef\u6cf0\u6cf1\u6cf2\u6cf3\u6cf4\u6cf5\u6cf6\u6cf7\u6cf8\u6cf9\u6cfa\u6cfb\u6cfc\u6cfd\u6cfe\u6cff\u6d00\u6d01\u6d02\u6d03\u6d04\u6d05\u6d06\u6d07\u6d08\u6d09\u6d0a\u6d0b\u6d0c\u6d0d\u6d0e\u6d0f\u6d10\u6d11\u6d12\u6d13\u6d14\u6d15\u6d16\u6d17\u6d18\u6d19\u6d1a\u6d1b\u6d1c\u6d1d\u6d1e\u6d1f\u6d20\u6d21\u6d22\u6d23\u6d24\u6d25\u6d26\u6d27\u6d28\u6d29\u6d2a\u6d2b\u6d2c\u6d2d\u6d2e\u6d2f\u6d30\u6d31\u6d32\u6d33\u6d34\u6d35\u6d36\u6d37\u6d38\u6d39\u6d3a\u6d3b\u6d3c\u6d3d\u6d3e\u6d3f\u6d40\u6d41\u6d42\u6d43\u6d44\u6d45\u6d46\u6d47\u6d48\u6d49\u6d4a\u6d4b\u6d4c\u6d4d\u6d4e\u6d4f\u6d50\u6d51\u6d52\u6d53\u6d54\u6d55\u6d56\u6d57\u6d58\u6d59\u6d5a\u6d5b\u6d5c\u6d5d\u6d5e\u6d5f\u6d60\u6d61\u6d62\u6d63\u6d64\u6d65\u6d66\u6d67\u6d68\u6d69\u6d6a\u6d6b\u6d6c\u6d6d\u6d6e\u6d6f\u6d70\u6d71\u6d72\u6d73\u6d74\u6d75\u6d76\u6d77\u6d78\u6d79\u6d7a\u6d7b\u6d7c\u6d7d\u6d7e\u6d7f\u6d80\u6d81\u6d82\u6d83\u6d84\u6d85\u6d86\u6d87\u6d88\u6d89\u6d8a\u6d8b\u6d8c\u6d8d\u6d8e\u6d8f\u6d90\u6d91\u6d92\u6d93\u6d94\u6d95\u6d96\u6d97\u6d98\u6d99\u6d9a\u6d9b\u6d9c\u6d9d\u6d9e\u6d9f\u6da0\u6da1\u6da2\u6da3\u6da4\u6da5\u6da6\u6da7\u6da8\u6da9\u6daa\u6dab\u6dac\u6dad\u6dae\u6daf\u6db0\u6db1\u6db2\u6db3\u6db4\u6db5\u6db6\u6db7\u6db8\u6db9\u6dba\u6dbb\u6dbc\u6dbd\u6dbe\u6dbf\u6dc0\u6dc1\u6dc2\u6dc3\u6dc4\u6dc5\u6dc6\u6dc7\u6dc8\u6dc9\u6dca\u6dcb\u6dcc\u6dcd\u6dce\u6dcf\u6dd0\u6dd1\u6dd2\u6dd3\u6dd4\u6dd5\u6dd6\u6dd7\u6dd8\u6dd9\u6dda\u6ddb\u6ddc\u6ddd\u6dde\u6ddf\u6de0\u6de1\u6de2\u6de3\u6de4\u6de5\u6de6\u6de7\u6de8\u6de9\u6dea\u6deb\u6dec\u6ded\u6dee\u6def\u6df0\u6df1\u6df2\u6df3\u6df4\u6df5\u6df6\u6df7\u6df8\u6df9\u6dfa\u6dfb\u6dfc\u6dfd\u6dfe\u6dff\u6e00\u6e01\u6e02\u6e03\u6e04\u6e05\u6e06\u6e07\u6e08\u6e09\u6e0a\u6e0b\u6e0c\u6e0d\u6e0e\u6e0f\u6e10\u6e11\u6e12\u6e13\u6e14\u6e15\u6e16\u6e17\u6e18\u6e19\u6e1a\u6e1b\u6e1c\u6e1d\u6e1e\u6e1f\u6e20\u6e21\u6e22\u6e23\u6e24\u6e25\u6e26\u6e27\u6e28\u6e29\u6e2a\u6e2b\u6e2c\u6e2d\u6e2e\u6e2f\u6e30\u6e31\u6e32\u6e33\u6e34\u6e35\u6e36\u6e37\u6e38\u6e39\u6e3a\u6e3b\u6e3c\u6e3d\u6e3e\u6e3f\u6e40\u6e41\u6e42\u6e43\u6e44\u6e45\u6e46\u6e47\u6e48\u6e49\u6e4a\u6e4b\u6e4c\u6e4d\u6e4e\u6e4f\u6e50\u6e51\u6e52\u6e53\u6e54\u6e55\u6e56\u6e57\u6e58\u6e59\u6e5a\u6e5b\u6e5c\u6e5d\u6e5e\u6e5f\u6e60\u6e61\u6e62\u6e63\u6e64\u6e65\u6e66\u6e67\u6e68\u6e69\u6e6a\u6e6b\u6e6c\u6e6d\u6e6e\u6e6f\u6e70\u6e71\u6e72\u6e73\u6e74\u6e75\u6e76\u6e77\u6e78\u6e79\u6e7a\u6e7b\u6e7c\u6e7d\u6e7e\u6e7f\u6e80\u6e81\u6e82\u6e83\u6e84\u6e85\u6e86\u6e87\u6e88\u6e89\u6e8a\u6e8b\u6e8c\u6e8d\u6e8e\u6e8f\u6e90\u6e91\u6e92\u6e93\u6e94\u6e95\u6e96\u6e97\u6e98\u6e99\u6e9a\u6e9b\u6e9c\u6e9d\u6e9e\u6e9f\u6ea0\u6ea1\u6ea2\u6ea3\u6ea4\u6ea5\u6ea6\u6ea7\u6ea8\u6ea9\u6eaa\u6eab\u6eac\u6ead\u6eae\u6eaf\u6eb0\u6eb1\u6eb2\u6eb3\u6eb4\u6eb5\u6eb6\u6eb7\u6eb8\u6eb9\u6eba\u6ebb\u6ebc\u6ebd\u6ebe\u6ebf\u6ec0\u6ec1\u6ec2\u6ec3\u6ec4\u6ec5\u6ec6\u6ec7\u6ec8\u6ec9\u6eca\u6ecb\u6ecc\u6ecd\u6ece\u6ecf\u6ed0\u6ed1\u6ed2\u6ed3\u6ed4\u6ed5\u6ed6\u6ed7\u6ed8\u6ed9\u6eda\u6edb\u6edc\u6edd\u6ede\u6edf\u6ee0\u6ee1\u6ee2\u6ee3\u6ee4\u6ee5\u6ee6\u6ee7\u6ee8\u6ee9\u6eea\u6eeb\u6eec\u6eed\u6eee\u6eef\u6ef0\u6ef1\u6ef2\u6ef3\u6ef4\u6ef5\u6ef6\u6ef7\u6ef8\u6ef9\u6efa\u6efb\u6efc\u6efd\u6efe\u6eff\u6f00\u6f01\u6f02\u6f03\u6f04\u6f05\u6f06\u6f07\u6f08\u6f09\u6f0a\u6f0b\u6f0c\u6f0d\u6f0e\u6f0f\u6f10\u6f11\u6f12\u6f13\u6f14\u6f15\u6f16\u6f17\u6f18\u6f19\u6f1a\u6f1b\u6f1c\u6f1d\u6f1e\u6f1f\u6f20\u6f21\u6f22\u6f23\u6f24\u6f25\u6f26\u6f27\u6f28\u6f29\u6f2a\u6f2b\u6f2c\u6f2d\u6f2e\u6f2f\u6f30\u6f31\u6f32\u6f33\u6f34\u6f35\u6f36\u6f37\u6f38\u6f39\u6f3a\u6f3b\u6f3c\u6f3d\u6f3e\u6f3f\u6f40\u6f41\u6f42\u6f43\u6f44\u6f45\u6f46\u6f47\u6f48\u6f49\u6f4a\u6f4b\u6f4c\u6f4d\u6f4e\u6f4f\u6f50\u6f51\u6f52\u6f53\u6f54\u6f55\u6f56\u6f57\u6f58\u6f59\u6f5a\u6f5b\u6f5c\u6f5d\u6f5e\u6f5f\u6f60\u6f61\u6f62\u6f63\u6f64\u6f65\u6f66\u6f67\u6f68\u6f69\u6f6a\u6f6b\u6f6c\u6f6d\u6f6e\u6f6f\u6f70\u6f71\u6f72\u6f73\u6f74\u6f75\u6f76\u6f77\u6f78\u6f79\u6f7a\u6f7b\u6f7c\u6f7d\u6f7e\u6f7f\u6f80\u6f81\u6f82\u6f83\u6f84\u6f85\u6f86\u6f87\u6f88\u6f89\u6f8a\u6f8b\u6f8c\u6f8d\u6f8e\u6f8f\u6f90\u6f91\u6f92\u6f93\u6f94\u6f95\u6f96\u6f97\u6f98\u6f99\u6f9a\u6f9b\u6f9c\u6f9d\u6f9e\u6f9f\u6fa0\u6fa1\u6fa2\u6fa3\u6fa4\u6fa5\u6fa6\u6fa7\u6fa8\u6fa9\u6faa\u6fab\u6fac\u6fad\u6fae\u6faf\u6fb0\u6fb1\u6fb2\u6fb3\u6fb4\u6fb5\u6fb6\u6fb7\u6fb8\u6fb9\u6fba\u6fbb\u6fbc\u6fbd\u6fbe\u6fbf\u6fc0\u6fc1\u6fc2\u6fc3\u6fc4\u6fc5\u6fc6\u6fc7\u6fc8\u6fc9\u6fca\u6fcb\u6fcc\u6fcd\u6fce\u6fcf\u6fd0\u6fd1\u6fd2\u6fd3\u6fd4\u6fd5\u6fd6\u6fd7\u6fd8\u6fd9\u6fda\u6fdb\u6fdc\u6fdd\u6fde\u6fdf\u6fe0\u6fe1\u6fe2\u6fe3\u6fe4\u6fe5\u6fe6\u6fe7\u6fe8\u6fe9\u6fea\u6feb\u6fec\u6fed\u6fee\u6fef\u6ff0\u6ff1\u6ff2\u6ff3\u6ff4\u6ff5\u6ff6\u6ff7\u6ff8\u6ff9\u6ffa\u6ffb\u6ffc\u6ffd\u6ffe\u6fff\u7000\u7001\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700a\u700b\u700c\u700d\u700e\u700f\u7010\u7011\u7012\u7013\u7014\u7015\u7016\u7017\u7018\u7019\u701a\u701b\u701c\u701d\u701e\u701f\u7020\u7021\u7022\u7023\u7024\u7025\u7026\u7027\u7028\u7029\u702a\u702b\u702c\u702d\u702e\u702f\u7030\u7031\u7032\u7033\u7034\u7035\u7036\u7037\u7038\u7039\u703a\u703b\u703c\u703d\u703e\u703f\u7040\u7041\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704a\u704b\u704c\u704d\u704e\u704f\u7050\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7058\u7059\u705a\u705b\u705c\u705d\u705e\u705f\u7060\u7061\u7062\u7063\u7064\u7065\u7066\u7067\u7068\u7069\u706a\u706b\u706c\u706d\u706e\u706f\u7070\u7071\u7072\u7073\u7074\u7075\u7076\u7077\u7078\u7079\u707a\u707b\u707c\u707d\u707e\u707f\u7080\u7081\u7082\u7083\u7084\u7085\u7086\u7087\u7088\u7089\u708a\u708b\u708c\u708d\u708e\u708f\u7090\u7091\u7092\u7093\u7094\u7095\u7096\u7097\u7098\u7099\u709a\u709b\u709c\u709d\u709e\u709f\u70a0\u70a1\u70a2\u70a3\u70a4\u70a5\u70a6\u70a7\u70a8\u70a9\u70aa\u70ab\u70ac\u70ad\u70ae\u70af\u70b0\u70b1\u70b2\u70b3\u70b4\u70b5\u70b6\u70b7\u70b8\u70b9\u70ba\u70bb\u70bc\u70bd\u70be\u70bf\u70c0\u70c1\u70c2\u70c3\u70c4\u70c5\u70c6\u70c7\u70c8\u70c9\u70ca\u70cb\u70cc\u70cd\u70ce\u70cf\u70d0\u70d1\u70d2\u70d3\u70d4\u70d5\u70d6\u70d7\u70d8\u70d9\u70da\u70db\u70dc\u70dd\u70de\u70df\u70e0\u70e1\u70e2\u70e3\u70e4\u70e5\u70e6\u70e7\u70e8\u70e9\u70ea\u70eb\u70ec\u70ed\u70ee\u70ef\u70f0\u70f1\u70f2\u70f3\u70f4\u70f5\u70f6\u70f7\u70f8\u70f9\u70fa\u70fb\u70fc\u70fd\u70fe\u70ff\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u7109\u710a\u710b\u710c\u710d\u710e\u710f\u7110\u7111\u7112\u7113\u7114\u7115\u7116\u7117\u7118\u7119\u711a\u711b\u711c\u711d\u711e\u711f\u7120\u7121\u7122\u7123\u7124\u7125\u7126\u7127\u7128\u7129\u712a\u712b\u712c\u712d\u712e\u712f\u7130\u7131\u7132\u7133\u7134\u7135\u7136\u7137\u7138\u7139\u713a\u713b\u713c\u713d\u713e\u713f\u7140\u7141\u7142\u7143\u7144\u7145\u7146\u7147\u7148\u7149\u714a\u714b\u714c\u714d\u714e\u714f\u7150\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158\u7159\u715a\u715b\u715c\u715d\u715e\u715f\u7160\u7161\u7162\u7163\u7164\u7165\u7166\u7167\u7168\u7169\u716a\u716b\u716c\u716d\u716e\u716f\u7170\u7171\u7172\u7173\u7174\u7175\u7176\u7177\u7178\u7179\u717a\u717b\u717c\u717d\u717e\u717f\u7180\u7181\u7182\u7183\u7184\u7185\u7186\u7187\u7188\u7189\u718a\u718b\u718c\u718d\u718e\u718f\u7190\u7191\u7192\u7193\u7194\u7195\u7196\u7197\u7198\u7199\u719a\u719b\u719c\u719d\u719e\u719f\u71a0\u71a1\u71a2\u71a3\u71a4\u71a5\u71a6\u71a7\u71a8\u71a9\u71aa\u71ab\u71ac\u71ad\u71ae\u71af\u71b0\u71b1\u71b2\u71b3\u71b4\u71b5\u71b6\u71b7\u71b8\u71b9\u71ba\u71bb\u71bc\u71bd\u71be\u71bf\u71c0\u71c1\u71c2\u71c3\u71c4\u71c5\u71c6\u71c7\u71c8\u71c9\u71ca\u71cb\u71cc\u71cd\u71ce\u71cf\u71d0\u71d1\u71d2\u71d3\u71d4\u71d5\u71d6\u71d7\u71d8\u71d9\u71da\u71db\u71dc\u71dd\u71de\u71df\u71e0\u71e1\u71e2\u71e3\u71e4\u71e5\u71e6\u71e7\u71e8\u71e9\u71ea\u71eb\u71ec\u71ed\u71ee\u71ef\u71f0\u71f1\u71f2\u71f3\u71f4\u71f5\u71f6\u71f7\u71f8\u71f9\u71fa\u71fb\u71fc\u71fd\u71fe\u71ff\u7200\u7201\u7202\u7203\u7204\u7205\u7206\u7207\u7208\u7209\u720a\u720b\u720c\u720d\u720e\u720f\u7210\u7211\u7212\u7213\u7214\u7215\u7216\u7217\u7218\u7219\u721a\u721b\u721c\u721d\u721e\u721f\u7220\u7221\u7222\u7223\u7224\u7225\u7226\u7227\u7228\u7229\u722a\u722b\u722c\u722d\u722e\u722f\u7230\u7231\u7232\u7233\u7234\u7235\u7236\u7237\u7238\u7239\u723a\u723b\u723c\u723d\u723e\u723f\u7240\u7241\u7242\u7243\u7244\u7245\u7246\u7247\u7248\u7249\u724a\u724b\u724c\u724d\u724e\u724f\u7250\u7251\u7252\u7253\u7254\u7255\u7256\u7257\u7258\u7259\u725a\u725b\u725c\u725d\u725e\u725f\u7260\u7261\u7262\u7263\u7264\u7265\u7266\u7267\u7268\u7269\u726a\u726b\u726c\u726d\u726e\u726f\u7270\u7271\u7272\u7273\u7274\u7275\u7276\u7277\u7278\u7279\u727a\u727b\u727c\u727d\u727e\u727f\u7280\u7281\u7282\u7283\u7284\u7285\u7286\u7287\u7288\u7289\u728a\u728b\u728c\u728d\u728e\u728f\u7290\u7291\u7292\u7293\u7294\u7295\u7296\u7297\u7298\u7299\u729a\u729b\u729c\u729d\u729e\u729f\u72a0\u72a1\u72a2\u72a3\u72a4\u72a5\u72a6\u72a7\u72a8\u72a9\u72aa\u72ab\u72ac\u72ad\u72ae\u72af\u72b0\u72b1\u72b2\u72b3\u72b4\u72b5\u72b6\u72b7\u72b8\u72b9\u72ba\u72bb\u72bc\u72bd\u72be\u72bf\u72c0\u72c1\u72c2\u72c3\u72c4\u72c5\u72c6\u72c7\u72c8\u72c9\u72ca\u72cb\u72cc\u72cd\u72ce\u72cf\u72d0\u72d1\u72d2\u72d3\u72d4\u72d5\u72d6\u72d7\u72d8\u72d9\u72da\u72db\u72dc\u72dd\u72de\u72df\u72e0\u72e1\u72e2\u72e3\u72e4\u72e5\u72e6\u72e7\u72e8\u72e9\u72ea\u72eb\u72ec\u72ed\u72ee\u72ef\u72f0\u72f1\u72f2\u72f3\u72f4\u72f5\u72f6\u72f7\u72f8\u72f9\u72fa\u72fb\u72fc\u72fd\u72fe\u72ff\u7300\u7301\u7302\u7303\u7304\u7305\u7306\u7307\u7308\u7309\u730a\u730b\u730c\u730d\u730e\u730f\u7310\u7311\u7312\u7313\u7314\u7315\u7316\u7317\u7318\u7319\u731a\u731b\u731c\u731d\u731e\u731f\u7320\u7321\u7322\u7323\u7324\u7325\u7326\u7327\u7328\u7329\u732a\u732b\u732c\u732d\u732e\u732f\u7330\u7331\u7332\u7333\u7334\u7335\u7336\u7337\u7338\u7339\u733a\u733b\u733c\u733d\u733e\u733f\u7340\u7341\u7342\u7343\u7344\u7345\u7346\u7347\u7348\u7349\u734a\u734b\u734c\u734d\u734e\u734f\u7350\u7351\u7352\u7353\u7354\u7355\u7356\u7357\u7358\u7359\u735a\u735b\u735c\u735d\u735e\u735f\u7360\u7361\u7362\u7363\u7364\u7365\u7366\u7367\u7368\u7369\u736a\u736b\u736c\u736d\u736e\u736f\u7370\u7371\u7372\u7373\u7374\u7375\u7376\u7377\u7378\u7379\u737a\u737b\u737c\u737d\u737e\u737f\u7380\u7381\u7382\u7383\u7384\u7385\u7386\u7387\u7388\u7389\u738a\u738b\u738c\u738d\u738e\u738f\u7390\u7391\u7392\u7393\u7394\u7395\u7396\u7397\u7398\u7399\u739a\u739b\u739c\u739d\u739e\u739f\u73a0\u73a1\u73a2\u73a3\u73a4\u73a5\u73a6\u73a7\u73a8\u73a9\u73aa\u73ab\u73ac\u73ad\u73ae\u73af\u73b0\u73b1\u73b2\u73b3\u73b4\u73b5\u73b6\u73b7\u73b8\u73b9\u73ba\u73bb\u73bc\u73bd\u73be\u73bf\u73c0\u73c1\u73c2\u73c3\u73c4\u73c5\u73c6\u73c7\u73c8\u73c9\u73ca\u73cb\u73cc\u73cd\u73ce\u73cf\u73d0\u73d1\u73d2\u73d3\u73d4\u73d5\u73d6\u73d7\u73d8\u73d9\u73da\u73db\u73dc\u73dd\u73de\u73df\u73e0\u73e1\u73e2\u73e3\u73e4\u73e5\u73e6\u73e7\u73e8\u73e9\u73ea\u73eb\u73ec\u73ed\u73ee\u73ef\u73f0\u73f1\u73f2\u73f3\u73f4\u73f5\u73f6\u73f7\u73f8\u73f9\u73fa\u73fb\u73fc\u73fd\u73fe\u73ff\u7400\u7401\u7402\u7403\u7404\u7405\u7406\u7407\u7408\u7409\u740a\u740b\u740c\u740d\u740e\u740f\u7410\u7411\u7412\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741a\u741b\u741c\u741d\u741e\u741f\u7420\u7421\u7422\u7423\u7424\u7425\u7426\u7427\u7428\u7429\u742a\u742b\u742c\u742d\u742e\u742f\u7430\u7431\u7432\u7433\u7434\u7435\u7436\u7437\u7438\u7439\u743a\u743b\u743c\u743d\u743e\u743f\u7440\u7441\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744a\u744b\u744c\u744d\u744e\u744f\u7450\u7451\u7452\u7453\u7454\u7455\u7456\u7457\u7458\u7459\u745a\u745b\u745c\u745d\u745e\u745f\u7460\u7461\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746a\u746b\u746c\u746d\u746e\u746f\u7470\u7471\u7472\u7473\u7474\u7475\u7476\u7477\u7478\u7479\u747a\u747b\u747c\u747d\u747e\u747f\u7480\u7481\u7482\u7483\u7484\u7485\u7486\u7487\u7488\u7489\u748a\u748b\u748c\u748d\u748e\u748f\u7490\u7491\u7492\u7493\u7494\u7495\u7496\u7497\u7498\u7499\u749a\u749b\u749c\u749d\u749e\u749f\u74a0\u74a1\u74a2\u74a3\u74a4\u74a5\u74a6\u74a7\u74a8\u74a9\u74aa\u74ab\u74ac\u74ad\u74ae\u74af\u74b0\u74b1\u74b2\u74b3\u74b4\u74b5\u74b6\u74b7\u74b8\u74b9\u74ba\u74bb\u74bc\u74bd\u74be\u74bf\u74c0\u74c1\u74c2\u74c3\u74c4\u74c5\u74c6\u74c7\u74c8\u74c9\u74ca\u74cb\u74cc\u74cd\u74ce\u74cf\u74d0\u74d1\u74d2\u74d3\u74d4\u74d5\u74d6\u74d7\u74d8\u74d9\u74da\u74db\u74dc\u74dd\u74de\u74df\u74e0\u74e1\u74e2\u74e3\u74e4\u74e5\u74e6\u74e7\u74e8\u74e9\u74ea\u74eb\u74ec\u74ed\u74ee\u74ef\u74f0\u74f1\u74f2\u74f3\u74f4\u74f5\u74f6\u74f7\u74f8\u74f9\u74fa\u74fb\u74fc\u74fd\u74fe\u74ff\u7500\u7501\u7502\u7503\u7504\u7505\u7506\u7507\u7508\u7509\u750a\u750b\u750c\u750d\u750e\u750f\u7510\u7511\u7512\u7513\u7514\u7515\u7516\u7517\u7518\u7519\u751a\u751b\u751c\u751d\u751e\u751f\u7520\u7521\u7522\u7523\u7524\u7525\u7526\u7527\u7528\u7529\u752a\u752b\u752c\u752d\u752e\u752f\u7530\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538\u7539\u753a\u753b\u753c\u753d\u753e\u753f\u7540\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548\u7549\u754a\u754b\u754c\u754d\u754e\u754f\u7550\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558\u7559\u755a\u755b\u755c\u755d\u755e\u755f\u7560\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7568\u7569\u756a\u756b\u756c\u756d\u756e\u756f\u7570\u7571\u7572\u7573\u7574\u7575\u7576\u7577\u7578\u7579\u757a\u757b\u757c\u757d\u757e\u757f\u7580\u7581\u7582\u7583\u7584\u7585\u7586\u7587\u7588\u7589\u758a\u758b\u758c\u758d\u758e\u758f\u7590\u7591\u7592\u7593\u7594\u7595\u7596\u7597\u7598\u7599\u759a\u759b\u759c\u759d\u759e\u759f\u75a0\u75a1\u75a2\u75a3\u75a4\u75a5\u75a6\u75a7\u75a8\u75a9\u75aa\u75ab\u75ac\u75ad\u75ae\u75af\u75b0\u75b1\u75b2\u75b3\u75b4\u75b5\u75b6\u75b7\u75b8\u75b9\u75ba\u75bb\u75bc\u75bd\u75be\u75bf\u75c0\u75c1\u75c2\u75c3\u75c4\u75c5\u75c6\u75c7\u75c8\u75c9\u75ca\u75cb\u75cc\u75cd\u75ce\u75cf\u75d0\u75d1\u75d2\u75d3\u75d4\u75d5\u75d6\u75d7\u75d8\u75d9\u75da\u75db\u75dc\u75dd\u75de\u75df\u75e0\u75e1\u75e2\u75e3\u75e4\u75e5\u75e6\u75e7\u75e8\u75e9\u75ea\u75eb\u75ec\u75ed\u75ee\u75ef\u75f0\u75f1\u75f2\u75f3\u75f4\u75f5\u75f6\u75f7\u75f8\u75f9\u75fa\u75fb\u75fc\u75fd\u75fe\u75ff\u7600\u7601\u7602\u7603\u7604\u7605\u7606\u7607\u7608\u7609\u760a\u760b\u760c\u760d\u760e\u760f\u7610\u7611\u7612\u7613\u7614\u7615\u7616\u7617\u7618\u7619\u761a\u761b\u761c\u761d\u761e\u761f\u7620\u7621\u7622\u7623\u7624\u7625\u7626\u7627\u7628\u7629\u762a\u762b\u762c\u762d\u762e\u762f\u7630\u7631\u7632\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763a\u763b\u763c\u763d\u763e\u763f\u7640\u7641\u7642\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764a\u764b\u764c\u764d\u764e\u764f\u7650\u7651\u7652\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765a\u765b\u765c\u765d\u765e\u765f\u7660\u7661\u7662\u7663\u7664\u7665\u7666\u7667\u7668\u7669\u766a\u766b\u766c\u766d\u766e\u766f\u7670\u7671\u7672\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767a\u767b\u767c\u767d\u767e\u767f\u7680\u7681\u7682\u7683\u7684\u7685\u7686\u7687\u7688\u7689\u768a\u768b\u768c\u768d\u768e\u768f\u7690\u7691\u7692\u7693\u7694\u7695\u7696\u7697\u7698\u7699\u769a\u769b\u769c\u769d\u769e\u769f\u76a0\u76a1\u76a2\u76a3\u76a4\u76a5\u76a6\u76a7\u76a8\u76a9\u76aa\u76ab\u76ac\u76ad\u76ae\u76af\u76b0\u76b1\u76b2\u76b3\u76b4\u76b5\u76b6\u76b7\u76b8\u76b9\u76ba\u76bb\u76bc\u76bd\u76be\u76bf\u76c0\u76c1\u76c2\u76c3\u76c4\u76c5\u76c6\u76c7\u76c8\u76c9\u76ca\u76cb\u76cc\u76cd\u76ce\u76cf\u76d0\u76d1\u76d2\u76d3\u76d4\u76d5\u76d6\u76d7\u76d8\u76d9\u76da\u76db\u76dc\u76dd\u76de\u76df\u76e0\u76e1\u76e2\u76e3\u76e4\u76e5\u76e6\u76e7\u76e8\u76e9\u76ea\u76eb\u76ec\u76ed\u76ee\u76ef\u76f0\u76f1\u76f2\u76f3\u76f4\u76f5\u76f6\u76f7\u76f8\u76f9\u76fa\u76fb\u76fc\u76fd\u76fe\u76ff\u7700\u7701\u7702\u7703\u7704\u7705\u7706\u7707\u7708\u7709\u770a\u770b\u770c\u770d\u770e\u770f\u7710\u7711\u7712\u7713\u7714\u7715\u7716\u7717\u7718\u7719\u771a\u771b\u771c\u771d\u771e\u771f\u7720\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728\u7729\u772a\u772b\u772c\u772d\u772e\u772f\u7730\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738\u7739\u773a\u773b\u773c\u773d\u773e\u773f\u7740\u7741\u7742\u7743\u7744\u7745\u7746\u7747\u7748\u7749\u774a\u774b\u774c\u774d\u774e\u774f\u7750\u7751\u7752\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775a\u775b\u775c\u775d\u775e\u775f\u7760\u7761\u7762\u7763\u7764\u7765\u7766\u7767\u7768\u7769\u776a\u776b\u776c\u776d\u776e\u776f\u7770\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778\u7779\u777a\u777b\u777c\u777d\u777e\u777f\u7780\u7781\u7782\u7783\u7784\u7785\u7786\u7787\u7788\u7789\u778a\u778b\u778c\u778d\u778e\u778f\u7790\u7791\u7792\u7793\u7794\u7795\u7796\u7797\u7798\u7799\u779a\u779b\u779c\u779d\u779e\u779f\u77a0\u77a1\u77a2\u77a3\u77a4\u77a5\u77a6\u77a7\u77a8\u77a9\u77aa\u77ab\u77ac\u77ad\u77ae\u77af\u77b0\u77b1\u77b2\u77b3\u77b4\u77b5\u77b6\u77b7\u77b8\u77b9\u77ba\u77bb\u77bc\u77bd\u77be\u77bf\u77c0\u77c1\u77c2\u77c3\u77c4\u77c5\u77c6\u77c7\u77c8\u77c9\u77ca\u77cb\u77cc\u77cd\u77ce\u77cf\u77d0\u77d1\u77d2\u77d3\u77d4\u77d5\u77d6\u77d7\u77d8\u77d9\u77da\u77db\u77dc\u77dd\u77de\u77df\u77e0\u77e1\u77e2\u77e3\u77e4\u77e5\u77e6\u77e7\u77e8\u77e9\u77ea\u77eb\u77ec\u77ed\u77ee\u77ef\u77f0\u77f1\u77f2\u77f3\u77f4\u77f5\u77f6\u77f7\u77f8\u77f9\u77fa\u77fb\u77fc\u77fd\u77fe\u77ff\u7800\u7801\u7802\u7803\u7804\u7805\u7806\u7807\u7808\u7809\u780a\u780b\u780c\u780d\u780e\u780f\u7810\u7811\u7812\u7813\u7814\u7815\u7816\u7817\u7818\u7819\u781a\u781b\u781c\u781d\u781e\u781f\u7820\u7821\u7822\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782a\u782b\u782c\u782d\u782e\u782f\u7830\u7831\u7832\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783a\u783b\u783c\u783d\u783e\u783f\u7840\u7841\u7842\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784a\u784b\u784c\u784d\u784e\u784f\u7850\u7851\u7852\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785a\u785b\u785c\u785d\u785e\u785f\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786a\u786b\u786c\u786d\u786e\u786f\u7870\u7871\u7872\u7873\u7874\u7875\u7876\u7877\u7878\u7879\u787a\u787b\u787c\u787d\u787e\u787f\u7880\u7881\u7882\u7883\u7884\u7885\u7886\u7887\u7888\u7889\u788a\u788b\u788c\u788d\u788e\u788f\u7890\u7891\u7892\u7893\u7894\u7895\u7896\u7897\u7898\u7899\u789a\u789b\u789c\u789d\u789e\u789f\u78a0\u78a1\u78a2\u78a3\u78a4\u78a5\u78a6\u78a7\u78a8\u78a9\u78aa\u78ab\u78ac\u78ad\u78ae\u78af\u78b0\u78b1\u78b2\u78b3\u78b4\u78b5\u78b6\u78b7\u78b8\u78b9\u78ba\u78bb\u78bc\u78bd\u78be\u78bf\u78c0\u78c1\u78c2\u78c3\u78c4\u78c5\u78c6\u78c7\u78c8\u78c9\u78ca\u78cb\u78cc\u78cd\u78ce\u78cf\u78d0\u78d1\u78d2\u78d3\u78d4\u78d5\u78d6\u78d7\u78d8\u78d9\u78da\u78db\u78dc\u78dd\u78de\u78df\u78e0\u78e1\u78e2\u78e3\u78e4\u78e5\u78e6\u78e7\u78e8\u78e9\u78ea\u78eb\u78ec\u78ed\u78ee\u78ef\u78f0\u78f1\u78f2\u78f3\u78f4\u78f5\u78f6\u78f7\u78f8\u78f9\u78fa\u78fb\u78fc\u78fd\u78fe\u78ff\u7900\u7901\u7902\u7903\u7904\u7905\u7906\u7907\u7908\u7909\u790a\u790b\u790c\u790d\u790e\u790f\u7910\u7911\u7912\u7913\u7914\u7915\u7916\u7917\u7918\u7919\u791a\u791b\u791c\u791d\u791e\u791f\u7920\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928\u7929\u792a\u792b\u792c\u792d\u792e\u792f\u7930\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938\u7939\u793a\u793b\u793c\u793d\u793e\u793f\u7940\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948\u7949\u794a\u794b\u794c\u794d\u794e\u794f\u7950\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958\u7959\u795a\u795b\u795c\u795d\u795e\u795f\u7960\u7961\u7962\u7963\u7964\u7965\u7966\u7967\u7968\u7969\u796a\u796b\u796c\u796d\u796e\u796f\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978\u7979\u797a\u797b\u797c\u797d\u797e\u797f\u7980\u7981\u7982\u7983\u7984\u7985\u7986\u7987\u7988\u7989\u798a\u798b\u798c\u798d\u798e\u798f\u7990\u7991\u7992\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u799a\u799b\u799c\u799d\u799e\u799f\u79a0\u79a1\u79a2\u79a3\u79a4\u79a5\u79a6\u79a7\u79a8\u79a9\u79aa\u79ab\u79ac\u79ad\u79ae\u79af\u79b0\u79b1\u79b2\u79b3\u79b4\u79b5\u79b6\u79b7\u79b8\u79b9\u79ba\u79bb\u79bc\u79bd\u79be\u79bf\u79c0\u79c1\u79c2\u79c3\u79c4\u79c5\u79c6\u79c7\u79c8\u79c9\u79ca\u79cb\u79cc\u79cd\u79ce\u79cf\u79d0\u79d1\u79d2\u79d3\u79d4\u79d5\u79d6\u79d7\u79d8\u79d9\u79da\u79db\u79dc\u79dd\u79de\u79df\u79e0\u79e1\u79e2\u79e3\u79e4\u79e5\u79e6\u79e7\u79e8\u79e9\u79ea\u79eb\u79ec\u79ed\u79ee\u79ef\u79f0\u79f1\u79f2\u79f3\u79f4\u79f5\u79f6\u79f7\u79f8\u79f9\u79fa\u79fb\u79fc\u79fd\u79fe\u79ff\u7a00\u7a01\u7a02\u7a03\u7a04\u7a05\u7a06\u7a07\u7a08\u7a09\u7a0a\u7a0b\u7a0c\u7a0d\u7a0e\u7a0f\u7a10\u7a11\u7a12\u7a13\u7a14\u7a15\u7a16\u7a17\u7a18\u7a19\u7a1a\u7a1b\u7a1c\u7a1d\u7a1e\u7a1f\u7a20\u7a21\u7a22\u7a23\u7a24\u7a25\u7a26\u7a27\u7a28\u7a29\u7a2a\u7a2b\u7a2c\u7a2d\u7a2e\u7a2f\u7a30\u7a31\u7a32\u7a33\u7a34\u7a35\u7a36\u7a37\u7a38\u7a39\u7a3a\u7a3b\u7a3c\u7a3d\u7a3e\u7a3f\u7a40\u7a41\u7a42\u7a43\u7a44\u7a45\u7a46\u7a47\u7a48\u7a49\u7a4a\u7a4b\u7a4c\u7a4d\u7a4e\u7a4f\u7a50\u7a51\u7a52\u7a53\u7a54\u7a55\u7a56\u7a57\u7a58\u7a59\u7a5a\u7a5b\u7a5c\u7a5d\u7a5e\u7a5f\u7a60\u7a61\u7a62\u7a63\u7a64\u7a65\u7a66\u7a67\u7a68\u7a69\u7a6a\u7a6b\u7a6c\u7a6d\u7a6e\u7a6f\u7a70\u7a71\u7a72\u7a73\u7a74\u7a75\u7a76\u7a77\u7a78\u7a79\u7a7a\u7a7b\u7a7c\u7a7d\u7a7e\u7a7f\u7a80\u7a81\u7a82\u7a83\u7a84\u7a85\u7a86\u7a87\u7a88\u7a89\u7a8a\u7a8b\u7a8c\u7a8d\u7a8e\u7a8f\u7a90\u7a91\u7a92\u7a93\u7a94\u7a95\u7a96\u7a97\u7a98\u7a99\u7a9a\u7a9b\u7a9c\u7a9d\u7a9e\u7a9f\u7aa0\u7aa1\u7aa2\u7aa3\u7aa4\u7aa5\u7aa6\u7aa7\u7aa8\u7aa9\u7aaa\u7aab\u7aac\u7aad\u7aae\u7aaf\u7ab0\u7ab1\u7ab2\u7ab3\u7ab4\u7ab5\u7ab6\u7ab7\u7ab8\u7ab9\u7aba\u7abb\u7abc\u7abd\u7abe\u7abf\u7ac0\u7ac1\u7ac2\u7ac3\u7ac4\u7ac5\u7ac6\u7ac7\u7ac8\u7ac9\u7aca\u7acb\u7acc\u7acd\u7ace\u7acf\u7ad0\u7ad1\u7ad2\u7ad3\u7ad4\u7ad5\u7ad6\u7ad7\u7ad8\u7ad9\u7ada\u7adb\u7adc\u7add\u7ade\u7adf\u7ae0\u7ae1\u7ae2\u7ae3\u7ae4\u7ae5\u7ae6\u7ae7\u7ae8\u7ae9\u7aea\u7aeb\u7aec\u7aed\u7aee\u7aef\u7af0\u7af1\u7af2\u7af3\u7af4\u7af5\u7af6\u7af7\u7af8\u7af9\u7afa\u7afb\u7afc\u7afd\u7afe\u7aff\u7b00\u7b01\u7b02\u7b03\u7b04\u7b05\u7b06\u7b07\u7b08\u7b09\u7b0a\u7b0b\u7b0c\u7b0d\u7b0e\u7b0f\u7b10\u7b11\u7b12\u7b13\u7b14\u7b15\u7b16\u7b17\u7b18\u7b19\u7b1a\u7b1b\u7b1c\u7b1d\u7b1e\u7b1f\u7b20\u7b21\u7b22\u7b23\u7b24\u7b25\u7b26\u7b27\u7b28\u7b29\u7b2a\u7b2b\u7b2c\u7b2d\u7b2e\u7b2f\u7b30\u7b31\u7b32\u7b33\u7b34\u7b35\u7b36\u7b37\u7b38\u7b39\u7b3a\u7b3b\u7b3c\u7b3d\u7b3e\u7b3f\u7b40\u7b41\u7b42\u7b43\u7b44\u7b45\u7b46\u7b47\u7b48\u7b49\u7b4a\u7b4b\u7b4c\u7b4d\u7b4e\u7b4f\u7b50\u7b51\u7b52\u7b53\u7b54\u7b55\u7b56\u7b57\u7b58\u7b59\u7b5a\u7b5b\u7b5c\u7b5d\u7b5e\u7b5f\u7b60\u7b61\u7b62\u7b63\u7b64\u7b65\u7b66\u7b67\u7b68\u7b69\u7b6a\u7b6b\u7b6c\u7b6d\u7b6e\u7b6f\u7b70\u7b71\u7b72\u7b73\u7b74\u7b75\u7b76\u7b77\u7b78\u7b79\u7b7a\u7b7b\u7b7c\u7b7d\u7b7e\u7b7f\u7b80\u7b81\u7b82\u7b83\u7b84\u7b85\u7b86\u7b87\u7b88\u7b89\u7b8a\u7b8b\u7b8c\u7b8d\u7b8e\u7b8f\u7b90\u7b91\u7b92\u7b93\u7b94\u7b95\u7b96\u7b97\u7b98\u7b99\u7b9a\u7b9b\u7b9c\u7b9d\u7b9e\u7b9f\u7ba0\u7ba1\u7ba2\u7ba3\u7ba4\u7ba5\u7ba6\u7ba7\u7ba8\u7ba9\u7baa\u7bab\u7bac\u7bad\u7bae\u7baf\u7bb0\u7bb1\u7bb2\u7bb3\u7bb4\u7bb5\u7bb6\u7bb7\u7bb8\u7bb9\u7bba\u7bbb\u7bbc\u7bbd\u7bbe\u7bbf\u7bc0\u7bc1\u7bc2\u7bc3\u7bc4\u7bc5\u7bc6\u7bc7\u7bc8\u7bc9\u7bca\u7bcb\u7bcc\u7bcd\u7bce\u7bcf\u7bd0\u7bd1\u7bd2\u7bd3\u7bd4\u7bd5\u7bd6\u7bd7\u7bd8\u7bd9\u7bda\u7bdb\u7bdc\u7bdd\u7bde\u7bdf\u7be0\u7be1\u7be2\u7be3\u7be4\u7be5\u7be6\u7be7\u7be8\u7be9\u7bea\u7beb\u7bec\u7bed\u7bee\u7bef\u7bf0\u7bf1\u7bf2\u7bf3\u7bf4\u7bf5\u7bf6\u7bf7\u7bf8\u7bf9\u7bfa\u7bfb\u7bfc\u7bfd\u7bfe\u7bff\u7c00\u7c01\u7c02\u7c03\u7c04\u7c05\u7c06\u7c07\u7c08\u7c09\u7c0a\u7c0b\u7c0c\u7c0d\u7c0e\u7c0f\u7c10\u7c11\u7c12\u7c13\u7c14\u7c15\u7c16\u7c17\u7c18\u7c19\u7c1a\u7c1b\u7c1c\u7c1d\u7c1e\u7c1f\u7c20\u7c21\u7c22\u7c23\u7c24\u7c25\u7c26\u7c27\u7c28\u7c29\u7c2a\u7c2b\u7c2c\u7c2d\u7c2e\u7c2f\u7c30\u7c31\u7c32\u7c33\u7c34\u7c35\u7c36\u7c37\u7c38\u7c39\u7c3a\u7c3b\u7c3c\u7c3d\u7c3e\u7c3f\u7c40\u7c41\u7c42\u7c43\u7c44\u7c45\u7c46\u7c47\u7c48\u7c49\u7c4a\u7c4b\u7c4c\u7c4d\u7c4e\u7c4f\u7c50\u7c51\u7c52\u7c53\u7c54\u7c55\u7c56\u7c57\u7c58\u7c59\u7c5a\u7c5b\u7c5c\u7c5d\u7c5e\u7c5f\u7c60\u7c61\u7c62\u7c63\u7c64\u7c65\u7c66\u7c67\u7c68\u7c69\u7c6a\u7c6b\u7c6c\u7c6d\u7c6e\u7c6f\u7c70\u7c71\u7c72\u7c73\u7c74\u7c75\u7c76\u7c77\u7c78\u7c79\u7c7a\u7c7b\u7c7c\u7c7d\u7c7e\u7c7f\u7c80\u7c81\u7c82\u7c83\u7c84\u7c85\u7c86\u7c87\u7c88\u7c89\u7c8a\u7c8b\u7c8c\u7c8d\u7c8e\u7c8f\u7c90\u7c91\u7c92\u7c93\u7c94\u7c95\u7c96\u7c97\u7c98\u7c99\u7c9a\u7c9b\u7c9c\u7c9d\u7c9e\u7c9f\u7ca0\u7ca1\u7ca2\u7ca3\u7ca4\u7ca5\u7ca6\u7ca7\u7ca8\u7ca9\u7caa\u7cab\u7cac\u7cad\u7cae\u7caf\u7cb0\u7cb1\u7cb2\u7cb3\u7cb4\u7cb5\u7cb6\u7cb7\u7cb8\u7cb9\u7cba\u7cbb\u7cbc\u7cbd\u7cbe\u7cbf\u7cc0\u7cc1\u7cc2\u7cc3\u7cc4\u7cc5\u7cc6\u7cc7\u7cc8\u7cc9\u7cca\u7ccb\u7ccc\u7ccd\u7cce\u7ccf\u7cd0\u7cd1\u7cd2\u7cd3\u7cd4\u7cd5\u7cd6\u7cd7\u7cd8\u7cd9\u7cda\u7cdb\u7cdc\u7cdd\u7cde\u7cdf\u7ce0\u7ce1\u7ce2\u7ce3\u7ce4\u7ce5\u7ce6\u7ce7\u7ce8\u7ce9\u7cea\u7ceb\u7cec\u7ced\u7cee\u7cef\u7cf0\u7cf1\u7cf2\u7cf3\u7cf4\u7cf5\u7cf6\u7cf7\u7cf8\u7cf9\u7cfa\u7cfb\u7cfc\u7cfd\u7cfe\u7cff\u7d00\u7d01\u7d02\u7d03\u7d04\u7d05\u7d06\u7d07\u7d08\u7d09\u7d0a\u7d0b\u7d0c\u7d0d\u7d0e\u7d0f\u7d10\u7d11\u7d12\u7d13\u7d14\u7d15\u7d16\u7d17\u7d18\u7d19\u7d1a\u7d1b\u7d1c\u7d1d\u7d1e\u7d1f\u7d20\u7d21\u7d22\u7d23\u7d24\u7d25\u7d26\u7d27\u7d28\u7d29\u7d2a\u7d2b\u7d2c\u7d2d\u7d2e\u7d2f\u7d30\u7d31\u7d32\u7d33\u7d34\u7d35\u7d36\u7d37\u7d38\u7d39\u7d3a\u7d3b\u7d3c\u7d3d\u7d3e\u7d3f\u7d40\u7d41\u7d42\u7d43\u7d44\u7d45\u7d46\u7d47\u7d48\u7d49\u7d4a\u7d4b\u7d4c\u7d4d\u7d4e\u7d4f\u7d50\u7d51\u7d52\u7d53\u7d54\u7d55\u7d56\u7d57\u7d58\u7d59\u7d5a\u7d5b\u7d5c\u7d5d\u7d5e\u7d5f\u7d60\u7d61\u7d62\u7d63\u7d64\u7d65\u7d66\u7d67\u7d68\u7d69\u7d6a\u7d6b\u7d6c\u7d6d\u7d6e\u7d6f\u7d70\u7d71\u7d72\u7d73\u7d74\u7d75\u7d76\u7d77\u7d78\u7d79\u7d7a\u7d7b\u7d7c\u7d7d\u7d7e\u7d7f\u7d80\u7d81\u7d82\u7d83\u7d84\u7d85\u7d86\u7d87\u7d88\u7d89\u7d8a\u7d8b\u7d8c\u7d8d\u7d8e\u7d8f\u7d90\u7d91\u7d92\u7d93\u7d94\u7d95\u7d96\u7d97\u7d98\u7d99\u7d9a\u7d9b\u7d9c\u7d9d\u7d9e\u7d9f\u7da0\u7da1\u7da2\u7da3\u7da4\u7da5\u7da6\u7da7\u7da8\u7da9\u7daa\u7dab\u7dac\u7dad\u7dae\u7daf\u7db0\u7db1\u7db2\u7db3\u7db4\u7db5\u7db6\u7db7\u7db8\u7db9\u7dba\u7dbb\u7dbc\u7dbd\u7dbe\u7dbf\u7dc0\u7dc1\u7dc2\u7dc3\u7dc4\u7dc5\u7dc6\u7dc7\u7dc8\u7dc9\u7dca\u7dcb\u7dcc\u7dcd\u7dce\u7dcf\u7dd0\u7dd1\u7dd2\u7dd3\u7dd4\u7dd5\u7dd6\u7dd7\u7dd8\u7dd9\u7dda\u7ddb\u7ddc\u7ddd\u7dde\u7ddf\u7de0\u7de1\u7de2\u7de3\u7de4\u7de5\u7de6\u7de7\u7de8\u7de9\u7dea\u7deb\u7dec\u7ded\u7dee\u7def\u7df0\u7df1\u7df2\u7df3\u7df4\u7df5\u7df6\u7df7\u7df8\u7df9\u7dfa\u7dfb\u7dfc\u7dfd\u7dfe\u7dff\u7e00\u7e01\u7e02\u7e03\u7e04\u7e05\u7e06\u7e07\u7e08\u7e09\u7e0a\u7e0b\u7e0c\u7e0d\u7e0e\u7e0f\u7e10\u7e11\u7e12\u7e13\u7e14\u7e15\u7e16\u7e17\u7e18\u7e19\u7e1a\u7e1b\u7e1c\u7e1d\u7e1e\u7e1f\u7e20\u7e21\u7e22\u7e23\u7e24\u7e25\u7e26\u7e27\u7e28\u7e29\u7e2a\u7e2b\u7e2c\u7e2d\u7e2e\u7e2f\u7e30\u7e31\u7e32\u7e33\u7e34\u7e35\u7e36\u7e37\u7e38\u7e39\u7e3a\u7e3b\u7e3c\u7e3d\u7e3e\u7e3f\u7e40\u7e41\u7e42\u7e43\u7e44\u7e45\u7e46\u7e47\u7e48\u7e49\u7e4a\u7e4b\u7e4c\u7e4d\u7e4e\u7e4f\u7e50\u7e51\u7e52\u7e53\u7e54\u7e55\u7e56\u7e57\u7e58\u7e59\u7e5a\u7e5b\u7e5c\u7e5d\u7e5e\u7e5f\u7e60\u7e61\u7e62\u7e63\u7e64\u7e65\u7e66\u7e67\u7e68\u7e69\u7e6a\u7e6b\u7e6c\u7e6d\u7e6e\u7e6f\u7e70\u7e71\u7e72\u7e73\u7e74\u7e75\u7e76\u7e77\u7e78\u7e79\u7e7a\u7e7b\u7e7c\u7e7d\u7e7e\u7e7f\u7e80\u7e81\u7e82\u7e83\u7e84\u7e85\u7e86\u7e87\u7e88\u7e89\u7e8a\u7e8b\u7e8c\u7e8d\u7e8e\u7e8f\u7e90\u7e91\u7e92\u7e93\u7e94\u7e95\u7e96\u7e97\u7e98\u7e99\u7e9a\u7e9b\u7e9c\u7e9d\u7e9e\u7e9f\u7ea0\u7ea1\u7ea2\u7ea3\u7ea4\u7ea5\u7ea6\u7ea7\u7ea8\u7ea9\u7eaa\u7eab\u7eac\u7ead\u7eae\u7eaf\u7eb0\u7eb1\u7eb2\u7eb3\u7eb4\u7eb5\u7eb6\u7eb7\u7eb8\u7eb9\u7eba\u7ebb\u7ebc\u7ebd\u7ebe\u7ebf\u7ec0\u7ec1\u7ec2\u7ec3\u7ec4\u7ec5\u7ec6\u7ec7\u7ec8\u7ec9\u7eca\u7ecb\u7ecc\u7ecd\u7ece\u7ecf\u7ed0\u7ed1\u7ed2\u7ed3\u7ed4\u7ed5\u7ed6\u7ed7\u7ed8\u7ed9\u7eda\u7edb\u7edc\u7edd\u7ede\u7edf\u7ee0\u7ee1\u7ee2\u7ee3\u7ee4\u7ee5\u7ee6\u7ee7\u7ee8\u7ee9\u7eea\u7eeb\u7eec\u7eed\u7eee\u7eef\u7ef0\u7ef1\u7ef2\u7ef3\u7ef4\u7ef5\u7ef6\u7ef7\u7ef8\u7ef9\u7efa\u7efb\u7efc\u7efd\u7efe\u7eff\u7f00\u7f01\u7f02\u7f03\u7f04\u7f05\u7f06\u7f07\u7f08\u7f09\u7f0a\u7f0b\u7f0c\u7f0d\u7f0e\u7f0f\u7f10\u7f11\u7f12\u7f13\u7f14\u7f15\u7f16\u7f17\u7f18\u7f19\u7f1a\u7f1b\u7f1c\u7f1d\u7f1e\u7f1f\u7f20\u7f21\u7f22\u7f23\u7f24\u7f25\u7f26\u7f27\u7f28\u7f29\u7f2a\u7f2b\u7f2c\u7f2d\u7f2e\u7f2f\u7f30\u7f31\u7f32\u7f33\u7f34\u7f35\u7f36\u7f37\u7f38\u7f39\u7f3a\u7f3b\u7f3c\u7f3d\u7f3e\u7f3f\u7f40\u7f41\u7f42\u7f43\u7f44\u7f45\u7f46\u7f47\u7f48\u7f49\u7f4a\u7f4b\u7f4c\u7f4d\u7f4e\u7f4f\u7f50\u7f51\u7f52\u7f53\u7f54\u7f55\u7f56\u7f57\u7f58\u7f59\u7f5a\u7f5b\u7f5c\u7f5d\u7f5e\u7f5f\u7f60\u7f61\u7f62\u7f63\u7f64\u7f65\u7f66\u7f67\u7f68\u7f69\u7f6a\u7f6b\u7f6c\u7f6d\u7f6e\u7f6f\u7f70\u7f71\u7f72\u7f73\u7f74\u7f75\u7f76\u7f77\u7f78\u7f79\u7f7a\u7f7b\u7f7c\u7f7d\u7f7e\u7f7f\u7f80\u7f81\u7f82\u7f83\u7f84\u7f85\u7f86\u7f87\u7f88\u7f89\u7f8a\u7f8b\u7f8c\u7f8d\u7f8e\u7f8f\u7f90\u7f91\u7f92\u7f93\u7f94\u7f95\u7f96\u7f97\u7f98\u7f99\u7f9a\u7f9b\u7f9c\u7f9d\u7f9e\u7f9f\u7fa0\u7fa1\u7fa2\u7fa3\u7fa4\u7fa5\u7fa6\u7fa7\u7fa8\u7fa9\u7faa\u7fab\u7fac\u7fad\u7fae\u7faf\u7fb0\u7fb1\u7fb2\u7fb3\u7fb4\u7fb5\u7fb6\u7fb7\u7fb8\u7fb9\u7fba\u7fbb\u7fbc\u7fbd\u7fbe\u7fbf\u7fc0\u7fc1\u7fc2\u7fc3\u7fc4\u7fc5\u7fc6\u7fc7\u7fc8\u7fc9\u7fca\u7fcb\u7fcc\u7fcd\u7fce\u7fcf\u7fd0\u7fd1\u7fd2\u7fd3\u7fd4\u7fd5\u7fd6\u7fd7\u7fd8\u7fd9\u7fda\u7fdb\u7fdc\u7fdd\u7fde\u7fdf\u7fe0\u7fe1\u7fe2\u7fe3\u7fe4\u7fe5\u7fe6\u7fe7\u7fe8\u7fe9\u7fea\u7feb\u7fec\u7fed\u7fee\u7fef\u7ff0\u7ff1\u7ff2\u7ff3\u7ff4\u7ff5\u7ff6\u7ff7\u7ff8\u7ff9\u7ffa\u7ffb\u7ffc\u7ffd\u7ffe\u7fff\u8000\u8001\u8002\u8003\u8004\u8005\u8006\u8007\u8008\u8009\u800a\u800b\u800c\u800d\u800e\u800f\u8010\u8011\u8012\u8013\u8014\u8015\u8016\u8017\u8018\u8019\u801a\u801b\u801c\u801d\u801e\u801f\u8020\u8021\u8022\u8023\u8024\u8025\u8026\u8027\u8028\u8029\u802a\u802b\u802c\u802d\u802e\u802f\u8030\u8031\u8032\u8033\u8034\u8035\u8036\u8037\u8038\u8039\u803a\u803b\u803c\u803d\u803e\u803f\u8040\u8041\u8042\u8043\u8044\u8045\u8046\u8047\u8048\u8049\u804a\u804b\u804c\u804d\u804e\u804f\u8050\u8051\u8052\u8053\u8054\u8055\u8056\u8057\u8058\u8059\u805a\u805b\u805c\u805d\u805e\u805f\u8060\u8061\u8062\u8063\u8064\u8065\u8066\u8067\u8068\u8069\u806a\u806b\u806c\u806d\u806e\u806f\u8070\u8071\u8072\u8073\u8074\u8075\u8076\u8077\u8078\u8079\u807a\u807b\u807c\u807d\u807e\u807f\u8080\u8081\u8082\u8083\u8084\u8085\u8086\u8087\u8088\u8089\u808a\u808b\u808c\u808d\u808e\u808f\u8090\u8091\u8092\u8093\u8094\u8095\u8096\u8097\u8098\u8099\u809a\u809b\u809c\u809d\u809e\u809f\u80a0\u80a1\u80a2\u80a3\u80a4\u80a5\u80a6\u80a7\u80a8\u80a9\u80aa\u80ab\u80ac\u80ad\u80ae\u80af\u80b0\u80b1\u80b2\u80b3\u80b4\u80b5\u80b6\u80b7\u80b8\u80b9\u80ba\u80bb\u80bc\u80bd\u80be\u80bf\u80c0\u80c1\u80c2\u80c3\u80c4\u80c5\u80c6\u80c7\u80c8\u80c9\u80ca\u80cb\u80cc\u80cd\u80ce\u80cf\u80d0\u80d1\u80d2\u80d3\u80d4\u80d5\u80d6\u80d7\u80d8\u80d9\u80da\u80db\u80dc\u80dd\u80de\u80df\u80e0\u80e1\u80e2\u80e3\u80e4\u80e5\u80e6\u80e7\u80e8\u80e9\u80ea\u80eb\u80ec\u80ed\u80ee\u80ef\u80f0\u80f1\u80f2\u80f3\u80f4\u80f5\u80f6\u80f7\u80f8\u80f9\u80fa\u80fb\u80fc\u80fd\u80fe\u80ff\u8100\u8101\u8102\u8103\u8104\u8105\u8106\u8107\u8108\u8109\u810a\u810b\u810c\u810d\u810e\u810f\u8110\u8111\u8112\u8113\u8114\u8115\u8116\u8117\u8118\u8119\u811a\u811b\u811c\u811d\u811e\u811f\u8120\u8121\u8122\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812a\u812b\u812c\u812d\u812e\u812f\u8130\u8131\u8132\u8133\u8134\u8135\u8136\u8137\u8138\u8139\u813a\u813b\u813c\u813d\u813e\u813f\u8140\u8141\u8142\u8143\u8144\u8145\u8146\u8147\u8148\u8149\u814a\u814b\u814c\u814d\u814e\u814f\u8150\u8151\u8152\u8153\u8154\u8155\u8156\u8157\u8158\u8159\u815a\u815b\u815c\u815d\u815e\u815f\u8160\u8161\u8162\u8163\u8164\u8165\u8166\u8167\u8168\u8169\u816a\u816b\u816c\u816d\u816e\u816f\u8170\u8171\u8172\u8173\u8174\u8175\u8176\u8177\u8178\u8179\u817a\u817b\u817c\u817d\u817e\u817f\u8180\u8181\u8182\u8183\u8184\u8185\u8186\u8187\u8188\u8189\u818a\u818b\u818c\u818d\u818e\u818f\u8190\u8191\u8192\u8193\u8194\u8195\u8196\u8197\u8198\u8199\u819a\u819b\u819c\u819d\u819e\u819f\u81a0\u81a1\u81a2\u81a3\u81a4\u81a5\u81a6\u81a7\u81a8\u81a9\u81aa\u81ab\u81ac\u81ad\u81ae\u81af\u81b0\u81b1\u81b2\u81b3\u81b4\u81b5\u81b6\u81b7\u81b8\u81b9\u81ba\u81bb\u81bc\u81bd\u81be\u81bf\u81c0\u81c1\u81c2\u81c3\u81c4\u81c5\u81c6\u81c7\u81c8\u81c9\u81ca\u81cb\u81cc\u81cd\u81ce\u81cf\u81d0\u81d1\u81d2\u81d3\u81d4\u81d5\u81d6\u81d7\u81d8\u81d9\u81da\u81db\u81dc\u81dd\u81de\u81df\u81e0\u81e1\u81e2\u81e3\u81e4\u81e5\u81e6\u81e7\u81e8\u81e9\u81ea\u81eb\u81ec\u81ed\u81ee\u81ef\u81f0\u81f1\u81f2\u81f3\u81f4\u81f5\u81f6\u81f7\u81f8\u81f9\u81fa\u81fb\u81fc\u81fd\u81fe\u81ff\u8200\u8201\u8202\u8203\u8204\u8205\u8206\u8207\u8208\u8209\u820a\u820b\u820c\u820d\u820e\u820f\u8210\u8211\u8212\u8213\u8214\u8215\u8216\u8217\u8218\u8219\u821a\u821b\u821c\u821d\u821e\u821f\u8220\u8221\u8222\u8223\u8224\u8225\u8226\u8227\u8228\u8229\u822a\u822b\u822c\u822d\u822e\u822f\u8230\u8231\u8232\u8233\u8234\u8235\u8236\u8237\u8238\u8239\u823a\u823b\u823c\u823d\u823e\u823f\u8240\u8241\u8242\u8243\u8244\u8245\u8246\u8247\u8248\u8249\u824a\u824b\u824c\u824d\u824e\u824f\u8250\u8251\u8252\u8253\u8254\u8255\u8256\u8257\u8258\u8259\u825a\u825b\u825c\u825d\u825e\u825f\u8260\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8268\u8269\u826a\u826b\u826c\u826d\u826e\u826f\u8270\u8271\u8272\u8273\u8274\u8275\u8276\u8277\u8278\u8279\u827a\u827b\u827c\u827d\u827e\u827f\u8280\u8281\u8282\u8283\u8284\u8285\u8286\u8287\u8288\u8289\u828a\u828b\u828c\u828d\u828e\u828f\u8290\u8291\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299\u829a\u829b\u829c\u829d\u829e\u829f\u82a0\u82a1\u82a2\u82a3\u82a4\u82a5\u82a6\u82a7\u82a8\u82a9\u82aa\u82ab\u82ac\u82ad\u82ae\u82af\u82b0\u82b1\u82b2\u82b3\u82b4\u82b5\u82b6\u82b7\u82b8\u82b9\u82ba\u82bb\u82bc\u82bd\u82be\u82bf\u82c0\u82c1\u82c2\u82c3\u82c4\u82c5\u82c6\u82c7\u82c8\u82c9\u82ca\u82cb\u82cc\u82cd\u82ce\u82cf\u82d0\u82d1\u82d2\u82d3\u82d4\u82d5\u82d6\u82d7\u82d8\u82d9\u82da\u82db\u82dc\u82dd\u82de\u82df\u82e0\u82e1\u82e2\u82e3\u82e4\u82e5\u82e6\u82e7\u82e8\u82e9\u82ea\u82eb\u82ec\u82ed\u82ee\u82ef\u82f0\u82f1\u82f2\u82f3\u82f4\u82f5\u82f6\u82f7\u82f8\u82f9\u82fa\u82fb\u82fc\u82fd\u82fe\u82ff\u8300\u8301\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309\u830a\u830b\u830c\u830d\u830e\u830f\u8310\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318\u8319\u831a\u831b\u831c\u831d\u831e\u831f\u8320\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328\u8329\u832a\u832b\u832c\u832d\u832e\u832f\u8330\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338\u8339\u833a\u833b\u833c\u833d\u833e\u833f\u8340\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834a\u834b\u834c\u834d\u834e\u834f\u8350\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358\u8359\u835a\u835b\u835c\u835d\u835e\u835f\u8360\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368\u8369\u836a\u836b\u836c\u836d\u836e\u836f\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378\u8379\u837a\u837b\u837c\u837d\u837e\u837f\u8380\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388\u8389\u838a\u838b\u838c\u838d\u838e\u838f\u8390\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398\u8399\u839a\u839b\u839c\u839d\u839e\u839f\u83a0\u83a1\u83a2\u83a3\u83a4\u83a5\u83a6\u83a7\u83a8\u83a9\u83aa\u83ab\u83ac\u83ad\u83ae\u83af\u83b0\u83b1\u83b2\u83b3\u83b4\u83b5\u83b6\u83b7\u83b8\u83b9\u83ba\u83bb\u83bc\u83bd\u83be\u83bf\u83c0\u83c1\u83c2\u83c3\u83c4\u83c5\u83c6\u83c7\u83c8\u83c9\u83ca\u83cb\u83cc\u83cd\u83ce\u83cf\u83d0\u83d1\u83d2\u83d3\u83d4\u83d5\u83d6\u83d7\u83d8\u83d9\u83da\u83db\u83dc\u83dd\u83de\u83df\u83e0\u83e1\u83e2\u83e3\u83e4\u83e5\u83e6\u83e7\u83e8\u83e9\u83ea\u83eb\u83ec\u83ed\u83ee\u83ef\u83f0\u83f1\u83f2\u83f3\u83f4\u83f5\u83f6\u83f7\u83f8\u83f9\u83fa\u83fb\u83fc\u83fd\u83fe\u83ff\u8400\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408\u8409\u840a\u840b\u840c\u840d\u840e\u840f\u8410\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418\u8419\u841a\u841b\u841c\u841d\u841e\u841f\u8420\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428\u8429\u842a\u842b\u842c\u842d\u842e\u842f\u8430\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438\u8439\u843a\u843b\u843c\u843d\u843e\u843f\u8440\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448\u8449\u844a\u844b\u844c\u844d\u844e\u844f\u8450\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458\u8459\u845a\u845b\u845c\u845d\u845e\u845f\u8460\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468\u8469\u846a\u846b\u846c\u846d\u846e\u846f\u8470\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478\u8479\u847a\u847b\u847c\u847d\u847e\u847f\u8480\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488\u8489\u848a\u848b\u848c\u848d\u848e\u848f\u8490\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498\u8499\u849a\u849b\u849c\u849d\u849e\u849f\u84a0\u84a1\u84a2\u84a3\u84a4\u84a5\u84a6\u84a7\u84a8\u84a9\u84aa\u84ab\u84ac\u84ad\u84ae\u84af\u84b0\u84b1\u84b2\u84b3\u84b4\u84b5\u84b6\u84b7\u84b8\u84b9\u84ba\u84bb\u84bc\u84bd\u84be\u84bf\u84c0\u84c1\u84c2\u84c3\u84c4\u84c5\u84c6\u84c7\u84c8\u84c9\u84ca\u84cb\u84cc\u84cd\u84ce\u84cf\u84d0\u84d1\u84d2\u84d3\u84d4\u84d5\u84d6\u84d7\u84d8\u84d9\u84da\u84db\u84dc\u84dd\u84de\u84df\u84e0\u84e1\u84e2\u84e3\u84e4\u84e5\u84e6\u84e7\u84e8\u84e9\u84ea\u84eb\u84ec\u84ed\u84ee\u84ef\u84f0\u84f1\u84f2\u84f3\u84f4\u84f5\u84f6\u84f7\u84f8\u84f9\u84fa\u84fb\u84fc\u84fd\u84fe\u84ff\u8500\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508\u8509\u850a\u850b\u850c\u850d\u850e\u850f\u8510\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518\u8519\u851a\u851b\u851c\u851d\u851e\u851f\u8520\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852a\u852b\u852c\u852d\u852e\u852f\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538\u8539\u853a\u853b\u853c\u853d\u853e\u853f\u8540\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548\u8549\u854a\u854b\u854c\u854d\u854e\u854f\u8550\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855a\u855b\u855c\u855d\u855e\u855f\u8560\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568\u8569\u856a\u856b\u856c\u856d\u856e\u856f\u8570\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578\u8579\u857a\u857b\u857c\u857d\u857e\u857f\u8580\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588\u8589\u858a\u858b\u858c\u858d\u858e\u858f\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859a\u859b\u859c\u859d\u859e\u859f\u85a0\u85a1\u85a2\u85a3\u85a4\u85a5\u85a6\u85a7\u85a8\u85a9\u85aa\u85ab\u85ac\u85ad\u85ae\u85af\u85b0\u85b1\u85b2\u85b3\u85b4\u85b5\u85b6\u85b7\u85b8\u85b9\u85ba\u85bb\u85bc\u85bd\u85be\u85bf\u85c0\u85c1\u85c2\u85c3\u85c4\u85c5\u85c6\u85c7\u85c8\u85c9\u85ca\u85cb\u85cc\u85cd\u85ce\u85cf\u85d0\u85d1\u85d2\u85d3\u85d4\u85d5\u85d6\u85d7\u85d8\u85d9\u85da\u85db\u85dc\u85dd\u85de\u85df\u85e0\u85e1\u85e2\u85e3\u85e4\u85e5\u85e6\u85e7\u85e8\u85e9\u85ea\u85eb\u85ec\u85ed\u85ee\u85ef\u85f0\u85f1\u85f2\u85f3\u85f4\u85f5\u85f6\u85f7\u85f8\u85f9\u85fa\u85fb\u85fc\u85fd\u85fe\u85ff\u8600\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608\u8609\u860a\u860b\u860c\u860d\u860e\u860f\u8610\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618\u8619\u861a\u861b\u861c\u861d\u861e\u861f\u8620\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628\u8629\u862a\u862b\u862c\u862d\u862e\u862f\u8630\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638\u8639\u863a\u863b\u863c\u863d\u863e\u863f\u8640\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648\u8649\u864a\u864b\u864c\u864d\u864e\u864f\u8650\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658\u8659\u865a\u865b\u865c\u865d\u865e\u865f\u8660\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668\u8669\u866a\u866b\u866c\u866d\u866e\u866f\u8670\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8679\u867a\u867b\u867c\u867d\u867e\u867f\u8680\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688\u8689\u868a\u868b\u868c\u868d\u868e\u868f\u8690\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698\u8699\u869a\u869b\u869c\u869d\u869e\u869f\u86a0\u86a1\u86a2\u86a3\u86a4\u86a5\u86a6\u86a7\u86a8\u86a9\u86aa\u86ab\u86ac\u86ad\u86ae\u86af\u86b0\u86b1\u86b2\u86b3\u86b4\u86b5\u86b6\u86b7\u86b8\u86b9\u86ba\u86bb\u86bc\u86bd\u86be\u86bf\u86c0\u86c1\u86c2\u86c3\u86c4\u86c5\u86c6\u86c7\u86c8\u86c9\u86ca\u86cb\u86cc\u86cd\u86ce\u86cf\u86d0\u86d1\u86d2\u86d3\u86d4\u86d5\u86d6\u86d7\u86d8\u86d9\u86da\u86db\u86dc\u86dd\u86de\u86df\u86e0\u86e1\u86e2\u86e3\u86e4\u86e5\u86e6\u86e7\u86e8\u86e9\u86ea\u86eb\u86ec\u86ed\u86ee\u86ef\u86f0\u86f1\u86f2\u86f3\u86f4\u86f5\u86f6\u86f7\u86f8\u86f9\u86fa\u86fb\u86fc\u86fd\u86fe\u86ff\u8700\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708\u8709\u870a\u870b\u870c\u870d\u870e\u870f\u8710\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718\u8719\u871a\u871b\u871c\u871d\u871e\u871f\u8720\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728\u8729\u872a\u872b\u872c\u872d\u872e\u872f\u8730\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738\u8739\u873a\u873b\u873c\u873d\u873e\u873f\u8740\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748\u8749\u874a\u874b\u874c\u874d\u874e\u874f\u8750\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758\u8759\u875a\u875b\u875c\u875d\u875e\u875f\u8760\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768\u8769\u876a\u876b\u876c\u876d\u876e\u876f\u8770\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778\u8779\u877a\u877b\u877c\u877d\u877e\u877f\u8780\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788\u8789\u878a\u878b\u878c\u878d\u878e\u878f\u8790\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798\u8799\u879a\u879b\u879c\u879d\u879e\u879f\u87a0\u87a1\u87a2\u87a3\u87a4\u87a5\u87a6\u87a7\u87a8\u87a9\u87aa\u87ab\u87ac\u87ad\u87ae\u87af\u87b0\u87b1\u87b2\u87b3\u87b4\u87b5\u87b6\u87b7\u87b8\u87b9\u87ba\u87bb\u87bc\u87bd\u87be\u87bf\u87c0\u87c1\u87c2\u87c3\u87c4\u87c5\u87c6\u87c7\u87c8\u87c9\u87ca\u87cb\u87cc\u87cd\u87ce\u87cf\u87d0\u87d1\u87d2\u87d3\u87d4\u87d5\u87d6\u87d7\u87d8\u87d9\u87da\u87db\u87dc\u87dd\u87de\u87df\u87e0\u87e1\u87e2\u87e3\u87e4\u87e5\u87e6\u87e7\u87e8\u87e9\u87ea\u87eb\u87ec\u87ed\u87ee\u87ef\u87f0\u87f1\u87f2\u87f3\u87f4\u87f5\u87f6\u87f7\u87f8\u87f9\u87fa\u87fb\u87fc\u87fd\u87fe\u87ff\u8800\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808\u8809\u880a\u880b\u880c\u880d\u880e\u880f\u8810\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818\u8819\u881a\u881b\u881c\u881d\u881e\u881f\u8820\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828\u8829\u882a\u882b\u882c\u882d\u882e\u882f\u8830\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838\u8839\u883a\u883b\u883c\u883d\u883e\u883f\u8840\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848\u8849\u884a\u884b\u884c\u884d\u884e\u884f\u8850\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858\u8859\u885a\u885b\u885c\u885d\u885e\u885f\u8860\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868\u8869\u886a\u886b\u886c\u886d\u886e\u886f\u8870\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878\u8879\u887a\u887b\u887c\u887d\u887e\u887f\u8880\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888\u8889\u888a\u888b\u888c\u888d\u888e\u888f\u8890\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898\u8899\u889a\u889b\u889c\u889d\u889e\u889f\u88a0\u88a1\u88a2\u88a3\u88a4\u88a5\u88a6\u88a7\u88a8\u88a9\u88aa\u88ab\u88ac\u88ad\u88ae\u88af\u88b0\u88b1\u88b2\u88b3\u88b4\u88b5\u88b6\u88b7\u88b8\u88b9\u88ba\u88bb\u88bc\u88bd\u88be\u88bf\u88c0\u88c1\u88c2\u88c3\u88c4\u88c5\u88c6\u88c7\u88c8\u88c9\u88ca\u88cb\u88cc\u88cd\u88ce\u88cf\u88d0\u88d1\u88d2\u88d3\u88d4\u88d5\u88d6\u88d7\u88d8\u88d9\u88da\u88db\u88dc\u88dd\u88de\u88df\u88e0\u88e1\u88e2\u88e3\u88e4\u88e5\u88e6\u88e7\u88e8\u88e9\u88ea\u88eb\u88ec\u88ed\u88ee\u88ef\u88f0\u88f1\u88f2\u88f3\u88f4\u88f5\u88f6\u88f7\u88f8\u88f9\u88fa\u88fb\u88fc\u88fd\u88fe\u88ff\u8900\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908\u8909\u890a\u890b\u890c\u890d\u890e\u890f\u8910\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918\u8919\u891a\u891b\u891c\u891d\u891e\u891f\u8920\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928\u8929\u892a\u892b\u892c\u892d\u892e\u892f\u8930\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938\u8939\u893a\u893b\u893c\u893d\u893e\u893f\u8940\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948\u8949\u894a\u894b\u894c\u894d\u894e\u894f\u8950\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958\u8959\u895a\u895b\u895c\u895d\u895e\u895f\u8960\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968\u8969\u896a\u896b\u896c\u896d\u896e\u896f\u8970\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978\u8979\u897a\u897b\u897c\u897d\u897e\u897f\u8980\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988\u8989\u898a\u898b\u898c\u898d\u898e\u898f\u8990\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998\u8999\u899a\u899b\u899c\u899d\u899e\u899f\u89a0\u89a1\u89a2\u89a3\u89a4\u89a5\u89a6\u89a7\u89a8\u89a9\u89aa\u89ab\u89ac\u89ad\u89ae\u89af\u89b0\u89b1\u89b2\u89b3\u89b4\u89b5\u89b6\u89b7\u89b8\u89b9\u89ba\u89bb\u89bc\u89bd\u89be\u89bf\u89c0\u89c1\u89c2\u89c3\u89c4\u89c5\u89c6\u89c7\u89c8\u89c9\u89ca\u89cb\u89cc\u89cd\u89ce\u89cf\u89d0\u89d1\u89d2\u89d3\u89d4\u89d5\u89d6\u89d7\u89d8\u89d9\u89da\u89db\u89dc\u89dd\u89de\u89df\u89e0\u89e1\u89e2\u89e3\u89e4\u89e5\u89e6\u89e7\u89e8\u89e9\u89ea\u89eb\u89ec\u89ed\u89ee\u89ef\u89f0\u89f1\u89f2\u89f3\u89f4\u89f5\u89f6\u89f7\u89f8\u89f9\u89fa\u89fb\u89fc\u89fd\u89fe\u89ff\u8a00\u8a01\u8a02\u8a03\u8a04\u8a05\u8a06\u8a07\u8a08\u8a09\u8a0a\u8a0b\u8a0c\u8a0d\u8a0e\u8a0f\u8a10\u8a11\u8a12\u8a13\u8a14\u8a15\u8a16\u8a17\u8a18\u8a19\u8a1a\u8a1b\u8a1c\u8a1d\u8a1e\u8a1f\u8a20\u8a21\u8a22\u8a23\u8a24\u8a25\u8a26\u8a27\u8a28\u8a29\u8a2a\u8a2b\u8a2c\u8a2d\u8a2e\u8a2f\u8a30\u8a31\u8a32\u8a33\u8a34\u8a35\u8a36\u8a37\u8a38\u8a39\u8a3a\u8a3b\u8a3c\u8a3d\u8a3e\u8a3f\u8a40\u8a41\u8a42\u8a43\u8a44\u8a45\u8a46\u8a47\u8a48\u8a49\u8a4a\u8a4b\u8a4c\u8a4d\u8a4e\u8a4f\u8a50\u8a51\u8a52\u8a53\u8a54\u8a55\u8a56\u8a57\u8a58\u8a59\u8a5a\u8a5b\u8a5c\u8a5d\u8a5e\u8a5f\u8a60\u8a61\u8a62\u8a63\u8a64\u8a65\u8a66\u8a67\u8a68\u8a69\u8a6a\u8a6b\u8a6c\u8a6d\u8a6e\u8a6f\u8a70\u8a71\u8a72\u8a73\u8a74\u8a75\u8a76\u8a77\u8a78\u8a79\u8a7a\u8a7b\u8a7c\u8a7d\u8a7e\u8a7f\u8a80\u8a81\u8a82\u8a83\u8a84\u8a85\u8a86\u8a87\u8a88\u8a89\u8a8a\u8a8b\u8a8c\u8a8d\u8a8e\u8a8f\u8a90\u8a91\u8a92\u8a93\u8a94\u8a95\u8a96\u8a97\u8a98\u8a99\u8a9a\u8a9b\u8a9c\u8a9d\u8a9e\u8a9f\u8aa0\u8aa1\u8aa2\u8aa3\u8aa4\u8aa5\u8aa6\u8aa7\u8aa8\u8aa9\u8aaa\u8aab\u8aac\u8aad\u8aae\u8aaf\u8ab0\u8ab1\u8ab2\u8ab3\u8ab4\u8ab5\u8ab6\u8ab7\u8ab8\u8ab9\u8aba\u8abb\u8abc\u8abd\u8abe\u8abf\u8ac0\u8ac1\u8ac2\u8ac3\u8ac4\u8ac5\u8ac6\u8ac7\u8ac8\u8ac9\u8aca\u8acb\u8acc\u8acd\u8ace\u8acf\u8ad0\u8ad1\u8ad2\u8ad3\u8ad4\u8ad5\u8ad6\u8ad7\u8ad8\u8ad9\u8ada\u8adb\u8adc\u8add\u8ade\u8adf\u8ae0\u8ae1\u8ae2\u8ae3\u8ae4\u8ae5\u8ae6\u8ae7\u8ae8\u8ae9\u8aea\u8aeb\u8aec\u8aed\u8aee\u8aef\u8af0\u8af1\u8af2\u8af3\u8af4\u8af5\u8af6\u8af7\u8af8\u8af9\u8afa\u8afb\u8afc\u8afd\u8afe\u8aff\u8b00\u8b01\u8b02\u8b03\u8b04\u8b05\u8b06\u8b07\u8b08\u8b09\u8b0a\u8b0b\u8b0c\u8b0d\u8b0e\u8b0f\u8b10\u8b11\u8b12\u8b13\u8b14\u8b15\u8b16\u8b17\u8b18\u8b19\u8b1a\u8b1b\u8b1c\u8b1d\u8b1e\u8b1f\u8b20\u8b21\u8b22\u8b23\u8b24\u8b25\u8b26\u8b27\u8b28\u8b29\u8b2a\u8b2b\u8b2c\u8b2d\u8b2e\u8b2f\u8b30\u8b31\u8b32\u8b33\u8b34\u8b35\u8b36\u8b37\u8b38\u8b39\u8b3a\u8b3b\u8b3c\u8b3d\u8b3e\u8b3f\u8b40\u8b41\u8b42\u8b43\u8b44\u8b45\u8b46\u8b47\u8b48\u8b49\u8b4a\u8b4b\u8b4c\u8b4d\u8b4e\u8b4f\u8b50\u8b51\u8b52\u8b53\u8b54\u8b55\u8b56\u8b57\u8b58\u8b59\u8b5a\u8b5b\u8b5c\u8b5d\u8b5e\u8b5f\u8b60\u8b61\u8b62\u8b63\u8b64\u8b65\u8b66\u8b67\u8b68\u8b69\u8b6a\u8b6b\u8b6c\u8b6d\u8b6e\u8b6f\u8b70\u8b71\u8b72\u8b73\u8b74\u8b75\u8b76\u8b77\u8b78\u8b79\u8b7a\u8b7b\u8b7c\u8b7d\u8b7e\u8b7f\u8b80\u8b81\u8b82\u8b83\u8b84\u8b85\u8b86\u8b87\u8b88\u8b89\u8b8a\u8b8b\u8b8c\u8b8d\u8b8e\u8b8f\u8b90\u8b91\u8b92\u8b93\u8b94\u8b95\u8b96\u8b97\u8b98\u8b99\u8b9a\u8b9b\u8b9c\u8b9d\u8b9e\u8b9f\u8ba0\u8ba1\u8ba2\u8ba3\u8ba4\u8ba5\u8ba6\u8ba7\u8ba8\u8ba9\u8baa\u8bab\u8bac\u8bad\u8bae\u8baf\u8bb0\u8bb1\u8bb2\u8bb3\u8bb4\u8bb5\u8bb6\u8bb7\u8bb8\u8bb9\u8bba\u8bbb\u8bbc\u8bbd\u8bbe\u8bbf\u8bc0\u8bc1\u8bc2\u8bc3\u8bc4\u8bc5\u8bc6\u8bc7\u8bc8\u8bc9\u8bca\u8bcb\u8bcc\u8bcd\u8bce\u8bcf\u8bd0\u8bd1\u8bd2\u8bd3\u8bd4\u8bd5\u8bd6\u8bd7\u8bd8\u8bd9\u8bda\u8bdb\u8bdc\u8bdd\u8bde\u8bdf\u8be0\u8be1\u8be2\u8be3\u8be4\u8be5\u8be6\u8be7\u8be8\u8be9\u8bea\u8beb\u8bec\u8bed\u8bee\u8bef\u8bf0\u8bf1\u8bf2\u8bf3\u8bf4\u8bf5\u8bf6\u8bf7\u8bf8\u8bf9\u8bfa\u8bfb\u8bfc\u8bfd\u8bfe\u8bff\u8c00\u8c01\u8c02\u8c03\u8c04\u8c05\u8c06\u8c07\u8c08\u8c09\u8c0a\u8c0b\u8c0c\u8c0d\u8c0e\u8c0f\u8c10\u8c11\u8c12\u8c13\u8c14\u8c15\u8c16\u8c17\u8c18\u8c19\u8c1a\u8c1b\u8c1c\u8c1d\u8c1e\u8c1f\u8c20\u8c21\u8c22\u8c23\u8c24\u8c25\u8c26\u8c27\u8c28\u8c29\u8c2a\u8c2b\u8c2c\u8c2d\u8c2e\u8c2f\u8c30\u8c31\u8c32\u8c33\u8c34\u8c35\u8c36\u8c37\u8c38\u8c39\u8c3a\u8c3b\u8c3c\u8c3d\u8c3e\u8c3f\u8c40\u8c41\u8c42\u8c43\u8c44\u8c45\u8c46\u8c47\u8c48\u8c49\u8c4a\u8c4b\u8c4c\u8c4d\u8c4e\u8c4f\u8c50\u8c51\u8c52\u8c53\u8c54\u8c55\u8c56\u8c57\u8c58\u8c59\u8c5a\u8c5b\u8c5c\u8c5d\u8c5e\u8c5f\u8c60\u8c61\u8c62\u8c63\u8c64\u8c65\u8c66\u8c67\u8c68\u8c69\u8c6a\u8c6b\u8c6c\u8c6d\u8c6e\u8c6f\u8c70\u8c71\u8c72\u8c73\u8c74\u8c75\u8c76\u8c77\u8c78\u8c79\u8c7a\u8c7b\u8c7c\u8c7d\u8c7e\u8c7f\u8c80\u8c81\u8c82\u8c83\u8c84\u8c85\u8c86\u8c87\u8c88\u8c89\u8c8a\u8c8b\u8c8c\u8c8d\u8c8e\u8c8f\u8c90\u8c91\u8c92\u8c93\u8c94\u8c95\u8c96\u8c97\u8c98\u8c99\u8c9a\u8c9b\u8c9c\u8c9d\u8c9e\u8c9f\u8ca0\u8ca1\u8ca2\u8ca3\u8ca4\u8ca5\u8ca6\u8ca7\u8ca8\u8ca9\u8caa\u8cab\u8cac\u8cad\u8cae\u8caf\u8cb0\u8cb1\u8cb2\u8cb3\u8cb4\u8cb5\u8cb6\u8cb7\u8cb8\u8cb9\u8cba\u8cbb\u8cbc\u8cbd\u8cbe\u8cbf\u8cc0\u8cc1\u8cc2\u8cc3\u8cc4\u8cc5\u8cc6\u8cc7\u8cc8\u8cc9\u8cca\u8ccb\u8ccc\u8ccd\u8cce\u8ccf\u8cd0\u8cd1\u8cd2\u8cd3\u8cd4\u8cd5\u8cd6\u8cd7\u8cd8\u8cd9\u8cda\u8cdb\u8cdc\u8cdd\u8cde\u8cdf\u8ce0\u8ce1\u8ce2\u8ce3\u8ce4\u8ce5\u8ce6\u8ce7\u8ce8\u8ce9\u8cea\u8ceb\u8cec\u8ced\u8cee\u8cef\u8cf0\u8cf1\u8cf2\u8cf3\u8cf4\u8cf5\u8cf6\u8cf7\u8cf8\u8cf9\u8cfa\u8cfb\u8cfc\u8cfd\u8cfe\u8cff\u8d00\u8d01\u8d02\u8d03\u8d04\u8d05\u8d06\u8d07\u8d08\u8d09\u8d0a\u8d0b\u8d0c\u8d0d\u8d0e\u8d0f\u8d10\u8d11\u8d12\u8d13\u8d14\u8d15\u8d16\u8d17\u8d18\u8d19\u8d1a\u8d1b\u8d1c\u8d1d\u8d1e\u8d1f\u8d20\u8d21\u8d22\u8d23\u8d24\u8d25\u8d26\u8d27\u8d28\u8d29\u8d2a\u8d2b\u8d2c\u8d2d\u8d2e\u8d2f\u8d30\u8d31\u8d32\u8d33\u8d34\u8d35\u8d36\u8d37\u8d38\u8d39\u8d3a\u8d3b\u8d3c\u8d3d\u8d3e\u8d3f\u8d40\u8d41\u8d42\u8d43\u8d44\u8d45\u8d46\u8d47\u8d48\u8d49\u8d4a\u8d4b\u8d4c\u8d4d\u8d4e\u8d4f\u8d50\u8d51\u8d52\u8d53\u8d54\u8d55\u8d56\u8d57\u8d58\u8d59\u8d5a\u8d5b\u8d5c\u8d5d\u8d5e\u8d5f\u8d60\u8d61\u8d62\u8d63\u8d64\u8d65\u8d66\u8d67\u8d68\u8d69\u8d6a\u8d6b\u8d6c\u8d6d\u8d6e\u8d6f\u8d70\u8d71\u8d72\u8d73\u8d74\u8d75\u8d76\u8d77\u8d78\u8d79\u8d7a\u8d7b\u8d7c\u8d7d\u8d7e\u8d7f\u8d80\u8d81\u8d82\u8d83\u8d84\u8d85\u8d86\u8d87\u8d88\u8d89\u8d8a\u8d8b\u8d8c\u8d8d\u8d8e\u8d8f\u8d90\u8d91\u8d92\u8d93\u8d94\u8d95\u8d96\u8d97\u8d98\u8d99\u8d9a\u8d9b\u8d9c\u8d9d\u8d9e\u8d9f\u8da0\u8da1\u8da2\u8da3\u8da4\u8da5\u8da6\u8da7\u8da8\u8da9\u8daa\u8dab\u8dac\u8dad\u8dae\u8daf\u8db0\u8db1\u8db2\u8db3\u8db4\u8db5\u8db6\u8db7\u8db8\u8db9\u8dba\u8dbb\u8dbc\u8dbd\u8dbe\u8dbf\u8dc0\u8dc1\u8dc2\u8dc3\u8dc4\u8dc5\u8dc6\u8dc7\u8dc8\u8dc9\u8dca\u8dcb\u8dcc\u8dcd\u8dce\u8dcf\u8dd0\u8dd1\u8dd2\u8dd3\u8dd4\u8dd5\u8dd6\u8dd7\u8dd8\u8dd9\u8dda\u8ddb\u8ddc\u8ddd\u8dde\u8ddf\u8de0\u8de1\u8de2\u8de3\u8de4\u8de5\u8de6\u8de7\u8de8\u8de9\u8dea\u8deb\u8dec\u8ded\u8dee\u8def\u8df0\u8df1\u8df2\u8df3\u8df4\u8df5\u8df6\u8df7\u8df8\u8df9\u8dfa\u8dfb\u8dfc\u8dfd\u8dfe\u8dff\u8e00\u8e01\u8e02\u8e03\u8e04\u8e05\u8e06\u8e07\u8e08\u8e09\u8e0a\u8e0b\u8e0c\u8e0d\u8e0e\u8e0f\u8e10\u8e11\u8e12\u8e13\u8e14\u8e15\u8e16\u8e17\u8e18\u8e19\u8e1a\u8e1b\u8e1c\u8e1d\u8e1e\u8e1f\u8e20\u8e21\u8e22\u8e23\u8e24\u8e25\u8e26\u8e27\u8e28\u8e29\u8e2a\u8e2b\u8e2c\u8e2d\u8e2e\u8e2f\u8e30\u8e31\u8e32\u8e33\u8e34\u8e35\u8e36\u8e37\u8e38\u8e39\u8e3a\u8e3b\u8e3c\u8e3d\u8e3e\u8e3f\u8e40\u8e41\u8e42\u8e43\u8e44\u8e45\u8e46\u8e47\u8e48\u8e49\u8e4a\u8e4b\u8e4c\u8e4d\u8e4e\u8e4f\u8e50\u8e51\u8e52\u8e53\u8e54\u8e55\u8e56\u8e57\u8e58\u8e59\u8e5a\u8e5b\u8e5c\u8e5d\u8e5e\u8e5f\u8e60\u8e61\u8e62\u8e63\u8e64\u8e65\u8e66\u8e67\u8e68\u8e69\u8e6a\u8e6b\u8e6c\u8e6d\u8e6e\u8e6f\u8e70\u8e71\u8e72\u8e73\u8e74\u8e75\u8e76\u8e77\u8e78\u8e79\u8e7a\u8e7b\u8e7c\u8e7d\u8e7e\u8e7f\u8e80\u8e81\u8e82\u8e83\u8e84\u8e85\u8e86\u8e87\u8e88\u8e89\u8e8a\u8e8b\u8e8c\u8e8d\u8e8e\u8e8f\u8e90\u8e91\u8e92\u8e93\u8e94\u8e95\u8e96\u8e97\u8e98\u8e99\u8e9a\u8e9b\u8e9c\u8e9d\u8e9e\u8e9f\u8ea0\u8ea1\u8ea2\u8ea3\u8ea4\u8ea5\u8ea6\u8ea7\u8ea8\u8ea9\u8eaa\u8eab\u8eac\u8ead\u8eae\u8eaf\u8eb0\u8eb1\u8eb2\u8eb3\u8eb4\u8eb5\u8eb6\u8eb7\u8eb8\u8eb9\u8eba\u8ebb\u8ebc\u8ebd\u8ebe\u8ebf\u8ec0\u8ec1\u8ec2\u8ec3\u8ec4\u8ec5\u8ec6\u8ec7\u8ec8\u8ec9\u8eca\u8ecb\u8ecc\u8ecd\u8ece\u8ecf\u8ed0\u8ed1\u8ed2\u8ed3\u8ed4\u8ed5\u8ed6\u8ed7\u8ed8\u8ed9\u8eda\u8edb\u8edc\u8edd\u8ede\u8edf\u8ee0\u8ee1\u8ee2\u8ee3\u8ee4\u8ee5\u8ee6\u8ee7\u8ee8\u8ee9\u8eea\u8eeb\u8eec\u8eed\u8eee\u8eef\u8ef0\u8ef1\u8ef2\u8ef3\u8ef4\u8ef5\u8ef6\u8ef7\u8ef8\u8ef9\u8efa\u8efb\u8efc\u8efd\u8efe\u8eff\u8f00\u8f01\u8f02\u8f03\u8f04\u8f05\u8f06\u8f07\u8f08\u8f09\u8f0a\u8f0b\u8f0c\u8f0d\u8f0e\u8f0f\u8f10\u8f11\u8f12\u8f13\u8f14\u8f15\u8f16\u8f17\u8f18\u8f19\u8f1a\u8f1b\u8f1c\u8f1d\u8f1e\u8f1f\u8f20\u8f21\u8f22\u8f23\u8f24\u8f25\u8f26\u8f27\u8f28\u8f29\u8f2a\u8f2b\u8f2c\u8f2d\u8f2e\u8f2f\u8f30\u8f31\u8f32\u8f33\u8f34\u8f35\u8f36\u8f37\u8f38\u8f39\u8f3a\u8f3b\u8f3c\u8f3d\u8f3e\u8f3f\u8f40\u8f41\u8f42\u8f43\u8f44\u8f45\u8f46\u8f47\u8f48\u8f49\u8f4a\u8f4b\u8f4c\u8f4d\u8f4e\u8f4f\u8f50\u8f51\u8f52\u8f53\u8f54\u8f55\u8f56\u8f57\u8f58\u8f59\u8f5a\u8f5b\u8f5c\u8f5d\u8f5e\u8f5f\u8f60\u8f61\u8f62\u8f63\u8f64\u8f65\u8f66\u8f67\u8f68\u8f69\u8f6a\u8f6b\u8f6c\u8f6d\u8f6e\u8f6f\u8f70\u8f71\u8f72\u8f73\u8f74\u8f75\u8f76\u8f77\u8f78\u8f79\u8f7a\u8f7b\u8f7c\u8f7d\u8f7e\u8f7f\u8f80\u8f81\u8f82\u8f83\u8f84\u8f85\u8f86\u8f87\u8f88\u8f89\u8f8a\u8f8b\u8f8c\u8f8d\u8f8e\u8f8f\u8f90\u8f91\u8f92\u8f93\u8f94\u8f95\u8f96\u8f97\u8f98\u8f99\u8f9a\u8f9b\u8f9c\u8f9d\u8f9e\u8f9f\u8fa0\u8fa1\u8fa2\u8fa3\u8fa4\u8fa5\u8fa6\u8fa7\u8fa8\u8fa9\u8faa\u8fab\u8fac\u8fad\u8fae\u8faf\u8fb0\u8fb1\u8fb2\u8fb3\u8fb4\u8fb5\u8fb6\u8fb7\u8fb8\u8fb9\u8fba\u8fbb\u8fbc\u8fbd\u8fbe\u8fbf\u8fc0\u8fc1\u8fc2\u8fc3\u8fc4\u8fc5\u8fc6\u8fc7\u8fc8\u8fc9\u8fca\u8fcb\u8fcc\u8fcd\u8fce\u8fcf\u8fd0\u8fd1\u8fd2\u8fd3\u8fd4\u8fd5\u8fd6\u8fd7\u8fd8\u8fd9\u8fda\u8fdb\u8fdc\u8fdd\u8fde\u8fdf\u8fe0\u8fe1\u8fe2\u8fe3\u8fe4\u8fe5\u8fe6\u8fe7\u8fe8\u8fe9\u8fea\u8feb\u8fec\u8fed\u8fee\u8fef\u8ff0\u8ff1\u8ff2\u8ff3\u8ff4\u8ff5\u8ff6\u8ff7\u8ff8\u8ff9\u8ffa\u8ffb\u8ffc\u8ffd\u8ffe\u8fff\u9000\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008\u9009\u900a\u900b\u900c\u900d\u900e\u900f\u9010\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018\u9019\u901a\u901b\u901c\u901d\u901e\u901f\u9020\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028\u9029\u902a\u902b\u902c\u902d\u902e\u902f\u9030\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038\u9039\u903a\u903b\u903c\u903d\u903e\u903f\u9040\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048\u9049\u904a\u904b\u904c\u904d\u904e\u904f\u9050\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058\u9059\u905a\u905b\u905c\u905d\u905e\u905f\u9060\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068\u9069\u906a\u906b\u906c\u906d\u906e\u906f\u9070\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078\u9079\u907a\u907b\u907c\u907d\u907e\u907f\u9080\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088\u9089\u908a\u908b\u908c\u908d\u908e\u908f\u9090\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098\u9099\u909a\u909b\u909c\u909d\u909e\u909f\u90a0\u90a1\u90a2\u90a3\u90a4\u90a5\u90a6\u90a7\u90a8\u90a9\u90aa\u90ab\u90ac\u90ad\u90ae\u90af\u90b0\u90b1\u90b2\u90b3\u90b4\u90b5\u90b6\u90b7\u90b8\u90b9\u90ba\u90bb\u90bc\u90bd\u90be\u90bf\u90c0\u90c1\u90c2\u90c3\u90c4\u90c5\u90c6\u90c7\u90c8\u90c9\u90ca\u90cb\u90cc\u90cd\u90ce\u90cf\u90d0\u90d1\u90d2\u90d3\u90d4\u90d5\u90d6\u90d7\u90d8\u90d9\u90da\u90db\u90dc\u90dd\u90de\u90df\u90e0\u90e1\u90e2\u90e3\u90e4\u90e5\u90e6\u90e7\u90e8\u90e9\u90ea\u90eb\u90ec\u90ed\u90ee\u90ef\u90f0\u90f1\u90f2\u90f3\u90f4\u90f5\u90f6\u90f7\u90f8\u90f9\u90fa\u90fb\u90fc\u90fd\u90fe\u90ff\u9100\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108\u9109\u910a\u910b\u910c\u910d\u910e\u910f\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118\u9119\u911a\u911b\u911c\u911d\u911e\u911f\u9120\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128\u9129\u912a\u912b\u912c\u912d\u912e\u912f\u9130\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u9139\u913a\u913b\u913c\u913d\u913e\u913f\u9140\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148\u9149\u914a\u914b\u914c\u914d\u914e\u914f\u9150\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158\u9159\u915a\u915b\u915c\u915d\u915e\u915f\u9160\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168\u9169\u916a\u916b\u916c\u916d\u916e\u916f\u9170\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178\u9179\u917a\u917b\u917c\u917d\u917e\u917f\u9180\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188\u9189\u918a\u918b\u918c\u918d\u918e\u918f\u9190\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919a\u919b\u919c\u919d\u919e\u919f\u91a0\u91a1\u91a2\u91a3\u91a4\u91a5\u91a6\u91a7\u91a8\u91a9\u91aa\u91ab\u91ac\u91ad\u91ae\u91af\u91b0\u91b1\u91b2\u91b3\u91b4\u91b5\u91b6\u91b7\u91b8\u91b9\u91ba\u91bb\u91bc\u91bd\u91be\u91bf\u91c0\u91c1\u91c2\u91c3\u91c4\u91c5\u91c6\u91c7\u91c8\u91c9\u91ca\u91cb\u91cc\u91cd\u91ce\u91cf\u91d0\u91d1\u91d2\u91d3\u91d4\u91d5\u91d6\u91d7\u91d8\u91d9\u91da\u91db\u91dc\u91dd\u91de\u91df\u91e0\u91e1\u91e2\u91e3\u91e4\u91e5\u91e6\u91e7\u91e8\u91e9\u91ea\u91eb\u91ec\u91ed\u91ee\u91ef\u91f0\u91f1\u91f2\u91f3\u91f4\u91f5\u91f6\u91f7\u91f8\u91f9\u91fa\u91fb\u91fc\u91fd\u91fe\u91ff\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208\u9209\u920a\u920b\u920c\u920d\u920e\u920f\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218\u9219\u921a\u921b\u921c\u921d\u921e\u921f\u9220\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228\u9229\u922a\u922b\u922c\u922d\u922e\u922f\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238\u9239\u923a\u923b\u923c\u923d\u923e\u923f\u9240\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248\u9249\u924a\u924b\u924c\u924d\u924e\u924f\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258\u9259\u925a\u925b\u925c\u925d\u925e\u925f\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268\u9269\u926a\u926b\u926c\u926d\u926e\u926f\u9270\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278\u9279\u927a\u927b\u927c\u927d\u927e\u927f\u9280\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288\u9289\u928a\u928b\u928c\u928d\u928e\u928f\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929a\u929b\u929c\u929d\u929e\u929f\u92a0\u92a1\u92a2\u92a3\u92a4\u92a5\u92a6\u92a7\u92a8\u92a9\u92aa\u92ab\u92ac\u92ad\u92ae\u92af\u92b0\u92b1\u92b2\u92b3\u92b4\u92b5\u92b6\u92b7\u92b8\u92b9\u92ba\u92bb\u92bc\u92bd\u92be\u92bf\u92c0\u92c1\u92c2\u92c3\u92c4\u92c5\u92c6\u92c7\u92c8\u92c9\u92ca\u92cb\u92cc\u92cd\u92ce\u92cf\u92d0\u92d1\u92d2\u92d3\u92d4\u92d5\u92d6\u92d7\u92d8\u92d9\u92da\u92db\u92dc\u92dd\u92de\u92df\u92e0\u92e1\u92e2\u92e3\u92e4\u92e5\u92e6\u92e7\u92e8\u92e9\u92ea\u92eb\u92ec\u92ed\u92ee\u92ef\u92f0\u92f1\u92f2\u92f3\u92f4\u92f5\u92f6\u92f7\u92f8\u92f9\u92fa\u92fb\u92fc\u92fd\u92fe\u92ff\u9300\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308\u9309\u930a\u930b\u930c\u930d\u930e\u930f\u9310\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931a\u931b\u931c\u931d\u931e\u931f\u9320\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328\u9329\u932a\u932b\u932c\u932d\u932e\u932f\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933a\u933b\u933c\u933d\u933e\u933f\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348\u9349\u934a\u934b\u934c\u934d\u934e\u934f\u9350\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358\u9359\u935a\u935b\u935c\u935d\u935e\u935f\u9360\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368\u9369\u936a\u936b\u936c\u936d\u936e\u936f\u9370\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379\u937a\u937b\u937c\u937d\u937e\u937f\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389\u938a\u938b\u938c\u938d\u938e\u938f\u9390\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939a\u939b\u939c\u939d\u939e\u939f\u93a0\u93a1\u93a2\u93a3\u93a4\u93a5\u93a6\u93a7\u93a8\u93a9\u93aa\u93ab\u93ac\u93ad\u93ae\u93af\u93b0\u93b1\u93b2\u93b3\u93b4\u93b5\u93b6\u93b7\u93b8\u93b9\u93ba\u93bb\u93bc\u93bd\u93be\u93bf\u93c0\u93c1\u93c2\u93c3\u93c4\u93c5\u93c6\u93c7\u93c8\u93c9\u93ca\u93cb\u93cc\u93cd\u93ce\u93cf\u93d0\u93d1\u93d2\u93d3\u93d4\u93d5\u93d6\u93d7\u93d8\u93d9\u93da\u93db\u93dc\u93dd\u93de\u93df\u93e0\u93e1\u93e2\u93e3\u93e4\u93e5\u93e6\u93e7\u93e8\u93e9\u93ea\u93eb\u93ec\u93ed\u93ee\u93ef\u93f0\u93f1\u93f2\u93f3\u93f4\u93f5\u93f6\u93f7\u93f8\u93f9\u93fa\u93fb\u93fc\u93fd\u93fe\u93ff\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940a\u940b\u940c\u940d\u940e\u940f\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u9419\u941a\u941b\u941c\u941d\u941e\u941f\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u9428\u9429\u942a\u942b\u942c\u942d\u942e\u942f\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u9438\u9439\u943a\u943b\u943c\u943d\u943e\u943f\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u9447\u9448\u9449\u944a\u944b\u944c\u944d\u944e\u944f\u9450\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458\u9459\u945a\u945b\u945c\u945d\u945e\u945f\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u9467\u9468\u9469\u946a\u946b\u946c\u946d\u946e\u946f\u9470\u9471\u9472\u9473\u9474\u9475\u9476\u9477\u9478\u9479\u947a\u947b\u947c\u947d\u947e\u947f\u9480\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488\u9489\u948a\u948b\u948c\u948d\u948e\u948f\u9490\u9491\u9492\u9493\u9494\u9495\u9496\u9497\u9498\u9499\u949a\u949b\u949c\u949d\u949e\u949f\u94a0\u94a1\u94a2\u94a3\u94a4\u94a5\u94a6\u94a7\u94a8\u94a9\u94aa\u94ab\u94ac\u94ad\u94ae\u94af\u94b0\u94b1\u94b2\u94b3\u94b4\u94b5\u94b6\u94b7\u94b8\u94b9\u94ba\u94bb\u94bc\u94bd\u94be\u94bf\u94c0\u94c1\u94c2\u94c3\u94c4\u94c5\u94c6\u94c7\u94c8\u94c9\u94ca\u94cb\u94cc\u94cd\u94ce\u94cf\u94d0\u94d1\u94d2\u94d3\u94d4\u94d5\u94d6\u94d7\u94d8\u94d9\u94da\u94db\u94dc\u94dd\u94de\u94df\u94e0\u94e1\u94e2\u94e3\u94e4\u94e5\u94e6\u94e7\u94e8\u94e9\u94ea\u94eb\u94ec\u94ed\u94ee\u94ef\u94f0\u94f1\u94f2\u94f3\u94f4\u94f5\u94f6\u94f7\u94f8\u94f9\u94fa\u94fb\u94fc\u94fd\u94fe\u94ff\u9500\u9501\u9502\u9503\u9504\u9505\u9506\u9507\u9508\u9509\u950a\u950b\u950c\u950d\u950e\u950f\u9510\u9511\u9512\u9513\u9514\u9515\u9516\u9517\u9518\u9519\u951a\u951b\u951c\u951d\u951e\u951f\u9520\u9521\u9522\u9523\u9524\u9525\u9526\u9527\u9528\u9529\u952a\u952b\u952c\u952d\u952e\u952f\u9530\u9531\u9532\u9533\u9534\u9535\u9536\u9537\u9538\u9539\u953a\u953b\u953c\u953d\u953e\u953f\u9540\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548\u9549\u954a\u954b\u954c\u954d\u954e\u954f\u9550\u9551\u9552\u9553\u9554\u9555\u9556\u9557\u9558\u9559\u955a\u955b\u955c\u955d\u955e\u955f\u9560\u9561\u9562\u9563\u9564\u9565\u9566\u9567\u9568\u9569\u956a\u956b\u956c\u956d\u956e\u956f\u9570\u9571\u9572\u9573\u9574\u9575\u9576\u9577\u9578\u9579\u957a\u957b\u957c\u957d\u957e\u957f\u9580\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588\u9589\u958a\u958b\u958c\u958d\u958e\u958f\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u9598\u9599\u959a\u959b\u959c\u959d\u959e\u959f\u95a0\u95a1\u95a2\u95a3\u95a4\u95a5\u95a6\u95a7\u95a8\u95a9\u95aa\u95ab\u95ac\u95ad\u95ae\u95af\u95b0\u95b1\u95b2\u95b3\u95b4\u95b5\u95b6\u95b7\u95b8\u95b9\u95ba\u95bb\u95bc\u95bd\u95be\u95bf\u95c0\u95c1\u95c2\u95c3\u95c4\u95c5\u95c6\u95c7\u95c8\u95c9\u95ca\u95cb\u95cc\u95cd\u95ce\u95cf\u95d0\u95d1\u95d2\u95d3\u95d4\u95d5\u95d6\u95d7\u95d8\u95d9\u95da\u95db\u95dc\u95dd\u95de\u95df\u95e0\u95e1\u95e2\u95e3\u95e4\u95e5\u95e6\u95e7\u95e8\u95e9\u95ea\u95eb\u95ec\u95ed\u95ee\u95ef\u95f0\u95f1\u95f2\u95f3\u95f4\u95f5\u95f6\u95f7\u95f8\u95f9\u95fa\u95fb\u95fc\u95fd\u95fe\u95ff\u9600\u9601\u9602\u9603\u9604\u9605\u9606\u9607\u9608\u9609\u960a\u960b\u960c\u960d\u960e\u960f\u9610\u9611\u9612\u9613\u9614\u9615\u9616\u9617\u9618\u9619\u961a\u961b\u961c\u961d\u961e\u961f\u9620\u9621\u9622\u9623\u9624\u9625\u9626\u9627\u9628\u9629\u962a\u962b\u962c\u962d\u962e\u962f\u9630\u9631\u9632\u9633\u9634\u9635\u9636\u9637\u9638\u9639\u963a\u963b\u963c\u963d\u963e\u963f\u9640\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648\u9649\u964a\u964b\u964c\u964d\u964e\u964f\u9650\u9651\u9652\u9653\u9654\u9655\u9656\u9657\u9658\u9659\u965a\u965b\u965c\u965d\u965e\u965f\u9660\u9661\u9662\u9663\u9664\u9665\u9666\u9667\u9668\u9669\u966a\u966b\u966c\u966d\u966e\u966f\u9670\u9671\u9672\u9673\u9674\u9675\u9676\u9677\u9678\u9679\u967a\u967b\u967c\u967d\u967e\u967f\u9680\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688\u9689\u968a\u968b\u968c\u968d\u968e\u968f\u9690\u9691\u9692\u9693\u9694\u9695\u9696\u9697\u9698\u9699\u969a\u969b\u969c\u969d\u969e\u969f\u96a0\u96a1\u96a2\u96a3\u96a4\u96a5\u96a6\u96a7\u96a8\u96a9\u96aa\u96ab\u96ac\u96ad\u96ae\u96af\u96b0\u96b1\u96b2\u96b3\u96b4\u96b5\u96b6\u96b7\u96b8\u96b9\u96ba\u96bb\u96bc\u96bd\u96be\u96bf\u96c0\u96c1\u96c2\u96c3\u96c4\u96c5\u96c6\u96c7\u96c8\u96c9\u96ca\u96cb\u96cc\u96cd\u96ce\u96cf\u96d0\u96d1\u96d2\u96d3\u96d4\u96d5\u96d6\u96d7\u96d8\u96d9\u96da\u96db\u96dc\u96dd\u96de\u96df\u96e0\u96e1\u96e2\u96e3\u96e4\u96e5\u96e6\u96e7\u96e8\u96e9\u96ea\u96eb\u96ec\u96ed\u96ee\u96ef\u96f0\u96f1\u96f2\u96f3\u96f4\u96f5\u96f6\u96f7\u96f8\u96f9\u96fa\u96fb\u96fc\u96fd\u96fe\u96ff\u9700\u9701\u9702\u9703\u9704\u9705\u9706\u9707\u9708\u9709\u970a\u970b\u970c\u970d\u970e\u970f\u9710\u9711\u9712\u9713\u9714\u9715\u9716\u9717\u9718\u9719\u971a\u971b\u971c\u971d\u971e\u971f\u9720\u9721\u9722\u9723\u9724\u9725\u9726\u9727\u9728\u9729\u972a\u972b\u972c\u972d\u972e\u972f\u9730\u9731\u9732\u9733\u9734\u9735\u9736\u9737\u9738\u9739\u973a\u973b\u973c\u973d\u973e\u973f\u9740\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748\u9749\u974a\u974b\u974c\u974d\u974e\u974f\u9750\u9751\u9752\u9753\u9754\u9755\u9756\u9757\u9758\u9759\u975a\u975b\u975c\u975d\u975e\u975f\u9760\u9761\u9762\u9763\u9764\u9765\u9766\u9767\u9768\u9769\u976a\u976b\u976c\u976d\u976e\u976f\u9770\u9771\u9772\u9773\u9774\u9775\u9776\u9777\u9778\u9779\u977a\u977b\u977c\u977d\u977e\u977f\u9780\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788\u9789\u978a\u978b\u978c\u978d\u978e\u978f\u9790\u9791\u9792\u9793\u9794\u9795\u9796\u9797\u9798\u9799\u979a\u979b\u979c\u979d\u979e\u979f\u97a0\u97a1\u97a2\u97a3\u97a4\u97a5\u97a6\u97a7\u97a8\u97a9\u97aa\u97ab\u97ac\u97ad\u97ae\u97af\u97b0\u97b1\u97b2\u97b3\u97b4\u97b5\u97b6\u97b7\u97b8\u97b9\u97ba\u97bb\u97bc\u97bd\u97be\u97bf\u97c0\u97c1\u97c2\u97c3\u97c4\u97c5\u97c6\u97c7\u97c8\u97c9\u97ca\u97cb\u97cc\u97cd\u97ce\u97cf\u97d0\u97d1\u97d2\u97d3\u97d4\u97d5\u97d6\u97d7\u97d8\u97d9\u97da\u97db\u97dc\u97dd\u97de\u97df\u97e0\u97e1\u97e2\u97e3\u97e4\u97e5\u97e6\u97e7\u97e8\u97e9\u97ea\u97eb\u97ec\u97ed\u97ee\u97ef\u97f0\u97f1\u97f2\u97f3\u97f4\u97f5\u97f6\u97f7\u97f8\u97f9\u97fa\u97fb\u97fc\u97fd\u97fe\u97ff\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u980a\u980b\u980c\u980d\u980e\u980f\u9810\u9811\u9812\u9813\u9814\u9815\u9816\u9817\u9818\u9819\u981a\u981b\u981c\u981d\u981e\u981f\u9820\u9821\u9822\u9823\u9824\u9825\u9826\u9827\u9828\u9829\u982a\u982b\u982c\u982d\u982e\u982f\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983a\u983b\u983c\u983d\u983e\u983f\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984a\u984b\u984c\u984d\u984e\u984f\u9850\u9851\u9852\u9853\u9854\u9855\u9856\u9857\u9858\u9859\u985a\u985b\u985c\u985d\u985e\u985f\u9860\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868\u9869\u986a\u986b\u986c\u986d\u986e\u986f\u9870\u9871\u9872\u9873\u9874\u9875\u9876\u9877\u9878\u9879\u987a\u987b\u987c\u987d\u987e\u987f\u9880\u9881\u9882\u9883\u9884\u9885\u9886\u9887\u9888\u9889\u988a\u988b\u988c\u988d\u988e\u988f\u9890\u9891\u9892\u9893\u9894\u9895\u9896\u9897\u9898\u9899\u989a\u989b\u989c\u989d\u989e\u989f\u98a0\u98a1\u98a2\u98a3\u98a4\u98a5\u98a6\u98a7\u98a8\u98a9\u98aa\u98ab\u98ac\u98ad\u98ae\u98af\u98b0\u98b1\u98b2\u98b3\u98b4\u98b5\u98b6\u98b7\u98b8\u98b9\u98ba\u98bb\u98bc\u98bd\u98be\u98bf\u98c0\u98c1\u98c2\u98c3\u98c4\u98c5\u98c6\u98c7\u98c8\u98c9\u98ca\u98cb\u98cc\u98cd\u98ce\u98cf\u98d0\u98d1\u98d2\u98d3\u98d4\u98d5\u98d6\u98d7\u98d8\u98d9\u98da\u98db\u98dc\u98dd\u98de\u98df\u98e0\u98e1\u98e2\u98e3\u98e4\u98e5\u98e6\u98e7\u98e8\u98e9\u98ea\u98eb\u98ec\u98ed\u98ee\u98ef\u98f0\u98f1\u98f2\u98f3\u98f4\u98f5\u98f6\u98f7\u98f8\u98f9\u98fa\u98fb\u98fc\u98fd\u98fe\u98ff\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907\u9908\u9909\u990a\u990b\u990c\u990d\u990e\u990f\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991a\u991b\u991c\u991d\u991e\u991f\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929\u992a\u992b\u992c\u992d\u992e\u992f\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993a\u993b\u993c\u993d\u993e\u993f\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947\u9948\u9949\u994a\u994b\u994c\u994d\u994e\u994f\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957\u9958\u9959\u995a\u995b\u995c\u995d\u995e\u995f\u9960\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969\u996a\u996b\u996c\u996d\u996e\u996f\u9970\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979\u997a\u997b\u997c\u997d\u997e\u997f\u9980\u9981\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989\u998a\u998b\u998c\u998d\u998e\u998f\u9990\u9991\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999\u999a\u999b\u999c\u999d\u999e\u999f\u99a0\u99a1\u99a2\u99a3\u99a4\u99a5\u99a6\u99a7\u99a8\u99a9\u99aa\u99ab\u99ac\u99ad\u99ae\u99af\u99b0\u99b1\u99b2\u99b3\u99b4\u99b5\u99b6\u99b7\u99b8\u99b9\u99ba\u99bb\u99bc\u99bd\u99be\u99bf\u99c0\u99c1\u99c2\u99c3\u99c4\u99c5\u99c6\u99c7\u99c8\u99c9\u99ca\u99cb\u99cc\u99cd\u99ce\u99cf\u99d0\u99d1\u99d2\u99d3\u99d4\u99d5\u99d6\u99d7\u99d8\u99d9\u99da\u99db\u99dc\u99dd\u99de\u99df\u99e0\u99e1\u99e2\u99e3\u99e4\u99e5\u99e6\u99e7\u99e8\u99e9\u99ea\u99eb\u99ec\u99ed\u99ee\u99ef\u99f0\u99f1\u99f2\u99f3\u99f4\u99f5\u99f6\u99f7\u99f8\u99f9\u99fa\u99fb\u99fc\u99fd\u99fe\u99ff\u9a00\u9a01\u9a02\u9a03\u9a04\u9a05\u9a06\u9a07\u9a08\u9a09\u9a0a\u9a0b\u9a0c\u9a0d\u9a0e\u9a0f\u9a10\u9a11\u9a12\u9a13\u9a14\u9a15\u9a16\u9a17\u9a18\u9a19\u9a1a\u9a1b\u9a1c\u9a1d\u9a1e\u9a1f\u9a20\u9a21\u9a22\u9a23\u9a24\u9a25\u9a26\u9a27\u9a28\u9a29\u9a2a\u9a2b\u9a2c\u9a2d\u9a2e\u9a2f\u9a30\u9a31\u9a32\u9a33\u9a34\u9a35\u9a36\u9a37\u9a38\u9a39\u9a3a\u9a3b\u9a3c\u9a3d\u9a3e\u9a3f\u9a40\u9a41\u9a42\u9a43\u9a44\u9a45\u9a46\u9a47\u9a48\u9a49\u9a4a\u9a4b\u9a4c\u9a4d\u9a4e\u9a4f\u9a50\u9a51\u9a52\u9a53\u9a54\u9a55\u9a56\u9a57\u9a58\u9a59\u9a5a\u9a5b\u9a5c\u9a5d\u9a5e\u9a5f\u9a60\u9a61\u9a62\u9a63\u9a64\u9a65\u9a66\u9a67\u9a68\u9a69\u9a6a\u9a6b\u9a6c\u9a6d\u9a6e\u9a6f\u9a70\u9a71\u9a72\u9a73\u9a74\u9a75\u9a76\u9a77\u9a78\u9a79\u9a7a\u9a7b\u9a7c\u9a7d\u9a7e\u9a7f\u9a80\u9a81\u9a82\u9a83\u9a84\u9a85\u9a86\u9a87\u9a88\u9a89\u9a8a\u9a8b\u9a8c\u9a8d\u9a8e\u9a8f\u9a90\u9a91\u9a92\u9a93\u9a94\u9a95\u9a96\u9a97\u9a98\u9a99\u9a9a\u9a9b\u9a9c\u9a9d\u9a9e\u9a9f\u9aa0\u9aa1\u9aa2\u9aa3\u9aa4\u9aa5\u9aa6\u9aa7\u9aa8\u9aa9\u9aaa\u9aab\u9aac\u9aad\u9aae\u9aaf\u9ab0\u9ab1\u9ab2\u9ab3\u9ab4\u9ab5\u9ab6\u9ab7\u9ab8\u9ab9\u9aba\u9abb\u9abc\u9abd\u9abe\u9abf\u9ac0\u9ac1\u9ac2\u9ac3\u9ac4\u9ac5\u9ac6\u9ac7\u9ac8\u9ac9\u9aca\u9acb\u9acc\u9acd\u9ace\u9acf\u9ad0\u9ad1\u9ad2\u9ad3\u9ad4\u9ad5\u9ad6\u9ad7\u9ad8\u9ad9\u9ada\u9adb\u9adc\u9add\u9ade\u9adf\u9ae0\u9ae1\u9ae2\u9ae3\u9ae4\u9ae5\u9ae6\u9ae7\u9ae8\u9ae9\u9aea\u9aeb\u9aec\u9aed\u9aee\u9aef\u9af0\u9af1\u9af2\u9af3\u9af4\u9af5\u9af6\u9af7\u9af8\u9af9\u9afa\u9afb\u9afc\u9afd\u9afe\u9aff\u9b00\u9b01\u9b02\u9b03\u9b04\u9b05\u9b06\u9b07\u9b08\u9b09\u9b0a\u9b0b\u9b0c\u9b0d\u9b0e\u9b0f\u9b10\u9b11\u9b12\u9b13\u9b14\u9b15\u9b16\u9b17\u9b18\u9b19\u9b1a\u9b1b\u9b1c\u9b1d\u9b1e\u9b1f\u9b20\u9b21\u9b22\u9b23\u9b24\u9b25\u9b26\u9b27\u9b28\u9b29\u9b2a\u9b2b\u9b2c\u9b2d\u9b2e\u9b2f\u9b30\u9b31\u9b32\u9b33\u9b34\u9b35\u9b36\u9b37\u9b38\u9b39\u9b3a\u9b3b\u9b3c\u9b3d\u9b3e\u9b3f\u9b40\u9b41\u9b42\u9b43\u9b44\u9b45\u9b46\u9b47\u9b48\u9b49\u9b4a\u9b4b\u9b4c\u9b4d\u9b4e\u9b4f\u9b50\u9b51\u9b52\u9b53\u9b54\u9b55\u9b56\u9b57\u9b58\u9b59\u9b5a\u9b5b\u9b5c\u9b5d\u9b5e\u9b5f\u9b60\u9b61\u9b62\u9b63\u9b64\u9b65\u9b66\u9b67\u9b68\u9b69\u9b6a\u9b6b\u9b6c\u9b6d\u9b6e\u9b6f\u9b70\u9b71\u9b72\u9b73\u9b74\u9b75\u9b76\u9b77\u9b78\u9b79\u9b7a\u9b7b\u9b7c\u9b7d\u9b7e\u9b7f\u9b80\u9b81\u9b82\u9b83\u9b84\u9b85\u9b86\u9b87\u9b88\u9b89\u9b8a\u9b8b\u9b8c\u9b8d\u9b8e\u9b8f\u9b90\u9b91\u9b92\u9b93\u9b94\u9b95\u9b96\u9b97\u9b98\u9b99\u9b9a\u9b9b\u9b9c\u9b9d\u9b9e\u9b9f\u9ba0\u9ba1\u9ba2\u9ba3\u9ba4\u9ba5\u9ba6\u9ba7\u9ba8\u9ba9\u9baa\u9bab\u9bac\u9bad\u9bae\u9baf\u9bb0\u9bb1\u9bb2\u9bb3\u9bb4\u9bb5\u9bb6\u9bb7\u9bb8\u9bb9\u9bba\u9bbb\u9bbc\u9bbd\u9bbe\u9bbf\u9bc0\u9bc1\u9bc2\u9bc3\u9bc4\u9bc5\u9bc6\u9bc7\u9bc8\u9bc9\u9bca\u9bcb\u9bcc\u9bcd\u9bce\u9bcf\u9bd0\u9bd1\u9bd2\u9bd3\u9bd4\u9bd5\u9bd6\u9bd7\u9bd8\u9bd9\u9bda\u9bdb\u9bdc\u9bdd\u9bde\u9bdf\u9be0\u9be1\u9be2\u9be3\u9be4\u9be5\u9be6\u9be7\u9be8\u9be9\u9bea\u9beb\u9bec\u9bed\u9bee\u9bef\u9bf0\u9bf1\u9bf2\u9bf3\u9bf4\u9bf5\u9bf6\u9bf7\u9bf8\u9bf9\u9bfa\u9bfb\u9bfc\u9bfd\u9bfe\u9bff\u9c00\u9c01\u9c02\u9c03\u9c04\u9c05\u9c06\u9c07\u9c08\u9c09\u9c0a\u9c0b\u9c0c\u9c0d\u9c0e\u9c0f\u9c10\u9c11\u9c12\u9c13\u9c14\u9c15\u9c16\u9c17\u9c18\u9c19\u9c1a\u9c1b\u9c1c\u9c1d\u9c1e\u9c1f\u9c20\u9c21\u9c22\u9c23\u9c24\u9c25\u9c26\u9c27\u9c28\u9c29\u9c2a\u9c2b\u9c2c\u9c2d\u9c2e\u9c2f\u9c30\u9c31\u9c32\u9c33\u9c34\u9c35\u9c36\u9c37\u9c38\u9c39\u9c3a\u9c3b\u9c3c\u9c3d\u9c3e\u9c3f\u9c40\u9c41\u9c42\u9c43\u9c44\u9c45\u9c46\u9c47\u9c48\u9c49\u9c4a\u9c4b\u9c4c\u9c4d\u9c4e\u9c4f\u9c50\u9c51\u9c52\u9c53\u9c54\u9c55\u9c56\u9c57\u9c58\u9c59\u9c5a\u9c5b\u9c5c\u9c5d\u9c5e\u9c5f\u9c60\u9c61\u9c62\u9c63\u9c64\u9c65\u9c66\u9c67\u9c68\u9c69\u9c6a\u9c6b\u9c6c\u9c6d\u9c6e\u9c6f\u9c70\u9c71\u9c72\u9c73\u9c74\u9c75\u9c76\u9c77\u9c78\u9c79\u9c7a\u9c7b\u9c7c\u9c7d\u9c7e\u9c7f\u9c80\u9c81\u9c82\u9c83\u9c84\u9c85\u9c86\u9c87\u9c88\u9c89\u9c8a\u9c8b\u9c8c\u9c8d\u9c8e\u9c8f\u9c90\u9c91\u9c92\u9c93\u9c94\u9c95\u9c96\u9c97\u9c98\u9c99\u9c9a\u9c9b\u9c9c\u9c9d\u9c9e\u9c9f\u9ca0\u9ca1\u9ca2\u9ca3\u9ca4\u9ca5\u9ca6\u9ca7\u9ca8\u9ca9\u9caa\u9cab\u9cac\u9cad\u9cae\u9caf\u9cb0\u9cb1\u9cb2\u9cb3\u9cb4\u9cb5\u9cb6\u9cb7\u9cb8\u9cb9\u9cba\u9cbb\u9cbc\u9cbd\u9cbe\u9cbf\u9cc0\u9cc1\u9cc2\u9cc3\u9cc4\u9cc5\u9cc6\u9cc7\u9cc8\u9cc9\u9cca\u9ccb\u9ccc\u9ccd\u9cce\u9ccf\u9cd0\u9cd1\u9cd2\u9cd3\u9cd4\u9cd5\u9cd6\u9cd7\u9cd8\u9cd9\u9cda\u9cdb\u9cdc\u9cdd\u9cde\u9cdf\u9ce0\u9ce1\u9ce2\u9ce3\u9ce4\u9ce5\u9ce6\u9ce7\u9ce8\u9ce9\u9cea\u9ceb\u9cec\u9ced\u9cee\u9cef\u9cf0\u9cf1\u9cf2\u9cf3\u9cf4\u9cf5\u9cf6\u9cf7\u9cf8\u9cf9\u9cfa\u9cfb\u9cfc\u9cfd\u9cfe\u9cff\u9d00\u9d01\u9d02\u9d03\u9d04\u9d05\u9d06\u9d07\u9d08\u9d09\u9d0a\u9d0b\u9d0c\u9d0d\u9d0e\u9d0f\u9d10\u9d11\u9d12\u9d13\u9d14\u9d15\u9d16\u9d17\u9d18\u9d19\u9d1a\u9d1b\u9d1c\u9d1d\u9d1e\u9d1f\u9d20\u9d21\u9d22\u9d23\u9d24\u9d25\u9d26\u9d27\u9d28\u9d29\u9d2a\u9d2b\u9d2c\u9d2d\u9d2e\u9d2f\u9d30\u9d31\u9d32\u9d33\u9d34\u9d35\u9d36\u9d37\u9d38\u9d39\u9d3a\u9d3b\u9d3c\u9d3d\u9d3e\u9d3f\u9d40\u9d41\u9d42\u9d43\u9d44\u9d45\u9d46\u9d47\u9d48\u9d49\u9d4a\u9d4b\u9d4c\u9d4d\u9d4e\u9d4f\u9d50\u9d51\u9d52\u9d53\u9d54\u9d55\u9d56\u9d57\u9d58\u9d59\u9d5a\u9d5b\u9d5c\u9d5d\u9d5e\u9d5f\u9d60\u9d61\u9d62\u9d63\u9d64\u9d65\u9d66\u9d67\u9d68\u9d69\u9d6a\u9d6b\u9d6c\u9d6d\u9d6e\u9d6f\u9d70\u9d71\u9d72\u9d73\u9d74\u9d75\u9d76\u9d77\u9d78\u9d79\u9d7a\u9d7b\u9d7c\u9d7d\u9d7e\u9d7f\u9d80\u9d81\u9d82\u9d83\u9d84\u9d85\u9d86\u9d87\u9d88\u9d89\u9d8a\u9d8b\u9d8c\u9d8d\u9d8e\u9d8f\u9d90\u9d91\u9d92\u9d93\u9d94\u9d95\u9d96\u9d97\u9d98\u9d99\u9d9a\u9d9b\u9d9c\u9d9d\u9d9e\u9d9f\u9da0\u9da1\u9da2\u9da3\u9da4\u9da5\u9da6\u9da7\u9da8\u9da9\u9daa\u9dab\u9dac\u9dad\u9dae\u9daf\u9db0\u9db1\u9db2\u9db3\u9db4\u9db5\u9db6\u9db7\u9db8\u9db9\u9dba\u9dbb\u9dbc\u9dbd\u9dbe\u9dbf\u9dc0\u9dc1\u9dc2\u9dc3\u9dc4\u9dc5\u9dc6\u9dc7\u9dc8\u9dc9\u9dca\u9dcb\u9dcc\u9dcd\u9dce\u9dcf\u9dd0\u9dd1\u9dd2\u9dd3\u9dd4\u9dd5\u9dd6\u9dd7\u9dd8\u9dd9\u9dda\u9ddb\u9ddc\u9ddd\u9dde\u9ddf\u9de0\u9de1\u9de2\u9de3\u9de4\u9de5\u9de6\u9de7\u9de8\u9de9\u9dea\u9deb\u9dec\u9ded\u9dee\u9def\u9df0\u9df1\u9df2\u9df3\u9df4\u9df5\u9df6\u9df7\u9df8\u9df9\u9dfa\u9dfb\u9dfc\u9dfd\u9dfe\u9dff\u9e00\u9e01\u9e02\u9e03\u9e04\u9e05\u9e06\u9e07\u9e08\u9e09\u9e0a\u9e0b\u9e0c\u9e0d\u9e0e\u9e0f\u9e10\u9e11\u9e12\u9e13\u9e14\u9e15\u9e16\u9e17\u9e18\u9e19\u9e1a\u9e1b\u9e1c\u9e1d\u9e1e\u9e1f\u9e20\u9e21\u9e22\u9e23\u9e24\u9e25\u9e26\u9e27\u9e28\u9e29\u9e2a\u9e2b\u9e2c\u9e2d\u9e2e\u9e2f\u9e30\u9e31\u9e32\u9e33\u9e34\u9e35\u9e36\u9e37\u9e38\u9e39\u9e3a\u9e3b\u9e3c\u9e3d\u9e3e\u9e3f\u9e40\u9e41\u9e42\u9e43\u9e44\u9e45\u9e46\u9e47\u9e48\u9e49\u9e4a\u9e4b\u9e4c\u9e4d\u9e4e\u9e4f\u9e50\u9e51\u9e52\u9e53\u9e54\u9e55\u9e56\u9e57\u9e58\u9e59\u9e5a\u9e5b\u9e5c\u9e5d\u9e5e\u9e5f\u9e60\u9e61\u9e62\u9e63\u9e64\u9e65\u9e66\u9e67\u9e68\u9e69\u9e6a\u9e6b\u9e6c\u9e6d\u9e6e\u9e6f\u9e70\u9e71\u9e72\u9e73\u9e74\u9e75\u9e76\u9e77\u9e78\u9e79\u9e7a\u9e7b\u9e7c\u9e7d\u9e7e\u9e7f\u9e80\u9e81\u9e82\u9e83\u9e84\u9e85\u9e86\u9e87\u9e88\u9e89\u9e8a\u9e8b\u9e8c\u9e8d\u9e8e\u9e8f\u9e90\u9e91\u9e92\u9e93\u9e94\u9e95\u9e96\u9e97\u9e98\u9e99\u9e9a\u9e9b\u9e9c\u9e9d\u9e9e\u9e9f\u9ea0\u9ea1\u9ea2\u9ea3\u9ea4\u9ea5\u9ea6\u9ea7\u9ea8\u9ea9\u9eaa\u9eab\u9eac\u9ead\u9eae\u9eaf\u9eb0\u9eb1\u9eb2\u9eb3\u9eb4\u9eb5\u9eb6\u9eb7\u9eb8\u9eb9\u9eba\u9ebb\u9ebc\u9ebd\u9ebe\u9ebf\u9ec0\u9ec1\u9ec2\u9ec3\u9ec4\u9ec5\u9ec6\u9ec7\u9ec8\u9ec9\u9eca\u9ecb\u9ecc\u9ecd\u9ece\u9ecf\u9ed0\u9ed1\u9ed2\u9ed3\u9ed4\u9ed5\u9ed6\u9ed7\u9ed8\u9ed9\u9eda\u9edb\u9edc\u9edd\u9ede\u9edf\u9ee0\u9ee1\u9ee2\u9ee3\u9ee4\u9ee5\u9ee6\u9ee7\u9ee8\u9ee9\u9eea\u9eeb\u9eec\u9eed\u9eee\u9eef\u9ef0\u9ef1\u9ef2\u9ef3\u9ef4\u9ef5\u9ef6\u9ef7\u9ef8\u9ef9\u9efa\u9efb\u9efc\u9efd\u9efe\u9eff\u9f00\u9f01\u9f02\u9f03\u9f04\u9f05\u9f06\u9f07\u9f08\u9f09\u9f0a\u9f0b\u9f0c\u9f0d\u9f0e\u9f0f\u9f10\u9f11\u9f12\u9f13\u9f14\u9f15\u9f16\u9f17\u9f18\u9f19\u9f1a\u9f1b\u9f1c\u9f1d\u9f1e\u9f1f\u9f20\u9f21\u9f22\u9f23\u9f24\u9f25\u9f26\u9f27\u9f28\u9f29\u9f2a\u9f2b\u9f2c\u9f2d\u9f2e\u9f2f\u9f30\u9f31\u9f32\u9f33\u9f34\u9f35\u9f36\u9f37\u9f38\u9f39\u9f3a\u9f3b\u9f3c\u9f3d\u9f3e\u9f3f\u9f40\u9f41\u9f42\u9f43\u9f44\u9f45\u9f46\u9f47\u9f48\u9f49\u9f4a\u9f4b\u9f4c\u9f4d\u9f4e\u9f4f\u9f50\u9f51\u9f52\u9f53\u9f54\u9f55\u9f56\u9f57\u9f58\u9f59\u9f5a\u9f5b\u9f5c\u9f5d\u9f5e\u9f5f\u9f60\u9f61\u9f62\u9f63\u9f64\u9f65\u9f66\u9f67\u9f68\u9f69\u9f6a\u9f6b\u9f6c\u9f6d\u9f6e\u9f6f\u9f70\u9f71\u9f72\u9f73\u9f74\u9f75\u9f76\u9f77\u9f78\u9f79\u9f7a\u9f7b\u9f7c\u9f7d\u9f7e\u9f7f\u9f80\u9f81\u9f82\u9f83\u9f84\u9f85\u9f86\u9f87\u9f88\u9f89\u9f8a\u9f8b\u9f8c\u9f8d\u9f8e\u9f8f\u9f90\u9f91\u9f92\u9f93\u9f94\u9f95\u9f96\u9f97\u9f98\u9f99\u9f9a\u9f9b\u9f9c\u9f9d\u9f9e\u9f9f\u9fa0\u9fa1\u9fa2\u9fa3\u9fa4\u9fa5\u9fa6\u9fa7\u9fa8\u9fa9\u9faa\u9fab\u9fac\u9fad\u9fae\u9faf\u9fb0\u9fb1\u9fb2\u9fb3\u9fb4\u9fb5\u9fb6\u9fb7\u9fb8\u9fb9\u9fba\u9fbb\ua000\ua001\ua002\ua003\ua004\ua005\ua006\ua007\ua008\ua009\ua00a\ua00b\ua00c\ua00d\ua00e\ua00f\ua010\ua011\ua012\ua013\ua014\ua016\ua017\ua018\ua019\ua01a\ua01b\ua01c\ua01d\ua01e\ua01f\ua020\ua021\ua022\ua023\ua024\ua025\ua026\ua027\ua028\ua029\ua02a\ua02b\ua02c\ua02d\ua02e\ua02f\ua030\ua031\ua032\ua033\ua034\ua035\ua036\ua037\ua038\ua039\ua03a\ua03b\ua03c\ua03d\ua03e\ua03f\ua040\ua041\ua042\ua043\ua044\ua045\ua046\ua047\ua048\ua049\ua04a\ua04b\ua04c\ua04d\ua04e\ua04f\ua050\ua051\ua052\ua053\ua054\ua055\ua056\ua057\ua058\ua059\ua05a\ua05b\ua05c\ua05d\ua05e\ua05f\ua060\ua061\ua062\ua063\ua064\ua065\ua066\ua067\ua068\ua069\ua06a\ua06b\ua06c\ua06d\ua06e\ua06f\ua070\ua071\ua072\ua073\ua074\ua075\ua076\ua077\ua078\ua079\ua07a\ua07b\ua07c\ua07d\ua07e\ua07f\ua080\ua081\ua082\ua083\ua084\ua085\ua086\ua087\ua088\ua089\ua08a\ua08b\ua08c\ua08d\ua08e\ua08f\ua090\ua091\ua092\ua093\ua094\ua095\ua096\ua097\ua098\ua099\ua09a\ua09b\ua09c\ua09d\ua09e\ua09f\ua0a0\ua0a1\ua0a2\ua0a3\ua0a4\ua0a5\ua0a6\ua0a7\ua0a8\ua0a9\ua0aa\ua0ab\ua0ac\ua0ad\ua0ae\ua0af\ua0b0\ua0b1\ua0b2\ua0b3\ua0b4\ua0b5\ua0b6\ua0b7\ua0b8\ua0b9\ua0ba\ua0bb\ua0bc\ua0bd\ua0be\ua0bf\ua0c0\ua0c1\ua0c2\ua0c3\ua0c4\ua0c5\ua0c6\ua0c7\ua0c8\ua0c9\ua0ca\ua0cb\ua0cc\ua0cd\ua0ce\ua0cf\ua0d0\ua0d1\ua0d2\ua0d3\ua0d4\ua0d5\ua0d6\ua0d7\ua0d8\ua0d9\ua0da\ua0db\ua0dc\ua0dd\ua0de\ua0df\ua0e0\ua0e1\ua0e2\ua0e3\ua0e4\ua0e5\ua0e6\ua0e7\ua0e8\ua0e9\ua0ea\ua0eb\ua0ec\ua0ed\ua0ee\ua0ef\ua0f0\ua0f1\ua0f2\ua0f3\ua0f4\ua0f5\ua0f6\ua0f7\ua0f8\ua0f9\ua0fa\ua0fb\ua0fc\ua0fd\ua0fe\ua0ff\ua100\ua101\ua102\ua103\ua104\ua105\ua106\ua107\ua108\ua109\ua10a\ua10b\ua10c\ua10d\ua10e\ua10f\ua110\ua111\ua112\ua113\ua114\ua115\ua116\ua117\ua118\ua119\ua11a\ua11b\ua11c\ua11d\ua11e\ua11f\ua120\ua121\ua122\ua123\ua124\ua125\ua126\ua127\ua128\ua129\ua12a\ua12b\ua12c\ua12d\ua12e\ua12f\ua130\ua131\ua132\ua133\ua134\ua135\ua136\ua137\ua138\ua139\ua13a\ua13b\ua13c\ua13d\ua13e\ua13f\ua140\ua141\ua142\ua143\ua144\ua145\ua146\ua147\ua148\ua149\ua14a\ua14b\ua14c\ua14d\ua14e\ua14f\ua150\ua151\ua152\ua153\ua154\ua155\ua156\ua157\ua158\ua159\ua15a\ua15b\ua15c\ua15d\ua15e\ua15f\ua160\ua161\ua162\ua163\ua164\ua165\ua166\ua167\ua168\ua169\ua16a\ua16b\ua16c\ua16d\ua16e\ua16f\ua170\ua171\ua172\ua173\ua174\ua175\ua176\ua177\ua178\ua179\ua17a\ua17b\ua17c\ua17d\ua17e\ua17f\ua180\ua181\ua182\ua183\ua184\ua185\ua186\ua187\ua188\ua189\ua18a\ua18b\ua18c\ua18d\ua18e\ua18f\ua190\ua191\ua192\ua193\ua194\ua195\ua196\ua197\ua198\ua199\ua19a\ua19b\ua19c\ua19d\ua19e\ua19f\ua1a0\ua1a1\ua1a2\ua1a3\ua1a4\ua1a5\ua1a6\ua1a7\ua1a8\ua1a9\ua1aa\ua1ab\ua1ac\ua1ad\ua1ae\ua1af\ua1b0\ua1b1\ua1b2\ua1b3\ua1b4\ua1b5\ua1b6\ua1b7\ua1b8\ua1b9\ua1ba\ua1bb\ua1bc\ua1bd\ua1be\ua1bf\ua1c0\ua1c1\ua1c2\ua1c3\ua1c4\ua1c5\ua1c6\ua1c7\ua1c8\ua1c9\ua1ca\ua1cb\ua1cc\ua1cd\ua1ce\ua1cf\ua1d0\ua1d1\ua1d2\ua1d3\ua1d4\ua1d5\ua1d6\ua1d7\ua1d8\ua1d9\ua1da\ua1db\ua1dc\ua1dd\ua1de\ua1df\ua1e0\ua1e1\ua1e2\ua1e3\ua1e4\ua1e5\ua1e6\ua1e7\ua1e8\ua1e9\ua1ea\ua1eb\ua1ec\ua1ed\ua1ee\ua1ef\ua1f0\ua1f1\ua1f2\ua1f3\ua1f4\ua1f5\ua1f6\ua1f7\ua1f8\ua1f9\ua1fa\ua1fb\ua1fc\ua1fd\ua1fe\ua1ff\ua200\ua201\ua202\ua203\ua204\ua205\ua206\ua207\ua208\ua209\ua20a\ua20b\ua20c\ua20d\ua20e\ua20f\ua210\ua211\ua212\ua213\ua214\ua215\ua216\ua217\ua218\ua219\ua21a\ua21b\ua21c\ua21d\ua21e\ua21f\ua220\ua221\ua222\ua223\ua224\ua225\ua226\ua227\ua228\ua229\ua22a\ua22b\ua22c\ua22d\ua22e\ua22f\ua230\ua231\ua232\ua233\ua234\ua235\ua236\ua237\ua238\ua239\ua23a\ua23b\ua23c\ua23d\ua23e\ua23f\ua240\ua241\ua242\ua243\ua244\ua245\ua246\ua247\ua248\ua249\ua24a\ua24b\ua24c\ua24d\ua24e\ua24f\ua250\ua251\ua252\ua253\ua254\ua255\ua256\ua257\ua258\ua259\ua25a\ua25b\ua25c\ua25d\ua25e\ua25f\ua260\ua261\ua262\ua263\ua264\ua265\ua266\ua267\ua268\ua269\ua26a\ua26b\ua26c\ua26d\ua26e\ua26f\ua270\ua271\ua272\ua273\ua274\ua275\ua276\ua277\ua278\ua279\ua27a\ua27b\ua27c\ua27d\ua27e\ua27f\ua280\ua281\ua282\ua283\ua284\ua285\ua286\ua287\ua288\ua289\ua28a\ua28b\ua28c\ua28d\ua28e\ua28f\ua290\ua291\ua292\ua293\ua294\ua295\ua296\ua297\ua298\ua299\ua29a\ua29b\ua29c\ua29d\ua29e\ua29f\ua2a0\ua2a1\ua2a2\ua2a3\ua2a4\ua2a5\ua2a6\ua2a7\ua2a8\ua2a9\ua2aa\ua2ab\ua2ac\ua2ad\ua2ae\ua2af\ua2b0\ua2b1\ua2b2\ua2b3\ua2b4\ua2b5\ua2b6\ua2b7\ua2b8\ua2b9\ua2ba\ua2bb\ua2bc\ua2bd\ua2be\ua2bf\ua2c0\ua2c1\ua2c2\ua2c3\ua2c4\ua2c5\ua2c6\ua2c7\ua2c8\ua2c9\ua2ca\ua2cb\ua2cc\ua2cd\ua2ce\ua2cf\ua2d0\ua2d1\ua2d2\ua2d3\ua2d4\ua2d5\ua2d6\ua2d7\ua2d8\ua2d9\ua2da\ua2db\ua2dc\ua2dd\ua2de\ua2df\ua2e0\ua2e1\ua2e2\ua2e3\ua2e4\ua2e5\ua2e6\ua2e7\ua2e8\ua2e9\ua2ea\ua2eb\ua2ec\ua2ed\ua2ee\ua2ef\ua2f0\ua2f1\ua2f2\ua2f3\ua2f4\ua2f5\ua2f6\ua2f7\ua2f8\ua2f9\ua2fa\ua2fb\ua2fc\ua2fd\ua2fe\ua2ff\ua300\ua301\ua302\ua303\ua304\ua305\ua306\ua307\ua308\ua309\ua30a\ua30b\ua30c\ua30d\ua30e\ua30f\ua310\ua311\ua312\ua313\ua314\ua315\ua316\ua317\ua318\ua319\ua31a\ua31b\ua31c\ua31d\ua31e\ua31f\ua320\ua321\ua322\ua323\ua324\ua325\ua326\ua327\ua328\ua329\ua32a\ua32b\ua32c\ua32d\ua32e\ua32f\ua330\ua331\ua332\ua333\ua334\ua335\ua336\ua337\ua338\ua339\ua33a\ua33b\ua33c\ua33d\ua33e\ua33f\ua340\ua341\ua342\ua343\ua344\ua345\ua346\ua347\ua348\ua349\ua34a\ua34b\ua34c\ua34d\ua34e\ua34f\ua350\ua351\ua352\ua353\ua354\ua355\ua356\ua357\ua358\ua359\ua35a\ua35b\ua35c\ua35d\ua35e\ua35f\ua360\ua361\ua362\ua363\ua364\ua365\ua366\ua367\ua368\ua369\ua36a\ua36b\ua36c\ua36d\ua36e\ua36f\ua370\ua371\ua372\ua373\ua374\ua375\ua376\ua377\ua378\ua379\ua37a\ua37b\ua37c\ua37d\ua37e\ua37f\ua380\ua381\ua382\ua383\ua384\ua385\ua386\ua387\ua388\ua389\ua38a\ua38b\ua38c\ua38d\ua38e\ua38f\ua390\ua391\ua392\ua393\ua394\ua395\ua396\ua397\ua398\ua399\ua39a\ua39b\ua39c\ua39d\ua39e\ua39f\ua3a0\ua3a1\ua3a2\ua3a3\ua3a4\ua3a5\ua3a6\ua3a7\ua3a8\ua3a9\ua3aa\ua3ab\ua3ac\ua3ad\ua3ae\ua3af\ua3b0\ua3b1\ua3b2\ua3b3\ua3b4\ua3b5\ua3b6\ua3b7\ua3b8\ua3b9\ua3ba\ua3bb\ua3bc\ua3bd\ua3be\ua3bf\ua3c0\ua3c1\ua3c2\ua3c3\ua3c4\ua3c5\ua3c6\ua3c7\ua3c8\ua3c9\ua3ca\ua3cb\ua3cc\ua3cd\ua3ce\ua3cf\ua3d0\ua3d1\ua3d2\ua3d3\ua3d4\ua3d5\ua3d6\ua3d7\ua3d8\ua3d9\ua3da\ua3db\ua3dc\ua3dd\ua3de\ua3df\ua3e0\ua3e1\ua3e2\ua3e3\ua3e4\ua3e5\ua3e6\ua3e7\ua3e8\ua3e9\ua3ea\ua3eb\ua3ec\ua3ed\ua3ee\ua3ef\ua3f0\ua3f1\ua3f2\ua3f3\ua3f4\ua3f5\ua3f6\ua3f7\ua3f8\ua3f9\ua3fa\ua3fb\ua3fc\ua3fd\ua3fe\ua3ff\ua400\ua401\ua402\ua403\ua404\ua405\ua406\ua407\ua408\ua409\ua40a\ua40b\ua40c\ua40d\ua40e\ua40f\ua410\ua411\ua412\ua413\ua414\ua415\ua416\ua417\ua418\ua419\ua41a\ua41b\ua41c\ua41d\ua41e\ua41f\ua420\ua421\ua422\ua423\ua424\ua425\ua426\ua427\ua428\ua429\ua42a\ua42b\ua42c\ua42d\ua42e\ua42f\ua430\ua431\ua432\ua433\ua434\ua435\ua436\ua437\ua438\ua439\ua43a\ua43b\ua43c\ua43d\ua43e\ua43f\ua440\ua441\ua442\ua443\ua444\ua445\ua446\ua447\ua448\ua449\ua44a\ua44b\ua44c\ua44d\ua44e\ua44f\ua450\ua451\ua452\ua453\ua454\ua455\ua456\ua457\ua458\ua459\ua45a\ua45b\ua45c\ua45d\ua45e\ua45f\ua460\ua461\ua462\ua463\ua464\ua465\ua466\ua467\ua468\ua469\ua46a\ua46b\ua46c\ua46d\ua46e\ua46f\ua470\ua471\ua472\ua473\ua474\ua475\ua476\ua477\ua478\ua479\ua47a\ua47b\ua47c\ua47d\ua47e\ua47f\ua480\ua481\ua482\ua483\ua484\ua485\ua486\ua487\ua488\ua489\ua48a\ua48b\ua48c\ua800\ua801\ua803\ua804\ua805\ua807\ua808\ua809\ua80a\ua80c\ua80d\ua80e\ua80f\ua810\ua811\ua812\ua813\ua814\ua815\ua816\ua817\ua818\ua819\ua81a\ua81b\ua81c\ua81d\ua81e\ua81f\ua820\ua821\ua822\uac00\uac01\uac02\uac03\uac04\uac05\uac06\uac07\uac08\uac09\uac0a\uac0b\uac0c\uac0d\uac0e\uac0f\uac10\uac11\uac12\uac13\uac14\uac15\uac16\uac17\uac18\uac19\uac1a\uac1b\uac1c\uac1d\uac1e\uac1f\uac20\uac21\uac22\uac23\uac24\uac25\uac26\uac27\uac28\uac29\uac2a\uac2b\uac2c\uac2d\uac2e\uac2f\uac30\uac31\uac32\uac33\uac34\uac35\uac36\uac37\uac38\uac39\uac3a\uac3b\uac3c\uac3d\uac3e\uac3f\uac40\uac41\uac42\uac43\uac44\uac45\uac46\uac47\uac48\uac49\uac4a\uac4b\uac4c\uac4d\uac4e\uac4f\uac50\uac51\uac52\uac53\uac54\uac55\uac56\uac57\uac58\uac59\uac5a\uac5b\uac5c\uac5d\uac5e\uac5f\uac60\uac61\uac62\uac63\uac64\uac65\uac66\uac67\uac68\uac69\uac6a\uac6b\uac6c\uac6d\uac6e\uac6f\uac70\uac71\uac72\uac73\uac74\uac75\uac76\uac77\uac78\uac79\uac7a\uac7b\uac7c\uac7d\uac7e\uac7f\uac80\uac81\uac82\uac83\uac84\uac85\uac86\uac87\uac88\uac89\uac8a\uac8b\uac8c\uac8d\uac8e\uac8f\uac90\uac91\uac92\uac93\uac94\uac95\uac96\uac97\uac98\uac99\uac9a\uac9b\uac9c\uac9d\uac9e\uac9f\uaca0\uaca1\uaca2\uaca3\uaca4\uaca5\uaca6\uaca7\uaca8\uaca9\uacaa\uacab\uacac\uacad\uacae\uacaf\uacb0\uacb1\uacb2\uacb3\uacb4\uacb5\uacb6\uacb7\uacb8\uacb9\uacba\uacbb\uacbc\uacbd\uacbe\uacbf\uacc0\uacc1\uacc2\uacc3\uacc4\uacc5\uacc6\uacc7\uacc8\uacc9\uacca\uaccb\uaccc\uaccd\uacce\uaccf\uacd0\uacd1\uacd2\uacd3\uacd4\uacd5\uacd6\uacd7\uacd8\uacd9\uacda\uacdb\uacdc\uacdd\uacde\uacdf\uace0\uace1\uace2\uace3\uace4\uace5\uace6\uace7\uace8\uace9\uacea\uaceb\uacec\uaced\uacee\uacef\uacf0\uacf1\uacf2\uacf3\uacf4\uacf5\uacf6\uacf7\uacf8\uacf9\uacfa\uacfb\uacfc\uacfd\uacfe\uacff\uad00\uad01\uad02\uad03\uad04\uad05\uad06\uad07\uad08\uad09\uad0a\uad0b\uad0c\uad0d\uad0e\uad0f\uad10\uad11\uad12\uad13\uad14\uad15\uad16\uad17\uad18\uad19\uad1a\uad1b\uad1c\uad1d\uad1e\uad1f\uad20\uad21\uad22\uad23\uad24\uad25\uad26\uad27\uad28\uad29\uad2a\uad2b\uad2c\uad2d\uad2e\uad2f\uad30\uad31\uad32\uad33\uad34\uad35\uad36\uad37\uad38\uad39\uad3a\uad3b\uad3c\uad3d\uad3e\uad3f\uad40\uad41\uad42\uad43\uad44\uad45\uad46\uad47\uad48\uad49\uad4a\uad4b\uad4c\uad4d\uad4e\uad4f\uad50\uad51\uad52\uad53\uad54\uad55\uad56\uad57\uad58\uad59\uad5a\uad5b\uad5c\uad5d\uad5e\uad5f\uad60\uad61\uad62\uad63\uad64\uad65\uad66\uad67\uad68\uad69\uad6a\uad6b\uad6c\uad6d\uad6e\uad6f\uad70\uad71\uad72\uad73\uad74\uad75\uad76\uad77\uad78\uad79\uad7a\uad7b\uad7c\uad7d\uad7e\uad7f\uad80\uad81\uad82\uad83\uad84\uad85\uad86\uad87\uad88\uad89\uad8a\uad8b\uad8c\uad8d\uad8e\uad8f\uad90\uad91\uad92\uad93\uad94\uad95\uad96\uad97\uad98\uad99\uad9a\uad9b\uad9c\uad9d\uad9e\uad9f\uada0\uada1\uada2\uada3\uada4\uada5\uada6\uada7\uada8\uada9\uadaa\uadab\uadac\uadad\uadae\uadaf\uadb0\uadb1\uadb2\uadb3\uadb4\uadb5\uadb6\uadb7\uadb8\uadb9\uadba\uadbb\uadbc\uadbd\uadbe\uadbf\uadc0\uadc1\uadc2\uadc3\uadc4\uadc5\uadc6\uadc7\uadc8\uadc9\uadca\uadcb\uadcc\uadcd\uadce\uadcf\uadd0\uadd1\uadd2\uadd3\uadd4\uadd5\uadd6\uadd7\uadd8\uadd9\uadda\uaddb\uaddc\uaddd\uadde\uaddf\uade0\uade1\uade2\uade3\uade4\uade5\uade6\uade7\uade8\uade9\uadea\uadeb\uadec\uaded\uadee\uadef\uadf0\uadf1\uadf2\uadf3\uadf4\uadf5\uadf6\uadf7\uadf8\uadf9\uadfa\uadfb\uadfc\uadfd\uadfe\uadff\uae00\uae01\uae02\uae03\uae04\uae05\uae06\uae07\uae08\uae09\uae0a\uae0b\uae0c\uae0d\uae0e\uae0f\uae10\uae11\uae12\uae13\uae14\uae15\uae16\uae17\uae18\uae19\uae1a\uae1b\uae1c\uae1d\uae1e\uae1f\uae20\uae21\uae22\uae23\uae24\uae25\uae26\uae27\uae28\uae29\uae2a\uae2b\uae2c\uae2d\uae2e\uae2f\uae30\uae31\uae32\uae33\uae34\uae35\uae36\uae37\uae38\uae39\uae3a\uae3b\uae3c\uae3d\uae3e\uae3f\uae40\uae41\uae42\uae43\uae44\uae45\uae46\uae47\uae48\uae49\uae4a\uae4b\uae4c\uae4d\uae4e\uae4f\uae50\uae51\uae52\uae53\uae54\uae55\uae56\uae57\uae58\uae59\uae5a\uae5b\uae5c\uae5d\uae5e\uae5f\uae60\uae61\uae62\uae63\uae64\uae65\uae66\uae67\uae68\uae69\uae6a\uae6b\uae6c\uae6d\uae6e\uae6f\uae70\uae71\uae72\uae73\uae74\uae75\uae76\uae77\uae78\uae79\uae7a\uae7b\uae7c\uae7d\uae7e\uae7f\uae80\uae81\uae82\uae83\uae84\uae85\uae86\uae87\uae88\uae89\uae8a\uae8b\uae8c\uae8d\uae8e\uae8f\uae90\uae91\uae92\uae93\uae94\uae95\uae96\uae97\uae98\uae99\uae9a\uae9b\uae9c\uae9d\uae9e\uae9f\uaea0\uaea1\uaea2\uaea3\uaea4\uaea5\uaea6\uaea7\uaea8\uaea9\uaeaa\uaeab\uaeac\uaead\uaeae\uaeaf\uaeb0\uaeb1\uaeb2\uaeb3\uaeb4\uaeb5\uaeb6\uaeb7\uaeb8\uaeb9\uaeba\uaebb\uaebc\uaebd\uaebe\uaebf\uaec0\uaec1\uaec2\uaec3\uaec4\uaec5\uaec6\uaec7\uaec8\uaec9\uaeca\uaecb\uaecc\uaecd\uaece\uaecf\uaed0\uaed1\uaed2\uaed3\uaed4\uaed5\uaed6\uaed7\uaed8\uaed9\uaeda\uaedb\uaedc\uaedd\uaede\uaedf\uaee0\uaee1\uaee2\uaee3\uaee4\uaee5\uaee6\uaee7\uaee8\uaee9\uaeea\uaeeb\uaeec\uaeed\uaeee\uaeef\uaef0\uaef1\uaef2\uaef3\uaef4\uaef5\uaef6\uaef7\uaef8\uaef9\uaefa\uaefb\uaefc\uaefd\uaefe\uaeff\uaf00\uaf01\uaf02\uaf03\uaf04\uaf05\uaf06\uaf07\uaf08\uaf09\uaf0a\uaf0b\uaf0c\uaf0d\uaf0e\uaf0f\uaf10\uaf11\uaf12\uaf13\uaf14\uaf15\uaf16\uaf17\uaf18\uaf19\uaf1a\uaf1b\uaf1c\uaf1d\uaf1e\uaf1f\uaf20\uaf21\uaf22\uaf23\uaf24\uaf25\uaf26\uaf27\uaf28\uaf29\uaf2a\uaf2b\uaf2c\uaf2d\uaf2e\uaf2f\uaf30\uaf31\uaf32\uaf33\uaf34\uaf35\uaf36\uaf37\uaf38\uaf39\uaf3a\uaf3b\uaf3c\uaf3d\uaf3e\uaf3f\uaf40\uaf41\uaf42\uaf43\uaf44\uaf45\uaf46\uaf47\uaf48\uaf49\uaf4a\uaf4b\uaf4c\uaf4d\uaf4e\uaf4f\uaf50\uaf51\uaf52\uaf53\uaf54\uaf55\uaf56\uaf57\uaf58\uaf59\uaf5a\uaf5b\uaf5c\uaf5d\uaf5e\uaf5f\uaf60\uaf61\uaf62\uaf63\uaf64\uaf65\uaf66\uaf67\uaf68\uaf69\uaf6a\uaf6b\uaf6c\uaf6d\uaf6e\uaf6f\uaf70\uaf71\uaf72\uaf73\uaf74\uaf75\uaf76\uaf77\uaf78\uaf79\uaf7a\uaf7b\uaf7c\uaf7d\uaf7e\uaf7f\uaf80\uaf81\uaf82\uaf83\uaf84\uaf85\uaf86\uaf87\uaf88\uaf89\uaf8a\uaf8b\uaf8c\uaf8d\uaf8e\uaf8f\uaf90\uaf91\uaf92\uaf93\uaf94\uaf95\uaf96\uaf97\uaf98\uaf99\uaf9a\uaf9b\uaf9c\uaf9d\uaf9e\uaf9f\uafa0\uafa1\uafa2\uafa3\uafa4\uafa5\uafa6\uafa7\uafa8\uafa9\uafaa\uafab\uafac\uafad\uafae\uafaf\uafb0\uafb1\uafb2\uafb3\uafb4\uafb5\uafb6\uafb7\uafb8\uafb9\uafba\uafbb\uafbc\uafbd\uafbe\uafbf\uafc0\uafc1\uafc2\uafc3\uafc4\uafc5\uafc6\uafc7\uafc8\uafc9\uafca\uafcb\uafcc\uafcd\uafce\uafcf\uafd0\uafd1\uafd2\uafd3\uafd4\uafd5\uafd6\uafd7\uafd8\uafd9\uafda\uafdb\uafdc\uafdd\uafde\uafdf\uafe0\uafe1\uafe2\uafe3\uafe4\uafe5\uafe6\uafe7\uafe8\uafe9\uafea\uafeb\uafec\uafed\uafee\uafef\uaff0\uaff1\uaff2\uaff3\uaff4\uaff5\uaff6\uaff7\uaff8\uaff9\uaffa\uaffb\uaffc\uaffd\uaffe\uafff\ub000\ub001\ub002\ub003\ub004\ub005\ub006\ub007\ub008\ub009\ub00a\ub00b\ub00c\ub00d\ub00e\ub00f\ub010\ub011\ub012\ub013\ub014\ub015\ub016\ub017\ub018\ub019\ub01a\ub01b\ub01c\ub01d\ub01e\ub01f\ub020\ub021\ub022\ub023\ub024\ub025\ub026\ub027\ub028\ub029\ub02a\ub02b\ub02c\ub02d\ub02e\ub02f\ub030\ub031\ub032\ub033\ub034\ub035\ub036\ub037\ub038\ub039\ub03a\ub03b\ub03c\ub03d\ub03e\ub03f\ub040\ub041\ub042\ub043\ub044\ub045\ub046\ub047\ub048\ub049\ub04a\ub04b\ub04c\ub04d\ub04e\ub04f\ub050\ub051\ub052\ub053\ub054\ub055\ub056\ub057\ub058\ub059\ub05a\ub05b\ub05c\ub05d\ub05e\ub05f\ub060\ub061\ub062\ub063\ub064\ub065\ub066\ub067\ub068\ub069\ub06a\ub06b\ub06c\ub06d\ub06e\ub06f\ub070\ub071\ub072\ub073\ub074\ub075\ub076\ub077\ub078\ub079\ub07a\ub07b\ub07c\ub07d\ub07e\ub07f\ub080\ub081\ub082\ub083\ub084\ub085\ub086\ub087\ub088\ub089\ub08a\ub08b\ub08c\ub08d\ub08e\ub08f\ub090\ub091\ub092\ub093\ub094\ub095\ub096\ub097\ub098\ub099\ub09a\ub09b\ub09c\ub09d\ub09e\ub09f\ub0a0\ub0a1\ub0a2\ub0a3\ub0a4\ub0a5\ub0a6\ub0a7\ub0a8\ub0a9\ub0aa\ub0ab\ub0ac\ub0ad\ub0ae\ub0af\ub0b0\ub0b1\ub0b2\ub0b3\ub0b4\ub0b5\ub0b6\ub0b7\ub0b8\ub0b9\ub0ba\ub0bb\ub0bc\ub0bd\ub0be\ub0bf\ub0c0\ub0c1\ub0c2\ub0c3\ub0c4\ub0c5\ub0c6\ub0c7\ub0c8\ub0c9\ub0ca\ub0cb\ub0cc\ub0cd\ub0ce\ub0cf\ub0d0\ub0d1\ub0d2\ub0d3\ub0d4\ub0d5\ub0d6\ub0d7\ub0d8\ub0d9\ub0da\ub0db\ub0dc\ub0dd\ub0de\ub0df\ub0e0\ub0e1\ub0e2\ub0e3\ub0e4\ub0e5\ub0e6\ub0e7\ub0e8\ub0e9\ub0ea\ub0eb\ub0ec\ub0ed\ub0ee\ub0ef\ub0f0\ub0f1\ub0f2\ub0f3\ub0f4\ub0f5\ub0f6\ub0f7\ub0f8\ub0f9\ub0fa\ub0fb\ub0fc\ub0fd\ub0fe\ub0ff\ub100\ub101\ub102\ub103\ub104\ub105\ub106\ub107\ub108\ub109\ub10a\ub10b\ub10c\ub10d\ub10e\ub10f\ub110\ub111\ub112\ub113\ub114\ub115\ub116\ub117\ub118\ub119\ub11a\ub11b\ub11c\ub11d\ub11e\ub11f\ub120\ub121\ub122\ub123\ub124\ub125\ub126\ub127\ub128\ub129\ub12a\ub12b\ub12c\ub12d\ub12e\ub12f\ub130\ub131\ub132\ub133\ub134\ub135\ub136\ub137\ub138\ub139\ub13a\ub13b\ub13c\ub13d\ub13e\ub13f\ub140\ub141\ub142\ub143\ub144\ub145\ub146\ub147\ub148\ub149\ub14a\ub14b\ub14c\ub14d\ub14e\ub14f\ub150\ub151\ub152\ub153\ub154\ub155\ub156\ub157\ub158\ub159\ub15a\ub15b\ub15c\ub15d\ub15e\ub15f\ub160\ub161\ub162\ub163\ub164\ub165\ub166\ub167\ub168\ub169\ub16a\ub16b\ub16c\ub16d\ub16e\ub16f\ub170\ub171\ub172\ub173\ub174\ub175\ub176\ub177\ub178\ub179\ub17a\ub17b\ub17c\ub17d\ub17e\ub17f\ub180\ub181\ub182\ub183\ub184\ub185\ub186\ub187\ub188\ub189\ub18a\ub18b\ub18c\ub18d\ub18e\ub18f\ub190\ub191\ub192\ub193\ub194\ub195\ub196\ub197\ub198\ub199\ub19a\ub19b\ub19c\ub19d\ub19e\ub19f\ub1a0\ub1a1\ub1a2\ub1a3\ub1a4\ub1a5\ub1a6\ub1a7\ub1a8\ub1a9\ub1aa\ub1ab\ub1ac\ub1ad\ub1ae\ub1af\ub1b0\ub1b1\ub1b2\ub1b3\ub1b4\ub1b5\ub1b6\ub1b7\ub1b8\ub1b9\ub1ba\ub1bb\ub1bc\ub1bd\ub1be\ub1bf\ub1c0\ub1c1\ub1c2\ub1c3\ub1c4\ub1c5\ub1c6\ub1c7\ub1c8\ub1c9\ub1ca\ub1cb\ub1cc\ub1cd\ub1ce\ub1cf\ub1d0\ub1d1\ub1d2\ub1d3\ub1d4\ub1d5\ub1d6\ub1d7\ub1d8\ub1d9\ub1da\ub1db\ub1dc\ub1dd\ub1de\ub1df\ub1e0\ub1e1\ub1e2\ub1e3\ub1e4\ub1e5\ub1e6\ub1e7\ub1e8\ub1e9\ub1ea\ub1eb\ub1ec\ub1ed\ub1ee\ub1ef\ub1f0\ub1f1\ub1f2\ub1f3\ub1f4\ub1f5\ub1f6\ub1f7\ub1f8\ub1f9\ub1fa\ub1fb\ub1fc\ub1fd\ub1fe\ub1ff\ub200\ub201\ub202\ub203\ub204\ub205\ub206\ub207\ub208\ub209\ub20a\ub20b\ub20c\ub20d\ub20e\ub20f\ub210\ub211\ub212\ub213\ub214\ub215\ub216\ub217\ub218\ub219\ub21a\ub21b\ub21c\ub21d\ub21e\ub21f\ub220\ub221\ub222\ub223\ub224\ub225\ub226\ub227\ub228\ub229\ub22a\ub22b\ub22c\ub22d\ub22e\ub22f\ub230\ub231\ub232\ub233\ub234\ub235\ub236\ub237\ub238\ub239\ub23a\ub23b\ub23c\ub23d\ub23e\ub23f\ub240\ub241\ub242\ub243\ub244\ub245\ub246\ub247\ub248\ub249\ub24a\ub24b\ub24c\ub24d\ub24e\ub24f\ub250\ub251\ub252\ub253\ub254\ub255\ub256\ub257\ub258\ub259\ub25a\ub25b\ub25c\ub25d\ub25e\ub25f\ub260\ub261\ub262\ub263\ub264\ub265\ub266\ub267\ub268\ub269\ub26a\ub26b\ub26c\ub26d\ub26e\ub26f\ub270\ub271\ub272\ub273\ub274\ub275\ub276\ub277\ub278\ub279\ub27a\ub27b\ub27c\ub27d\ub27e\ub27f\ub280\ub281\ub282\ub283\ub284\ub285\ub286\ub287\ub288\ub289\ub28a\ub28b\ub28c\ub28d\ub28e\ub28f\ub290\ub291\ub292\ub293\ub294\ub295\ub296\ub297\ub298\ub299\ub29a\ub29b\ub29c\ub29d\ub29e\ub29f\ub2a0\ub2a1\ub2a2\ub2a3\ub2a4\ub2a5\ub2a6\ub2a7\ub2a8\ub2a9\ub2aa\ub2ab\ub2ac\ub2ad\ub2ae\ub2af\ub2b0\ub2b1\ub2b2\ub2b3\ub2b4\ub2b5\ub2b6\ub2b7\ub2b8\ub2b9\ub2ba\ub2bb\ub2bc\ub2bd\ub2be\ub2bf\ub2c0\ub2c1\ub2c2\ub2c3\ub2c4\ub2c5\ub2c6\ub2c7\ub2c8\ub2c9\ub2ca\ub2cb\ub2cc\ub2cd\ub2ce\ub2cf\ub2d0\ub2d1\ub2d2\ub2d3\ub2d4\ub2d5\ub2d6\ub2d7\ub2d8\ub2d9\ub2da\ub2db\ub2dc\ub2dd\ub2de\ub2df\ub2e0\ub2e1\ub2e2\ub2e3\ub2e4\ub2e5\ub2e6\ub2e7\ub2e8\ub2e9\ub2ea\ub2eb\ub2ec\ub2ed\ub2ee\ub2ef\ub2f0\ub2f1\ub2f2\ub2f3\ub2f4\ub2f5\ub2f6\ub2f7\ub2f8\ub2f9\ub2fa\ub2fb\ub2fc\ub2fd\ub2fe\ub2ff\ub300\ub301\ub302\ub303\ub304\ub305\ub306\ub307\ub308\ub309\ub30a\ub30b\ub30c\ub30d\ub30e\ub30f\ub310\ub311\ub312\ub313\ub314\ub315\ub316\ub317\ub318\ub319\ub31a\ub31b\ub31c\ub31d\ub31e\ub31f\ub320\ub321\ub322\ub323\ub324\ub325\ub326\ub327\ub328\ub329\ub32a\ub32b\ub32c\ub32d\ub32e\ub32f\ub330\ub331\ub332\ub333\ub334\ub335\ub336\ub337\ub338\ub339\ub33a\ub33b\ub33c\ub33d\ub33e\ub33f\ub340\ub341\ub342\ub343\ub344\ub345\ub346\ub347\ub348\ub349\ub34a\ub34b\ub34c\ub34d\ub34e\ub34f\ub350\ub351\ub352\ub353\ub354\ub355\ub356\ub357\ub358\ub359\ub35a\ub35b\ub35c\ub35d\ub35e\ub35f\ub360\ub361\ub362\ub363\ub364\ub365\ub366\ub367\ub368\ub369\ub36a\ub36b\ub36c\ub36d\ub36e\ub36f\ub370\ub371\ub372\ub373\ub374\ub375\ub376\ub377\ub378\ub379\ub37a\ub37b\ub37c\ub37d\ub37e\ub37f\ub380\ub381\ub382\ub383\ub384\ub385\ub386\ub387\ub388\ub389\ub38a\ub38b\ub38c\ub38d\ub38e\ub38f\ub390\ub391\ub392\ub393\ub394\ub395\ub396\ub397\ub398\ub399\ub39a\ub39b\ub39c\ub39d\ub39e\ub39f\ub3a0\ub3a1\ub3a2\ub3a3\ub3a4\ub3a5\ub3a6\ub3a7\ub3a8\ub3a9\ub3aa\ub3ab\ub3ac\ub3ad\ub3ae\ub3af\ub3b0\ub3b1\ub3b2\ub3b3\ub3b4\ub3b5\ub3b6\ub3b7\ub3b8\ub3b9\ub3ba\ub3bb\ub3bc\ub3bd\ub3be\ub3bf\ub3c0\ub3c1\ub3c2\ub3c3\ub3c4\ub3c5\ub3c6\ub3c7\ub3c8\ub3c9\ub3ca\ub3cb\ub3cc\ub3cd\ub3ce\ub3cf\ub3d0\ub3d1\ub3d2\ub3d3\ub3d4\ub3d5\ub3d6\ub3d7\ub3d8\ub3d9\ub3da\ub3db\ub3dc\ub3dd\ub3de\ub3df\ub3e0\ub3e1\ub3e2\ub3e3\ub3e4\ub3e5\ub3e6\ub3e7\ub3e8\ub3e9\ub3ea\ub3eb\ub3ec\ub3ed\ub3ee\ub3ef\ub3f0\ub3f1\ub3f2\ub3f3\ub3f4\ub3f5\ub3f6\ub3f7\ub3f8\ub3f9\ub3fa\ub3fb\ub3fc\ub3fd\ub3fe\ub3ff\ub400\ub401\ub402\ub403\ub404\ub405\ub406\ub407\ub408\ub409\ub40a\ub40b\ub40c\ub40d\ub40e\ub40f\ub410\ub411\ub412\ub413\ub414\ub415\ub416\ub417\ub418\ub419\ub41a\ub41b\ub41c\ub41d\ub41e\ub41f\ub420\ub421\ub422\ub423\ub424\ub425\ub426\ub427\ub428\ub429\ub42a\ub42b\ub42c\ub42d\ub42e\ub42f\ub430\ub431\ub432\ub433\ub434\ub435\ub436\ub437\ub438\ub439\ub43a\ub43b\ub43c\ub43d\ub43e\ub43f\ub440\ub441\ub442\ub443\ub444\ub445\ub446\ub447\ub448\ub449\ub44a\ub44b\ub44c\ub44d\ub44e\ub44f\ub450\ub451\ub452\ub453\ub454\ub455\ub456\ub457\ub458\ub459\ub45a\ub45b\ub45c\ub45d\ub45e\ub45f\ub460\ub461\ub462\ub463\ub464\ub465\ub466\ub467\ub468\ub469\ub46a\ub46b\ub46c\ub46d\ub46e\ub46f\ub470\ub471\ub472\ub473\ub474\ub475\ub476\ub477\ub478\ub479\ub47a\ub47b\ub47c\ub47d\ub47e\ub47f\ub480\ub481\ub482\ub483\ub484\ub485\ub486\ub487\ub488\ub489\ub48a\ub48b\ub48c\ub48d\ub48e\ub48f\ub490\ub491\ub492\ub493\ub494\ub495\ub496\ub497\ub498\ub499\ub49a\ub49b\ub49c\ub49d\ub49e\ub49f\ub4a0\ub4a1\ub4a2\ub4a3\ub4a4\ub4a5\ub4a6\ub4a7\ub4a8\ub4a9\ub4aa\ub4ab\ub4ac\ub4ad\ub4ae\ub4af\ub4b0\ub4b1\ub4b2\ub4b3\ub4b4\ub4b5\ub4b6\ub4b7\ub4b8\ub4b9\ub4ba\ub4bb\ub4bc\ub4bd\ub4be\ub4bf\ub4c0\ub4c1\ub4c2\ub4c3\ub4c4\ub4c5\ub4c6\ub4c7\ub4c8\ub4c9\ub4ca\ub4cb\ub4cc\ub4cd\ub4ce\ub4cf\ub4d0\ub4d1\ub4d2\ub4d3\ub4d4\ub4d5\ub4d6\ub4d7\ub4d8\ub4d9\ub4da\ub4db\ub4dc\ub4dd\ub4de\ub4df\ub4e0\ub4e1\ub4e2\ub4e3\ub4e4\ub4e5\ub4e6\ub4e7\ub4e8\ub4e9\ub4ea\ub4eb\ub4ec\ub4ed\ub4ee\ub4ef\ub4f0\ub4f1\ub4f2\ub4f3\ub4f4\ub4f5\ub4f6\ub4f7\ub4f8\ub4f9\ub4fa\ub4fb\ub4fc\ub4fd\ub4fe\ub4ff\ub500\ub501\ub502\ub503\ub504\ub505\ub506\ub507\ub508\ub509\ub50a\ub50b\ub50c\ub50d\ub50e\ub50f\ub510\ub511\ub512\ub513\ub514\ub515\ub516\ub517\ub518\ub519\ub51a\ub51b\ub51c\ub51d\ub51e\ub51f\ub520\ub521\ub522\ub523\ub524\ub525\ub526\ub527\ub528\ub529\ub52a\ub52b\ub52c\ub52d\ub52e\ub52f\ub530\ub531\ub532\ub533\ub534\ub535\ub536\ub537\ub538\ub539\ub53a\ub53b\ub53c\ub53d\ub53e\ub53f\ub540\ub541\ub542\ub543\ub544\ub545\ub546\ub547\ub548\ub549\ub54a\ub54b\ub54c\ub54d\ub54e\ub54f\ub550\ub551\ub552\ub553\ub554\ub555\ub556\ub557\ub558\ub559\ub55a\ub55b\ub55c\ub55d\ub55e\ub55f\ub560\ub561\ub562\ub563\ub564\ub565\ub566\ub567\ub568\ub569\ub56a\ub56b\ub56c\ub56d\ub56e\ub56f\ub570\ub571\ub572\ub573\ub574\ub575\ub576\ub577\ub578\ub579\ub57a\ub57b\ub57c\ub57d\ub57e\ub57f\ub580\ub581\ub582\ub583\ub584\ub585\ub586\ub587\ub588\ub589\ub58a\ub58b\ub58c\ub58d\ub58e\ub58f\ub590\ub591\ub592\ub593\ub594\ub595\ub596\ub597\ub598\ub599\ub59a\ub59b\ub59c\ub59d\ub59e\ub59f\ub5a0\ub5a1\ub5a2\ub5a3\ub5a4\ub5a5\ub5a6\ub5a7\ub5a8\ub5a9\ub5aa\ub5ab\ub5ac\ub5ad\ub5ae\ub5af\ub5b0\ub5b1\ub5b2\ub5b3\ub5b4\ub5b5\ub5b6\ub5b7\ub5b8\ub5b9\ub5ba\ub5bb\ub5bc\ub5bd\ub5be\ub5bf\ub5c0\ub5c1\ub5c2\ub5c3\ub5c4\ub5c5\ub5c6\ub5c7\ub5c8\ub5c9\ub5ca\ub5cb\ub5cc\ub5cd\ub5ce\ub5cf\ub5d0\ub5d1\ub5d2\ub5d3\ub5d4\ub5d5\ub5d6\ub5d7\ub5d8\ub5d9\ub5da\ub5db\ub5dc\ub5dd\ub5de\ub5df\ub5e0\ub5e1\ub5e2\ub5e3\ub5e4\ub5e5\ub5e6\ub5e7\ub5e8\ub5e9\ub5ea\ub5eb\ub5ec\ub5ed\ub5ee\ub5ef\ub5f0\ub5f1\ub5f2\ub5f3\ub5f4\ub5f5\ub5f6\ub5f7\ub5f8\ub5f9\ub5fa\ub5fb\ub5fc\ub5fd\ub5fe\ub5ff\ub600\ub601\ub602\ub603\ub604\ub605\ub606\ub607\ub608\ub609\ub60a\ub60b\ub60c\ub60d\ub60e\ub60f\ub610\ub611\ub612\ub613\ub614\ub615\ub616\ub617\ub618\ub619\ub61a\ub61b\ub61c\ub61d\ub61e\ub61f\ub620\ub621\ub622\ub623\ub624\ub625\ub626\ub627\ub628\ub629\ub62a\ub62b\ub62c\ub62d\ub62e\ub62f\ub630\ub631\ub632\ub633\ub634\ub635\ub636\ub637\ub638\ub639\ub63a\ub63b\ub63c\ub63d\ub63e\ub63f\ub640\ub641\ub642\ub643\ub644\ub645\ub646\ub647\ub648\ub649\ub64a\ub64b\ub64c\ub64d\ub64e\ub64f\ub650\ub651\ub652\ub653\ub654\ub655\ub656\ub657\ub658\ub659\ub65a\ub65b\ub65c\ub65d\ub65e\ub65f\ub660\ub661\ub662\ub663\ub664\ub665\ub666\ub667\ub668\ub669\ub66a\ub66b\ub66c\ub66d\ub66e\ub66f\ub670\ub671\ub672\ub673\ub674\ub675\ub676\ub677\ub678\ub679\ub67a\ub67b\ub67c\ub67d\ub67e\ub67f\ub680\ub681\ub682\ub683\ub684\ub685\ub686\ub687\ub688\ub689\ub68a\ub68b\ub68c\ub68d\ub68e\ub68f\ub690\ub691\ub692\ub693\ub694\ub695\ub696\ub697\ub698\ub699\ub69a\ub69b\ub69c\ub69d\ub69e\ub69f\ub6a0\ub6a1\ub6a2\ub6a3\ub6a4\ub6a5\ub6a6\ub6a7\ub6a8\ub6a9\ub6aa\ub6ab\ub6ac\ub6ad\ub6ae\ub6af\ub6b0\ub6b1\ub6b2\ub6b3\ub6b4\ub6b5\ub6b6\ub6b7\ub6b8\ub6b9\ub6ba\ub6bb\ub6bc\ub6bd\ub6be\ub6bf\ub6c0\ub6c1\ub6c2\ub6c3\ub6c4\ub6c5\ub6c6\ub6c7\ub6c8\ub6c9\ub6ca\ub6cb\ub6cc\ub6cd\ub6ce\ub6cf\ub6d0\ub6d1\ub6d2\ub6d3\ub6d4\ub6d5\ub6d6\ub6d7\ub6d8\ub6d9\ub6da\ub6db\ub6dc\ub6dd\ub6de\ub6df\ub6e0\ub6e1\ub6e2\ub6e3\ub6e4\ub6e5\ub6e6\ub6e7\ub6e8\ub6e9\ub6ea\ub6eb\ub6ec\ub6ed\ub6ee\ub6ef\ub6f0\ub6f1\ub6f2\ub6f3\ub6f4\ub6f5\ub6f6\ub6f7\ub6f8\ub6f9\ub6fa\ub6fb\ub6fc\ub6fd\ub6fe\ub6ff\ub700\ub701\ub702\ub703\ub704\ub705\ub706\ub707\ub708\ub709\ub70a\ub70b\ub70c\ub70d\ub70e\ub70f\ub710\ub711\ub712\ub713\ub714\ub715\ub716\ub717\ub718\ub719\ub71a\ub71b\ub71c\ub71d\ub71e\ub71f\ub720\ub721\ub722\ub723\ub724\ub725\ub726\ub727\ub728\ub729\ub72a\ub72b\ub72c\ub72d\ub72e\ub72f\ub730\ub731\ub732\ub733\ub734\ub735\ub736\ub737\ub738\ub739\ub73a\ub73b\ub73c\ub73d\ub73e\ub73f\ub740\ub741\ub742\ub743\ub744\ub745\ub746\ub747\ub748\ub749\ub74a\ub74b\ub74c\ub74d\ub74e\ub74f\ub750\ub751\ub752\ub753\ub754\ub755\ub756\ub757\ub758\ub759\ub75a\ub75b\ub75c\ub75d\ub75e\ub75f\ub760\ub761\ub762\ub763\ub764\ub765\ub766\ub767\ub768\ub769\ub76a\ub76b\ub76c\ub76d\ub76e\ub76f\ub770\ub771\ub772\ub773\ub774\ub775\ub776\ub777\ub778\ub779\ub77a\ub77b\ub77c\ub77d\ub77e\ub77f\ub780\ub781\ub782\ub783\ub784\ub785\ub786\ub787\ub788\ub789\ub78a\ub78b\ub78c\ub78d\ub78e\ub78f\ub790\ub791\ub792\ub793\ub794\ub795\ub796\ub797\ub798\ub799\ub79a\ub79b\ub79c\ub79d\ub79e\ub79f\ub7a0\ub7a1\ub7a2\ub7a3\ub7a4\ub7a5\ub7a6\ub7a7\ub7a8\ub7a9\ub7aa\ub7ab\ub7ac\ub7ad\ub7ae\ub7af\ub7b0\ub7b1\ub7b2\ub7b3\ub7b4\ub7b5\ub7b6\ub7b7\ub7b8\ub7b9\ub7ba\ub7bb\ub7bc\ub7bd\ub7be\ub7bf\ub7c0\ub7c1\ub7c2\ub7c3\ub7c4\ub7c5\ub7c6\ub7c7\ub7c8\ub7c9\ub7ca\ub7cb\ub7cc\ub7cd\ub7ce\ub7cf\ub7d0\ub7d1\ub7d2\ub7d3\ub7d4\ub7d5\ub7d6\ub7d7\ub7d8\ub7d9\ub7da\ub7db\ub7dc\ub7dd\ub7de\ub7df\ub7e0\ub7e1\ub7e2\ub7e3\ub7e4\ub7e5\ub7e6\ub7e7\ub7e8\ub7e9\ub7ea\ub7eb\ub7ec\ub7ed\ub7ee\ub7ef\ub7f0\ub7f1\ub7f2\ub7f3\ub7f4\ub7f5\ub7f6\ub7f7\ub7f8\ub7f9\ub7fa\ub7fb\ub7fc\ub7fd\ub7fe\ub7ff\ub800\ub801\ub802\ub803\ub804\ub805\ub806\ub807\ub808\ub809\ub80a\ub80b\ub80c\ub80d\ub80e\ub80f\ub810\ub811\ub812\ub813\ub814\ub815\ub816\ub817\ub818\ub819\ub81a\ub81b\ub81c\ub81d\ub81e\ub81f\ub820\ub821\ub822\ub823\ub824\ub825\ub826\ub827\ub828\ub829\ub82a\ub82b\ub82c\ub82d\ub82e\ub82f\ub830\ub831\ub832\ub833\ub834\ub835\ub836\ub837\ub838\ub839\ub83a\ub83b\ub83c\ub83d\ub83e\ub83f\ub840\ub841\ub842\ub843\ub844\ub845\ub846\ub847\ub848\ub849\ub84a\ub84b\ub84c\ub84d\ub84e\ub84f\ub850\ub851\ub852\ub853\ub854\ub855\ub856\ub857\ub858\ub859\ub85a\ub85b\ub85c\ub85d\ub85e\ub85f\ub860\ub861\ub862\ub863\ub864\ub865\ub866\ub867\ub868\ub869\ub86a\ub86b\ub86c\ub86d\ub86e\ub86f\ub870\ub871\ub872\ub873\ub874\ub875\ub876\ub877\ub878\ub879\ub87a\ub87b\ub87c\ub87d\ub87e\ub87f\ub880\ub881\ub882\ub883\ub884\ub885\ub886\ub887\ub888\ub889\ub88a\ub88b\ub88c\ub88d\ub88e\ub88f\ub890\ub891\ub892\ub893\ub894\ub895\ub896\ub897\ub898\ub899\ub89a\ub89b\ub89c\ub89d\ub89e\ub89f\ub8a0\ub8a1\ub8a2\ub8a3\ub8a4\ub8a5\ub8a6\ub8a7\ub8a8\ub8a9\ub8aa\ub8ab\ub8ac\ub8ad\ub8ae\ub8af\ub8b0\ub8b1\ub8b2\ub8b3\ub8b4\ub8b5\ub8b6\ub8b7\ub8b8\ub8b9\ub8ba\ub8bb\ub8bc\ub8bd\ub8be\ub8bf\ub8c0\ub8c1\ub8c2\ub8c3\ub8c4\ub8c5\ub8c6\ub8c7\ub8c8\ub8c9\ub8ca\ub8cb\ub8cc\ub8cd\ub8ce\ub8cf\ub8d0\ub8d1\ub8d2\ub8d3\ub8d4\ub8d5\ub8d6\ub8d7\ub8d8\ub8d9\ub8da\ub8db\ub8dc\ub8dd\ub8de\ub8df\ub8e0\ub8e1\ub8e2\ub8e3\ub8e4\ub8e5\ub8e6\ub8e7\ub8e8\ub8e9\ub8ea\ub8eb\ub8ec\ub8ed\ub8ee\ub8ef\ub8f0\ub8f1\ub8f2\ub8f3\ub8f4\ub8f5\ub8f6\ub8f7\ub8f8\ub8f9\ub8fa\ub8fb\ub8fc\ub8fd\ub8fe\ub8ff\ub900\ub901\ub902\ub903\ub904\ub905\ub906\ub907\ub908\ub909\ub90a\ub90b\ub90c\ub90d\ub90e\ub90f\ub910\ub911\ub912\ub913\ub914\ub915\ub916\ub917\ub918\ub919\ub91a\ub91b\ub91c\ub91d\ub91e\ub91f\ub920\ub921\ub922\ub923\ub924\ub925\ub926\ub927\ub928\ub929\ub92a\ub92b\ub92c\ub92d\ub92e\ub92f\ub930\ub931\ub932\ub933\ub934\ub935\ub936\ub937\ub938\ub939\ub93a\ub93b\ub93c\ub93d\ub93e\ub93f\ub940\ub941\ub942\ub943\ub944\ub945\ub946\ub947\ub948\ub949\ub94a\ub94b\ub94c\ub94d\ub94e\ub94f\ub950\ub951\ub952\ub953\ub954\ub955\ub956\ub957\ub958\ub959\ub95a\ub95b\ub95c\ub95d\ub95e\ub95f\ub960\ub961\ub962\ub963\ub964\ub965\ub966\ub967\ub968\ub969\ub96a\ub96b\ub96c\ub96d\ub96e\ub96f\ub970\ub971\ub972\ub973\ub974\ub975\ub976\ub977\ub978\ub979\ub97a\ub97b\ub97c\ub97d\ub97e\ub97f\ub980\ub981\ub982\ub983\ub984\ub985\ub986\ub987\ub988\ub989\ub98a\ub98b\ub98c\ub98d\ub98e\ub98f\ub990\ub991\ub992\ub993\ub994\ub995\ub996\ub997\ub998\ub999\ub99a\ub99b\ub99c\ub99d\ub99e\ub99f\ub9a0\ub9a1\ub9a2\ub9a3\ub9a4\ub9a5\ub9a6\ub9a7\ub9a8\ub9a9\ub9aa\ub9ab\ub9ac\ub9ad\ub9ae\ub9af\ub9b0\ub9b1\ub9b2\ub9b3\ub9b4\ub9b5\ub9b6\ub9b7\ub9b8\ub9b9\ub9ba\ub9bb\ub9bc\ub9bd\ub9be\ub9bf\ub9c0\ub9c1\ub9c2\ub9c3\ub9c4\ub9c5\ub9c6\ub9c7\ub9c8\ub9c9\ub9ca\ub9cb\ub9cc\ub9cd\ub9ce\ub9cf\ub9d0\ub9d1\ub9d2\ub9d3\ub9d4\ub9d5\ub9d6\ub9d7\ub9d8\ub9d9\ub9da\ub9db\ub9dc\ub9dd\ub9de\ub9df\ub9e0\ub9e1\ub9e2\ub9e3\ub9e4\ub9e5\ub9e6\ub9e7\ub9e8\ub9e9\ub9ea\ub9eb\ub9ec\ub9ed\ub9ee\ub9ef\ub9f0\ub9f1\ub9f2\ub9f3\ub9f4\ub9f5\ub9f6\ub9f7\ub9f8\ub9f9\ub9fa\ub9fb\ub9fc\ub9fd\ub9fe\ub9ff\uba00\uba01\uba02\uba03\uba04\uba05\uba06\uba07\uba08\uba09\uba0a\uba0b\uba0c\uba0d\uba0e\uba0f\uba10\uba11\uba12\uba13\uba14\uba15\uba16\uba17\uba18\uba19\uba1a\uba1b\uba1c\uba1d\uba1e\uba1f\uba20\uba21\uba22\uba23\uba24\uba25\uba26\uba27\uba28\uba29\uba2a\uba2b\uba2c\uba2d\uba2e\uba2f\uba30\uba31\uba32\uba33\uba34\uba35\uba36\uba37\uba38\uba39\uba3a\uba3b\uba3c\uba3d\uba3e\uba3f\uba40\uba41\uba42\uba43\uba44\uba45\uba46\uba47\uba48\uba49\uba4a\uba4b\uba4c\uba4d\uba4e\uba4f\uba50\uba51\uba52\uba53\uba54\uba55\uba56\uba57\uba58\uba59\uba5a\uba5b\uba5c\uba5d\uba5e\uba5f\uba60\uba61\uba62\uba63\uba64\uba65\uba66\uba67\uba68\uba69\uba6a\uba6b\uba6c\uba6d\uba6e\uba6f\uba70\uba71\uba72\uba73\uba74\uba75\uba76\uba77\uba78\uba79\uba7a\uba7b\uba7c\uba7d\uba7e\uba7f\uba80\uba81\uba82\uba83\uba84\uba85\uba86\uba87\uba88\uba89\uba8a\uba8b\uba8c\uba8d\uba8e\uba8f\uba90\uba91\uba92\uba93\uba94\uba95\uba96\uba97\uba98\uba99\uba9a\uba9b\uba9c\uba9d\uba9e\uba9f\ubaa0\ubaa1\ubaa2\ubaa3\ubaa4\ubaa5\ubaa6\ubaa7\ubaa8\ubaa9\ubaaa\ubaab\ubaac\ubaad\ubaae\ubaaf\ubab0\ubab1\ubab2\ubab3\ubab4\ubab5\ubab6\ubab7\ubab8\ubab9\ubaba\ubabb\ubabc\ubabd\ubabe\ubabf\ubac0\ubac1\ubac2\ubac3\ubac4\ubac5\ubac6\ubac7\ubac8\ubac9\ubaca\ubacb\ubacc\ubacd\ubace\ubacf\ubad0\ubad1\ubad2\ubad3\ubad4\ubad5\ubad6\ubad7\ubad8\ubad9\ubada\ubadb\ubadc\ubadd\ubade\ubadf\ubae0\ubae1\ubae2\ubae3\ubae4\ubae5\ubae6\ubae7\ubae8\ubae9\ubaea\ubaeb\ubaec\ubaed\ubaee\ubaef\ubaf0\ubaf1\ubaf2\ubaf3\ubaf4\ubaf5\ubaf6\ubaf7\ubaf8\ubaf9\ubafa\ubafb\ubafc\ubafd\ubafe\ubaff\ubb00\ubb01\ubb02\ubb03\ubb04\ubb05\ubb06\ubb07\ubb08\ubb09\ubb0a\ubb0b\ubb0c\ubb0d\ubb0e\ubb0f\ubb10\ubb11\ubb12\ubb13\ubb14\ubb15\ubb16\ubb17\ubb18\ubb19\ubb1a\ubb1b\ubb1c\ubb1d\ubb1e\ubb1f\ubb20\ubb21\ubb22\ubb23\ubb24\ubb25\ubb26\ubb27\ubb28\ubb29\ubb2a\ubb2b\ubb2c\ubb2d\ubb2e\ubb2f\ubb30\ubb31\ubb32\ubb33\ubb34\ubb35\ubb36\ubb37\ubb38\ubb39\ubb3a\ubb3b\ubb3c\ubb3d\ubb3e\ubb3f\ubb40\ubb41\ubb42\ubb43\ubb44\ubb45\ubb46\ubb47\ubb48\ubb49\ubb4a\ubb4b\ubb4c\ubb4d\ubb4e\ubb4f\ubb50\ubb51\ubb52\ubb53\ubb54\ubb55\ubb56\ubb57\ubb58\ubb59\ubb5a\ubb5b\ubb5c\ubb5d\ubb5e\ubb5f\ubb60\ubb61\ubb62\ubb63\ubb64\ubb65\ubb66\ubb67\ubb68\ubb69\ubb6a\ubb6b\ubb6c\ubb6d\ubb6e\ubb6f\ubb70\ubb71\ubb72\ubb73\ubb74\ubb75\ubb76\ubb77\ubb78\ubb79\ubb7a\ubb7b\ubb7c\ubb7d\ubb7e\ubb7f\ubb80\ubb81\ubb82\ubb83\ubb84\ubb85\ubb86\ubb87\ubb88\ubb89\ubb8a\ubb8b\ubb8c\ubb8d\ubb8e\ubb8f\ubb90\ubb91\ubb92\ubb93\ubb94\ubb95\ubb96\ubb97\ubb98\ubb99\ubb9a\ubb9b\ubb9c\ubb9d\ubb9e\ubb9f\ubba0\ubba1\ubba2\ubba3\ubba4\ubba5\ubba6\ubba7\ubba8\ubba9\ubbaa\ubbab\ubbac\ubbad\ubbae\ubbaf\ubbb0\ubbb1\ubbb2\ubbb3\ubbb4\ubbb5\ubbb6\ubbb7\ubbb8\ubbb9\ubbba\ubbbb\ubbbc\ubbbd\ubbbe\ubbbf\ubbc0\ubbc1\ubbc2\ubbc3\ubbc4\ubbc5\ubbc6\ubbc7\ubbc8\ubbc9\ubbca\ubbcb\ubbcc\ubbcd\ubbce\ubbcf\ubbd0\ubbd1\ubbd2\ubbd3\ubbd4\ubbd5\ubbd6\ubbd7\ubbd8\ubbd9\ubbda\ubbdb\ubbdc\ubbdd\ubbde\ubbdf\ubbe0\ubbe1\ubbe2\ubbe3\ubbe4\ubbe5\ubbe6\ubbe7\ubbe8\ubbe9\ubbea\ubbeb\ubbec\ubbed\ubbee\ubbef\ubbf0\ubbf1\ubbf2\ubbf3\ubbf4\ubbf5\ubbf6\ubbf7\ubbf8\ubbf9\ubbfa\ubbfb\ubbfc\ubbfd\ubbfe\ubbff\ubc00\ubc01\ubc02\ubc03\ubc04\ubc05\ubc06\ubc07\ubc08\ubc09\ubc0a\ubc0b\ubc0c\ubc0d\ubc0e\ubc0f\ubc10\ubc11\ubc12\ubc13\ubc14\ubc15\ubc16\ubc17\ubc18\ubc19\ubc1a\ubc1b\ubc1c\ubc1d\ubc1e\ubc1f\ubc20\ubc21\ubc22\ubc23\ubc24\ubc25\ubc26\ubc27\ubc28\ubc29\ubc2a\ubc2b\ubc2c\ubc2d\ubc2e\ubc2f\ubc30\ubc31\ubc32\ubc33\ubc34\ubc35\ubc36\ubc37\ubc38\ubc39\ubc3a\ubc3b\ubc3c\ubc3d\ubc3e\ubc3f\ubc40\ubc41\ubc42\ubc43\ubc44\ubc45\ubc46\ubc47\ubc48\ubc49\ubc4a\ubc4b\ubc4c\ubc4d\ubc4e\ubc4f\ubc50\ubc51\ubc52\ubc53\ubc54\ubc55\ubc56\ubc57\ubc58\ubc59\ubc5a\ubc5b\ubc5c\ubc5d\ubc5e\ubc5f\ubc60\ubc61\ubc62\ubc63\ubc64\ubc65\ubc66\ubc67\ubc68\ubc69\ubc6a\ubc6b\ubc6c\ubc6d\ubc6e\ubc6f\ubc70\ubc71\ubc72\ubc73\ubc74\ubc75\ubc76\ubc77\ubc78\ubc79\ubc7a\ubc7b\ubc7c\ubc7d\ubc7e\ubc7f\ubc80\ubc81\ubc82\ubc83\ubc84\ubc85\ubc86\ubc87\ubc88\ubc89\ubc8a\ubc8b\ubc8c\ubc8d\ubc8e\ubc8f\ubc90\ubc91\ubc92\ubc93\ubc94\ubc95\ubc96\ubc97\ubc98\ubc99\ubc9a\ubc9b\ubc9c\ubc9d\ubc9e\ubc9f\ubca0\ubca1\ubca2\ubca3\ubca4\ubca5\ubca6\ubca7\ubca8\ubca9\ubcaa\ubcab\ubcac\ubcad\ubcae\ubcaf\ubcb0\ubcb1\ubcb2\ubcb3\ubcb4\ubcb5\ubcb6\ubcb7\ubcb8\ubcb9\ubcba\ubcbb\ubcbc\ubcbd\ubcbe\ubcbf\ubcc0\ubcc1\ubcc2\ubcc3\ubcc4\ubcc5\ubcc6\ubcc7\ubcc8\ubcc9\ubcca\ubccb\ubccc\ubccd\ubcce\ubccf\ubcd0\ubcd1\ubcd2\ubcd3\ubcd4\ubcd5\ubcd6\ubcd7\ubcd8\ubcd9\ubcda\ubcdb\ubcdc\ubcdd\ubcde\ubcdf\ubce0\ubce1\ubce2\ubce3\ubce4\ubce5\ubce6\ubce7\ubce8\ubce9\ubcea\ubceb\ubcec\ubced\ubcee\ubcef\ubcf0\ubcf1\ubcf2\ubcf3\ubcf4\ubcf5\ubcf6\ubcf7\ubcf8\ubcf9\ubcfa\ubcfb\ubcfc\ubcfd\ubcfe\ubcff\ubd00\ubd01\ubd02\ubd03\ubd04\ubd05\ubd06\ubd07\ubd08\ubd09\ubd0a\ubd0b\ubd0c\ubd0d\ubd0e\ubd0f\ubd10\ubd11\ubd12\ubd13\ubd14\ubd15\ubd16\ubd17\ubd18\ubd19\ubd1a\ubd1b\ubd1c\ubd1d\ubd1e\ubd1f\ubd20\ubd21\ubd22\ubd23\ubd24\ubd25\ubd26\ubd27\ubd28\ubd29\ubd2a\ubd2b\ubd2c\ubd2d\ubd2e\ubd2f\ubd30\ubd31\ubd32\ubd33\ubd34\ubd35\ubd36\ubd37\ubd38\ubd39\ubd3a\ubd3b\ubd3c\ubd3d\ubd3e\ubd3f\ubd40\ubd41\ubd42\ubd43\ubd44\ubd45\ubd46\ubd47\ubd48\ubd49\ubd4a\ubd4b\ubd4c\ubd4d\ubd4e\ubd4f\ubd50\ubd51\ubd52\ubd53\ubd54\ubd55\ubd56\ubd57\ubd58\ubd59\ubd5a\ubd5b\ubd5c\ubd5d\ubd5e\ubd5f\ubd60\ubd61\ubd62\ubd63\ubd64\ubd65\ubd66\ubd67\ubd68\ubd69\ubd6a\ubd6b\ubd6c\ubd6d\ubd6e\ubd6f\ubd70\ubd71\ubd72\ubd73\ubd74\ubd75\ubd76\ubd77\ubd78\ubd79\ubd7a\ubd7b\ubd7c\ubd7d\ubd7e\ubd7f\ubd80\ubd81\ubd82\ubd83\ubd84\ubd85\ubd86\ubd87\ubd88\ubd89\ubd8a\ubd8b\ubd8c\ubd8d\ubd8e\ubd8f\ubd90\ubd91\ubd92\ubd93\ubd94\ubd95\ubd96\ubd97\ubd98\ubd99\ubd9a\ubd9b\ubd9c\ubd9d\ubd9e\ubd9f\ubda0\ubda1\ubda2\ubda3\ubda4\ubda5\ubda6\ubda7\ubda8\ubda9\ubdaa\ubdab\ubdac\ubdad\ubdae\ubdaf\ubdb0\ubdb1\ubdb2\ubdb3\ubdb4\ubdb5\ubdb6\ubdb7\ubdb8\ubdb9\ubdba\ubdbb\ubdbc\ubdbd\ubdbe\ubdbf\ubdc0\ubdc1\ubdc2\ubdc3\ubdc4\ubdc5\ubdc6\ubdc7\ubdc8\ubdc9\ubdca\ubdcb\ubdcc\ubdcd\ubdce\ubdcf\ubdd0\ubdd1\ubdd2\ubdd3\ubdd4\ubdd5\ubdd6\ubdd7\ubdd8\ubdd9\ubdda\ubddb\ubddc\ubddd\ubdde\ubddf\ubde0\ubde1\ubde2\ubde3\ubde4\ubde5\ubde6\ubde7\ubde8\ubde9\ubdea\ubdeb\ubdec\ubded\ubdee\ubdef\ubdf0\ubdf1\ubdf2\ubdf3\ubdf4\ubdf5\ubdf6\ubdf7\ubdf8\ubdf9\ubdfa\ubdfb\ubdfc\ubdfd\ubdfe\ubdff\ube00\ube01\ube02\ube03\ube04\ube05\ube06\ube07\ube08\ube09\ube0a\ube0b\ube0c\ube0d\ube0e\ube0f\ube10\ube11\ube12\ube13\ube14\ube15\ube16\ube17\ube18\ube19\ube1a\ube1b\ube1c\ube1d\ube1e\ube1f\ube20\ube21\ube22\ube23\ube24\ube25\ube26\ube27\ube28\ube29\ube2a\ube2b\ube2c\ube2d\ube2e\ube2f\ube30\ube31\ube32\ube33\ube34\ube35\ube36\ube37\ube38\ube39\ube3a\ube3b\ube3c\ube3d\ube3e\ube3f\ube40\ube41\ube42\ube43\ube44\ube45\ube46\ube47\ube48\ube49\ube4a\ube4b\ube4c\ube4d\ube4e\ube4f\ube50\ube51\ube52\ube53\ube54\ube55\ube56\ube57\ube58\ube59\ube5a\ube5b\ube5c\ube5d\ube5e\ube5f\ube60\ube61\ube62\ube63\ube64\ube65\ube66\ube67\ube68\ube69\ube6a\ube6b\ube6c\ube6d\ube6e\ube6f\ube70\ube71\ube72\ube73\ube74\ube75\ube76\ube77\ube78\ube79\ube7a\ube7b\ube7c\ube7d\ube7e\ube7f\ube80\ube81\ube82\ube83\ube84\ube85\ube86\ube87\ube88\ube89\ube8a\ube8b\ube8c\ube8d\ube8e\ube8f\ube90\ube91\ube92\ube93\ube94\ube95\ube96\ube97\ube98\ube99\ube9a\ube9b\ube9c\ube9d\ube9e\ube9f\ubea0\ubea1\ubea2\ubea3\ubea4\ubea5\ubea6\ubea7\ubea8\ubea9\ubeaa\ubeab\ubeac\ubead\ubeae\ubeaf\ubeb0\ubeb1\ubeb2\ubeb3\ubeb4\ubeb5\ubeb6\ubeb7\ubeb8\ubeb9\ubeba\ubebb\ubebc\ubebd\ubebe\ubebf\ubec0\ubec1\ubec2\ubec3\ubec4\ubec5\ubec6\ubec7\ubec8\ubec9\ubeca\ubecb\ubecc\ubecd\ubece\ubecf\ubed0\ubed1\ubed2\ubed3\ubed4\ubed5\ubed6\ubed7\ubed8\ubed9\ubeda\ubedb\ubedc\ubedd\ubede\ubedf\ubee0\ubee1\ubee2\ubee3\ubee4\ubee5\ubee6\ubee7\ubee8\ubee9\ubeea\ubeeb\ubeec\ubeed\ubeee\ubeef\ubef0\ubef1\ubef2\ubef3\ubef4\ubef5\ubef6\ubef7\ubef8\ubef9\ubefa\ubefb\ubefc\ubefd\ubefe\ubeff\ubf00\ubf01\ubf02\ubf03\ubf04\ubf05\ubf06\ubf07\ubf08\ubf09\ubf0a\ubf0b\ubf0c\ubf0d\ubf0e\ubf0f\ubf10\ubf11\ubf12\ubf13\ubf14\ubf15\ubf16\ubf17\ubf18\ubf19\ubf1a\ubf1b\ubf1c\ubf1d\ubf1e\ubf1f\ubf20\ubf21\ubf22\ubf23\ubf24\ubf25\ubf26\ubf27\ubf28\ubf29\ubf2a\ubf2b\ubf2c\ubf2d\ubf2e\ubf2f\ubf30\ubf31\ubf32\ubf33\ubf34\ubf35\ubf36\ubf37\ubf38\ubf39\ubf3a\ubf3b\ubf3c\ubf3d\ubf3e\ubf3f\ubf40\ubf41\ubf42\ubf43\ubf44\ubf45\ubf46\ubf47\ubf48\ubf49\ubf4a\ubf4b\ubf4c\ubf4d\ubf4e\ubf4f\ubf50\ubf51\ubf52\ubf53\ubf54\ubf55\ubf56\ubf57\ubf58\ubf59\ubf5a\ubf5b\ubf5c\ubf5d\ubf5e\ubf5f\ubf60\ubf61\ubf62\ubf63\ubf64\ubf65\ubf66\ubf67\ubf68\ubf69\ubf6a\ubf6b\ubf6c\ubf6d\ubf6e\ubf6f\ubf70\ubf71\ubf72\ubf73\ubf74\ubf75\ubf76\ubf77\ubf78\ubf79\ubf7a\ubf7b\ubf7c\ubf7d\ubf7e\ubf7f\ubf80\ubf81\ubf82\ubf83\ubf84\ubf85\ubf86\ubf87\ubf88\ubf89\ubf8a\ubf8b\ubf8c\ubf8d\ubf8e\ubf8f\ubf90\ubf91\ubf92\ubf93\ubf94\ubf95\ubf96\ubf97\ubf98\ubf99\ubf9a\ubf9b\ubf9c\ubf9d\ubf9e\ubf9f\ubfa0\ubfa1\ubfa2\ubfa3\ubfa4\ubfa5\ubfa6\ubfa7\ubfa8\ubfa9\ubfaa\ubfab\ubfac\ubfad\ubfae\ubfaf\ubfb0\ubfb1\ubfb2\ubfb3\ubfb4\ubfb5\ubfb6\ubfb7\ubfb8\ubfb9\ubfba\ubfbb\ubfbc\ubfbd\ubfbe\ubfbf\ubfc0\ubfc1\ubfc2\ubfc3\ubfc4\ubfc5\ubfc6\ubfc7\ubfc8\ubfc9\ubfca\ubfcb\ubfcc\ubfcd\ubfce\ubfcf\ubfd0\ubfd1\ubfd2\ubfd3\ubfd4\ubfd5\ubfd6\ubfd7\ubfd8\ubfd9\ubfda\ubfdb\ubfdc\ubfdd\ubfde\ubfdf\ubfe0\ubfe1\ubfe2\ubfe3\ubfe4\ubfe5\ubfe6\ubfe7\ubfe8\ubfe9\ubfea\ubfeb\ubfec\ubfed\ubfee\ubfef\ubff0\ubff1\ubff2\ubff3\ubff4\ubff5\ubff6\ubff7\ubff8\ubff9\ubffa\ubffb\ubffc\ubffd\ubffe\ubfff\uc000\uc001\uc002\uc003\uc004\uc005\uc006\uc007\uc008\uc009\uc00a\uc00b\uc00c\uc00d\uc00e\uc00f\uc010\uc011\uc012\uc013\uc014\uc015\uc016\uc017\uc018\uc019\uc01a\uc01b\uc01c\uc01d\uc01e\uc01f\uc020\uc021\uc022\uc023\uc024\uc025\uc026\uc027\uc028\uc029\uc02a\uc02b\uc02c\uc02d\uc02e\uc02f\uc030\uc031\uc032\uc033\uc034\uc035\uc036\uc037\uc038\uc039\uc03a\uc03b\uc03c\uc03d\uc03e\uc03f\uc040\uc041\uc042\uc043\uc044\uc045\uc046\uc047\uc048\uc049\uc04a\uc04b\uc04c\uc04d\uc04e\uc04f\uc050\uc051\uc052\uc053\uc054\uc055\uc056\uc057\uc058\uc059\uc05a\uc05b\uc05c\uc05d\uc05e\uc05f\uc060\uc061\uc062\uc063\uc064\uc065\uc066\uc067\uc068\uc069\uc06a\uc06b\uc06c\uc06d\uc06e\uc06f\uc070\uc071\uc072\uc073\uc074\uc075\uc076\uc077\uc078\uc079\uc07a\uc07b\uc07c\uc07d\uc07e\uc07f\uc080\uc081\uc082\uc083\uc084\uc085\uc086\uc087\uc088\uc089\uc08a\uc08b\uc08c\uc08d\uc08e\uc08f\uc090\uc091\uc092\uc093\uc094\uc095\uc096\uc097\uc098\uc099\uc09a\uc09b\uc09c\uc09d\uc09e\uc09f\uc0a0\uc0a1\uc0a2\uc0a3\uc0a4\uc0a5\uc0a6\uc0a7\uc0a8\uc0a9\uc0aa\uc0ab\uc0ac\uc0ad\uc0ae\uc0af\uc0b0\uc0b1\uc0b2\uc0b3\uc0b4\uc0b5\uc0b6\uc0b7\uc0b8\uc0b9\uc0ba\uc0bb\uc0bc\uc0bd\uc0be\uc0bf\uc0c0\uc0c1\uc0c2\uc0c3\uc0c4\uc0c5\uc0c6\uc0c7\uc0c8\uc0c9\uc0ca\uc0cb\uc0cc\uc0cd\uc0ce\uc0cf\uc0d0\uc0d1\uc0d2\uc0d3\uc0d4\uc0d5\uc0d6\uc0d7\uc0d8\uc0d9\uc0da\uc0db\uc0dc\uc0dd\uc0de\uc0df\uc0e0\uc0e1\uc0e2\uc0e3\uc0e4\uc0e5\uc0e6\uc0e7\uc0e8\uc0e9\uc0ea\uc0eb\uc0ec\uc0ed\uc0ee\uc0ef\uc0f0\uc0f1\uc0f2\uc0f3\uc0f4\uc0f5\uc0f6\uc0f7\uc0f8\uc0f9\uc0fa\uc0fb\uc0fc\uc0fd\uc0fe\uc0ff\uc100\uc101\uc102\uc103\uc104\uc105\uc106\uc107\uc108\uc109\uc10a\uc10b\uc10c\uc10d\uc10e\uc10f\uc110\uc111\uc112\uc113\uc114\uc115\uc116\uc117\uc118\uc119\uc11a\uc11b\uc11c\uc11d\uc11e\uc11f\uc120\uc121\uc122\uc123\uc124\uc125\uc126\uc127\uc128\uc129\uc12a\uc12b\uc12c\uc12d\uc12e\uc12f\uc130\uc131\uc132\uc133\uc134\uc135\uc136\uc137\uc138\uc139\uc13a\uc13b\uc13c\uc13d\uc13e\uc13f\uc140\uc141\uc142\uc143\uc144\uc145\uc146\uc147\uc148\uc149\uc14a\uc14b\uc14c\uc14d\uc14e\uc14f\uc150\uc151\uc152\uc153\uc154\uc155\uc156\uc157\uc158\uc159\uc15a\uc15b\uc15c\uc15d\uc15e\uc15f\uc160\uc161\uc162\uc163\uc164\uc165\uc166\uc167\uc168\uc169\uc16a\uc16b\uc16c\uc16d\uc16e\uc16f\uc170\uc171\uc172\uc173\uc174\uc175\uc176\uc177\uc178\uc179\uc17a\uc17b\uc17c\uc17d\uc17e\uc17f\uc180\uc181\uc182\uc183\uc184\uc185\uc186\uc187\uc188\uc189\uc18a\uc18b\uc18c\uc18d\uc18e\uc18f\uc190\uc191\uc192\uc193\uc194\uc195\uc196\uc197\uc198\uc199\uc19a\uc19b\uc19c\uc19d\uc19e\uc19f\uc1a0\uc1a1\uc1a2\uc1a3\uc1a4\uc1a5\uc1a6\uc1a7\uc1a8\uc1a9\uc1aa\uc1ab\uc1ac\uc1ad\uc1ae\uc1af\uc1b0\uc1b1\uc1b2\uc1b3\uc1b4\uc1b5\uc1b6\uc1b7\uc1b8\uc1b9\uc1ba\uc1bb\uc1bc\uc1bd\uc1be\uc1bf\uc1c0\uc1c1\uc1c2\uc1c3\uc1c4\uc1c5\uc1c6\uc1c7\uc1c8\uc1c9\uc1ca\uc1cb\uc1cc\uc1cd\uc1ce\uc1cf\uc1d0\uc1d1\uc1d2\uc1d3\uc1d4\uc1d5\uc1d6\uc1d7\uc1d8\uc1d9\uc1da\uc1db\uc1dc\uc1dd\uc1de\uc1df\uc1e0\uc1e1\uc1e2\uc1e3\uc1e4\uc1e5\uc1e6\uc1e7\uc1e8\uc1e9\uc1ea\uc1eb\uc1ec\uc1ed\uc1ee\uc1ef\uc1f0\uc1f1\uc1f2\uc1f3\uc1f4\uc1f5\uc1f6\uc1f7\uc1f8\uc1f9\uc1fa\uc1fb\uc1fc\uc1fd\uc1fe\uc1ff\uc200\uc201\uc202\uc203\uc204\uc205\uc206\uc207\uc208\uc209\uc20a\uc20b\uc20c\uc20d\uc20e\uc20f\uc210\uc211\uc212\uc213\uc214\uc215\uc216\uc217\uc218\uc219\uc21a\uc21b\uc21c\uc21d\uc21e\uc21f\uc220\uc221\uc222\uc223\uc224\uc225\uc226\uc227\uc228\uc229\uc22a\uc22b\uc22c\uc22d\uc22e\uc22f\uc230\uc231\uc232\uc233\uc234\uc235\uc236\uc237\uc238\uc239\uc23a\uc23b\uc23c\uc23d\uc23e\uc23f\uc240\uc241\uc242\uc243\uc244\uc245\uc246\uc247\uc248\uc249\uc24a\uc24b\uc24c\uc24d\uc24e\uc24f\uc250\uc251\uc252\uc253\uc254\uc255\uc256\uc257\uc258\uc259\uc25a\uc25b\uc25c\uc25d\uc25e\uc25f\uc260\uc261\uc262\uc263\uc264\uc265\uc266\uc267\uc268\uc269\uc26a\uc26b\uc26c\uc26d\uc26e\uc26f\uc270\uc271\uc272\uc273\uc274\uc275\uc276\uc277\uc278\uc279\uc27a\uc27b\uc27c\uc27d\uc27e\uc27f\uc280\uc281\uc282\uc283\uc284\uc285\uc286\uc287\uc288\uc289\uc28a\uc28b\uc28c\uc28d\uc28e\uc28f\uc290\uc291\uc292\uc293\uc294\uc295\uc296\uc297\uc298\uc299\uc29a\uc29b\uc29c\uc29d\uc29e\uc29f\uc2a0\uc2a1\uc2a2\uc2a3\uc2a4\uc2a5\uc2a6\uc2a7\uc2a8\uc2a9\uc2aa\uc2ab\uc2ac\uc2ad\uc2ae\uc2af\uc2b0\uc2b1\uc2b2\uc2b3\uc2b4\uc2b5\uc2b6\uc2b7\uc2b8\uc2b9\uc2ba\uc2bb\uc2bc\uc2bd\uc2be\uc2bf\uc2c0\uc2c1\uc2c2\uc2c3\uc2c4\uc2c5\uc2c6\uc2c7\uc2c8\uc2c9\uc2ca\uc2cb\uc2cc\uc2cd\uc2ce\uc2cf\uc2d0\uc2d1\uc2d2\uc2d3\uc2d4\uc2d5\uc2d6\uc2d7\uc2d8\uc2d9\uc2da\uc2db\uc2dc\uc2dd\uc2de\uc2df\uc2e0\uc2e1\uc2e2\uc2e3\uc2e4\uc2e5\uc2e6\uc2e7\uc2e8\uc2e9\uc2ea\uc2eb\uc2ec\uc2ed\uc2ee\uc2ef\uc2f0\uc2f1\uc2f2\uc2f3\uc2f4\uc2f5\uc2f6\uc2f7\uc2f8\uc2f9\uc2fa\uc2fb\uc2fc\uc2fd\uc2fe\uc2ff\uc300\uc301\uc302\uc303\uc304\uc305\uc306\uc307\uc308\uc309\uc30a\uc30b\uc30c\uc30d\uc30e\uc30f\uc310\uc311\uc312\uc313\uc314\uc315\uc316\uc317\uc318\uc319\uc31a\uc31b\uc31c\uc31d\uc31e\uc31f\uc320\uc321\uc322\uc323\uc324\uc325\uc326\uc327\uc328\uc329\uc32a\uc32b\uc32c\uc32d\uc32e\uc32f\uc330\uc331\uc332\uc333\uc334\uc335\uc336\uc337\uc338\uc339\uc33a\uc33b\uc33c\uc33d\uc33e\uc33f\uc340\uc341\uc342\uc343\uc344\uc345\uc346\uc347\uc348\uc349\uc34a\uc34b\uc34c\uc34d\uc34e\uc34f\uc350\uc351\uc352\uc353\uc354\uc355\uc356\uc357\uc358\uc359\uc35a\uc35b\uc35c\uc35d\uc35e\uc35f\uc360\uc361\uc362\uc363\uc364\uc365\uc366\uc367\uc368\uc369\uc36a\uc36b\uc36c\uc36d\uc36e\uc36f\uc370\uc371\uc372\uc373\uc374\uc375\uc376\uc377\uc378\uc379\uc37a\uc37b\uc37c\uc37d\uc37e\uc37f\uc380\uc381\uc382\uc383\uc384\uc385\uc386\uc387\uc388\uc389\uc38a\uc38b\uc38c\uc38d\uc38e\uc38f\uc390\uc391\uc392\uc393\uc394\uc395\uc396\uc397\uc398\uc399\uc39a\uc39b\uc39c\uc39d\uc39e\uc39f\uc3a0\uc3a1\uc3a2\uc3a3\uc3a4\uc3a5\uc3a6\uc3a7\uc3a8\uc3a9\uc3aa\uc3ab\uc3ac\uc3ad\uc3ae\uc3af\uc3b0\uc3b1\uc3b2\uc3b3\uc3b4\uc3b5\uc3b6\uc3b7\uc3b8\uc3b9\uc3ba\uc3bb\uc3bc\uc3bd\uc3be\uc3bf\uc3c0\uc3c1\uc3c2\uc3c3\uc3c4\uc3c5\uc3c6\uc3c7\uc3c8\uc3c9\uc3ca\uc3cb\uc3cc\uc3cd\uc3ce\uc3cf\uc3d0\uc3d1\uc3d2\uc3d3\uc3d4\uc3d5\uc3d6\uc3d7\uc3d8\uc3d9\uc3da\uc3db\uc3dc\uc3dd\uc3de\uc3df\uc3e0\uc3e1\uc3e2\uc3e3\uc3e4\uc3e5\uc3e6\uc3e7\uc3e8\uc3e9\uc3ea\uc3eb\uc3ec\uc3ed\uc3ee\uc3ef\uc3f0\uc3f1\uc3f2\uc3f3\uc3f4\uc3f5\uc3f6\uc3f7\uc3f8\uc3f9\uc3fa\uc3fb\uc3fc\uc3fd\uc3fe\uc3ff\uc400\uc401\uc402\uc403\uc404\uc405\uc406\uc407\uc408\uc409\uc40a\uc40b\uc40c\uc40d\uc40e\uc40f\uc410\uc411\uc412\uc413\uc414\uc415\uc416\uc417\uc418\uc419\uc41a\uc41b\uc41c\uc41d\uc41e\uc41f\uc420\uc421\uc422\uc423\uc424\uc425\uc426\uc427\uc428\uc429\uc42a\uc42b\uc42c\uc42d\uc42e\uc42f\uc430\uc431\uc432\uc433\uc434\uc435\uc436\uc437\uc438\uc439\uc43a\uc43b\uc43c\uc43d\uc43e\uc43f\uc440\uc441\uc442\uc443\uc444\uc445\uc446\uc447\uc448\uc449\uc44a\uc44b\uc44c\uc44d\uc44e\uc44f\uc450\uc451\uc452\uc453\uc454\uc455\uc456\uc457\uc458\uc459\uc45a\uc45b\uc45c\uc45d\uc45e\uc45f\uc460\uc461\uc462\uc463\uc464\uc465\uc466\uc467\uc468\uc469\uc46a\uc46b\uc46c\uc46d\uc46e\uc46f\uc470\uc471\uc472\uc473\uc474\uc475\uc476\uc477\uc478\uc479\uc47a\uc47b\uc47c\uc47d\uc47e\uc47f\uc480\uc481\uc482\uc483\uc484\uc485\uc486\uc487\uc488\uc489\uc48a\uc48b\uc48c\uc48d\uc48e\uc48f\uc490\uc491\uc492\uc493\uc494\uc495\uc496\uc497\uc498\uc499\uc49a\uc49b\uc49c\uc49d\uc49e\uc49f\uc4a0\uc4a1\uc4a2\uc4a3\uc4a4\uc4a5\uc4a6\uc4a7\uc4a8\uc4a9\uc4aa\uc4ab\uc4ac\uc4ad\uc4ae\uc4af\uc4b0\uc4b1\uc4b2\uc4b3\uc4b4\uc4b5\uc4b6\uc4b7\uc4b8\uc4b9\uc4ba\uc4bb\uc4bc\uc4bd\uc4be\uc4bf\uc4c0\uc4c1\uc4c2\uc4c3\uc4c4\uc4c5\uc4c6\uc4c7\uc4c8\uc4c9\uc4ca\uc4cb\uc4cc\uc4cd\uc4ce\uc4cf\uc4d0\uc4d1\uc4d2\uc4d3\uc4d4\uc4d5\uc4d6\uc4d7\uc4d8\uc4d9\uc4da\uc4db\uc4dc\uc4dd\uc4de\uc4df\uc4e0\uc4e1\uc4e2\uc4e3\uc4e4\uc4e5\uc4e6\uc4e7\uc4e8\uc4e9\uc4ea\uc4eb\uc4ec\uc4ed\uc4ee\uc4ef\uc4f0\uc4f1\uc4f2\uc4f3\uc4f4\uc4f5\uc4f6\uc4f7\uc4f8\uc4f9\uc4fa\uc4fb\uc4fc\uc4fd\uc4fe\uc4ff\uc500\uc501\uc502\uc503\uc504\uc505\uc506\uc507\uc508\uc509\uc50a\uc50b\uc50c\uc50d\uc50e\uc50f\uc510\uc511\uc512\uc513\uc514\uc515\uc516\uc517\uc518\uc519\uc51a\uc51b\uc51c\uc51d\uc51e\uc51f\uc520\uc521\uc522\uc523\uc524\uc525\uc526\uc527\uc528\uc529\uc52a\uc52b\uc52c\uc52d\uc52e\uc52f\uc530\uc531\uc532\uc533\uc534\uc535\uc536\uc537\uc538\uc539\uc53a\uc53b\uc53c\uc53d\uc53e\uc53f\uc540\uc541\uc542\uc543\uc544\uc545\uc546\uc547\uc548\uc549\uc54a\uc54b\uc54c\uc54d\uc54e\uc54f\uc550\uc551\uc552\uc553\uc554\uc555\uc556\uc557\uc558\uc559\uc55a\uc55b\uc55c\uc55d\uc55e\uc55f\uc560\uc561\uc562\uc563\uc564\uc565\uc566\uc567\uc568\uc569\uc56a\uc56b\uc56c\uc56d\uc56e\uc56f\uc570\uc571\uc572\uc573\uc574\uc575\uc576\uc577\uc578\uc579\uc57a\uc57b\uc57c\uc57d\uc57e\uc57f\uc580\uc581\uc582\uc583\uc584\uc585\uc586\uc587\uc588\uc589\uc58a\uc58b\uc58c\uc58d\uc58e\uc58f\uc590\uc591\uc592\uc593\uc594\uc595\uc596\uc597\uc598\uc599\uc59a\uc59b\uc59c\uc59d\uc59e\uc59f\uc5a0\uc5a1\uc5a2\uc5a3\uc5a4\uc5a5\uc5a6\uc5a7\uc5a8\uc5a9\uc5aa\uc5ab\uc5ac\uc5ad\uc5ae\uc5af\uc5b0\uc5b1\uc5b2\uc5b3\uc5b4\uc5b5\uc5b6\uc5b7\uc5b8\uc5b9\uc5ba\uc5bb\uc5bc\uc5bd\uc5be\uc5bf\uc5c0\uc5c1\uc5c2\uc5c3\uc5c4\uc5c5\uc5c6\uc5c7\uc5c8\uc5c9\uc5ca\uc5cb\uc5cc\uc5cd\uc5ce\uc5cf\uc5d0\uc5d1\uc5d2\uc5d3\uc5d4\uc5d5\uc5d6\uc5d7\uc5d8\uc5d9\uc5da\uc5db\uc5dc\uc5dd\uc5de\uc5df\uc5e0\uc5e1\uc5e2\uc5e3\uc5e4\uc5e5\uc5e6\uc5e7\uc5e8\uc5e9\uc5ea\uc5eb\uc5ec\uc5ed\uc5ee\uc5ef\uc5f0\uc5f1\uc5f2\uc5f3\uc5f4\uc5f5\uc5f6\uc5f7\uc5f8\uc5f9\uc5fa\uc5fb\uc5fc\uc5fd\uc5fe\uc5ff\uc600\uc601\uc602\uc603\uc604\uc605\uc606\uc607\uc608\uc609\uc60a\uc60b\uc60c\uc60d\uc60e\uc60f\uc610\uc611\uc612\uc613\uc614\uc615\uc616\uc617\uc618\uc619\uc61a\uc61b\uc61c\uc61d\uc61e\uc61f\uc620\uc621\uc622\uc623\uc624\uc625\uc626\uc627\uc628\uc629\uc62a\uc62b\uc62c\uc62d\uc62e\uc62f\uc630\uc631\uc632\uc633\uc634\uc635\uc636\uc637\uc638\uc639\uc63a\uc63b\uc63c\uc63d\uc63e\uc63f\uc640\uc641\uc642\uc643\uc644\uc645\uc646\uc647\uc648\uc649\uc64a\uc64b\uc64c\uc64d\uc64e\uc64f\uc650\uc651\uc652\uc653\uc654\uc655\uc656\uc657\uc658\uc659\uc65a\uc65b\uc65c\uc65d\uc65e\uc65f\uc660\uc661\uc662\uc663\uc664\uc665\uc666\uc667\uc668\uc669\uc66a\uc66b\uc66c\uc66d\uc66e\uc66f\uc670\uc671\uc672\uc673\uc674\uc675\uc676\uc677\uc678\uc679\uc67a\uc67b\uc67c\uc67d\uc67e\uc67f\uc680\uc681\uc682\uc683\uc684\uc685\uc686\uc687\uc688\uc689\uc68a\uc68b\uc68c\uc68d\uc68e\uc68f\uc690\uc691\uc692\uc693\uc694\uc695\uc696\uc697\uc698\uc699\uc69a\uc69b\uc69c\uc69d\uc69e\uc69f\uc6a0\uc6a1\uc6a2\uc6a3\uc6a4\uc6a5\uc6a6\uc6a7\uc6a8\uc6a9\uc6aa\uc6ab\uc6ac\uc6ad\uc6ae\uc6af\uc6b0\uc6b1\uc6b2\uc6b3\uc6b4\uc6b5\uc6b6\uc6b7\uc6b8\uc6b9\uc6ba\uc6bb\uc6bc\uc6bd\uc6be\uc6bf\uc6c0\uc6c1\uc6c2\uc6c3\uc6c4\uc6c5\uc6c6\uc6c7\uc6c8\uc6c9\uc6ca\uc6cb\uc6cc\uc6cd\uc6ce\uc6cf\uc6d0\uc6d1\uc6d2\uc6d3\uc6d4\uc6d5\uc6d6\uc6d7\uc6d8\uc6d9\uc6da\uc6db\uc6dc\uc6dd\uc6de\uc6df\uc6e0\uc6e1\uc6e2\uc6e3\uc6e4\uc6e5\uc6e6\uc6e7\uc6e8\uc6e9\uc6ea\uc6eb\uc6ec\uc6ed\uc6ee\uc6ef\uc6f0\uc6f1\uc6f2\uc6f3\uc6f4\uc6f5\uc6f6\uc6f7\uc6f8\uc6f9\uc6fa\uc6fb\uc6fc\uc6fd\uc6fe\uc6ff\uc700\uc701\uc702\uc703\uc704\uc705\uc706\uc707\uc708\uc709\uc70a\uc70b\uc70c\uc70d\uc70e\uc70f\uc710\uc711\uc712\uc713\uc714\uc715\uc716\uc717\uc718\uc719\uc71a\uc71b\uc71c\uc71d\uc71e\uc71f\uc720\uc721\uc722\uc723\uc724\uc725\uc726\uc727\uc728\uc729\uc72a\uc72b\uc72c\uc72d\uc72e\uc72f\uc730\uc731\uc732\uc733\uc734\uc735\uc736\uc737\uc738\uc739\uc73a\uc73b\uc73c\uc73d\uc73e\uc73f\uc740\uc741\uc742\uc743\uc744\uc745\uc746\uc747\uc748\uc749\uc74a\uc74b\uc74c\uc74d\uc74e\uc74f\uc750\uc751\uc752\uc753\uc754\uc755\uc756\uc757\uc758\uc759\uc75a\uc75b\uc75c\uc75d\uc75e\uc75f\uc760\uc761\uc762\uc763\uc764\uc765\uc766\uc767\uc768\uc769\uc76a\uc76b\uc76c\uc76d\uc76e\uc76f\uc770\uc771\uc772\uc773\uc774\uc775\uc776\uc777\uc778\uc779\uc77a\uc77b\uc77c\uc77d\uc77e\uc77f\uc780\uc781\uc782\uc783\uc784\uc785\uc786\uc787\uc788\uc789\uc78a\uc78b\uc78c\uc78d\uc78e\uc78f\uc790\uc791\uc792\uc793\uc794\uc795\uc796\uc797\uc798\uc799\uc79a\uc79b\uc79c\uc79d\uc79e\uc79f\uc7a0\uc7a1\uc7a2\uc7a3\uc7a4\uc7a5\uc7a6\uc7a7\uc7a8\uc7a9\uc7aa\uc7ab\uc7ac\uc7ad\uc7ae\uc7af\uc7b0\uc7b1\uc7b2\uc7b3\uc7b4\uc7b5\uc7b6\uc7b7\uc7b8\uc7b9\uc7ba\uc7bb\uc7bc\uc7bd\uc7be\uc7bf\uc7c0\uc7c1\uc7c2\uc7c3\uc7c4\uc7c5\uc7c6\uc7c7\uc7c8\uc7c9\uc7ca\uc7cb\uc7cc\uc7cd\uc7ce\uc7cf\uc7d0\uc7d1\uc7d2\uc7d3\uc7d4\uc7d5\uc7d6\uc7d7\uc7d8\uc7d9\uc7da\uc7db\uc7dc\uc7dd\uc7de\uc7df\uc7e0\uc7e1\uc7e2\uc7e3\uc7e4\uc7e5\uc7e6\uc7e7\uc7e8\uc7e9\uc7ea\uc7eb\uc7ec\uc7ed\uc7ee\uc7ef\uc7f0\uc7f1\uc7f2\uc7f3\uc7f4\uc7f5\uc7f6\uc7f7\uc7f8\uc7f9\uc7fa\uc7fb\uc7fc\uc7fd\uc7fe\uc7ff\uc800\uc801\uc802\uc803\uc804\uc805\uc806\uc807\uc808\uc809\uc80a\uc80b\uc80c\uc80d\uc80e\uc80f\uc810\uc811\uc812\uc813\uc814\uc815\uc816\uc817\uc818\uc819\uc81a\uc81b\uc81c\uc81d\uc81e\uc81f\uc820\uc821\uc822\uc823\uc824\uc825\uc826\uc827\uc828\uc829\uc82a\uc82b\uc82c\uc82d\uc82e\uc82f\uc830\uc831\uc832\uc833\uc834\uc835\uc836\uc837\uc838\uc839\uc83a\uc83b\uc83c\uc83d\uc83e\uc83f\uc840\uc841\uc842\uc843\uc844\uc845\uc846\uc847\uc848\uc849\uc84a\uc84b\uc84c\uc84d\uc84e\uc84f\uc850\uc851\uc852\uc853\uc854\uc855\uc856\uc857\uc858\uc859\uc85a\uc85b\uc85c\uc85d\uc85e\uc85f\uc860\uc861\uc862\uc863\uc864\uc865\uc866\uc867\uc868\uc869\uc86a\uc86b\uc86c\uc86d\uc86e\uc86f\uc870\uc871\uc872\uc873\uc874\uc875\uc876\uc877\uc878\uc879\uc87a\uc87b\uc87c\uc87d\uc87e\uc87f\uc880\uc881\uc882\uc883\uc884\uc885\uc886\uc887\uc888\uc889\uc88a\uc88b\uc88c\uc88d\uc88e\uc88f\uc890\uc891\uc892\uc893\uc894\uc895\uc896\uc897\uc898\uc899\uc89a\uc89b\uc89c\uc89d\uc89e\uc89f\uc8a0\uc8a1\uc8a2\uc8a3\uc8a4\uc8a5\uc8a6\uc8a7\uc8a8\uc8a9\uc8aa\uc8ab\uc8ac\uc8ad\uc8ae\uc8af\uc8b0\uc8b1\uc8b2\uc8b3\uc8b4\uc8b5\uc8b6\uc8b7\uc8b8\uc8b9\uc8ba\uc8bb\uc8bc\uc8bd\uc8be\uc8bf\uc8c0\uc8c1\uc8c2\uc8c3\uc8c4\uc8c5\uc8c6\uc8c7\uc8c8\uc8c9\uc8ca\uc8cb\uc8cc\uc8cd\uc8ce\uc8cf\uc8d0\uc8d1\uc8d2\uc8d3\uc8d4\uc8d5\uc8d6\uc8d7\uc8d8\uc8d9\uc8da\uc8db\uc8dc\uc8dd\uc8de\uc8df\uc8e0\uc8e1\uc8e2\uc8e3\uc8e4\uc8e5\uc8e6\uc8e7\uc8e8\uc8e9\uc8ea\uc8eb\uc8ec\uc8ed\uc8ee\uc8ef\uc8f0\uc8f1\uc8f2\uc8f3\uc8f4\uc8f5\uc8f6\uc8f7\uc8f8\uc8f9\uc8fa\uc8fb\uc8fc\uc8fd\uc8fe\uc8ff\uc900\uc901\uc902\uc903\uc904\uc905\uc906\uc907\uc908\uc909\uc90a\uc90b\uc90c\uc90d\uc90e\uc90f\uc910\uc911\uc912\uc913\uc914\uc915\uc916\uc917\uc918\uc919\uc91a\uc91b\uc91c\uc91d\uc91e\uc91f\uc920\uc921\uc922\uc923\uc924\uc925\uc926\uc927\uc928\uc929\uc92a\uc92b\uc92c\uc92d\uc92e\uc92f\uc930\uc931\uc932\uc933\uc934\uc935\uc936\uc937\uc938\uc939\uc93a\uc93b\uc93c\uc93d\uc93e\uc93f\uc940\uc941\uc942\uc943\uc944\uc945\uc946\uc947\uc948\uc949\uc94a\uc94b\uc94c\uc94d\uc94e\uc94f\uc950\uc951\uc952\uc953\uc954\uc955\uc956\uc957\uc958\uc959\uc95a\uc95b\uc95c\uc95d\uc95e\uc95f\uc960\uc961\uc962\uc963\uc964\uc965\uc966\uc967\uc968\uc969\uc96a\uc96b\uc96c\uc96d\uc96e\uc96f\uc970\uc971\uc972\uc973\uc974\uc975\uc976\uc977\uc978\uc979\uc97a\uc97b\uc97c\uc97d\uc97e\uc97f\uc980\uc981\uc982\uc983\uc984\uc985\uc986\uc987\uc988\uc989\uc98a\uc98b\uc98c\uc98d\uc98e\uc98f\uc990\uc991\uc992\uc993\uc994\uc995\uc996\uc997\uc998\uc999\uc99a\uc99b\uc99c\uc99d\uc99e\uc99f\uc9a0\uc9a1\uc9a2\uc9a3\uc9a4\uc9a5\uc9a6\uc9a7\uc9a8\uc9a9\uc9aa\uc9ab\uc9ac\uc9ad\uc9ae\uc9af\uc9b0\uc9b1\uc9b2\uc9b3\uc9b4\uc9b5\uc9b6\uc9b7\uc9b8\uc9b9\uc9ba\uc9bb\uc9bc\uc9bd\uc9be\uc9bf\uc9c0\uc9c1\uc9c2\uc9c3\uc9c4\uc9c5\uc9c6\uc9c7\uc9c8\uc9c9\uc9ca\uc9cb\uc9cc\uc9cd\uc9ce\uc9cf\uc9d0\uc9d1\uc9d2\uc9d3\uc9d4\uc9d5\uc9d6\uc9d7\uc9d8\uc9d9\uc9da\uc9db\uc9dc\uc9dd\uc9de\uc9df\uc9e0\uc9e1\uc9e2\uc9e3\uc9e4\uc9e5\uc9e6\uc9e7\uc9e8\uc9e9\uc9ea\uc9eb\uc9ec\uc9ed\uc9ee\uc9ef\uc9f0\uc9f1\uc9f2\uc9f3\uc9f4\uc9f5\uc9f6\uc9f7\uc9f8\uc9f9\uc9fa\uc9fb\uc9fc\uc9fd\uc9fe\uc9ff\uca00\uca01\uca02\uca03\uca04\uca05\uca06\uca07\uca08\uca09\uca0a\uca0b\uca0c\uca0d\uca0e\uca0f\uca10\uca11\uca12\uca13\uca14\uca15\uca16\uca17\uca18\uca19\uca1a\uca1b\uca1c\uca1d\uca1e\uca1f\uca20\uca21\uca22\uca23\uca24\uca25\uca26\uca27\uca28\uca29\uca2a\uca2b\uca2c\uca2d\uca2e\uca2f\uca30\uca31\uca32\uca33\uca34\uca35\uca36\uca37\uca38\uca39\uca3a\uca3b\uca3c\uca3d\uca3e\uca3f\uca40\uca41\uca42\uca43\uca44\uca45\uca46\uca47\uca48\uca49\uca4a\uca4b\uca4c\uca4d\uca4e\uca4f\uca50\uca51\uca52\uca53\uca54\uca55\uca56\uca57\uca58\uca59\uca5a\uca5b\uca5c\uca5d\uca5e\uca5f\uca60\uca61\uca62\uca63\uca64\uca65\uca66\uca67\uca68\uca69\uca6a\uca6b\uca6c\uca6d\uca6e\uca6f\uca70\uca71\uca72\uca73\uca74\uca75\uca76\uca77\uca78\uca79\uca7a\uca7b\uca7c\uca7d\uca7e\uca7f\uca80\uca81\uca82\uca83\uca84\uca85\uca86\uca87\uca88\uca89\uca8a\uca8b\uca8c\uca8d\uca8e\uca8f\uca90\uca91\uca92\uca93\uca94\uca95\uca96\uca97\uca98\uca99\uca9a\uca9b\uca9c\uca9d\uca9e\uca9f\ucaa0\ucaa1\ucaa2\ucaa3\ucaa4\ucaa5\ucaa6\ucaa7\ucaa8\ucaa9\ucaaa\ucaab\ucaac\ucaad\ucaae\ucaaf\ucab0\ucab1\ucab2\ucab3\ucab4\ucab5\ucab6\ucab7\ucab8\ucab9\ucaba\ucabb\ucabc\ucabd\ucabe\ucabf\ucac0\ucac1\ucac2\ucac3\ucac4\ucac5\ucac6\ucac7\ucac8\ucac9\ucaca\ucacb\ucacc\ucacd\ucace\ucacf\ucad0\ucad1\ucad2\ucad3\ucad4\ucad5\ucad6\ucad7\ucad8\ucad9\ucada\ucadb\ucadc\ucadd\ucade\ucadf\ucae0\ucae1\ucae2\ucae3\ucae4\ucae5\ucae6\ucae7\ucae8\ucae9\ucaea\ucaeb\ucaec\ucaed\ucaee\ucaef\ucaf0\ucaf1\ucaf2\ucaf3\ucaf4\ucaf5\ucaf6\ucaf7\ucaf8\ucaf9\ucafa\ucafb\ucafc\ucafd\ucafe\ucaff\ucb00\ucb01\ucb02\ucb03\ucb04\ucb05\ucb06\ucb07\ucb08\ucb09\ucb0a\ucb0b\ucb0c\ucb0d\ucb0e\ucb0f\ucb10\ucb11\ucb12\ucb13\ucb14\ucb15\ucb16\ucb17\ucb18\ucb19\ucb1a\ucb1b\ucb1c\ucb1d\ucb1e\ucb1f\ucb20\ucb21\ucb22\ucb23\ucb24\ucb25\ucb26\ucb27\ucb28\ucb29\ucb2a\ucb2b\ucb2c\ucb2d\ucb2e\ucb2f\ucb30\ucb31\ucb32\ucb33\ucb34\ucb35\ucb36\ucb37\ucb38\ucb39\ucb3a\ucb3b\ucb3c\ucb3d\ucb3e\ucb3f\ucb40\ucb41\ucb42\ucb43\ucb44\ucb45\ucb46\ucb47\ucb48\ucb49\ucb4a\ucb4b\ucb4c\ucb4d\ucb4e\ucb4f\ucb50\ucb51\ucb52\ucb53\ucb54\ucb55\ucb56\ucb57\ucb58\ucb59\ucb5a\ucb5b\ucb5c\ucb5d\ucb5e\ucb5f\ucb60\ucb61\ucb62\ucb63\ucb64\ucb65\ucb66\ucb67\ucb68\ucb69\ucb6a\ucb6b\ucb6c\ucb6d\ucb6e\ucb6f\ucb70\ucb71\ucb72\ucb73\ucb74\ucb75\ucb76\ucb77\ucb78\ucb79\ucb7a\ucb7b\ucb7c\ucb7d\ucb7e\ucb7f\ucb80\ucb81\ucb82\ucb83\ucb84\ucb85\ucb86\ucb87\ucb88\ucb89\ucb8a\ucb8b\ucb8c\ucb8d\ucb8e\ucb8f\ucb90\ucb91\ucb92\ucb93\ucb94\ucb95\ucb96\ucb97\ucb98\ucb99\ucb9a\ucb9b\ucb9c\ucb9d\ucb9e\ucb9f\ucba0\ucba1\ucba2\ucba3\ucba4\ucba5\ucba6\ucba7\ucba8\ucba9\ucbaa\ucbab\ucbac\ucbad\ucbae\ucbaf\ucbb0\ucbb1\ucbb2\ucbb3\ucbb4\ucbb5\ucbb6\ucbb7\ucbb8\ucbb9\ucbba\ucbbb\ucbbc\ucbbd\ucbbe\ucbbf\ucbc0\ucbc1\ucbc2\ucbc3\ucbc4\ucbc5\ucbc6\ucbc7\ucbc8\ucbc9\ucbca\ucbcb\ucbcc\ucbcd\ucbce\ucbcf\ucbd0\ucbd1\ucbd2\ucbd3\ucbd4\ucbd5\ucbd6\ucbd7\ucbd8\ucbd9\ucbda\ucbdb\ucbdc\ucbdd\ucbde\ucbdf\ucbe0\ucbe1\ucbe2\ucbe3\ucbe4\ucbe5\ucbe6\ucbe7\ucbe8\ucbe9\ucbea\ucbeb\ucbec\ucbed\ucbee\ucbef\ucbf0\ucbf1\ucbf2\ucbf3\ucbf4\ucbf5\ucbf6\ucbf7\ucbf8\ucbf9\ucbfa\ucbfb\ucbfc\ucbfd\ucbfe\ucbff\ucc00\ucc01\ucc02\ucc03\ucc04\ucc05\ucc06\ucc07\ucc08\ucc09\ucc0a\ucc0b\ucc0c\ucc0d\ucc0e\ucc0f\ucc10\ucc11\ucc12\ucc13\ucc14\ucc15\ucc16\ucc17\ucc18\ucc19\ucc1a\ucc1b\ucc1c\ucc1d\ucc1e\ucc1f\ucc20\ucc21\ucc22\ucc23\ucc24\ucc25\ucc26\ucc27\ucc28\ucc29\ucc2a\ucc2b\ucc2c\ucc2d\ucc2e\ucc2f\ucc30\ucc31\ucc32\ucc33\ucc34\ucc35\ucc36\ucc37\ucc38\ucc39\ucc3a\ucc3b\ucc3c\ucc3d\ucc3e\ucc3f\ucc40\ucc41\ucc42\ucc43\ucc44\ucc45\ucc46\ucc47\ucc48\ucc49\ucc4a\ucc4b\ucc4c\ucc4d\ucc4e\ucc4f\ucc50\ucc51\ucc52\ucc53\ucc54\ucc55\ucc56\ucc57\ucc58\ucc59\ucc5a\ucc5b\ucc5c\ucc5d\ucc5e\ucc5f\ucc60\ucc61\ucc62\ucc63\ucc64\ucc65\ucc66\ucc67\ucc68\ucc69\ucc6a\ucc6b\ucc6c\ucc6d\ucc6e\ucc6f\ucc70\ucc71\ucc72\ucc73\ucc74\ucc75\ucc76\ucc77\ucc78\ucc79\ucc7a\ucc7b\ucc7c\ucc7d\ucc7e\ucc7f\ucc80\ucc81\ucc82\ucc83\ucc84\ucc85\ucc86\ucc87\ucc88\ucc89\ucc8a\ucc8b\ucc8c\ucc8d\ucc8e\ucc8f\ucc90\ucc91\ucc92\ucc93\ucc94\ucc95\ucc96\ucc97\ucc98\ucc99\ucc9a\ucc9b\ucc9c\ucc9d\ucc9e\ucc9f\ucca0\ucca1\ucca2\ucca3\ucca4\ucca5\ucca6\ucca7\ucca8\ucca9\uccaa\uccab\uccac\uccad\uccae\uccaf\uccb0\uccb1\uccb2\uccb3\uccb4\uccb5\uccb6\uccb7\uccb8\uccb9\uccba\uccbb\uccbc\uccbd\uccbe\uccbf\uccc0\uccc1\uccc2\uccc3\uccc4\uccc5\uccc6\uccc7\uccc8\uccc9\uccca\ucccb\ucccc\ucccd\uccce\ucccf\uccd0\uccd1\uccd2\uccd3\uccd4\uccd5\uccd6\uccd7\uccd8\uccd9\uccda\uccdb\uccdc\uccdd\uccde\uccdf\ucce0\ucce1\ucce2\ucce3\ucce4\ucce5\ucce6\ucce7\ucce8\ucce9\uccea\ucceb\uccec\ucced\uccee\uccef\uccf0\uccf1\uccf2\uccf3\uccf4\uccf5\uccf6\uccf7\uccf8\uccf9\uccfa\uccfb\uccfc\uccfd\uccfe\uccff\ucd00\ucd01\ucd02\ucd03\ucd04\ucd05\ucd06\ucd07\ucd08\ucd09\ucd0a\ucd0b\ucd0c\ucd0d\ucd0e\ucd0f\ucd10\ucd11\ucd12\ucd13\ucd14\ucd15\ucd16\ucd17\ucd18\ucd19\ucd1a\ucd1b\ucd1c\ucd1d\ucd1e\ucd1f\ucd20\ucd21\ucd22\ucd23\ucd24\ucd25\ucd26\ucd27\ucd28\ucd29\ucd2a\ucd2b\ucd2c\ucd2d\ucd2e\ucd2f\ucd30\ucd31\ucd32\ucd33\ucd34\ucd35\ucd36\ucd37\ucd38\ucd39\ucd3a\ucd3b\ucd3c\ucd3d\ucd3e\ucd3f\ucd40\ucd41\ucd42\ucd43\ucd44\ucd45\ucd46\ucd47\ucd48\ucd49\ucd4a\ucd4b\ucd4c\ucd4d\ucd4e\ucd4f\ucd50\ucd51\ucd52\ucd53\ucd54\ucd55\ucd56\ucd57\ucd58\ucd59\ucd5a\ucd5b\ucd5c\ucd5d\ucd5e\ucd5f\ucd60\ucd61\ucd62\ucd63\ucd64\ucd65\ucd66\ucd67\ucd68\ucd69\ucd6a\ucd6b\ucd6c\ucd6d\ucd6e\ucd6f\ucd70\ucd71\ucd72\ucd73\ucd74\ucd75\ucd76\ucd77\ucd78\ucd79\ucd7a\ucd7b\ucd7c\ucd7d\ucd7e\ucd7f\ucd80\ucd81\ucd82\ucd83\ucd84\ucd85\ucd86\ucd87\ucd88\ucd89\ucd8a\ucd8b\ucd8c\ucd8d\ucd8e\ucd8f\ucd90\ucd91\ucd92\ucd93\ucd94\ucd95\ucd96\ucd97\ucd98\ucd99\ucd9a\ucd9b\ucd9c\ucd9d\ucd9e\ucd9f\ucda0\ucda1\ucda2\ucda3\ucda4\ucda5\ucda6\ucda7\ucda8\ucda9\ucdaa\ucdab\ucdac\ucdad\ucdae\ucdaf\ucdb0\ucdb1\ucdb2\ucdb3\ucdb4\ucdb5\ucdb6\ucdb7\ucdb8\ucdb9\ucdba\ucdbb\ucdbc\ucdbd\ucdbe\ucdbf\ucdc0\ucdc1\ucdc2\ucdc3\ucdc4\ucdc5\ucdc6\ucdc7\ucdc8\ucdc9\ucdca\ucdcb\ucdcc\ucdcd\ucdce\ucdcf\ucdd0\ucdd1\ucdd2\ucdd3\ucdd4\ucdd5\ucdd6\ucdd7\ucdd8\ucdd9\ucdda\ucddb\ucddc\ucddd\ucdde\ucddf\ucde0\ucde1\ucde2\ucde3\ucde4\ucde5\ucde6\ucde7\ucde8\ucde9\ucdea\ucdeb\ucdec\ucded\ucdee\ucdef\ucdf0\ucdf1\ucdf2\ucdf3\ucdf4\ucdf5\ucdf6\ucdf7\ucdf8\ucdf9\ucdfa\ucdfb\ucdfc\ucdfd\ucdfe\ucdff\uce00\uce01\uce02\uce03\uce04\uce05\uce06\uce07\uce08\uce09\uce0a\uce0b\uce0c\uce0d\uce0e\uce0f\uce10\uce11\uce12\uce13\uce14\uce15\uce16\uce17\uce18\uce19\uce1a\uce1b\uce1c\uce1d\uce1e\uce1f\uce20\uce21\uce22\uce23\uce24\uce25\uce26\uce27\uce28\uce29\uce2a\uce2b\uce2c\uce2d\uce2e\uce2f\uce30\uce31\uce32\uce33\uce34\uce35\uce36\uce37\uce38\uce39\uce3a\uce3b\uce3c\uce3d\uce3e\uce3f\uce40\uce41\uce42\uce43\uce44\uce45\uce46\uce47\uce48\uce49\uce4a\uce4b\uce4c\uce4d\uce4e\uce4f\uce50\uce51\uce52\uce53\uce54\uce55\uce56\uce57\uce58\uce59\uce5a\uce5b\uce5c\uce5d\uce5e\uce5f\uce60\uce61\uce62\uce63\uce64\uce65\uce66\uce67\uce68\uce69\uce6a\uce6b\uce6c\uce6d\uce6e\uce6f\uce70\uce71\uce72\uce73\uce74\uce75\uce76\uce77\uce78\uce79\uce7a\uce7b\uce7c\uce7d\uce7e\uce7f\uce80\uce81\uce82\uce83\uce84\uce85\uce86\uce87\uce88\uce89\uce8a\uce8b\uce8c\uce8d\uce8e\uce8f\uce90\uce91\uce92\uce93\uce94\uce95\uce96\uce97\uce98\uce99\uce9a\uce9b\uce9c\uce9d\uce9e\uce9f\ucea0\ucea1\ucea2\ucea3\ucea4\ucea5\ucea6\ucea7\ucea8\ucea9\uceaa\uceab\uceac\ucead\uceae\uceaf\uceb0\uceb1\uceb2\uceb3\uceb4\uceb5\uceb6\uceb7\uceb8\uceb9\uceba\ucebb\ucebc\ucebd\ucebe\ucebf\ucec0\ucec1\ucec2\ucec3\ucec4\ucec5\ucec6\ucec7\ucec8\ucec9\uceca\ucecb\ucecc\ucecd\ucece\ucecf\uced0\uced1\uced2\uced3\uced4\uced5\uced6\uced7\uced8\uced9\uceda\ucedb\ucedc\ucedd\ucede\ucedf\ucee0\ucee1\ucee2\ucee3\ucee4\ucee5\ucee6\ucee7\ucee8\ucee9\uceea\uceeb\uceec\uceed\uceee\uceef\ucef0\ucef1\ucef2\ucef3\ucef4\ucef5\ucef6\ucef7\ucef8\ucef9\ucefa\ucefb\ucefc\ucefd\ucefe\uceff\ucf00\ucf01\ucf02\ucf03\ucf04\ucf05\ucf06\ucf07\ucf08\ucf09\ucf0a\ucf0b\ucf0c\ucf0d\ucf0e\ucf0f\ucf10\ucf11\ucf12\ucf13\ucf14\ucf15\ucf16\ucf17\ucf18\ucf19\ucf1a\ucf1b\ucf1c\ucf1d\ucf1e\ucf1f\ucf20\ucf21\ucf22\ucf23\ucf24\ucf25\ucf26\ucf27\ucf28\ucf29\ucf2a\ucf2b\ucf2c\ucf2d\ucf2e\ucf2f\ucf30\ucf31\ucf32\ucf33\ucf34\ucf35\ucf36\ucf37\ucf38\ucf39\ucf3a\ucf3b\ucf3c\ucf3d\ucf3e\ucf3f\ucf40\ucf41\ucf42\ucf43\ucf44\ucf45\ucf46\ucf47\ucf48\ucf49\ucf4a\ucf4b\ucf4c\ucf4d\ucf4e\ucf4f\ucf50\ucf51\ucf52\ucf53\ucf54\ucf55\ucf56\ucf57\ucf58\ucf59\ucf5a\ucf5b\ucf5c\ucf5d\ucf5e\ucf5f\ucf60\ucf61\ucf62\ucf63\ucf64\ucf65\ucf66\ucf67\ucf68\ucf69\ucf6a\ucf6b\ucf6c\ucf6d\ucf6e\ucf6f\ucf70\ucf71\ucf72\ucf73\ucf74\ucf75\ucf76\ucf77\ucf78\ucf79\ucf7a\ucf7b\ucf7c\ucf7d\ucf7e\ucf7f\ucf80\ucf81\ucf82\ucf83\ucf84\ucf85\ucf86\ucf87\ucf88\ucf89\ucf8a\ucf8b\ucf8c\ucf8d\ucf8e\ucf8f\ucf90\ucf91\ucf92\ucf93\ucf94\ucf95\ucf96\ucf97\ucf98\ucf99\ucf9a\ucf9b\ucf9c\ucf9d\ucf9e\ucf9f\ucfa0\ucfa1\ucfa2\ucfa3\ucfa4\ucfa5\ucfa6\ucfa7\ucfa8\ucfa9\ucfaa\ucfab\ucfac\ucfad\ucfae\ucfaf\ucfb0\ucfb1\ucfb2\ucfb3\ucfb4\ucfb5\ucfb6\ucfb7\ucfb8\ucfb9\ucfba\ucfbb\ucfbc\ucfbd\ucfbe\ucfbf\ucfc0\ucfc1\ucfc2\ucfc3\ucfc4\ucfc5\ucfc6\ucfc7\ucfc8\ucfc9\ucfca\ucfcb\ucfcc\ucfcd\ucfce\ucfcf\ucfd0\ucfd1\ucfd2\ucfd3\ucfd4\ucfd5\ucfd6\ucfd7\ucfd8\ucfd9\ucfda\ucfdb\ucfdc\ucfdd\ucfde\ucfdf\ucfe0\ucfe1\ucfe2\ucfe3\ucfe4\ucfe5\ucfe6\ucfe7\ucfe8\ucfe9\ucfea\ucfeb\ucfec\ucfed\ucfee\ucfef\ucff0\ucff1\ucff2\ucff3\ucff4\ucff5\ucff6\ucff7\ucff8\ucff9\ucffa\ucffb\ucffc\ucffd\ucffe\ucfff\ud000\ud001\ud002\ud003\ud004\ud005\ud006\ud007\ud008\ud009\ud00a\ud00b\ud00c\ud00d\ud00e\ud00f\ud010\ud011\ud012\ud013\ud014\ud015\ud016\ud017\ud018\ud019\ud01a\ud01b\ud01c\ud01d\ud01e\ud01f\ud020\ud021\ud022\ud023\ud024\ud025\ud026\ud027\ud028\ud029\ud02a\ud02b\ud02c\ud02d\ud02e\ud02f\ud030\ud031\ud032\ud033\ud034\ud035\ud036\ud037\ud038\ud039\ud03a\ud03b\ud03c\ud03d\ud03e\ud03f\ud040\ud041\ud042\ud043\ud044\ud045\ud046\ud047\ud048\ud049\ud04a\ud04b\ud04c\ud04d\ud04e\ud04f\ud050\ud051\ud052\ud053\ud054\ud055\ud056\ud057\ud058\ud059\ud05a\ud05b\ud05c\ud05d\ud05e\ud05f\ud060\ud061\ud062\ud063\ud064\ud065\ud066\ud067\ud068\ud069\ud06a\ud06b\ud06c\ud06d\ud06e\ud06f\ud070\ud071\ud072\ud073\ud074\ud075\ud076\ud077\ud078\ud079\ud07a\ud07b\ud07c\ud07d\ud07e\ud07f\ud080\ud081\ud082\ud083\ud084\ud085\ud086\ud087\ud088\ud089\ud08a\ud08b\ud08c\ud08d\ud08e\ud08f\ud090\ud091\ud092\ud093\ud094\ud095\ud096\ud097\ud098\ud099\ud09a\ud09b\ud09c\ud09d\ud09e\ud09f\ud0a0\ud0a1\ud0a2\ud0a3\ud0a4\ud0a5\ud0a6\ud0a7\ud0a8\ud0a9\ud0aa\ud0ab\ud0ac\ud0ad\ud0ae\ud0af\ud0b0\ud0b1\ud0b2\ud0b3\ud0b4\ud0b5\ud0b6\ud0b7\ud0b8\ud0b9\ud0ba\ud0bb\ud0bc\ud0bd\ud0be\ud0bf\ud0c0\ud0c1\ud0c2\ud0c3\ud0c4\ud0c5\ud0c6\ud0c7\ud0c8\ud0c9\ud0ca\ud0cb\ud0cc\ud0cd\ud0ce\ud0cf\ud0d0\ud0d1\ud0d2\ud0d3\ud0d4\ud0d5\ud0d6\ud0d7\ud0d8\ud0d9\ud0da\ud0db\ud0dc\ud0dd\ud0de\ud0df\ud0e0\ud0e1\ud0e2\ud0e3\ud0e4\ud0e5\ud0e6\ud0e7\ud0e8\ud0e9\ud0ea\ud0eb\ud0ec\ud0ed\ud0ee\ud0ef\ud0f0\ud0f1\ud0f2\ud0f3\ud0f4\ud0f5\ud0f6\ud0f7\ud0f8\ud0f9\ud0fa\ud0fb\ud0fc\ud0fd\ud0fe\ud0ff\ud100\ud101\ud102\ud103\ud104\ud105\ud106\ud107\ud108\ud109\ud10a\ud10b\ud10c\ud10d\ud10e\ud10f\ud110\ud111\ud112\ud113\ud114\ud115\ud116\ud117\ud118\ud119\ud11a\ud11b\ud11c\ud11d\ud11e\ud11f\ud120\ud121\ud122\ud123\ud124\ud125\ud126\ud127\ud128\ud129\ud12a\ud12b\ud12c\ud12d\ud12e\ud12f\ud130\ud131\ud132\ud133\ud134\ud135\ud136\ud137\ud138\ud139\ud13a\ud13b\ud13c\ud13d\ud13e\ud13f\ud140\ud141\ud142\ud143\ud144\ud145\ud146\ud147\ud148\ud149\ud14a\ud14b\ud14c\ud14d\ud14e\ud14f\ud150\ud151\ud152\ud153\ud154\ud155\ud156\ud157\ud158\ud159\ud15a\ud15b\ud15c\ud15d\ud15e\ud15f\ud160\ud161\ud162\ud163\ud164\ud165\ud166\ud167\ud168\ud169\ud16a\ud16b\ud16c\ud16d\ud16e\ud16f\ud170\ud171\ud172\ud173\ud174\ud175\ud176\ud177\ud178\ud179\ud17a\ud17b\ud17c\ud17d\ud17e\ud17f\ud180\ud181\ud182\ud183\ud184\ud185\ud186\ud187\ud188\ud189\ud18a\ud18b\ud18c\ud18d\ud18e\ud18f\ud190\ud191\ud192\ud193\ud194\ud195\ud196\ud197\ud198\ud199\ud19a\ud19b\ud19c\ud19d\ud19e\ud19f\ud1a0\ud1a1\ud1a2\ud1a3\ud1a4\ud1a5\ud1a6\ud1a7\ud1a8\ud1a9\ud1aa\ud1ab\ud1ac\ud1ad\ud1ae\ud1af\ud1b0\ud1b1\ud1b2\ud1b3\ud1b4\ud1b5\ud1b6\ud1b7\ud1b8\ud1b9\ud1ba\ud1bb\ud1bc\ud1bd\ud1be\ud1bf\ud1c0\ud1c1\ud1c2\ud1c3\ud1c4\ud1c5\ud1c6\ud1c7\ud1c8\ud1c9\ud1ca\ud1cb\ud1cc\ud1cd\ud1ce\ud1cf\ud1d0\ud1d1\ud1d2\ud1d3\ud1d4\ud1d5\ud1d6\ud1d7\ud1d8\ud1d9\ud1da\ud1db\ud1dc\ud1dd\ud1de\ud1df\ud1e0\ud1e1\ud1e2\ud1e3\ud1e4\ud1e5\ud1e6\ud1e7\ud1e8\ud1e9\ud1ea\ud1eb\ud1ec\ud1ed\ud1ee\ud1ef\ud1f0\ud1f1\ud1f2\ud1f3\ud1f4\ud1f5\ud1f6\ud1f7\ud1f8\ud1f9\ud1fa\ud1fb\ud1fc\ud1fd\ud1fe\ud1ff\ud200\ud201\ud202\ud203\ud204\ud205\ud206\ud207\ud208\ud209\ud20a\ud20b\ud20c\ud20d\ud20e\ud20f\ud210\ud211\ud212\ud213\ud214\ud215\ud216\ud217\ud218\ud219\ud21a\ud21b\ud21c\ud21d\ud21e\ud21f\ud220\ud221\ud222\ud223\ud224\ud225\ud226\ud227\ud228\ud229\ud22a\ud22b\ud22c\ud22d\ud22e\ud22f\ud230\ud231\ud232\ud233\ud234\ud235\ud236\ud237\ud238\ud239\ud23a\ud23b\ud23c\ud23d\ud23e\ud23f\ud240\ud241\ud242\ud243\ud244\ud245\ud246\ud247\ud248\ud249\ud24a\ud24b\ud24c\ud24d\ud24e\ud24f\ud250\ud251\ud252\ud253\ud254\ud255\ud256\ud257\ud258\ud259\ud25a\ud25b\ud25c\ud25d\ud25e\ud25f\ud260\ud261\ud262\ud263\ud264\ud265\ud266\ud267\ud268\ud269\ud26a\ud26b\ud26c\ud26d\ud26e\ud26f\ud270\ud271\ud272\ud273\ud274\ud275\ud276\ud277\ud278\ud279\ud27a\ud27b\ud27c\ud27d\ud27e\ud27f\ud280\ud281\ud282\ud283\ud284\ud285\ud286\ud287\ud288\ud289\ud28a\ud28b\ud28c\ud28d\ud28e\ud28f\ud290\ud291\ud292\ud293\ud294\ud295\ud296\ud297\ud298\ud299\ud29a\ud29b\ud29c\ud29d\ud29e\ud29f\ud2a0\ud2a1\ud2a2\ud2a3\ud2a4\ud2a5\ud2a6\ud2a7\ud2a8\ud2a9\ud2aa\ud2ab\ud2ac\ud2ad\ud2ae\ud2af\ud2b0\ud2b1\ud2b2\ud2b3\ud2b4\ud2b5\ud2b6\ud2b7\ud2b8\ud2b9\ud2ba\ud2bb\ud2bc\ud2bd\ud2be\ud2bf\ud2c0\ud2c1\ud2c2\ud2c3\ud2c4\ud2c5\ud2c6\ud2c7\ud2c8\ud2c9\ud2ca\ud2cb\ud2cc\ud2cd\ud2ce\ud2cf\ud2d0\ud2d1\ud2d2\ud2d3\ud2d4\ud2d5\ud2d6\ud2d7\ud2d8\ud2d9\ud2da\ud2db\ud2dc\ud2dd\ud2de\ud2df\ud2e0\ud2e1\ud2e2\ud2e3\ud2e4\ud2e5\ud2e6\ud2e7\ud2e8\ud2e9\ud2ea\ud2eb\ud2ec\ud2ed\ud2ee\ud2ef\ud2f0\ud2f1\ud2f2\ud2f3\ud2f4\ud2f5\ud2f6\ud2f7\ud2f8\ud2f9\ud2fa\ud2fb\ud2fc\ud2fd\ud2fe\ud2ff\ud300\ud301\ud302\ud303\ud304\ud305\ud306\ud307\ud308\ud309\ud30a\ud30b\ud30c\ud30d\ud30e\ud30f\ud310\ud311\ud312\ud313\ud314\ud315\ud316\ud317\ud318\ud319\ud31a\ud31b\ud31c\ud31d\ud31e\ud31f\ud320\ud321\ud322\ud323\ud324\ud325\ud326\ud327\ud328\ud329\ud32a\ud32b\ud32c\ud32d\ud32e\ud32f\ud330\ud331\ud332\ud333\ud334\ud335\ud336\ud337\ud338\ud339\ud33a\ud33b\ud33c\ud33d\ud33e\ud33f\ud340\ud341\ud342\ud343\ud344\ud345\ud346\ud347\ud348\ud349\ud34a\ud34b\ud34c\ud34d\ud34e\ud34f\ud350\ud351\ud352\ud353\ud354\ud355\ud356\ud357\ud358\ud359\ud35a\ud35b\ud35c\ud35d\ud35e\ud35f\ud360\ud361\ud362\ud363\ud364\ud365\ud366\ud367\ud368\ud369\ud36a\ud36b\ud36c\ud36d\ud36e\ud36f\ud370\ud371\ud372\ud373\ud374\ud375\ud376\ud377\ud378\ud379\ud37a\ud37b\ud37c\ud37d\ud37e\ud37f\ud380\ud381\ud382\ud383\ud384\ud385\ud386\ud387\ud388\ud389\ud38a\ud38b\ud38c\ud38d\ud38e\ud38f\ud390\ud391\ud392\ud393\ud394\ud395\ud396\ud397\ud398\ud399\ud39a\ud39b\ud39c\ud39d\ud39e\ud39f\ud3a0\ud3a1\ud3a2\ud3a3\ud3a4\ud3a5\ud3a6\ud3a7\ud3a8\ud3a9\ud3aa\ud3ab\ud3ac\ud3ad\ud3ae\ud3af\ud3b0\ud3b1\ud3b2\ud3b3\ud3b4\ud3b5\ud3b6\ud3b7\ud3b8\ud3b9\ud3ba\ud3bb\ud3bc\ud3bd\ud3be\ud3bf\ud3c0\ud3c1\ud3c2\ud3c3\ud3c4\ud3c5\ud3c6\ud3c7\ud3c8\ud3c9\ud3ca\ud3cb\ud3cc\ud3cd\ud3ce\ud3cf\ud3d0\ud3d1\ud3d2\ud3d3\ud3d4\ud3d5\ud3d6\ud3d7\ud3d8\ud3d9\ud3da\ud3db\ud3dc\ud3dd\ud3de\ud3df\ud3e0\ud3e1\ud3e2\ud3e3\ud3e4\ud3e5\ud3e6\ud3e7\ud3e8\ud3e9\ud3ea\ud3eb\ud3ec\ud3ed\ud3ee\ud3ef\ud3f0\ud3f1\ud3f2\ud3f3\ud3f4\ud3f5\ud3f6\ud3f7\ud3f8\ud3f9\ud3fa\ud3fb\ud3fc\ud3fd\ud3fe\ud3ff\ud400\ud401\ud402\ud403\ud404\ud405\ud406\ud407\ud408\ud409\ud40a\ud40b\ud40c\ud40d\ud40e\ud40f\ud410\ud411\ud412\ud413\ud414\ud415\ud416\ud417\ud418\ud419\ud41a\ud41b\ud41c\ud41d\ud41e\ud41f\ud420\ud421\ud422\ud423\ud424\ud425\ud426\ud427\ud428\ud429\ud42a\ud42b\ud42c\ud42d\ud42e\ud42f\ud430\ud431\ud432\ud433\ud434\ud435\ud436\ud437\ud438\ud439\ud43a\ud43b\ud43c\ud43d\ud43e\ud43f\ud440\ud441\ud442\ud443\ud444\ud445\ud446\ud447\ud448\ud449\ud44a\ud44b\ud44c\ud44d\ud44e\ud44f\ud450\ud451\ud452\ud453\ud454\ud455\ud456\ud457\ud458\ud459\ud45a\ud45b\ud45c\ud45d\ud45e\ud45f\ud460\ud461\ud462\ud463\ud464\ud465\ud466\ud467\ud468\ud469\ud46a\ud46b\ud46c\ud46d\ud46e\ud46f\ud470\ud471\ud472\ud473\ud474\ud475\ud476\ud477\ud478\ud479\ud47a\ud47b\ud47c\ud47d\ud47e\ud47f\ud480\ud481\ud482\ud483\ud484\ud485\ud486\ud487\ud488\ud489\ud48a\ud48b\ud48c\ud48d\ud48e\ud48f\ud490\ud491\ud492\ud493\ud494\ud495\ud496\ud497\ud498\ud499\ud49a\ud49b\ud49c\ud49d\ud49e\ud49f\ud4a0\ud4a1\ud4a2\ud4a3\ud4a4\ud4a5\ud4a6\ud4a7\ud4a8\ud4a9\ud4aa\ud4ab\ud4ac\ud4ad\ud4ae\ud4af\ud4b0\ud4b1\ud4b2\ud4b3\ud4b4\ud4b5\ud4b6\ud4b7\ud4b8\ud4b9\ud4ba\ud4bb\ud4bc\ud4bd\ud4be\ud4bf\ud4c0\ud4c1\ud4c2\ud4c3\ud4c4\ud4c5\ud4c6\ud4c7\ud4c8\ud4c9\ud4ca\ud4cb\ud4cc\ud4cd\ud4ce\ud4cf\ud4d0\ud4d1\ud4d2\ud4d3\ud4d4\ud4d5\ud4d6\ud4d7\ud4d8\ud4d9\ud4da\ud4db\ud4dc\ud4dd\ud4de\ud4df\ud4e0\ud4e1\ud4e2\ud4e3\ud4e4\ud4e5\ud4e6\ud4e7\ud4e8\ud4e9\ud4ea\ud4eb\ud4ec\ud4ed\ud4ee\ud4ef\ud4f0\ud4f1\ud4f2\ud4f3\ud4f4\ud4f5\ud4f6\ud4f7\ud4f8\ud4f9\ud4fa\ud4fb\ud4fc\ud4fd\ud4fe\ud4ff\ud500\ud501\ud502\ud503\ud504\ud505\ud506\ud507\ud508\ud509\ud50a\ud50b\ud50c\ud50d\ud50e\ud50f\ud510\ud511\ud512\ud513\ud514\ud515\ud516\ud517\ud518\ud519\ud51a\ud51b\ud51c\ud51d\ud51e\ud51f\ud520\ud521\ud522\ud523\ud524\ud525\ud526\ud527\ud528\ud529\ud52a\ud52b\ud52c\ud52d\ud52e\ud52f\ud530\ud531\ud532\ud533\ud534\ud535\ud536\ud537\ud538\ud539\ud53a\ud53b\ud53c\ud53d\ud53e\ud53f\ud540\ud541\ud542\ud543\ud544\ud545\ud546\ud547\ud548\ud549\ud54a\ud54b\ud54c\ud54d\ud54e\ud54f\ud550\ud551\ud552\ud553\ud554\ud555\ud556\ud557\ud558\ud559\ud55a\ud55b\ud55c\ud55d\ud55e\ud55f\ud560\ud561\ud562\ud563\ud564\ud565\ud566\ud567\ud568\ud569\ud56a\ud56b\ud56c\ud56d\ud56e\ud56f\ud570\ud571\ud572\ud573\ud574\ud575\ud576\ud577\ud578\ud579\ud57a\ud57b\ud57c\ud57d\ud57e\ud57f\ud580\ud581\ud582\ud583\ud584\ud585\ud586\ud587\ud588\ud589\ud58a\ud58b\ud58c\ud58d\ud58e\ud58f\ud590\ud591\ud592\ud593\ud594\ud595\ud596\ud597\ud598\ud599\ud59a\ud59b\ud59c\ud59d\ud59e\ud59f\ud5a0\ud5a1\ud5a2\ud5a3\ud5a4\ud5a5\ud5a6\ud5a7\ud5a8\ud5a9\ud5aa\ud5ab\ud5ac\ud5ad\ud5ae\ud5af\ud5b0\ud5b1\ud5b2\ud5b3\ud5b4\ud5b5\ud5b6\ud5b7\ud5b8\ud5b9\ud5ba\ud5bb\ud5bc\ud5bd\ud5be\ud5bf\ud5c0\ud5c1\ud5c2\ud5c3\ud5c4\ud5c5\ud5c6\ud5c7\ud5c8\ud5c9\ud5ca\ud5cb\ud5cc\ud5cd\ud5ce\ud5cf\ud5d0\ud5d1\ud5d2\ud5d3\ud5d4\ud5d5\ud5d6\ud5d7\ud5d8\ud5d9\ud5da\ud5db\ud5dc\ud5dd\ud5de\ud5df\ud5e0\ud5e1\ud5e2\ud5e3\ud5e4\ud5e5\ud5e6\ud5e7\ud5e8\ud5e9\ud5ea\ud5eb\ud5ec\ud5ed\ud5ee\ud5ef\ud5f0\ud5f1\ud5f2\ud5f3\ud5f4\ud5f5\ud5f6\ud5f7\ud5f8\ud5f9\ud5fa\ud5fb\ud5fc\ud5fd\ud5fe\ud5ff\ud600\ud601\ud602\ud603\ud604\ud605\ud606\ud607\ud608\ud609\ud60a\ud60b\ud60c\ud60d\ud60e\ud60f\ud610\ud611\ud612\ud613\ud614\ud615\ud616\ud617\ud618\ud619\ud61a\ud61b\ud61c\ud61d\ud61e\ud61f\ud620\ud621\ud622\ud623\ud624\ud625\ud626\ud627\ud628\ud629\ud62a\ud62b\ud62c\ud62d\ud62e\ud62f\ud630\ud631\ud632\ud633\ud634\ud635\ud636\ud637\ud638\ud639\ud63a\ud63b\ud63c\ud63d\ud63e\ud63f\ud640\ud641\ud642\ud643\ud644\ud645\ud646\ud647\ud648\ud649\ud64a\ud64b\ud64c\ud64d\ud64e\ud64f\ud650\ud651\ud652\ud653\ud654\ud655\ud656\ud657\ud658\ud659\ud65a\ud65b\ud65c\ud65d\ud65e\ud65f\ud660\ud661\ud662\ud663\ud664\ud665\ud666\ud667\ud668\ud669\ud66a\ud66b\ud66c\ud66d\ud66e\ud66f\ud670\ud671\ud672\ud673\ud674\ud675\ud676\ud677\ud678\ud679\ud67a\ud67b\ud67c\ud67d\ud67e\ud67f\ud680\ud681\ud682\ud683\ud684\ud685\ud686\ud687\ud688\ud689\ud68a\ud68b\ud68c\ud68d\ud68e\ud68f\ud690\ud691\ud692\ud693\ud694\ud695\ud696\ud697\ud698\ud699\ud69a\ud69b\ud69c\ud69d\ud69e\ud69f\ud6a0\ud6a1\ud6a2\ud6a3\ud6a4\ud6a5\ud6a6\ud6a7\ud6a8\ud6a9\ud6aa\ud6ab\ud6ac\ud6ad\ud6ae\ud6af\ud6b0\ud6b1\ud6b2\ud6b3\ud6b4\ud6b5\ud6b6\ud6b7\ud6b8\ud6b9\ud6ba\ud6bb\ud6bc\ud6bd\ud6be\ud6bf\ud6c0\ud6c1\ud6c2\ud6c3\ud6c4\ud6c5\ud6c6\ud6c7\ud6c8\ud6c9\ud6ca\ud6cb\ud6cc\ud6cd\ud6ce\ud6cf\ud6d0\ud6d1\ud6d2\ud6d3\ud6d4\ud6d5\ud6d6\ud6d7\ud6d8\ud6d9\ud6da\ud6db\ud6dc\ud6dd\ud6de\ud6df\ud6e0\ud6e1\ud6e2\ud6e3\ud6e4\ud6e5\ud6e6\ud6e7\ud6e8\ud6e9\ud6ea\ud6eb\ud6ec\ud6ed\ud6ee\ud6ef\ud6f0\ud6f1\ud6f2\ud6f3\ud6f4\ud6f5\ud6f6\ud6f7\ud6f8\ud6f9\ud6fa\ud6fb\ud6fc\ud6fd\ud6fe\ud6ff\ud700\ud701\ud702\ud703\ud704\ud705\ud706\ud707\ud708\ud709\ud70a\ud70b\ud70c\ud70d\ud70e\ud70f\ud710\ud711\ud712\ud713\ud714\ud715\ud716\ud717\ud718\ud719\ud71a\ud71b\ud71c\ud71d\ud71e\ud71f\ud720\ud721\ud722\ud723\ud724\ud725\ud726\ud727\ud728\ud729\ud72a\ud72b\ud72c\ud72d\ud72e\ud72f\ud730\ud731\ud732\ud733\ud734\ud735\ud736\ud737\ud738\ud739\ud73a\ud73b\ud73c\ud73d\ud73e\ud73f\ud740\ud741\ud742\ud743\ud744\ud745\ud746\ud747\ud748\ud749\ud74a\ud74b\ud74c\ud74d\ud74e\ud74f\ud750\ud751\ud752\ud753\ud754\ud755\ud756\ud757\ud758\ud759\ud75a\ud75b\ud75c\ud75d\ud75e\ud75f\ud760\ud761\ud762\ud763\ud764\ud765\ud766\ud767\ud768\ud769\ud76a\ud76b\ud76c\ud76d\ud76e\ud76f\ud770\ud771\ud772\ud773\ud774\ud775\ud776\ud777\ud778\ud779\ud77a\ud77b\ud77c\ud77d\ud77e\ud77f\ud780\ud781\ud782\ud783\ud784\ud785\ud786\ud787\ud788\ud789\ud78a\ud78b\ud78c\ud78d\ud78e\ud78f\ud790\ud791\ud792\ud793\ud794\ud795\ud796\ud797\ud798\ud799\ud79a\ud79b\ud79c\ud79d\ud79e\ud79f\ud7a0\ud7a1\ud7a2\ud7a3\uf900\uf901\uf902\uf903\uf904\uf905\uf906\uf907\uf908\uf909\uf90a\uf90b\uf90c\uf90d\uf90e\uf90f\uf910\uf911\uf912\uf913\uf914\uf915\uf916\uf917\uf918\uf919\uf91a\uf91b\uf91c\uf91d\uf91e\uf91f\uf920\uf921\uf922\uf923\uf924\uf925\uf926\uf927\uf928\uf929\uf92a\uf92b\uf92c\uf92d\uf92e\uf92f\uf930\uf931\uf932\uf933\uf934\uf935\uf936\uf937\uf938\uf939\uf93a\uf93b\uf93c\uf93d\uf93e\uf93f\uf940\uf941\uf942\uf943\uf944\uf945\uf946\uf947\uf948\uf949\uf94a\uf94b\uf94c\uf94d\uf94e\uf94f\uf950\uf951\uf952\uf953\uf954\uf955\uf956\uf957\uf958\uf959\uf95a\uf95b\uf95c\uf95d\uf95e\uf95f\uf960\uf961\uf962\uf963\uf964\uf965\uf966\uf967\uf968\uf969\uf96a\uf96b\uf96c\uf96d\uf96e\uf96f\uf970\uf971\uf972\uf973\uf974\uf975\uf976\uf977\uf978\uf979\uf97a\uf97b\uf97c\uf97d\uf97e\uf97f\uf980\uf981\uf982\uf983\uf984\uf985\uf986\uf987\uf988\uf989\uf98a\uf98b\uf98c\uf98d\uf98e\uf98f\uf990\uf991\uf992\uf993\uf994\uf995\uf996\uf997\uf998\uf999\uf99a\uf99b\uf99c\uf99d\uf99e\uf99f\uf9a0\uf9a1\uf9a2\uf9a3\uf9a4\uf9a5\uf9a6\uf9a7\uf9a8\uf9a9\uf9aa\uf9ab\uf9ac\uf9ad\uf9ae\uf9af\uf9b0\uf9b1\uf9b2\uf9b3\uf9b4\uf9b5\uf9b6\uf9b7\uf9b8\uf9b9\uf9ba\uf9bb\uf9bc\uf9bd\uf9be\uf9bf\uf9c0\uf9c1\uf9c2\uf9c3\uf9c4\uf9c5\uf9c6\uf9c7\uf9c8\uf9c9\uf9ca\uf9cb\uf9cc\uf9cd\uf9ce\uf9cf\uf9d0\uf9d1\uf9d2\uf9d3\uf9d4\uf9d5\uf9d6\uf9d7\uf9d8\uf9d9\uf9da\uf9db\uf9dc\uf9dd\uf9de\uf9df\uf9e0\uf9e1\uf9e2\uf9e3\uf9e4\uf9e5\uf9e6\uf9e7\uf9e8\uf9e9\uf9ea\uf9eb\uf9ec\uf9ed\uf9ee\uf9ef\uf9f0\uf9f1\uf9f2\uf9f3\uf9f4\uf9f5\uf9f6\uf9f7\uf9f8\uf9f9\uf9fa\uf9fb\uf9fc\uf9fd\uf9fe\uf9ff\ufa00\ufa01\ufa02\ufa03\ufa04\ufa05\ufa06\ufa07\ufa08\ufa09\ufa0a\ufa0b\ufa0c\ufa0d\ufa0e\ufa0f\ufa10\ufa11\ufa12\ufa13\ufa14\ufa15\ufa16\ufa17\ufa18\ufa19\ufa1a\ufa1b\ufa1c\ufa1d\ufa1e\ufa1f\ufa20\ufa21\ufa22\ufa23\ufa24\ufa25\ufa26\ufa27\ufa28\ufa29\ufa2a\ufa2b\ufa2c\ufa2d\ufa30\ufa31\ufa32\ufa33\ufa34\ufa35\ufa36\ufa37\ufa38\ufa39\ufa3a\ufa3b\ufa3c\ufa3d\ufa3e\ufa3f\ufa40\ufa41\ufa42\ufa43\ufa44\ufa45\ufa46\ufa47\ufa48\ufa49\ufa4a\ufa4b\ufa4c\ufa4d\ufa4e\ufa4f\ufa50\ufa51\ufa52\ufa53\ufa54\ufa55\ufa56\ufa57\ufa58\ufa59\ufa5a\ufa5b\ufa5c\ufa5d\ufa5e\ufa5f\ufa60\ufa61\ufa62\ufa63\ufa64\ufa65\ufa66\ufa67\ufa68\ufa69\ufa6a\ufa70\ufa71\ufa72\ufa73\ufa74\ufa75\ufa76\ufa77\ufa78\ufa79\ufa7a\ufa7b\ufa7c\ufa7d\ufa7e\ufa7f\ufa80\ufa81\ufa82\ufa83\ufa84\ufa85\ufa86\ufa87\ufa88\ufa89\ufa8a\ufa8b\ufa8c\ufa8d\ufa8e\ufa8f\ufa90\ufa91\ufa92\ufa93\ufa94\ufa95\ufa96\ufa97\ufa98\ufa99\ufa9a\ufa9b\ufa9c\ufa9d\ufa9e\ufa9f\ufaa0\ufaa1\ufaa2\ufaa3\ufaa4\ufaa5\ufaa6\ufaa7\ufaa8\ufaa9\ufaaa\ufaab\ufaac\ufaad\ufaae\ufaaf\ufab0\ufab1\ufab2\ufab3\ufab4\ufab5\ufab6\ufab7\ufab8\ufab9\ufaba\ufabb\ufabc\ufabd\ufabe\ufabf\ufac0\ufac1\ufac2\ufac3\ufac4\ufac5\ufac6\ufac7\ufac8\ufac9\ufaca\ufacb\ufacc\ufacd\uface\ufacf\ufad0\ufad1\ufad2\ufad3\ufad4\ufad5\ufad6\ufad7\ufad8\ufad9\ufb1d\ufb1f\ufb20\ufb21\ufb22\ufb23\ufb24\ufb25\ufb26\ufb27\ufb28\ufb2a\ufb2b\ufb2c\ufb2d\ufb2e\ufb2f\ufb30\ufb31\ufb32\ufb33\ufb34\ufb35\ufb36\ufb38\ufb39\ufb3a\ufb3b\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46\ufb47\ufb48\ufb49\ufb4a\ufb4b\ufb4c\ufb4d\ufb4e\ufb4f\ufb50\ufb51\ufb52\ufb53\ufb54\ufb55\ufb56\ufb57\ufb58\ufb59\ufb5a\ufb5b\ufb5c\ufb5d\ufb5e\ufb5f\ufb60\ufb61\ufb62\ufb63\ufb64\ufb65\ufb66\ufb67\ufb68\ufb69\ufb6a\ufb6b\ufb6c\ufb6d\ufb6e\ufb6f\ufb70\ufb71\ufb72\ufb73\ufb74\ufb75\ufb76\ufb77\ufb78\ufb79\ufb7a\ufb7b\ufb7c\ufb7d\ufb7e\ufb7f\ufb80\ufb81\ufb82\ufb83\ufb84\ufb85\ufb86\ufb87\ufb88\ufb89\ufb8a\ufb8b\ufb8c\ufb8d\ufb8e\ufb8f\ufb90\ufb91\ufb92\ufb93\ufb94\ufb95\ufb96\ufb97\ufb98\ufb99\ufb9a\ufb9b\ufb9c\ufb9d\ufb9e\ufb9f\ufba0\ufba1\ufba2\ufba3\ufba4\ufba5\ufba6\ufba7\ufba8\ufba9\ufbaa\ufbab\ufbac\ufbad\ufbae\ufbaf\ufbb0\ufbb1\ufbd3\ufbd4\ufbd5\ufbd6\ufbd7\ufbd8\ufbd9\ufbda\ufbdb\ufbdc\ufbdd\ufbde\ufbdf\ufbe0\ufbe1\ufbe2\ufbe3\ufbe4\ufbe5\ufbe6\ufbe7\ufbe8\ufbe9\ufbea\ufbeb\ufbec\ufbed\ufbee\ufbef\ufbf0\ufbf1\ufbf2\ufbf3\ufbf4\ufbf5\ufbf6\ufbf7\ufbf8\ufbf9\ufbfa\ufbfb\ufbfc\ufbfd\ufbfe\ufbff\ufc00\ufc01\ufc02\ufc03\ufc04\ufc05\ufc06\ufc07\ufc08\ufc09\ufc0a\ufc0b\ufc0c\ufc0d\ufc0e\ufc0f\ufc10\ufc11\ufc12\ufc13\ufc14\ufc15\ufc16\ufc17\ufc18\ufc19\ufc1a\ufc1b\ufc1c\ufc1d\ufc1e\ufc1f\ufc20\ufc21\ufc22\ufc23\ufc24\ufc25\ufc26\ufc27\ufc28\ufc29\ufc2a\ufc2b\ufc2c\ufc2d\ufc2e\ufc2f\ufc30\ufc31\ufc32\ufc33\ufc34\ufc35\ufc36\ufc37\ufc38\ufc39\ufc3a\ufc3b\ufc3c\ufc3d\ufc3e\ufc3f\ufc40\ufc41\ufc42\ufc43\ufc44\ufc45\ufc46\ufc47\ufc48\ufc49\ufc4a\ufc4b\ufc4c\ufc4d\ufc4e\ufc4f\ufc50\ufc51\ufc52\ufc53\ufc54\ufc55\ufc56\ufc57\ufc58\ufc59\ufc5a\ufc5b\ufc5c\ufc5d\ufc5e\ufc5f\ufc60\ufc61\ufc62\ufc63\ufc64\ufc65\ufc66\ufc67\ufc68\ufc69\ufc6a\ufc6b\ufc6c\ufc6d\ufc6e\ufc6f\ufc70\ufc71\ufc72\ufc73\ufc74\ufc75\ufc76\ufc77\ufc78\ufc79\ufc7a\ufc7b\ufc7c\ufc7d\ufc7e\ufc7f\ufc80\ufc81\ufc82\ufc83\ufc84\ufc85\ufc86\ufc87\ufc88\ufc89\ufc8a\ufc8b\ufc8c\ufc8d\ufc8e\ufc8f\ufc90\ufc91\ufc92\ufc93\ufc94\ufc95\ufc96\ufc97\ufc98\ufc99\ufc9a\ufc9b\ufc9c\ufc9d\ufc9e\ufc9f\ufca0\ufca1\ufca2\ufca3\ufca4\ufca5\ufca6\ufca7\ufca8\ufca9\ufcaa\ufcab\ufcac\ufcad\ufcae\ufcaf\ufcb0\ufcb1\ufcb2\ufcb3\ufcb4\ufcb5\ufcb6\ufcb7\ufcb8\ufcb9\ufcba\ufcbb\ufcbc\ufcbd\ufcbe\ufcbf\ufcc0\ufcc1\ufcc2\ufcc3\ufcc4\ufcc5\ufcc6\ufcc7\ufcc8\ufcc9\ufcca\ufccb\ufccc\ufccd\ufcce\ufccf\ufcd0\ufcd1\ufcd2\ufcd3\ufcd4\ufcd5\ufcd6\ufcd7\ufcd8\ufcd9\ufcda\ufcdb\ufcdc\ufcdd\ufcde\ufcdf\ufce0\ufce1\ufce2\ufce3\ufce4\ufce5\ufce6\ufce7\ufce8\ufce9\ufcea\ufceb\ufcec\ufced\ufcee\ufcef\ufcf0\ufcf1\ufcf2\ufcf3\ufcf4\ufcf5\ufcf6\ufcf7\ufcf8\ufcf9\ufcfa\ufcfb\ufcfc\ufcfd\ufcfe\ufcff\ufd00\ufd01\ufd02\ufd03\ufd04\ufd05\ufd06\ufd07\ufd08\ufd09\ufd0a\ufd0b\ufd0c\ufd0d\ufd0e\ufd0f\ufd10\ufd11\ufd12\ufd13\ufd14\ufd15\ufd16\ufd17\ufd18\ufd19\ufd1a\ufd1b\ufd1c\ufd1d\ufd1e\ufd1f\ufd20\ufd21\ufd22\ufd23\ufd24\ufd25\ufd26\ufd27\ufd28\ufd29\ufd2a\ufd2b\ufd2c\ufd2d\ufd2e\ufd2f\ufd30\ufd31\ufd32\ufd33\ufd34\ufd35\ufd36\ufd37\ufd38\ufd39\ufd3a\ufd3b\ufd3c\ufd3d\ufd50\ufd51\ufd52\ufd53\ufd54\ufd55\ufd56\ufd57\ufd58\ufd59\ufd5a\ufd5b\ufd5c\ufd5d\ufd5e\ufd5f\ufd60\ufd61\ufd62\ufd63\ufd64\ufd65\ufd66\ufd67\ufd68\ufd69\ufd6a\ufd6b\ufd6c\ufd6d\ufd6e\ufd6f\ufd70\ufd71\ufd72\ufd73\ufd74\ufd75\ufd76\ufd77\ufd78\ufd79\ufd7a\ufd7b\ufd7c\ufd7d\ufd7e\ufd7f\ufd80\ufd81\ufd82\ufd83\ufd84\ufd85\ufd86\ufd87\ufd88\ufd89\ufd8a\ufd8b\ufd8c\ufd8d\ufd8e\ufd8f\ufd92\ufd93\ufd94\ufd95\ufd96\ufd97\ufd98\ufd99\ufd9a\ufd9b\ufd9c\ufd9d\ufd9e\ufd9f\ufda0\ufda1\ufda2\ufda3\ufda4\ufda5\ufda6\ufda7\ufda8\ufda9\ufdaa\ufdab\ufdac\ufdad\ufdae\ufdaf\ufdb0\ufdb1\ufdb2\ufdb3\ufdb4\ufdb5\ufdb6\ufdb7\ufdb8\ufdb9\ufdba\ufdbb\ufdbc\ufdbd\ufdbe\ufdbf\ufdc0\ufdc1\ufdc2\ufdc3\ufdc4\ufdc5\ufdc6\ufdc7\ufdf0\ufdf1\ufdf2\ufdf3\ufdf4\ufdf5\ufdf6\ufdf7\ufdf8\ufdf9\ufdfa\ufdfb\ufe70\ufe71\ufe72\ufe73\ufe74\ufe76\ufe77\ufe78\ufe79\ufe7a\ufe7b\ufe7c\ufe7d\ufe7e\ufe7f\ufe80\ufe81\ufe82\ufe83\ufe84\ufe85\ufe86\ufe87\ufe88\ufe89\ufe8a\ufe8b\ufe8c\ufe8d\ufe8e\ufe8f\ufe90\ufe91\ufe92\ufe93\ufe94\ufe95\ufe96\ufe97\ufe98\ufe99\ufe9a\ufe9b\ufe9c\ufe9d\ufe9e\ufe9f\ufea0\ufea1\ufea2\ufea3\ufea4\ufea5\ufea6\ufea7\ufea8\ufea9\ufeaa\ufeab\ufeac\ufead\ufeae\ufeaf\ufeb0\ufeb1\ufeb2\ufeb3\ufeb4\ufeb5\ufeb6\ufeb7\ufeb8\ufeb9\ufeba\ufebb\ufebc\ufebd\ufebe\ufebf\ufec0\ufec1\ufec2\ufec3\ufec4\ufec5\ufec6\ufec7\ufec8\ufec9\ufeca\ufecb\ufecc\ufecd\ufece\ufecf\ufed0\ufed1\ufed2\ufed3\ufed4\ufed5\ufed6\ufed7\ufed8\ufed9\ufeda\ufedb\ufedc\ufedd\ufede\ufedf\ufee0\ufee1\ufee2\ufee3\ufee4\ufee5\ufee6\ufee7\ufee8\ufee9\ufeea\ufeeb\ufeec\ufeed\ufeee\ufeef\ufef0\ufef1\ufef2\ufef3\ufef4\ufef5\ufef6\ufef7\ufef8\ufef9\ufefa\ufefb\ufefc\uff66\uff67\uff68\uff69\uff6a\uff6b\uff6c\uff6d\uff6e\uff6f\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff7a\uff7b\uff7c\uff7d\uff7e\uff7f\uff80\uff81\uff82\uff83\uff84\uff85\uff86\uff87\uff88\uff89\uff8a\uff8b\uff8c\uff8d\uff8e\uff8f\uff90\uff91\uff92\uff93\uff94\uff95\uff96\uff97\uff98\uff99\uff9a\uff9b\uff9c\uff9d\uffa0\uffa1\uffa2\uffa3\uffa4\uffa5\uffa6\uffa7\uffa8\uffa9\uffaa\uffab\uffac\uffad\uffae\uffaf\uffb0\uffb1\uffb2\uffb3\uffb4\uffb5\uffb6\uffb7\uffb8\uffb9\uffba\uffbb\uffbc\uffbd\uffbe\uffc2\uffc3\uffc4\uffc5\uffc6\uffc7\uffca\uffcb\uffcc\uffcd\uffce\uffcf\uffd2\uffd3\uffd4\uffd5\uffd6\uffd7\uffda\uffdb\uffdc' + +Lt = u'\u01c5\u01c8\u01cb\u01f2\u1f88\u1f89\u1f8a\u1f8b\u1f8c\u1f8d\u1f8e\u1f8f\u1f98\u1f99\u1f9a\u1f9b\u1f9c\u1f9d\u1f9e\u1f9f\u1fa8\u1fa9\u1faa\u1fab\u1fac\u1fad\u1fae\u1faf\u1fbc\u1fcc\u1ffc' + +Lu = u'ABCDEFGHIJKLMNOPQRSTUVWXYZ\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189\u018a\u018b\u018e\u018f\u0190\u0191\u0193\u0194\u0196\u0197\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1\u01b2\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6\u01f7\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0386\u0388\u0389\u038a\u038c\u038e\u038f\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03d2\u03d3\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd\u03fe\u03ff\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\u040d\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053a\u053b\u053c\u053d\u053e\u053f\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054a\u054b\u054c\u054d\u054e\u054f\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u10a0\u10a1\u10a2\u10a3\u10a4\u10a5\u10a6\u10a7\u10a8\u10a9\u10aa\u10ab\u10ac\u10ad\u10ae\u10af\u10b0\u10b1\u10b2\u10b3\u10b4\u10b5\u10b6\u10b7\u10b8\u10b9\u10ba\u10bb\u10bc\u10bd\u10be\u10bf\u10c0\u10c1\u10c2\u10c3\u10c4\u10c5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1f08\u1f09\u1f0a\u1f0b\u1f0c\u1f0d\u1f0e\u1f0f\u1f18\u1f19\u1f1a\u1f1b\u1f1c\u1f1d\u1f28\u1f29\u1f2a\u1f2b\u1f2c\u1f2d\u1f2e\u1f2f\u1f38\u1f39\u1f3a\u1f3b\u1f3c\u1f3d\u1f3e\u1f3f\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68\u1f69\u1f6a\u1f6b\u1f6c\u1f6d\u1f6e\u1f6f\u1fb8\u1fb9\u1fba\u1fbb\u1fc8\u1fc9\u1fca\u1fcb\u1fd8\u1fd9\u1fda\u1fdb\u1fe8\u1fe9\u1fea\u1feb\u1fec\u1ff8\u1ff9\u1ffa\u1ffb\u2102\u2107\u210b\u210c\u210d\u2110\u2111\u2112\u2115\u2119\u211a\u211b\u211c\u211d\u2124\u2126\u2128\u212a\u212b\u212c\u212d\u2130\u2131\u2133\u213e\u213f\u2145\u2c00\u2c01\u2c02\u2c03\u2c04\u2c05\u2c06\u2c07\u2c08\u2c09\u2c0a\u2c0b\u2c0c\u2c0d\u2c0e\u2c0f\u2c10\u2c11\u2c12\u2c13\u2c14\u2c15\u2c16\u2c17\u2c18\u2c19\u2c1a\u2c1b\u2c1c\u2c1d\u2c1e\u2c1f\u2c20\u2c21\u2c22\u2c23\u2c24\u2c25\u2c26\u2c27\u2c28\u2c29\u2c2a\u2c2b\u2c2c\u2c2d\u2c2e\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\uff21\uff22\uff23\uff24\uff25\uff26\uff27\uff28\uff29\uff2a\uff2b\uff2c\uff2d\uff2e\uff2f\uff30\uff31\uff32\uff33\uff34\uff35\uff36\uff37\uff38\uff39\uff3a' + +Mc = u'\u0903\u093e\u093f\u0940\u0949\u094a\u094b\u094c\u0982\u0983\u09be\u09bf\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e\u0a3f\u0a40\u0a83\u0abe\u0abf\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6\u0bc7\u0bc8\u0bca\u0bcb\u0bcc\u0bd7\u0c01\u0c02\u0c03\u0c41\u0c42\u0c43\u0c44\u0c82\u0c83\u0cbe\u0cc0\u0cc1\u0cc2\u0cc3\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e\u0d3f\u0d40\u0d46\u0d47\u0d48\u0d4a\u0d4b\u0d4c\u0d57\u0d82\u0d83\u0dcf\u0dd0\u0dd1\u0dd8\u0dd9\u0dda\u0ddb\u0ddc\u0ddd\u0dde\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102c\u1031\u1038\u1056\u1057\u17b6\u17be\u17bf\u17c0\u17c1\u17c2\u17c3\u17c4\u17c5\u17c7\u17c8\u1923\u1924\u1925\u1926\u1929\u192a\u192b\u1930\u1931\u1933\u1934\u1935\u1936\u1937\u1938\u19b0\u19b1\u19b2\u19b3\u19b4\u19b5\u19b6\u19b7\u19b8\u19b9\u19ba\u19bb\u19bc\u19bd\u19be\u19bf\u19c0\u19c8\u19c9\u1a19\u1a1a\u1a1b\ua802\ua823\ua824\ua827' + +Me = u'\u0488\u0489\u06de\u20dd\u20de\u20df\u20e0\u20e2\u20e3\u20e4' + +Mn = u'\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030a\u030b\u030c\u030d\u030e\u030f\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031a\u031b\u031c\u031d\u031e\u031f\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032a\u032b\u032c\u032d\u032e\u032f\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033a\u033b\u033c\u033d\u033e\u033f\u0340\u0341\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349\u034a\u034b\u034c\u034d\u034e\u034f\u0350\u0351\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359\u035a\u035b\u035c\u035d\u035e\u035f\u0360\u0361\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036a\u036b\u036c\u036d\u036e\u036f\u0483\u0484\u0485\u0486\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059a\u059b\u059c\u059d\u059e\u059f\u05a0\u05a1\u05a2\u05a3\u05a4\u05a5\u05a6\u05a7\u05a8\u05a9\u05aa\u05ab\u05ac\u05ad\u05ae\u05af\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05b9\u05bb\u05bc\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610\u0611\u0612\u0613\u0614\u0615\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659\u065a\u065b\u065c\u065d\u065e\u0670\u06d6\u06d7\u06d8\u06d9\u06da\u06db\u06dc\u06df\u06e0\u06e1\u06e2\u06e3\u06e4\u06e7\u06e8\u06ea\u06eb\u06ec\u06ed\u0711\u0730\u0731\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739\u073a\u073b\u073c\u073d\u073e\u073f\u0740\u0741\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749\u074a\u07a6\u07a7\u07a8\u07a9\u07aa\u07ab\u07ac\u07ad\u07ae\u07af\u07b0\u0901\u0902\u093c\u0941\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u094d\u0951\u0952\u0953\u0954\u0962\u0963\u0981\u09bc\u09c1\u09c2\u09c3\u09c4\u09cd\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a4d\u0a70\u0a71\u0a81\u0a82\u0abc\u0ac1\u0ac2\u0ac3\u0ac4\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3f\u0b41\u0b42\u0b43\u0b4d\u0b56\u0b82\u0bc0\u0bcd\u0c3e\u0c3f\u0c40\u0c46\u0c47\u0c48\u0c4a\u0c4b\u0c4c\u0c4d\u0c55\u0c56\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0d41\u0d42\u0d43\u0d4d\u0dca\u0dd2\u0dd3\u0dd4\u0dd6\u0e31\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0eb1\u0eb4\u0eb5\u0eb6\u0eb7\u0eb8\u0eb9\u0ebb\u0ebc\u0ec8\u0ec9\u0eca\u0ecb\u0ecc\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71\u0f72\u0f73\u0f74\u0f75\u0f76\u0f77\u0f78\u0f79\u0f7a\u0f7b\u0f7c\u0f7d\u0f7e\u0f80\u0f81\u0f82\u0f83\u0f84\u0f86\u0f87\u0f90\u0f91\u0f92\u0f93\u0f94\u0f95\u0f96\u0f97\u0f99\u0f9a\u0f9b\u0f9c\u0f9d\u0f9e\u0f9f\u0fa0\u0fa1\u0fa2\u0fa3\u0fa4\u0fa5\u0fa6\u0fa7\u0fa8\u0fa9\u0faa\u0fab\u0fac\u0fad\u0fae\u0faf\u0fb0\u0fb1\u0fb2\u0fb3\u0fb4\u0fb5\u0fb6\u0fb7\u0fb8\u0fb9\u0fba\u0fbb\u0fbc\u0fc6\u102d\u102e\u102f\u1030\u1032\u1036\u1037\u1039\u1058\u1059\u135f\u1712\u1713\u1714\u1732\u1733\u1734\u1752\u1753\u1772\u1773\u17b7\u17b8\u17b9\u17ba\u17bb\u17bc\u17bd\u17c6\u17c9\u17ca\u17cb\u17cc\u17cd\u17ce\u17cf\u17d0\u17d1\u17d2\u17d3\u17dd\u180b\u180c\u180d\u18a9\u1920\u1921\u1922\u1927\u1928\u1932\u1939\u193a\u193b\u1a17\u1a18\u1dc0\u1dc1\u1dc2\u1dc3\u20d0\u20d1\u20d2\u20d3\u20d4\u20d5\u20d6\u20d7\u20d8\u20d9\u20da\u20db\u20dc\u20e1\u20e5\u20e6\u20e7\u20e8\u20e9\u20ea\u20eb\u302a\u302b\u302c\u302d\u302e\u302f\u3099\u309a\ua806\ua80b\ua825\ua826\ufb1e\ufe00\ufe01\ufe02\ufe03\ufe04\ufe05\ufe06\ufe07\ufe08\ufe09\ufe0a\ufe0b\ufe0c\ufe0d\ufe0e\ufe0f\ufe20\ufe21\ufe22\ufe23' + +Nd = u'0123456789\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u0a66\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f\u0be6\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0c66\u0c67\u0c68\u0c69\u0c6a\u0c6b\u0c6c\u0c6d\u0c6e\u0c6f\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0d66\u0d67\u0d68\u0d69\u0d6a\u0d6b\u0d6c\u0d6d\u0d6e\u0d6f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u17e0\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u1810\u1811\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819\u1946\u1947\u1948\u1949\u194a\u194b\u194c\u194d\u194e\u194f\u19d0\u19d1\u19d2\u19d3\u19d4\u19d5\u19d6\u19d7\u19d8\u19d9\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19' + +Nl = u'\u16ee\u16ef\u16f0\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216a\u216b\u216c\u216d\u216e\u216f\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217a\u217b\u217c\u217d\u217e\u217f\u2180\u2181\u2182\u2183\u3007\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u3038\u3039\u303a' + +No = u'\xb2\xb3\xb9\xbc\xbd\xbe\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u0bf0\u0bf1\u0bf2\u0f2a\u0f2b\u0f2c\u0f2d\u0f2e\u0f2f\u0f30\u0f31\u0f32\u0f33\u1369\u136a\u136b\u136c\u136d\u136e\u136f\u1370\u1371\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379\u137a\u137b\u137c\u17f0\u17f1\u17f2\u17f3\u17f4\u17f5\u17f6\u17f7\u17f8\u17f9\u2070\u2074\u2075\u2076\u2077\u2078\u2079\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2153\u2154\u2155\u2156\u2157\u2158\u2159\u215a\u215b\u215c\u215d\u215e\u215f\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246a\u246b\u246c\u246d\u246e\u246f\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477\u2478\u2479\u247a\u247b\u247c\u247d\u247e\u247f\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2488\u2489\u248a\u248b\u248c\u248d\u248e\u248f\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249a\u249b\u24ea\u24eb\u24ec\u24ed\u24ee\u24ef\u24f0\u24f1\u24f2\u24f3\u24f4\u24f5\u24f6\u24f7\u24f8\u24f9\u24fa\u24fb\u24fc\u24fd\u24fe\u24ff\u2776\u2777\u2778\u2779\u277a\u277b\u277c\u277d\u277e\u277f\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787\u2788\u2789\u278a\u278b\u278c\u278d\u278e\u278f\u2790\u2791\u2792\u2793\u2cfd\u3192\u3193\u3194\u3195\u3220\u3221\u3222\u3223\u3224\u3225\u3226\u3227\u3228\u3229\u3251\u3252\u3253\u3254\u3255\u3256\u3257\u3258\u3259\u325a\u325b\u325c\u325d\u325e\u325f\u3280\u3281\u3282\u3283\u3284\u3285\u3286\u3287\u3288\u3289\u32b1\u32b2\u32b3\u32b4\u32b5\u32b6\u32b7\u32b8\u32b9\u32ba\u32bb\u32bc\u32bd\u32be\u32bf' + +Pc = u'_\u203f\u2040\u2054\ufe33\ufe34\ufe4d\ufe4e\ufe4f\uff3f' + +Pd = u'-\u058a\u1806\u2010\u2011\u2012\u2013\u2014\u2015\u2e17\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d' + +Pe = u')]}\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u232a\u23b5\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3f\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63' + +Pf = u'\xbb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d' + +Pi = u'\xab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c' + +Po = u'!"#%&\'*,./:;?@\\\xa1\xb7\xbf\u037e\u0387\u055a\u055b\u055c\u055d\u055e\u055f\u0589\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u060c\u060d\u061b\u061e\u061f\u066a\u066b\u066c\u066d\u06d4\u0700\u0701\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709\u070a\u070b\u070c\u070d\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04\u0f05\u0f06\u0f07\u0f08\u0f09\u0f0a\u0f0b\u0f0c\u0f0d\u0f0e\u0f0f\u0f10\u0f11\u0f12\u0f85\u0fd0\u0fd1\u104a\u104b\u104c\u104d\u104e\u104f\u10fb\u1361\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u166d\u166e\u16eb\u16ec\u16ed\u1735\u1736\u17d4\u17d5\u17d6\u17d8\u17d9\u17da\u1800\u1801\u1802\u1803\u1804\u1805\u1807\u1808\u1809\u180a\u1944\u1945\u19de\u19df\u1a1e\u1a1f\u2016\u2017\u2020\u2021\u2022\u2023\u2024\u2025\u2026\u2027\u2030\u2031\u2032\u2033\u2034\u2035\u2036\u2037\u2038\u203b\u203c\u203d\u203e\u2041\u2042\u2043\u2047\u2048\u2049\u204a\u204b\u204c\u204d\u204e\u204f\u2050\u2051\u2053\u2055\u2056\u2057\u2058\u2059\u205a\u205b\u205c\u205d\u205e\u23b6\u2cf9\u2cfa\u2cfb\u2cfc\u2cfe\u2cff\u2e00\u2e01\u2e06\u2e07\u2e08\u2e0b\u2e0e\u2e0f\u2e10\u2e11\u2e12\u2e13\u2e14\u2e15\u2e16\u3001\u3002\u3003\u303d\u30fb\ufe10\ufe11\ufe12\ufe13\ufe14\ufe15\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49\ufe4a\ufe4b\ufe4c\ufe50\ufe51\ufe52\ufe54\ufe55\ufe56\ufe57\ufe5f\ufe60\ufe61\ufe68\ufe6a\ufe6b\uff01\uff02\uff03\uff05\uff06\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65' + +Ps = u'([{\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2329\u23b4\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3e\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62' + +Sc = u'$\xa2\xa3\xa4\xa5\u060b\u09f2\u09f3\u0af1\u0bf9\u0e3f\u17db\u20a0\u20a1\u20a2\u20a3\u20a4\u20a5\u20a6\u20a7\u20a8\u20a9\u20aa\u20ab\u20ac\u20ad\u20ae\u20af\u20b0\u20b1\u20b2\u20b3\u20b4\u20b5\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6' + +Sk = u'^`\xa8\xaf\xb4\xb8\u02c2\u02c3\u02c4\u02c5\u02d2\u02d3\u02d4\u02d5\u02d6\u02d7\u02d8\u02d9\u02da\u02db\u02dc\u02dd\u02de\u02df\u02e5\u02e6\u02e7\u02e8\u02e9\u02ea\u02eb\u02ec\u02ed\u02ef\u02f0\u02f1\u02f2\u02f3\u02f4\u02f5\u02f6\u02f7\u02f8\u02f9\u02fa\u02fb\u02fc\u02fd\u02fe\u02ff\u0374\u0375\u0384\u0385\u1fbd\u1fbf\u1fc0\u1fc1\u1fcd\u1fce\u1fcf\u1fdd\u1fde\u1fdf\u1fed\u1fee\u1fef\u1ffd\u1ffe\u309b\u309c\ua700\ua701\ua702\ua703\ua704\ua705\ua706\ua707\ua708\ua709\ua70a\ua70b\ua70c\ua70d\ua70e\ua70f\ua710\ua711\ua712\ua713\ua714\ua715\ua716\uff3e\uff40\uffe3' + +Sm = u'+<=>|~\xac\xb1\xd7\xf7\u03f6\u2044\u2052\u207a\u207b\u207c\u208a\u208b\u208c\u2140\u2141\u2142\u2143\u2144\u214b\u2190\u2191\u2192\u2193\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4\u21f5\u21f6\u21f7\u21f8\u21f9\u21fa\u21fb\u21fc\u21fd\u21fe\u21ff\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207\u2208\u2209\u220a\u220b\u220c\u220d\u220e\u220f\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217\u2218\u2219\u221a\u221b\u221c\u221d\u221e\u221f\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227\u2228\u2229\u222a\u222b\u222c\u222d\u222e\u222f\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237\u2238\u2239\u223a\u223b\u223c\u223d\u223e\u223f\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247\u2248\u2249\u224a\u224b\u224c\u224d\u224e\u224f\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257\u2258\u2259\u225a\u225b\u225c\u225d\u225e\u225f\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267\u2268\u2269\u226a\u226b\u226c\u226d\u226e\u226f\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277\u2278\u2279\u227a\u227b\u227c\u227d\u227e\u227f\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287\u2288\u2289\u228a\u228b\u228c\u228d\u228e\u228f\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297\u2298\u2299\u229a\u229b\u229c\u229d\u229e\u229f\u22a0\u22a1\u22a2\u22a3\u22a4\u22a5\u22a6\u22a7\u22a8\u22a9\u22aa\u22ab\u22ac\u22ad\u22ae\u22af\u22b0\u22b1\u22b2\u22b3\u22b4\u22b5\u22b6\u22b7\u22b8\u22b9\u22ba\u22bb\u22bc\u22bd\u22be\u22bf\u22c0\u22c1\u22c2\u22c3\u22c4\u22c5\u22c6\u22c7\u22c8\u22c9\u22ca\u22cb\u22cc\u22cd\u22ce\u22cf\u22d0\u22d1\u22d2\u22d3\u22d4\u22d5\u22d6\u22d7\u22d8\u22d9\u22da\u22db\u22dc\u22dd\u22de\u22df\u22e0\u22e1\u22e2\u22e3\u22e4\u22e5\u22e6\u22e7\u22e8\u22e9\u22ea\u22eb\u22ec\u22ed\u22ee\u22ef\u22f0\u22f1\u22f2\u22f3\u22f4\u22f5\u22f6\u22f7\u22f8\u22f9\u22fa\u22fb\u22fc\u22fd\u22fe\u22ff\u2308\u2309\u230a\u230b\u2320\u2321\u237c\u239b\u239c\u239d\u239e\u239f\u23a0\u23a1\u23a2\u23a3\u23a4\u23a5\u23a6\u23a7\u23a8\u23a9\u23aa\u23ab\u23ac\u23ad\u23ae\u23af\u23b0\u23b1\u23b2\u23b3\u25b7\u25c1\u25f8\u25f9\u25fa\u25fb\u25fc\u25fd\u25fe\u25ff\u266f\u27c0\u27c1\u27c2\u27c3\u27c4\u27d0\u27d1\u27d2\u27d3\u27d4\u27d5\u27d6\u27d7\u27d8\u27d9\u27da\u27db\u27dc\u27dd\u27de\u27df\u27e0\u27e1\u27e2\u27e3\u27e4\u27e5\u27f0\u27f1\u27f2\u27f3\u27f4\u27f5\u27f6\u27f7\u27f8\u27f9\u27fa\u27fb\u27fc\u27fd\u27fe\u27ff\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907\u2908\u2909\u290a\u290b\u290c\u290d\u290e\u290f\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917\u2918\u2919\u291a\u291b\u291c\u291d\u291e\u291f\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927\u2928\u2929\u292a\u292b\u292c\u292d\u292e\u292f\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937\u2938\u2939\u293a\u293b\u293c\u293d\u293e\u293f\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947\u2948\u2949\u294a\u294b\u294c\u294d\u294e\u294f\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957\u2958\u2959\u295a\u295b\u295c\u295d\u295e\u295f\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967\u2968\u2969\u296a\u296b\u296c\u296d\u296e\u296f\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977\u2978\u2979\u297a\u297b\u297c\u297d\u297e\u297f\u2980\u2981\u2982\u2999\u299a\u299b\u299c\u299d\u299e\u299f\u29a0\u29a1\u29a2\u29a3\u29a4\u29a5\u29a6\u29a7\u29a8\u29a9\u29aa\u29ab\u29ac\u29ad\u29ae\u29af\u29b0\u29b1\u29b2\u29b3\u29b4\u29b5\u29b6\u29b7\u29b8\u29b9\u29ba\u29bb\u29bc\u29bd\u29be\u29bf\u29c0\u29c1\u29c2\u29c3\u29c4\u29c5\u29c6\u29c7\u29c8\u29c9\u29ca\u29cb\u29cc\u29cd\u29ce\u29cf\u29d0\u29d1\u29d2\u29d3\u29d4\u29d5\u29d6\u29d7\u29dc\u29dd\u29de\u29df\u29e0\u29e1\u29e2\u29e3\u29e4\u29e5\u29e6\u29e7\u29e8\u29e9\u29ea\u29eb\u29ec\u29ed\u29ee\u29ef\u29f0\u29f1\u29f2\u29f3\u29f4\u29f5\u29f6\u29f7\u29f8\u29f9\u29fa\u29fb\u29fe\u29ff\u2a00\u2a01\u2a02\u2a03\u2a04\u2a05\u2a06\u2a07\u2a08\u2a09\u2a0a\u2a0b\u2a0c\u2a0d\u2a0e\u2a0f\u2a10\u2a11\u2a12\u2a13\u2a14\u2a15\u2a16\u2a17\u2a18\u2a19\u2a1a\u2a1b\u2a1c\u2a1d\u2a1e\u2a1f\u2a20\u2a21\u2a22\u2a23\u2a24\u2a25\u2a26\u2a27\u2a28\u2a29\u2a2a\u2a2b\u2a2c\u2a2d\u2a2e\u2a2f\u2a30\u2a31\u2a32\u2a33\u2a34\u2a35\u2a36\u2a37\u2a38\u2a39\u2a3a\u2a3b\u2a3c\u2a3d\u2a3e\u2a3f\u2a40\u2a41\u2a42\u2a43\u2a44\u2a45\u2a46\u2a47\u2a48\u2a49\u2a4a\u2a4b\u2a4c\u2a4d\u2a4e\u2a4f\u2a50\u2a51\u2a52\u2a53\u2a54\u2a55\u2a56\u2a57\u2a58\u2a59\u2a5a\u2a5b\u2a5c\u2a5d\u2a5e\u2a5f\u2a60\u2a61\u2a62\u2a63\u2a64\u2a65\u2a66\u2a67\u2a68\u2a69\u2a6a\u2a6b\u2a6c\u2a6d\u2a6e\u2a6f\u2a70\u2a71\u2a72\u2a73\u2a74\u2a75\u2a76\u2a77\u2a78\u2a79\u2a7a\u2a7b\u2a7c\u2a7d\u2a7e\u2a7f\u2a80\u2a81\u2a82\u2a83\u2a84\u2a85\u2a86\u2a87\u2a88\u2a89\u2a8a\u2a8b\u2a8c\u2a8d\u2a8e\u2a8f\u2a90\u2a91\u2a92\u2a93\u2a94\u2a95\u2a96\u2a97\u2a98\u2a99\u2a9a\u2a9b\u2a9c\u2a9d\u2a9e\u2a9f\u2aa0\u2aa1\u2aa2\u2aa3\u2aa4\u2aa5\u2aa6\u2aa7\u2aa8\u2aa9\u2aaa\u2aab\u2aac\u2aad\u2aae\u2aaf\u2ab0\u2ab1\u2ab2\u2ab3\u2ab4\u2ab5\u2ab6\u2ab7\u2ab8\u2ab9\u2aba\u2abb\u2abc\u2abd\u2abe\u2abf\u2ac0\u2ac1\u2ac2\u2ac3\u2ac4\u2ac5\u2ac6\u2ac7\u2ac8\u2ac9\u2aca\u2acb\u2acc\u2acd\u2ace\u2acf\u2ad0\u2ad1\u2ad2\u2ad3\u2ad4\u2ad5\u2ad6\u2ad7\u2ad8\u2ad9\u2ada\u2adb\u2adc\u2add\u2ade\u2adf\u2ae0\u2ae1\u2ae2\u2ae3\u2ae4\u2ae5\u2ae6\u2ae7\u2ae8\u2ae9\u2aea\u2aeb\u2aec\u2aed\u2aee\u2aef\u2af0\u2af1\u2af2\u2af3\u2af4\u2af5\u2af6\u2af7\u2af8\u2af9\u2afa\u2afb\u2afc\u2afd\u2afe\u2aff\ufb29\ufe62\ufe64\ufe65\ufe66\uff0b\uff1c\uff1d\uff1e\uff5c\uff5e\uffe2\uffe9\uffea\uffeb\uffec' + +So = u'\xa6\xa7\xa9\xae\xb0\xb6\u0482\u060e\u060f\u06e9\u06fd\u06fe\u09fa\u0b70\u0bf3\u0bf4\u0bf5\u0bf6\u0bf7\u0bf8\u0bfa\u0f01\u0f02\u0f03\u0f13\u0f14\u0f15\u0f16\u0f17\u0f1a\u0f1b\u0f1c\u0f1d\u0f1e\u0f1f\u0f34\u0f36\u0f38\u0fbe\u0fbf\u0fc0\u0fc1\u0fc2\u0fc3\u0fc4\u0fc5\u0fc7\u0fc8\u0fc9\u0fca\u0fcb\u0fcc\u0fcf\u1360\u1390\u1391\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399\u1940\u19e0\u19e1\u19e2\u19e3\u19e4\u19e5\u19e6\u19e7\u19e8\u19e9\u19ea\u19eb\u19ec\u19ed\u19ee\u19ef\u19f0\u19f1\u19f2\u19f3\u19f4\u19f5\u19f6\u19f7\u19f8\u19f9\u19fa\u19fb\u19fc\u19fd\u19fe\u19ff\u2100\u2101\u2103\u2104\u2105\u2106\u2108\u2109\u2114\u2116\u2117\u2118\u211e\u211f\u2120\u2121\u2122\u2123\u2125\u2127\u2129\u212e\u2132\u213a\u213b\u214a\u214c\u2195\u2196\u2197\u2198\u2199\u219c\u219d\u219e\u219f\u21a1\u21a2\u21a4\u21a5\u21a7\u21a8\u21a9\u21aa\u21ab\u21ac\u21ad\u21af\u21b0\u21b1\u21b2\u21b3\u21b4\u21b5\u21b6\u21b7\u21b8\u21b9\u21ba\u21bb\u21bc\u21bd\u21be\u21bf\u21c0\u21c1\u21c2\u21c3\u21c4\u21c5\u21c6\u21c7\u21c8\u21c9\u21ca\u21cb\u21cc\u21cd\u21d0\u21d1\u21d3\u21d5\u21d6\u21d7\u21d8\u21d9\u21da\u21db\u21dc\u21dd\u21de\u21df\u21e0\u21e1\u21e2\u21e3\u21e4\u21e5\u21e6\u21e7\u21e8\u21e9\u21ea\u21eb\u21ec\u21ed\u21ee\u21ef\u21f0\u21f1\u21f2\u21f3\u2300\u2301\u2302\u2303\u2304\u2305\u2306\u2307\u230c\u230d\u230e\u230f\u2310\u2311\u2312\u2313\u2314\u2315\u2316\u2317\u2318\u2319\u231a\u231b\u231c\u231d\u231e\u231f\u2322\u2323\u2324\u2325\u2326\u2327\u2328\u232b\u232c\u232d\u232e\u232f\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337\u2338\u2339\u233a\u233b\u233c\u233d\u233e\u233f\u2340\u2341\u2342\u2343\u2344\u2345\u2346\u2347\u2348\u2349\u234a\u234b\u234c\u234d\u234e\u234f\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357\u2358\u2359\u235a\u235b\u235c\u235d\u235e\u235f\u2360\u2361\u2362\u2363\u2364\u2365\u2366\u2367\u2368\u2369\u236a\u236b\u236c\u236d\u236e\u236f\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377\u2378\u2379\u237a\u237b\u237d\u237e\u237f\u2380\u2381\u2382\u2383\u2384\u2385\u2386\u2387\u2388\u2389\u238a\u238b\u238c\u238d\u238e\u238f\u2390\u2391\u2392\u2393\u2394\u2395\u2396\u2397\u2398\u2399\u239a\u23b7\u23b8\u23b9\u23ba\u23bb\u23bc\u23bd\u23be\u23bf\u23c0\u23c1\u23c2\u23c3\u23c4\u23c5\u23c6\u23c7\u23c8\u23c9\u23ca\u23cb\u23cc\u23cd\u23ce\u23cf\u23d0\u23d1\u23d2\u23d3\u23d4\u23d5\u23d6\u23d7\u23d8\u23d9\u23da\u23db\u2400\u2401\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409\u240a\u240b\u240c\u240d\u240e\u240f\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419\u241a\u241b\u241c\u241d\u241e\u241f\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244a\u249c\u249d\u249e\u249f\u24a0\u24a1\u24a2\u24a3\u24a4\u24a5\u24a6\u24a7\u24a8\u24a9\u24aa\u24ab\u24ac\u24ad\u24ae\u24af\u24b0\u24b1\u24b2\u24b3\u24b4\u24b5\u24b6\u24b7\u24b8\u24b9\u24ba\u24bb\u24bc\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c5\u24c6\u24c7\u24c8\u24c9\u24ca\u24cb\u24cc\u24cd\u24ce\u24cf\u24d0\u24d1\u24d2\u24d3\u24d4\u24d5\u24d6\u24d7\u24d8\u24d9\u24da\u24db\u24dc\u24dd\u24de\u24df\u24e0\u24e1\u24e2\u24e3\u24e4\u24e5\u24e6\u24e7\u24e8\u24e9\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507\u2508\u2509\u250a\u250b\u250c\u250d\u250e\u250f\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517\u2518\u2519\u251a\u251b\u251c\u251d\u251e\u251f\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527\u2528\u2529\u252a\u252b\u252c\u252d\u252e\u252f\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537\u2538\u2539\u253a\u253b\u253c\u253d\u253e\u253f\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547\u2548\u2549\u254a\u254b\u254c\u254d\u254e\u254f\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255a\u255b\u255c\u255d\u255e\u255f\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256a\u256b\u256c\u256d\u256e\u256f\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577\u2578\u2579\u257a\u257b\u257c\u257d\u257e\u257f\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u2589\u258a\u258b\u258c\u258d\u258e\u258f\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597\u2598\u2599\u259a\u259b\u259c\u259d\u259e\u259f\u25a0\u25a1\u25a2\u25a3\u25a4\u25a5\u25a6\u25a7\u25a8\u25a9\u25aa\u25ab\u25ac\u25ad\u25ae\u25af\u25b0\u25b1\u25b2\u25b3\u25b4\u25b5\u25b6\u25b8\u25b9\u25ba\u25bb\u25bc\u25bd\u25be\u25bf\u25c0\u25c2\u25c3\u25c4\u25c5\u25c6\u25c7\u25c8\u25c9\u25ca\u25cb\u25cc\u25cd\u25ce\u25cf\u25d0\u25d1\u25d2\u25d3\u25d4\u25d5\u25d6\u25d7\u25d8\u25d9\u25da\u25db\u25dc\u25dd\u25de\u25df\u25e0\u25e1\u25e2\u25e3\u25e4\u25e5\u25e6\u25e7\u25e8\u25e9\u25ea\u25eb\u25ec\u25ed\u25ee\u25ef\u25f0\u25f1\u25f2\u25f3\u25f4\u25f5\u25f6\u25f7\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607\u2608\u2609\u260a\u260b\u260c\u260d\u260e\u260f\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617\u2618\u2619\u261a\u261b\u261c\u261d\u261e\u261f\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627\u2628\u2629\u262a\u262b\u262c\u262d\u262e\u262f\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637\u2638\u2639\u263a\u263b\u263c\u263d\u263e\u263f\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647\u2648\u2649\u264a\u264b\u264c\u264d\u264e\u264f\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657\u2658\u2659\u265a\u265b\u265c\u265d\u265e\u265f\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667\u2668\u2669\u266a\u266b\u266c\u266d\u266e\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677\u2678\u2679\u267a\u267b\u267c\u267d\u267e\u267f\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687\u2688\u2689\u268a\u268b\u268c\u268d\u268e\u268f\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697\u2698\u2699\u269a\u269b\u269c\u26a0\u26a1\u26a2\u26a3\u26a4\u26a5\u26a6\u26a7\u26a8\u26a9\u26aa\u26ab\u26ac\u26ad\u26ae\u26af\u26b0\u26b1\u2701\u2702\u2703\u2704\u2706\u2707\u2708\u2709\u270c\u270d\u270e\u270f\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717\u2718\u2719\u271a\u271b\u271c\u271d\u271e\u271f\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727\u2729\u272a\u272b\u272c\u272d\u272e\u272f\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739\u273a\u273b\u273c\u273d\u273e\u273f\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747\u2748\u2749\u274a\u274b\u274d\u274f\u2750\u2751\u2752\u2756\u2758\u2759\u275a\u275b\u275c\u275d\u275e\u2761\u2762\u2763\u2764\u2765\u2766\u2767\u2794\u2798\u2799\u279a\u279b\u279c\u279d\u279e\u279f\u27a0\u27a1\u27a2\u27a3\u27a4\u27a5\u27a6\u27a7\u27a8\u27a9\u27aa\u27ab\u27ac\u27ad\u27ae\u27af\u27b1\u27b2\u27b3\u27b4\u27b5\u27b6\u27b7\u27b8\u27b9\u27ba\u27bb\u27bc\u27bd\u27be\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u280d\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819\u281a\u281b\u281c\u281d\u281e\u281f\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859\u285a\u285b\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286d\u286e\u286f\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u28d1\u28d2\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28da\u28db\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28ea\u28eb\u28ec\u28ed\u28ee\u28ef\u28f0\u28f1\u28f2\u28f3\u28f4\u28f5\u28f6\u28f7\u28f8\u28f9\u28fa\u28fb\u28fc\u28fd\u28fe\u28ff\u2b00\u2b01\u2b02\u2b03\u2b04\u2b05\u2b06\u2b07\u2b08\u2b09\u2b0a\u2b0b\u2b0c\u2b0d\u2b0e\u2b0f\u2b10\u2b11\u2b12\u2b13\u2ce5\u2ce6\u2ce7\u2ce8\u2ce9\u2cea\u2e80\u2e81\u2e82\u2e83\u2e84\u2e85\u2e86\u2e87\u2e88\u2e89\u2e8a\u2e8b\u2e8c\u2e8d\u2e8e\u2e8f\u2e90\u2e91\u2e92\u2e93\u2e94\u2e95\u2e96\u2e97\u2e98\u2e99\u2e9b\u2e9c\u2e9d\u2e9e\u2e9f\u2ea0\u2ea1\u2ea2\u2ea3\u2ea4\u2ea5\u2ea6\u2ea7\u2ea8\u2ea9\u2eaa\u2eab\u2eac\u2ead\u2eae\u2eaf\u2eb0\u2eb1\u2eb2\u2eb3\u2eb4\u2eb5\u2eb6\u2eb7\u2eb8\u2eb9\u2eba\u2ebb\u2ebc\u2ebd\u2ebe\u2ebf\u2ec0\u2ec1\u2ec2\u2ec3\u2ec4\u2ec5\u2ec6\u2ec7\u2ec8\u2ec9\u2eca\u2ecb\u2ecc\u2ecd\u2ece\u2ecf\u2ed0\u2ed1\u2ed2\u2ed3\u2ed4\u2ed5\u2ed6\u2ed7\u2ed8\u2ed9\u2eda\u2edb\u2edc\u2edd\u2ede\u2edf\u2ee0\u2ee1\u2ee2\u2ee3\u2ee4\u2ee5\u2ee6\u2ee7\u2ee8\u2ee9\u2eea\u2eeb\u2eec\u2eed\u2eee\u2eef\u2ef0\u2ef1\u2ef2\u2ef3\u2f00\u2f01\u2f02\u2f03\u2f04\u2f05\u2f06\u2f07\u2f08\u2f09\u2f0a\u2f0b\u2f0c\u2f0d\u2f0e\u2f0f\u2f10\u2f11\u2f12\u2f13\u2f14\u2f15\u2f16\u2f17\u2f18\u2f19\u2f1a\u2f1b\u2f1c\u2f1d\u2f1e\u2f1f\u2f20\u2f21\u2f22\u2f23\u2f24\u2f25\u2f26\u2f27\u2f28\u2f29\u2f2a\u2f2b\u2f2c\u2f2d\u2f2e\u2f2f\u2f30\u2f31\u2f32\u2f33\u2f34\u2f35\u2f36\u2f37\u2f38\u2f39\u2f3a\u2f3b\u2f3c\u2f3d\u2f3e\u2f3f\u2f40\u2f41\u2f42\u2f43\u2f44\u2f45\u2f46\u2f47\u2f48\u2f49\u2f4a\u2f4b\u2f4c\u2f4d\u2f4e\u2f4f\u2f50\u2f51\u2f52\u2f53\u2f54\u2f55\u2f56\u2f57\u2f58\u2f59\u2f5a\u2f5b\u2f5c\u2f5d\u2f5e\u2f5f\u2f60\u2f61\u2f62\u2f63\u2f64\u2f65\u2f66\u2f67\u2f68\u2f69\u2f6a\u2f6b\u2f6c\u2f6d\u2f6e\u2f6f\u2f70\u2f71\u2f72\u2f73\u2f74\u2f75\u2f76\u2f77\u2f78\u2f79\u2f7a\u2f7b\u2f7c\u2f7d\u2f7e\u2f7f\u2f80\u2f81\u2f82\u2f83\u2f84\u2f85\u2f86\u2f87\u2f88\u2f89\u2f8a\u2f8b\u2f8c\u2f8d\u2f8e\u2f8f\u2f90\u2f91\u2f92\u2f93\u2f94\u2f95\u2f96\u2f97\u2f98\u2f99\u2f9a\u2f9b\u2f9c\u2f9d\u2f9e\u2f9f\u2fa0\u2fa1\u2fa2\u2fa3\u2fa4\u2fa5\u2fa6\u2fa7\u2fa8\u2fa9\u2faa\u2fab\u2fac\u2fad\u2fae\u2faf\u2fb0\u2fb1\u2fb2\u2fb3\u2fb4\u2fb5\u2fb6\u2fb7\u2fb8\u2fb9\u2fba\u2fbb\u2fbc\u2fbd\u2fbe\u2fbf\u2fc0\u2fc1\u2fc2\u2fc3\u2fc4\u2fc5\u2fc6\u2fc7\u2fc8\u2fc9\u2fca\u2fcb\u2fcc\u2fcd\u2fce\u2fcf\u2fd0\u2fd1\u2fd2\u2fd3\u2fd4\u2fd5\u2ff0\u2ff1\u2ff2\u2ff3\u2ff4\u2ff5\u2ff6\u2ff7\u2ff8\u2ff9\u2ffa\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196\u3197\u3198\u3199\u319a\u319b\u319c\u319d\u319e\u319f\u31c0\u31c1\u31c2\u31c3\u31c4\u31c5\u31c6\u31c7\u31c8\u31c9\u31ca\u31cb\u31cc\u31cd\u31ce\u31cf\u3200\u3201\u3202\u3203\u3204\u3205\u3206\u3207\u3208\u3209\u320a\u320b\u320c\u320d\u320e\u320f\u3210\u3211\u3212\u3213\u3214\u3215\u3216\u3217\u3218\u3219\u321a\u321b\u321c\u321d\u321e\u322a\u322b\u322c\u322d\u322e\u322f\u3230\u3231\u3232\u3233\u3234\u3235\u3236\u3237\u3238\u3239\u323a\u323b\u323c\u323d\u323e\u323f\u3240\u3241\u3242\u3243\u3250\u3260\u3261\u3262\u3263\u3264\u3265\u3266\u3267\u3268\u3269\u326a\u326b\u326c\u326d\u326e\u326f\u3270\u3271\u3272\u3273\u3274\u3275\u3276\u3277\u3278\u3279\u327a\u327b\u327c\u327d\u327e\u327f\u328a\u328b\u328c\u328d\u328e\u328f\u3290\u3291\u3292\u3293\u3294\u3295\u3296\u3297\u3298\u3299\u329a\u329b\u329c\u329d\u329e\u329f\u32a0\u32a1\u32a2\u32a3\u32a4\u32a5\u32a6\u32a7\u32a8\u32a9\u32aa\u32ab\u32ac\u32ad\u32ae\u32af\u32b0\u32c0\u32c1\u32c2\u32c3\u32c4\u32c5\u32c6\u32c7\u32c8\u32c9\u32ca\u32cb\u32cc\u32cd\u32ce\u32cf\u32d0\u32d1\u32d2\u32d3\u32d4\u32d5\u32d6\u32d7\u32d8\u32d9\u32da\u32db\u32dc\u32dd\u32de\u32df\u32e0\u32e1\u32e2\u32e3\u32e4\u32e5\u32e6\u32e7\u32e8\u32e9\u32ea\u32eb\u32ec\u32ed\u32ee\u32ef\u32f0\u32f1\u32f2\u32f3\u32f4\u32f5\u32f6\u32f7\u32f8\u32f9\u32fa\u32fb\u32fc\u32fd\u32fe\u3300\u3301\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309\u330a\u330b\u330c\u330d\u330e\u330f\u3310\u3311\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319\u331a\u331b\u331c\u331d\u331e\u331f\u3320\u3321\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329\u332a\u332b\u332c\u332d\u332e\u332f\u3330\u3331\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339\u333a\u333b\u333c\u333d\u333e\u333f\u3340\u3341\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349\u334a\u334b\u334c\u334d\u334e\u334f\u3350\u3351\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359\u335a\u335b\u335c\u335d\u335e\u335f\u3360\u3361\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369\u336a\u336b\u336c\u336d\u336e\u336f\u3370\u3371\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379\u337a\u337b\u337c\u337d\u337e\u337f\u3380\u3381\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389\u338a\u338b\u338c\u338d\u338e\u338f\u3390\u3391\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399\u339a\u339b\u339c\u339d\u339e\u339f\u33a0\u33a1\u33a2\u33a3\u33a4\u33a5\u33a6\u33a7\u33a8\u33a9\u33aa\u33ab\u33ac\u33ad\u33ae\u33af\u33b0\u33b1\u33b2\u33b3\u33b4\u33b5\u33b6\u33b7\u33b8\u33b9\u33ba\u33bb\u33bc\u33bd\u33be\u33bf\u33c0\u33c1\u33c2\u33c3\u33c4\u33c5\u33c6\u33c7\u33c8\u33c9\u33ca\u33cb\u33cc\u33cd\u33ce\u33cf\u33d0\u33d1\u33d2\u33d3\u33d4\u33d5\u33d6\u33d7\u33d8\u33d9\u33da\u33db\u33dc\u33dd\u33de\u33df\u33e0\u33e1\u33e2\u33e3\u33e4\u33e5\u33e6\u33e7\u33e8\u33e9\u33ea\u33eb\u33ec\u33ed\u33ee\u33ef\u33f0\u33f1\u33f2\u33f3\u33f4\u33f5\u33f6\u33f7\u33f8\u33f9\u33fa\u33fb\u33fc\u33fd\u33fe\u33ff\u4dc0\u4dc1\u4dc2\u4dc3\u4dc4\u4dc5\u4dc6\u4dc7\u4dc8\u4dc9\u4dca\u4dcb\u4dcc\u4dcd\u4dce\u4dcf\u4dd0\u4dd1\u4dd2\u4dd3\u4dd4\u4dd5\u4dd6\u4dd7\u4dd8\u4dd9\u4dda\u4ddb\u4ddc\u4ddd\u4dde\u4ddf\u4de0\u4de1\u4de2\u4de3\u4de4\u4de5\u4de6\u4de7\u4de8\u4de9\u4dea\u4deb\u4dec\u4ded\u4dee\u4def\u4df0\u4df1\u4df2\u4df3\u4df4\u4df5\u4df6\u4df7\u4df8\u4df9\u4dfa\u4dfb\u4dfc\u4dfd\u4dfe\u4dff\ua490\ua491\ua492\ua493\ua494\ua495\ua496\ua497\ua498\ua499\ua49a\ua49b\ua49c\ua49d\ua49e\ua49f\ua4a0\ua4a1\ua4a2\ua4a3\ua4a4\ua4a5\ua4a6\ua4a7\ua4a8\ua4a9\ua4aa\ua4ab\ua4ac\ua4ad\ua4ae\ua4af\ua4b0\ua4b1\ua4b2\ua4b3\ua4b4\ua4b5\ua4b6\ua4b7\ua4b8\ua4b9\ua4ba\ua4bb\ua4bc\ua4bd\ua4be\ua4bf\ua4c0\ua4c1\ua4c2\ua4c3\ua4c4\ua4c5\ua4c6\ua828\ua829\ua82a\ua82b\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd' + +Zl = u'\u2028' + +Zp = u'\u2029' + +Zs = u' \xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000' + +cats = ['Cc', 'Cf', 'Cn', 'Co', 'Cs', 'Ll', 'Lm', 'Lo', 'Lt', 'Lu', 'Mc', 'Me', 'Mn', 'Nd', 'Nl', 'No', 'Pc', 'Pd', 'Pe', 'Pf', 'Pi', 'Po', 'Ps', 'Sc', 'Sk', 'Sm', 'So', 'Zl', 'Zp', 'Zs'] + +def combine(*args): + return u''.join([globals()[cat] for cat in args]) + +xid_start = u'\u0041-\u005A\u005F\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01BA\u01BB\u01BC-\u01BF\u01C0-\u01C3\u01C4-\u0241\u0250-\u02AF\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EE\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03F5\u03F7-\u0481\u048A-\u04CE\u04D0-\u04F9\u0500-\u050F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0640\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06E5-\u06E6\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u076D\u0780-\u07A5\u07B1\u0904-\u0939\u093D\u0950\u0958-\u0961\u097D\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60-\u0D61\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E40-\u0E45\u0E46\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6A\u0F88-\u0F8B\u1000-\u1021\u1023-\u1027\u1029-\u102A\u1050-\u1055\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1159\u115F-\u11A2\u11A8-\u11F9\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u1676\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1842\u1843\u1844-\u1877\u1880-\u18A8\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19A9\u19C1-\u19C7\u1A00-\u1A16\u1D00-\u1D2B\u1D2C-\u1D61\u1D62-\u1D77\u1D78\u1D79-\u1D9A\u1D9B-\u1DBF\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u2094\u2102\u2107\u210A-\u2113\u2115\u2118\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212E\u212F-\u2131\u2133-\u2134\u2135-\u2138\u2139\u213C-\u213F\u2145-\u2149\u2160-\u2183\u2C00-\u2C2E\u2C30-\u2C5E\u2C80-\u2CE4\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005\u3006\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303A\u303B\u303C\u3041-\u3096\u309D-\u309E\u309F\u30A1-\u30FA\u30FC-\u30FE\u30FF\u3105-\u312C\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FBB\uA000-\uA014\uA015\uA016-\uA48C\uA800-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFF6F\uFF70\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' + +xid_continue = u'\u0030-\u0039\u0041-\u005A\u005F\u0061-\u007A\u00AA\u00B5\u00B7\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u01BA\u01BB\u01BC-\u01BF\u01C0-\u01C3\u01C4-\u0241\u0250-\u02AF\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EE\u0300-\u036F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03F5\u03F7-\u0481\u0483-\u0486\u048A-\u04CE\u04D0-\u04F9\u0500-\u050F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05B9\u05BB-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u0615\u0621-\u063A\u0640\u0641-\u064A\u064B-\u065E\u0660-\u0669\u066E-\u066F\u0670\u0671-\u06D3\u06D5\u06D6-\u06DC\u06DF-\u06E4\u06E5-\u06E6\u06E7-\u06E8\u06EA-\u06ED\u06EE-\u06EF\u06F0-\u06F9\u06FA-\u06FC\u06FF\u0710\u0711\u0712-\u072F\u0730-\u074A\u074D-\u076D\u0780-\u07A5\u07A6-\u07B0\u07B1\u0901-\u0902\u0903\u0904-\u0939\u093C\u093D\u093E-\u0940\u0941-\u0948\u0949-\u094C\u094D\u0950\u0951-\u0954\u0958-\u0961\u0962-\u0963\u0966-\u096F\u097D\u0981\u0982-\u0983\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC\u09BD\u09BE-\u09C0\u09C1-\u09C4\u09C7-\u09C8\u09CB-\u09CC\u09CD\u09CE\u09D7\u09DC-\u09DD\u09DF-\u09E1\u09E2-\u09E3\u09E6-\u09EF\u09F0-\u09F1\u0A01-\u0A02\u0A03\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A3C\u0A3E-\u0A40\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A70-\u0A71\u0A72-\u0A74\u0A81-\u0A82\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABC\u0ABD\u0ABE-\u0AC0\u0AC1-\u0AC5\u0AC7-\u0AC8\u0AC9\u0ACB-\u0ACC\u0ACD\u0AD0\u0AE0-\u0AE1\u0AE2-\u0AE3\u0AE6-\u0AEF\u0B01\u0B02-\u0B03\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41-\u0B43\u0B47-\u0B48\u0B4B-\u0B4C\u0B4D\u0B56\u0B57\u0B5C-\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BBF\u0BC0\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BCD\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3E-\u0C40\u0C41-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C60-\u0C61\u0C66-\u0C6F\u0C82-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0-\u0CC4\u0CC6\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CCC-\u0CCD\u0CD5-\u0CD6\u0CDE\u0CE0-\u0CE1\u0CE6-\u0CEF\u0D02-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D3E-\u0D40\u0D41-\u0D43\u0D46-\u0D48\u0D4A-\u0D4C\u0D4D\u0D57\u0D60-\u0D61\u0D66-\u0D6F\u0D82-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD1\u0DD2-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2-\u0DF3\u0E01-\u0E30\u0E31\u0E32-\u0E33\u0E34-\u0E3A\u0E40-\u0E45\u0E46\u0E47-\u0E4E\u0E50-\u0E59\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB1\u0EB2-\u0EB3\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDD\u0F00\u0F18-\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F3F\u0F40-\u0F47\u0F49-\u0F6A\u0F71-\u0F7E\u0F7F\u0F80-\u0F84\u0F86-\u0F87\u0F88-\u0F8B\u0F90-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1021\u1023-\u1027\u1029-\u102A\u102C\u102D-\u1030\u1031\u1032\u1036-\u1037\u1038\u1039\u1040-\u1049\u1050-\u1055\u1056-\u1057\u1058-\u1059\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1159\u115F-\u11A2\u11A8-\u11F9\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u1676\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1712-\u1714\u1720-\u1731\u1732-\u1734\u1740-\u1751\u1752-\u1753\u1760-\u176C\u176E-\u1770\u1772-\u1773\u1780-\u17B3\u17B6\u17B7-\u17BD\u17BE-\u17C5\u17C6\u17C7-\u17C8\u17C9-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1842\u1843\u1844-\u1877\u1880-\u18A8\u18A9\u1900-\u191C\u1920-\u1922\u1923-\u1926\u1927-\u1928\u1929-\u192B\u1930-\u1931\u1932\u1933-\u1938\u1939-\u193B\u1946-\u194F\u1950-\u196D\u1970-\u1974\u1980-\u19A9\u19B0-\u19C0\u19C1-\u19C7\u19C8-\u19C9\u19D0-\u19D9\u1A00-\u1A16\u1A17-\u1A18\u1A19-\u1A1B\u1D00-\u1D2B\u1D2C-\u1D61\u1D62-\u1D77\u1D78\u1D79-\u1D9A\u1D9B-\u1DBF\u1DC0-\u1DC3\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F-\u2040\u2054\u2071\u207F\u2090-\u2094\u20D0-\u20DC\u20E1\u20E5-\u20EB\u2102\u2107\u210A-\u2113\u2115\u2118\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212E\u212F-\u2131\u2133-\u2134\u2135-\u2138\u2139\u213C-\u213F\u2145-\u2149\u2160-\u2183\u2C00-\u2C2E\u2C30-\u2C5E\u2C80-\u2CE4\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005\u3006\u3007\u3021-\u3029\u302A-\u302F\u3031-\u3035\u3038-\u303A\u303B\u303C\u3041-\u3096\u3099-\u309A\u309D-\u309E\u309F\u30A1-\u30FA\u30FC-\u30FE\u30FF\u3105-\u312C\u3131-\u318E\u31A0-\u31B7\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FBB\uA000-\uA014\uA015\uA016-\uA48C\uA800-\uA801\uA802\uA803-\uA805\uA806\uA807-\uA80A\uA80B\uA80C-\uA822\uA823-\uA824\uA825-\uA826\uA827\uAC00-\uD7A3\uF900-\uFA2D\uFA30-\uFA6A\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1E\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE00-\uFE0F\uFE20-\uFE23\uFE33-\uFE34\uFE4D-\uFE4F\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFF6F\uFF70\uFF71-\uFF9D\uFF9E-\uFF9F\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' + +def allexcept(*args): + newcats = cats[:] + for arg in args: + newcats.remove(arg) + return u''.join([globals()[cat] for cat in newcats]) + +if __name__ == '__main__': + import unicodedata + + categories = {} + + f = open(__file__.rstrip('co')) + try: + content = f.read() + finally: + f.close() + + header = content[:content.find('Cc =')] + footer = content[content.find("def combine("):] + + for code in range(65535): + c = unichr(code) + cat = unicodedata.category(c) + categories.setdefault(cat, []).append(c) + + f = open(__file__, 'w') + f.write(header) + + for cat in sorted(categories): + val = u''.join(categories[cat]) + if cat == 'Cs': + # Jython can't handle isolated surrogates + f.write("""\ +try: + Cs = eval(r"%r") +except UnicodeDecodeError: + Cs = '' # Jython can't handle isolated surrogates\n\n""" % val) + else: + f.write('%s = %r\n\n' % (cat, val)) + f.write('cats = %r\n\n' % sorted(categories.keys())) + + f.write(footer) + f.close() diff --git a/env/lib/python2.7/site-packages/jinja2/_stringdefs.pyc b/env/lib/python2.7/site-packages/jinja2/_stringdefs.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2c61b0f44298dde4957163be828c046d640ab57 GIT binary patch literal 208581 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�gkLG!_ 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 H?Unx<2Tc8{ literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jinja2/bccache.py b/env/lib/python2.7/site-packages/jinja2/bccache.py new file mode 100644 index 0000000..2d28ab8 --- /dev/null +++ b/env/lib/python2.7/site-packages/jinja2/bccache.py @@ -0,0 +1,344 @@ +# -*- coding: utf-8 -*- +""" + jinja2.bccache + ~~~~~~~~~~~~~~ + + This module implements the bytecode cache system Jinja is optionally + using. This is useful if you have very complex template situations and + the compiliation of all those templates slow down your application too + much. + + Situations where this is useful are often forking web applications that + are initialized on the first request. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD. +""" +from os import path, listdir +import os +import stat +import sys +import errno +import marshal +import tempfile +import fnmatch +from hashlib import sha1 +from jinja2.utils import open_if_exists +from jinja2._compat import BytesIO, pickle, PY2, text_type + + +# marshal works better on 3.x, one hack less required +if not PY2: + marshal_dump = marshal.dump + marshal_load = marshal.load +else: + + def marshal_dump(code, f): + if isinstance(f, file): + marshal.dump(code, f) + else: + f.write(marshal.dumps(code)) + + def marshal_load(f): + if isinstance(f, file): + return marshal.load(f) + return marshal.loads(f.read()) + + +bc_version = 2 + +# magic version used to only change with new jinja versions. With 2.6 +# we change this to also take Python version changes into account. The +# reason for this is that Python tends to segfault if fed earlier bytecode +# versions because someone thought it would be a good idea to reuse opcodes +# or make Python incompatible with earlier versions. +bc_magic = 'j2'.encode('ascii') + \ + pickle.dumps(bc_version, 2) + \ + pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1]) + + +class Bucket(object): + """Buckets are used to store the bytecode for one template. It's created + and initialized by the bytecode cache and passed to the loading functions. + + The buckets get an internal checksum from the cache assigned and use this + to automatically reject outdated cache material. Individual bytecode + cache subclasses don't have to care about cache invalidation. + """ + + def __init__(self, environment, key, checksum): + self.environment = environment + self.key = key + self.checksum = checksum + self.reset() + + def reset(self): + """Resets the bucket (unloads the bytecode).""" + self.code = None + + def load_bytecode(self, f): + """Loads bytecode from a file or file like object.""" + # make sure the magic header is correct + magic = f.read(len(bc_magic)) + if magic != bc_magic: + self.reset() + return + # the source code of the file changed, we need to reload + checksum = pickle.load(f) + if self.checksum != checksum: + self.reset() + return + self.code = marshal_load(f) + + def write_bytecode(self, f): + """Dump the bytecode into the file or file like object passed.""" + if self.code is None: + raise TypeError('can\'t write empty bucket') + f.write(bc_magic) + pickle.dump(self.checksum, f, 2) + marshal_dump(self.code, f) + + def bytecode_from_string(self, string): + """Load bytecode from a string.""" + self.load_bytecode(BytesIO(string)) + + def bytecode_to_string(self): + """Return the bytecode as string.""" + out = BytesIO() + self.write_bytecode(out) + return out.getvalue() + + +class BytecodeCache(object): + """To implement your own bytecode cache you have to subclass this class + and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of + these methods are passed a :class:`~jinja2.bccache.Bucket`. + + A very basic bytecode cache that saves the bytecode on the file system:: + + from os import path + + class MyCache(BytecodeCache): + + def __init__(self, directory): + self.directory = directory + + def load_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + if path.exists(filename): + with open(filename, 'rb') as f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + with open(filename, 'wb') as f: + bucket.write_bytecode(f) + + A more advanced version of a filesystem based bytecode cache is part of + Jinja2. + """ + + def load_bytecode(self, bucket): + """Subclasses have to override this method to load bytecode into a + bucket. If they are not able to find code in the cache for the + bucket, it must not do anything. + """ + raise NotImplementedError() + + def dump_bytecode(self, bucket): + """Subclasses have to override this method to write the bytecode + from a bucket back to the cache. If it unable to do so it must not + fail silently but raise an exception. + """ + raise NotImplementedError() + + def clear(self): + """Clears the cache. This method is not used by Jinja2 but should be + implemented to allow applications to clear the bytecode cache used + by a particular environment. + """ + + def get_cache_key(self, name, filename=None): + """Returns the unique hash key for this template name.""" + hash = sha1(name.encode('utf-8')) + if filename is not None: + filename = '|' + filename + if isinstance(filename, text_type): + filename = filename.encode('utf-8') + hash.update(filename) + return hash.hexdigest() + + def get_source_checksum(self, source): + """Returns a checksum for the source.""" + return sha1(source.encode('utf-8')).hexdigest() + + def get_bucket(self, environment, name, filename, source): + """Return a cache bucket for the given template. All arguments are + mandatory but filename may be `None`. + """ + key = self.get_cache_key(name, filename) + checksum = self.get_source_checksum(source) + bucket = Bucket(environment, key, checksum) + self.load_bytecode(bucket) + return bucket + + def set_bucket(self, bucket): + """Put the bucket into the cache.""" + self.dump_bytecode(bucket) + + +class FileSystemBytecodeCache(BytecodeCache): + """A bytecode cache that stores bytecode on the filesystem. It accepts + two arguments: The directory where the cache items are stored and a + pattern string that is used to build the filename. + + If no directory is specified a default cache directory is selected. On + Windows the user's temp directory is used, on UNIX systems a directory + is created for the user in the system temp directory. + + The pattern can be used to have multiple separate caches operate on the + same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s`` + is replaced with the cache key. + + >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache') + + This bytecode cache supports clearing of the cache using the clear method. + """ + + def __init__(self, directory=None, pattern='__jinja2_%s.cache'): + if directory is None: + directory = self._get_default_cache_dir() + self.directory = directory + self.pattern = pattern + + def _get_default_cache_dir(self): + tmpdir = tempfile.gettempdir() + + # On windows the temporary directory is used specific unless + # explicitly forced otherwise. We can just use that. + if os.name == 'nt': + return tmpdir + if not hasattr(os, 'getuid'): + raise RuntimeError('Cannot determine safe temp directory. You ' + 'need to explicitly provide one.') + + dirname = '_jinja2-cache-%d' % os.getuid() + actual_dir = os.path.join(tmpdir, dirname) + try: + os.mkdir(actual_dir, stat.S_IRWXU) # 0o700 + except OSError as e: + if e.errno != errno.EEXIST: + raise + + actual_dir_stat = os.lstat(actual_dir) + if actual_dir_stat.st_uid != os.getuid() \ + or not stat.S_ISDIR(actual_dir_stat.st_mode) \ + or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU: + raise RuntimeError('Temporary directory \'%s\' has an incorrect ' + 'owner, permissions, or type.' % actual_dir) + + return actual_dir + + def _get_cache_filename(self, bucket): + return path.join(self.directory, self.pattern % bucket.key) + + def load_bytecode(self, bucket): + f = open_if_exists(self._get_cache_filename(bucket), 'rb') + if f is not None: + try: + bucket.load_bytecode(f) + finally: + f.close() + + def dump_bytecode(self, bucket): + f = open(self._get_cache_filename(bucket), 'wb') + try: + bucket.write_bytecode(f) + finally: + f.close() + + def clear(self): + # imported lazily here because google app-engine doesn't support + # write access on the file system and the function does not exist + # normally. + from os import remove + files = fnmatch.filter(listdir(self.directory), self.pattern % '*') + for filename in files: + try: + remove(path.join(self.directory, filename)) + except OSError: + pass + + +class MemcachedBytecodeCache(BytecodeCache): + """This class implements a bytecode cache that uses a memcache cache for + storing the information. It does not enforce a specific memcache library + (tummy's memcache or cmemcache) but will accept any class that provides + the minimal interface required. + + Libraries compatible with this class: + + - `werkzeug `_.contrib.cache + - `python-memcached `_ + - `cmemcache `_ + + (Unfortunately the django cache interface is not compatible because it + does not support storing binary data, only unicode. You can however pass + the underlying cache client to the bytecode cache which is available + as `django.core.cache.cache._client`.) + + The minimal interface for the client passed to the constructor is this: + + .. class:: MinimalClientInterface + + .. method:: set(key, value[, timeout]) + + Stores the bytecode in the cache. `value` is a string and + `timeout` the timeout of the key. If timeout is not provided + a default timeout or no timeout should be assumed, if it's + provided it's an integer with the number of seconds the cache + item should exist. + + .. method:: get(key) + + Returns the value for the cache key. If the item does not + exist in the cache the return value must be `None`. + + The other arguments to the constructor are the prefix for all keys that + is added before the actual cache key and the timeout for the bytecode in + the cache system. We recommend a high (or no) timeout. + + This bytecode cache does not support clearing of used items in the cache. + The clear method is a no-operation function. + + .. versionadded:: 2.7 + Added support for ignoring memcache errors through the + `ignore_memcache_errors` parameter. + """ + + def __init__(self, client, prefix='jinja2/bytecode/', timeout=None, + ignore_memcache_errors=True): + self.client = client + self.prefix = prefix + self.timeout = timeout + self.ignore_memcache_errors = ignore_memcache_errors + + def load_bytecode(self, bucket): + try: + code = self.client.get(self.prefix + bucket.key) + except Exception: + if not self.ignore_memcache_errors: + raise + code = None + if code is not None: + bucket.bytecode_from_string(code) + + def dump_bytecode(self, bucket): + args = (self.prefix + bucket.key, bucket.bytecode_to_string()) + if self.timeout is not None: + args += (self.timeout,) + try: + self.client.set(*args) + except Exception: + if not self.ignore_memcache_errors: + raise diff --git a/env/lib/python2.7/site-packages/jinja2/bccache.pyc b/env/lib/python2.7/site-packages/jinja2/bccache.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37533463a741d5a0449269b55691137c2552b74b GIT binary patch literal 14688 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 NHr9S`ZEJ1&e*goUM1%kU literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jinja2/compiler.py b/env/lib/python2.7/site-packages/jinja2/compiler.py new file mode 100644 index 0000000..75a60b8 --- /dev/null +++ b/env/lib/python2.7/site-packages/jinja2/compiler.py @@ -0,0 +1,1640 @@ +# -*- coding: utf-8 -*- +""" + jinja2.compiler + ~~~~~~~~~~~~~~~ + + Compiles nodes into python code. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +from itertools import chain +from copy import deepcopy +from keyword import iskeyword as is_python_keyword +from jinja2 import nodes +from jinja2.nodes import EvalContext +from jinja2.visitor import NodeVisitor +from jinja2.exceptions import TemplateAssertionError +from jinja2.utils import Markup, concat, escape +from jinja2._compat import range_type, next, text_type, string_types, \ + iteritems, NativeStringIO, imap + + +operators = { + 'eq': '==', + 'ne': '!=', + 'gt': '>', + 'gteq': '>=', + 'lt': '<', + 'lteq': '<=', + 'in': 'in', + 'notin': 'not in' +} + +# what method to iterate over items do we want to use for dict iteration +# in generated code? on 2.x let's go with iteritems, on 3.x with items +if hasattr(dict, 'iteritems'): + dict_item_iter = 'iteritems' +else: + dict_item_iter = 'items' + + +# does if 0: dummy(x) get us x into the scope? +def unoptimize_before_dead_code(): + x = 42 + def f(): + if 0: dummy(x) + return f + +# The getattr is necessary for pypy which does not set this attribute if +# no closure is on the function +unoptimize_before_dead_code = bool( + getattr(unoptimize_before_dead_code(), '__closure__', None)) + + +def generate(node, environment, name, filename, stream=None, + defer_init=False): + """Generate the python source for a node tree.""" + if not isinstance(node, nodes.Template): + raise TypeError('Can\'t compile non template nodes') + generator = CodeGenerator(environment, name, filename, stream, defer_init) + generator.visit(node) + if stream is None: + return generator.stream.getvalue() + + +def has_safe_repr(value): + """Does the node have a safe representation?""" + if value is None or value is NotImplemented or value is Ellipsis: + return True + if isinstance(value, (bool, int, float, complex, range_type, + Markup) + string_types): + return True + if isinstance(value, (tuple, list, set, frozenset)): + for item in value: + if not has_safe_repr(item): + return False + return True + elif isinstance(value, dict): + for key, value in iteritems(value): + if not has_safe_repr(key): + return False + if not has_safe_repr(value): + return False + return True + return False + + +def find_undeclared(nodes, names): + """Check if the names passed are accessed undeclared. The return value + is a set of all the undeclared names from the sequence of names found. + """ + visitor = UndeclaredNameVisitor(names) + try: + for node in nodes: + visitor.visit(node) + except VisitorExit: + pass + return visitor.undeclared + + +class Identifiers(object): + """Tracks the status of identifiers in frames.""" + + def __init__(self): + # variables that are known to be declared (probably from outer + # frames or because they are special for the frame) + self.declared = set() + + # undeclared variables from outer scopes + self.outer_undeclared = set() + + # names that are accessed without being explicitly declared by + # this one or any of the outer scopes. Names can appear both in + # declared and undeclared. + self.undeclared = set() + + # names that are declared locally + self.declared_locally = set() + + # names that are declared by parameters + self.declared_parameter = set() + + def add_special(self, name): + """Register a special name like `loop`.""" + self.undeclared.discard(name) + self.declared.add(name) + + def is_declared(self, name): + """Check if a name is declared in this or an outer scope.""" + if name in self.declared_locally or name in self.declared_parameter: + return True + return name in self.declared + + def copy(self): + return deepcopy(self) + + +class Frame(object): + """Holds compile time information for us.""" + + def __init__(self, eval_ctx, parent=None): + self.eval_ctx = eval_ctx + self.identifiers = Identifiers() + + # a toplevel frame is the root + soft frames such as if conditions. + self.toplevel = False + + # the root frame is basically just the outermost frame, so no if + # conditions. This information is used to optimize inheritance + # situations. + self.rootlevel = False + + # in some dynamic inheritance situations the compiler needs to add + # write tests around output statements. + self.require_output_check = parent and parent.require_output_check + + # inside some tags we are using a buffer rather than yield statements. + # this for example affects {% filter %} or {% macro %}. If a frame + # is buffered this variable points to the name of the list used as + # buffer. + self.buffer = None + + # the name of the block we're in, otherwise None. + self.block = parent and parent.block or None + + # a set of actually assigned names + self.assigned_names = set() + + # the parent of this frame + self.parent = parent + + if parent is not None: + self.identifiers.declared.update( + parent.identifiers.declared | + parent.identifiers.declared_parameter | + parent.assigned_names + ) + self.identifiers.outer_undeclared.update( + parent.identifiers.undeclared - + self.identifiers.declared + ) + self.buffer = parent.buffer + + def copy(self): + """Create a copy of the current one.""" + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.identifiers = object.__new__(self.identifiers.__class__) + rv.identifiers.__dict__.update(self.identifiers.__dict__) + return rv + + def inspect(self, nodes): + """Walk the node and check for identifiers. If the scope is hard (eg: + enforce on a python level) overrides from outer scopes are tracked + differently. + """ + visitor = FrameIdentifierVisitor(self.identifiers) + for node in nodes: + visitor.visit(node) + + def find_shadowed(self, extra=()): + """Find all the shadowed names. extra is an iterable of variables + that may be defined with `add_special` which may occour scoped. + """ + i = self.identifiers + return (i.declared | i.outer_undeclared) & \ + (i.declared_locally | i.declared_parameter) | \ + set(x for x in extra if i.is_declared(x)) + + def inner(self): + """Return an inner frame.""" + return Frame(self.eval_ctx, self) + + def soft(self): + """Return a soft frame. A soft frame may not be modified as + standalone thing as it shares the resources with the frame it + was created of, but it's not a rootlevel frame any longer. + """ + rv = self.copy() + rv.rootlevel = False + return rv + + __copy__ = copy + + +class VisitorExit(RuntimeError): + """Exception used by the `UndeclaredNameVisitor` to signal a stop.""" + + +class DependencyFinderVisitor(NodeVisitor): + """A visitor that collects filter and test calls.""" + + def __init__(self): + self.filters = set() + self.tests = set() + + def visit_Filter(self, node): + self.generic_visit(node) + self.filters.add(node.name) + + def visit_Test(self, node): + self.generic_visit(node) + self.tests.add(node.name) + + def visit_Block(self, node): + """Stop visiting at blocks.""" + + +class UndeclaredNameVisitor(NodeVisitor): + """A visitor that checks if a name is accessed without being + declared. This is different from the frame visitor as it will + not stop at closure frames. + """ + + def __init__(self, names): + self.names = set(names) + self.undeclared = set() + + def visit_Name(self, node): + if node.ctx == 'load' and node.name in self.names: + self.undeclared.add(node.name) + if self.undeclared == self.names: + raise VisitorExit() + else: + self.names.discard(node.name) + + def visit_Block(self, node): + """Stop visiting a blocks.""" + + +class FrameIdentifierVisitor(NodeVisitor): + """A visitor for `Frame.inspect`.""" + + def __init__(self, identifiers): + self.identifiers = identifiers + + def visit_Name(self, node): + """All assignments to names go through this function.""" + if node.ctx == 'store': + self.identifiers.declared_locally.add(node.name) + elif node.ctx == 'param': + self.identifiers.declared_parameter.add(node.name) + elif node.ctx == 'load' and not \ + self.identifiers.is_declared(node.name): + self.identifiers.undeclared.add(node.name) + + def visit_If(self, node): + self.visit(node.test) + real_identifiers = self.identifiers + + old_names = real_identifiers.declared_locally | \ + real_identifiers.declared_parameter + + def inner_visit(nodes): + if not nodes: + return set() + self.identifiers = real_identifiers.copy() + for subnode in nodes: + self.visit(subnode) + rv = self.identifiers.declared_locally - old_names + # we have to remember the undeclared variables of this branch + # because we will have to pull them. + real_identifiers.undeclared.update(self.identifiers.undeclared) + self.identifiers = real_identifiers + return rv + + body = inner_visit(node.body) + else_ = inner_visit(node.else_ or ()) + + # the differences between the two branches are also pulled as + # undeclared variables + real_identifiers.undeclared.update(body.symmetric_difference(else_) - + real_identifiers.declared) + + # remember those that are declared. + real_identifiers.declared_locally.update(body | else_) + + def visit_Macro(self, node): + self.identifiers.declared_locally.add(node.name) + + def visit_Import(self, node): + self.generic_visit(node) + self.identifiers.declared_locally.add(node.target) + + def visit_FromImport(self, node): + self.generic_visit(node) + for name in node.names: + if isinstance(name, tuple): + self.identifiers.declared_locally.add(name[1]) + else: + self.identifiers.declared_locally.add(name) + + def visit_Assign(self, node): + """Visit assignments in the correct order.""" + self.visit(node.node) + self.visit(node.target) + + def visit_For(self, node): + """Visiting stops at for blocks. However the block sequence + is visited as part of the outer scope. + """ + self.visit(node.iter) + + def visit_CallBlock(self, node): + self.visit(node.call) + + def visit_FilterBlock(self, node): + self.visit(node.filter) + + def visit_Scope(self, node): + """Stop visiting at scopes.""" + + def visit_Block(self, node): + """Stop visiting at blocks.""" + + +class CompilerExit(Exception): + """Raised if the compiler encountered a situation where it just + doesn't make sense to further process the code. Any block that + raises such an exception is not further processed. + """ + + +class CodeGenerator(NodeVisitor): + + def __init__(self, environment, name, filename, stream=None, + defer_init=False): + if stream is None: + stream = NativeStringIO() + self.environment = environment + self.name = name + self.filename = filename + self.stream = stream + self.created_block_context = False + self.defer_init = defer_init + + # aliases for imports + self.import_aliases = {} + + # a registry for all blocks. Because blocks are moved out + # into the global python scope they are registered here + self.blocks = {} + + # the number of extends statements so far + self.extends_so_far = 0 + + # some templates have a rootlevel extends. In this case we + # can safely assume that we're a child template and do some + # more optimizations. + self.has_known_extends = False + + # the current line number + self.code_lineno = 1 + + # registry of all filters and tests (global, not block local) + self.tests = {} + self.filters = {} + + # the debug information + self.debug_info = [] + self._write_debug_info = None + + # the number of new lines before the next write() + self._new_lines = 0 + + # the line number of the last written statement + self._last_line = 0 + + # true if nothing was written so far. + self._first_write = True + + # used by the `temporary_identifier` method to get new + # unique, temporary identifier + self._last_identifier = 0 + + # the current indentation + self._indentation = 0 + + # -- Various compilation helpers + + def fail(self, msg, lineno): + """Fail with a :exc:`TemplateAssertionError`.""" + raise TemplateAssertionError(msg, lineno, self.name, self.filename) + + def temporary_identifier(self): + """Get a new unique identifier.""" + self._last_identifier += 1 + return 't_%d' % self._last_identifier + + def buffer(self, frame): + """Enable buffering for the frame from that point onwards.""" + frame.buffer = self.temporary_identifier() + self.writeline('%s = []' % frame.buffer) + + def return_buffer_contents(self, frame): + """Return the buffer contents of the frame.""" + if frame.eval_ctx.volatile: + self.writeline('if context.eval_ctx.autoescape:') + self.indent() + self.writeline('return Markup(concat(%s))' % frame.buffer) + self.outdent() + self.writeline('else:') + self.indent() + self.writeline('return concat(%s)' % frame.buffer) + self.outdent() + elif frame.eval_ctx.autoescape: + self.writeline('return Markup(concat(%s))' % frame.buffer) + else: + self.writeline('return concat(%s)' % frame.buffer) + + def indent(self): + """Indent by one.""" + self._indentation += 1 + + def outdent(self, step=1): + """Outdent by step.""" + self._indentation -= step + + def start_write(self, frame, node=None): + """Yield or write into the frame buffer.""" + if frame.buffer is None: + self.writeline('yield ', node) + else: + self.writeline('%s.append(' % frame.buffer, node) + + def end_write(self, frame): + """End the writing process started by `start_write`.""" + if frame.buffer is not None: + self.write(')') + + def simple_write(self, s, frame, node=None): + """Simple shortcut for start_write + write + end_write.""" + self.start_write(frame, node) + self.write(s) + self.end_write(frame) + + def blockvisit(self, nodes, frame): + """Visit a list of nodes as block in a frame. If the current frame + is no buffer a dummy ``if 0: yield None`` is written automatically + unless the force_generator parameter is set to False. + """ + if frame.buffer is None: + self.writeline('if 0: yield None') + else: + self.writeline('pass') + try: + for node in nodes: + self.visit(node, frame) + except CompilerExit: + pass + + def write(self, x): + """Write a string into the output stream.""" + if self._new_lines: + if not self._first_write: + self.stream.write('\n' * self._new_lines) + self.code_lineno += self._new_lines + if self._write_debug_info is not None: + self.debug_info.append((self._write_debug_info, + self.code_lineno)) + self._write_debug_info = None + self._first_write = False + self.stream.write(' ' * self._indentation) + self._new_lines = 0 + self.stream.write(x) + + def writeline(self, x, node=None, extra=0): + """Combination of newline and write.""" + self.newline(node, extra) + self.write(x) + + def newline(self, node=None, extra=0): + """Add one or more newlines before the next write.""" + self._new_lines = max(self._new_lines, 1 + extra) + if node is not None and node.lineno != self._last_line: + self._write_debug_info = node.lineno + self._last_line = node.lineno + + def signature(self, node, frame, extra_kwargs=None): + """Writes a function call to the stream for the current node. + A leading comma is added automatically. The extra keyword + arguments may not include python keywords otherwise a syntax + error could occour. The extra keyword arguments should be given + as python dict. + """ + # if any of the given keyword arguments is a python keyword + # we have to make sure that no invalid call is created. + kwarg_workaround = False + for kwarg in chain((x.key for x in node.kwargs), extra_kwargs or ()): + if is_python_keyword(kwarg): + kwarg_workaround = True + break + + for arg in node.args: + self.write(', ') + self.visit(arg, frame) + + if not kwarg_workaround: + for kwarg in node.kwargs: + self.write(', ') + self.visit(kwarg, frame) + if extra_kwargs is not None: + for key, value in iteritems(extra_kwargs): + self.write(', %s=%s' % (key, value)) + if node.dyn_args: + self.write(', *') + self.visit(node.dyn_args, frame) + + if kwarg_workaround: + if node.dyn_kwargs is not None: + self.write(', **dict({') + else: + self.write(', **{') + for kwarg in node.kwargs: + self.write('%r: ' % kwarg.key) + self.visit(kwarg.value, frame) + self.write(', ') + if extra_kwargs is not None: + for key, value in iteritems(extra_kwargs): + self.write('%r: %s, ' % (key, value)) + if node.dyn_kwargs is not None: + self.write('}, **') + self.visit(node.dyn_kwargs, frame) + self.write(')') + else: + self.write('}') + + elif node.dyn_kwargs is not None: + self.write(', **') + self.visit(node.dyn_kwargs, frame) + + def pull_locals(self, frame): + """Pull all the references identifiers into the local scope.""" + for name in frame.identifiers.undeclared: + self.writeline('l_%s = context.resolve(%r)' % (name, name)) + + def pull_dependencies(self, nodes): + """Pull all the dependencies.""" + visitor = DependencyFinderVisitor() + for node in nodes: + visitor.visit(node) + for dependency in 'filters', 'tests': + mapping = getattr(self, dependency) + for name in getattr(visitor, dependency): + if name not in mapping: + mapping[name] = self.temporary_identifier() + self.writeline('%s = environment.%s[%r]' % + (mapping[name], dependency, name)) + + def unoptimize_scope(self, frame): + """Disable Python optimizations for the frame.""" + # XXX: this is not that nice but it has no real overhead. It + # mainly works because python finds the locals before dead code + # is removed. If that breaks we have to add a dummy function + # that just accepts the arguments and does nothing. + if frame.identifiers.declared: + self.writeline('%sdummy(%s)' % ( + unoptimize_before_dead_code and 'if 0: ' or '', + ', '.join('l_' + name for name in frame.identifiers.declared) + )) + + def push_scope(self, frame, extra_vars=()): + """This function returns all the shadowed variables in a dict + in the form name: alias and will write the required assignments + into the current scope. No indentation takes place. + + This also predefines locally declared variables from the loop + body because under some circumstances it may be the case that + + `extra_vars` is passed to `Frame.find_shadowed`. + """ + aliases = {} + for name in frame.find_shadowed(extra_vars): + aliases[name] = ident = self.temporary_identifier() + self.writeline('%s = l_%s' % (ident, name)) + to_declare = set() + for name in frame.identifiers.declared_locally: + if name not in aliases: + to_declare.add('l_' + name) + if to_declare: + self.writeline(' = '.join(to_declare) + ' = missing') + return aliases + + def pop_scope(self, aliases, frame): + """Restore all aliases and delete unused variables.""" + for name, alias in iteritems(aliases): + self.writeline('l_%s = %s' % (name, alias)) + to_delete = set() + for name in frame.identifiers.declared_locally: + if name not in aliases: + to_delete.add('l_' + name) + if to_delete: + # we cannot use the del statement here because enclosed + # scopes can trigger a SyntaxError: + # a = 42; b = lambda: a; del a + self.writeline(' = '.join(to_delete) + ' = missing') + + def function_scoping(self, node, frame, children=None, + find_special=True): + """In Jinja a few statements require the help of anonymous + functions. Those are currently macros and call blocks and in + the future also recursive loops. As there is currently + technical limitation that doesn't allow reading and writing a + variable in a scope where the initial value is coming from an + outer scope, this function tries to fall back with a common + error message. Additionally the frame passed is modified so + that the argumetns are collected and callers are looked up. + + This will return the modified frame. + """ + # we have to iterate twice over it, make sure that works + if children is None: + children = node.iter_child_nodes() + children = list(children) + func_frame = frame.inner() + func_frame.inspect(children) + + # variables that are undeclared (accessed before declaration) and + # declared locally *and* part of an outside scope raise a template + # assertion error. Reason: we can't generate reasonable code from + # it without aliasing all the variables. + # this could be fixed in Python 3 where we have the nonlocal + # keyword or if we switch to bytecode generation + overridden_closure_vars = ( + func_frame.identifiers.undeclared & + func_frame.identifiers.declared & + (func_frame.identifiers.declared_locally | + func_frame.identifiers.declared_parameter) + ) + if overridden_closure_vars: + self.fail('It\'s not possible to set and access variables ' + 'derived from an outer scope! (affects: %s)' % + ', '.join(sorted(overridden_closure_vars)), node.lineno) + + # remove variables from a closure from the frame's undeclared + # identifiers. + func_frame.identifiers.undeclared -= ( + func_frame.identifiers.undeclared & + func_frame.identifiers.declared + ) + + # no special variables for this scope, abort early + if not find_special: + return func_frame + + func_frame.accesses_kwargs = False + func_frame.accesses_varargs = False + func_frame.accesses_caller = False + func_frame.arguments = args = ['l_' + x.name for x in node.args] + + undeclared = find_undeclared(children, ('caller', 'kwargs', 'varargs')) + + if 'caller' in undeclared: + func_frame.accesses_caller = True + func_frame.identifiers.add_special('caller') + args.append('l_caller') + if 'kwargs' in undeclared: + func_frame.accesses_kwargs = True + func_frame.identifiers.add_special('kwargs') + args.append('l_kwargs') + if 'varargs' in undeclared: + func_frame.accesses_varargs = True + func_frame.identifiers.add_special('varargs') + args.append('l_varargs') + return func_frame + + def macro_body(self, node, frame, children=None): + """Dump the function def of a macro or call block.""" + frame = self.function_scoping(node, frame, children) + # macros are delayed, they never require output checks + frame.require_output_check = False + args = frame.arguments + # XXX: this is an ugly fix for the loop nesting bug + # (tests.test_old_bugs.test_loop_call_bug). This works around + # a identifier nesting problem we have in general. It's just more + # likely to happen in loops which is why we work around it. The + # real solution would be "nonlocal" all the identifiers that are + # leaking into a new python frame and might be used both unassigned + # and assigned. + if 'loop' in frame.identifiers.declared: + args = args + ['l_loop=l_loop'] + self.writeline('def macro(%s):' % ', '.join(args), node) + self.indent() + self.buffer(frame) + self.pull_locals(frame) + self.blockvisit(node.body, frame) + self.return_buffer_contents(frame) + self.outdent() + return frame + + def macro_def(self, node, frame): + """Dump the macro definition for the def created by macro_body.""" + arg_tuple = ', '.join(repr(x.name) for x in node.args) + name = getattr(node, 'name', None) + if len(node.args) == 1: + arg_tuple += ',' + self.write('Macro(environment, macro, %r, (%s), (' % + (name, arg_tuple)) + for arg in node.defaults: + self.visit(arg, frame) + self.write(', ') + self.write('), %r, %r, %r)' % ( + bool(frame.accesses_kwargs), + bool(frame.accesses_varargs), + bool(frame.accesses_caller) + )) + + def position(self, node): + """Return a human readable position for the node.""" + rv = 'line %d' % node.lineno + if self.name is not None: + rv += ' in ' + repr(self.name) + return rv + + # -- Statement Visitors + + def visit_Template(self, node, frame=None): + assert frame is None, 'no root frame allowed' + eval_ctx = EvalContext(self.environment, self.name) + + from jinja2.runtime import __all__ as exported + self.writeline('from __future__ import division') + self.writeline('from jinja2.runtime import ' + ', '.join(exported)) + if not unoptimize_before_dead_code: + self.writeline('dummy = lambda *x: None') + + # if we want a deferred initialization we cannot move the + # environment into a local name + envenv = not self.defer_init and ', environment=environment' or '' + + # do we have an extends tag at all? If not, we can save some + # overhead by just not processing any inheritance code. + have_extends = node.find(nodes.Extends) is not None + + # find all blocks + for block in node.find_all(nodes.Block): + if block.name in self.blocks: + self.fail('block %r defined twice' % block.name, block.lineno) + self.blocks[block.name] = block + + # find all imports and import them + for import_ in node.find_all(nodes.ImportedName): + if import_.importname not in self.import_aliases: + imp = import_.importname + self.import_aliases[imp] = alias = self.temporary_identifier() + if '.' in imp: + module, obj = imp.rsplit('.', 1) + self.writeline('from %s import %s as %s' % + (module, obj, alias)) + else: + self.writeline('import %s as %s' % (imp, alias)) + + # add the load name + self.writeline('name = %r' % self.name) + + # generate the root render function. + self.writeline('def root(context%s):' % envenv, extra=1) + + # process the root + frame = Frame(eval_ctx) + frame.inspect(node.body) + frame.toplevel = frame.rootlevel = True + frame.require_output_check = have_extends and not self.has_known_extends + self.indent() + if have_extends: + self.writeline('parent_template = None') + if 'self' in find_undeclared(node.body, ('self',)): + frame.identifiers.add_special('self') + self.writeline('l_self = TemplateReference(context)') + self.pull_locals(frame) + self.pull_dependencies(node.body) + self.blockvisit(node.body, frame) + self.outdent() + + # make sure that the parent root is called. + if have_extends: + if not self.has_known_extends: + self.indent() + self.writeline('if parent_template is not None:') + self.indent() + self.writeline('for event in parent_template.' + 'root_render_func(context):') + self.indent() + self.writeline('yield event') + self.outdent(2 + (not self.has_known_extends)) + + # at this point we now have the blocks collected and can visit them too. + for name, block in iteritems(self.blocks): + block_frame = Frame(eval_ctx) + block_frame.inspect(block.body) + block_frame.block = name + self.writeline('def block_%s(context%s):' % (name, envenv), + block, 1) + self.indent() + undeclared = find_undeclared(block.body, ('self', 'super')) + if 'self' in undeclared: + block_frame.identifiers.add_special('self') + self.writeline('l_self = TemplateReference(context)') + if 'super' in undeclared: + block_frame.identifiers.add_special('super') + self.writeline('l_super = context.super(%r, ' + 'block_%s)' % (name, name)) + self.pull_locals(block_frame) + self.pull_dependencies(block.body) + self.blockvisit(block.body, block_frame) + self.outdent() + + self.writeline('blocks = {%s}' % ', '.join('%r: block_%s' % (x, x) + for x in self.blocks), + extra=1) + + # add a function that returns the debug info + self.writeline('debug_info = %r' % '&'.join('%s=%s' % x for x + in self.debug_info)) + + def visit_Block(self, node, frame): + """Call a block and register it for the template.""" + level = 1 + if frame.toplevel: + # if we know that we are a child template, there is no need to + # check if we are one + if self.has_known_extends: + return + if self.extends_so_far > 0: + self.writeline('if parent_template is None:') + self.indent() + level += 1 + context = node.scoped and 'context.derived(locals())' or 'context' + self.writeline('for event in context.blocks[%r][0](%s):' % ( + node.name, context), node) + self.indent() + self.simple_write('event', frame) + self.outdent(level) + + def visit_Extends(self, node, frame): + """Calls the extender.""" + if not frame.toplevel: + self.fail('cannot use extend from a non top-level scope', + node.lineno) + + # if the number of extends statements in general is zero so + # far, we don't have to add a check if something extended + # the template before this one. + if self.extends_so_far > 0: + + # if we have a known extends we just add a template runtime + # error into the generated code. We could catch that at compile + # time too, but i welcome it not to confuse users by throwing the + # same error at different times just "because we can". + if not self.has_known_extends: + self.writeline('if parent_template is not None:') + self.indent() + self.writeline('raise TemplateRuntimeError(%r)' % + 'extended multiple times') + + # if we have a known extends already we don't need that code here + # as we know that the template execution will end here. + if self.has_known_extends: + raise CompilerExit() + else: + self.outdent() + + self.writeline('parent_template = environment.get_template(', node) + self.visit(node.template, frame) + self.write(', %r)' % self.name) + self.writeline('for name, parent_block in parent_template.' + 'blocks.%s():' % dict_item_iter) + self.indent() + self.writeline('context.blocks.setdefault(name, []).' + 'append(parent_block)') + self.outdent() + + # if this extends statement was in the root level we can take + # advantage of that information and simplify the generated code + # in the top level from this point onwards + if frame.rootlevel: + self.has_known_extends = True + + # and now we have one more + self.extends_so_far += 1 + + def visit_Include(self, node, frame): + """Handles includes.""" + if node.with_context: + self.unoptimize_scope(frame) + if node.ignore_missing: + self.writeline('try:') + self.indent() + + func_name = 'get_or_select_template' + if isinstance(node.template, nodes.Const): + if isinstance(node.template.value, string_types): + func_name = 'get_template' + elif isinstance(node.template.value, (tuple, list)): + func_name = 'select_template' + elif isinstance(node.template, (nodes.Tuple, nodes.List)): + func_name = 'select_template' + + self.writeline('template = environment.%s(' % func_name, node) + self.visit(node.template, frame) + self.write(', %r)' % self.name) + if node.ignore_missing: + self.outdent() + self.writeline('except TemplateNotFound:') + self.indent() + self.writeline('pass') + self.outdent() + self.writeline('else:') + self.indent() + + if node.with_context: + self.writeline('for event in template.root_render_func(' + 'template.new_context(context.parent, True, ' + 'locals())):') + else: + self.writeline('for event in template.module._body_stream:') + + self.indent() + self.simple_write('event', frame) + self.outdent() + + if node.ignore_missing: + self.outdent() + + def visit_Import(self, node, frame): + """Visit regular imports.""" + if node.with_context: + self.unoptimize_scope(frame) + self.writeline('l_%s = ' % node.target, node) + if frame.toplevel: + self.write('context.vars[%r] = ' % node.target) + self.write('environment.get_template(') + self.visit(node.template, frame) + self.write(', %r).' % self.name) + if node.with_context: + self.write('make_module(context.parent, True, locals())') + else: + self.write('module') + if frame.toplevel and not node.target.startswith('_'): + self.writeline('context.exported_vars.discard(%r)' % node.target) + frame.assigned_names.add(node.target) + + def visit_FromImport(self, node, frame): + """Visit named imports.""" + self.newline(node) + self.write('included_template = environment.get_template(') + self.visit(node.template, frame) + self.write(', %r).' % self.name) + if node.with_context: + self.write('make_module(context.parent, True)') + else: + self.write('module') + + var_names = [] + discarded_names = [] + for name in node.names: + if isinstance(name, tuple): + name, alias = name + else: + alias = name + self.writeline('l_%s = getattr(included_template, ' + '%r, missing)' % (alias, name)) + self.writeline('if l_%s is missing:' % alias) + self.indent() + self.writeline('l_%s = environment.undefined(%r %% ' + 'included_template.__name__, ' + 'name=%r)' % + (alias, 'the template %%r (imported on %s) does ' + 'not export the requested name %s' % ( + self.position(node), + repr(name) + ), name)) + self.outdent() + if frame.toplevel: + var_names.append(alias) + if not alias.startswith('_'): + discarded_names.append(alias) + frame.assigned_names.add(alias) + + if var_names: + if len(var_names) == 1: + name = var_names[0] + self.writeline('context.vars[%r] = l_%s' % (name, name)) + else: + self.writeline('context.vars.update({%s})' % ', '.join( + '%r: l_%s' % (name, name) for name in var_names + )) + if discarded_names: + if len(discarded_names) == 1: + self.writeline('context.exported_vars.discard(%r)' % + discarded_names[0]) + else: + self.writeline('context.exported_vars.difference_' + 'update((%s))' % ', '.join(imap(repr, discarded_names))) + + def visit_For(self, node, frame): + # when calculating the nodes for the inner frame we have to exclude + # the iterator contents from it + children = node.iter_child_nodes(exclude=('iter',)) + if node.recursive: + loop_frame = self.function_scoping(node, frame, children, + find_special=False) + else: + loop_frame = frame.inner() + loop_frame.inspect(children) + + # try to figure out if we have an extended loop. An extended loop + # is necessary if the loop is in recursive mode if the special loop + # variable is accessed in the body. + extended_loop = node.recursive or 'loop' in \ + find_undeclared(node.iter_child_nodes( + only=('body',)), ('loop',)) + + # if we don't have an recursive loop we have to find the shadowed + # variables at that point. Because loops can be nested but the loop + # variable is a special one we have to enforce aliasing for it. + if not node.recursive: + aliases = self.push_scope(loop_frame, ('loop',)) + + # otherwise we set up a buffer and add a function def + else: + self.writeline('def loop(reciter, loop_render_func, depth=0):', node) + self.indent() + self.buffer(loop_frame) + aliases = {} + + # make sure the loop variable is a special one and raise a template + # assertion error if a loop tries to write to loop + if extended_loop: + self.writeline('l_loop = missing') + loop_frame.identifiers.add_special('loop') + for name in node.find_all(nodes.Name): + if name.ctx == 'store' and name.name == 'loop': + self.fail('Can\'t assign to special loop variable ' + 'in for-loop target', name.lineno) + + self.pull_locals(loop_frame) + if node.else_: + iteration_indicator = self.temporary_identifier() + self.writeline('%s = 1' % iteration_indicator) + + # Create a fake parent loop if the else or test section of a + # loop is accessing the special loop variable and no parent loop + # exists. + if 'loop' not in aliases and 'loop' in find_undeclared( + node.iter_child_nodes(only=('else_', 'test')), ('loop',)): + self.writeline("l_loop = environment.undefined(%r, name='loop')" % + ("'loop' is undefined. the filter section of a loop as well " + "as the else block don't have access to the special 'loop'" + " variable of the current loop. Because there is no parent " + "loop it's undefined. Happened in loop on %s" % + self.position(node))) + + self.writeline('for ', node) + self.visit(node.target, loop_frame) + self.write(extended_loop and ', l_loop in LoopContext(' or ' in ') + + # if we have an extened loop and a node test, we filter in the + # "outer frame". + if extended_loop and node.test is not None: + self.write('(') + self.visit(node.target, loop_frame) + self.write(' for ') + self.visit(node.target, loop_frame) + self.write(' in ') + if node.recursive: + self.write('reciter') + else: + self.visit(node.iter, loop_frame) + self.write(' if (') + test_frame = loop_frame.copy() + self.visit(node.test, test_frame) + self.write('))') + + elif node.recursive: + self.write('reciter') + else: + self.visit(node.iter, loop_frame) + + if node.recursive: + self.write(', loop_render_func, depth):') + else: + self.write(extended_loop and '):' or ':') + + # tests in not extended loops become a continue + if not extended_loop and node.test is not None: + self.indent() + self.writeline('if not ') + self.visit(node.test, loop_frame) + self.write(':') + self.indent() + self.writeline('continue') + self.outdent(2) + + self.indent() + self.blockvisit(node.body, loop_frame) + if node.else_: + self.writeline('%s = 0' % iteration_indicator) + self.outdent() + + if node.else_: + self.writeline('if %s:' % iteration_indicator) + self.indent() + self.blockvisit(node.else_, loop_frame) + self.outdent() + + # reset the aliases if there are any. + if not node.recursive: + self.pop_scope(aliases, loop_frame) + + # if the node was recursive we have to return the buffer contents + # and start the iteration code + if node.recursive: + self.return_buffer_contents(loop_frame) + self.outdent() + self.start_write(frame, node) + self.write('loop(') + self.visit(node.iter, frame) + self.write(', loop)') + self.end_write(frame) + + def visit_If(self, node, frame): + if_frame = frame.soft() + self.writeline('if ', node) + self.visit(node.test, if_frame) + self.write(':') + self.indent() + self.blockvisit(node.body, if_frame) + self.outdent() + if node.else_: + self.writeline('else:') + self.indent() + self.blockvisit(node.else_, if_frame) + self.outdent() + + def visit_Macro(self, node, frame): + macro_frame = self.macro_body(node, frame) + self.newline() + if frame.toplevel: + if not node.name.startswith('_'): + self.write('context.exported_vars.add(%r)' % node.name) + self.writeline('context.vars[%r] = ' % node.name) + self.write('l_%s = ' % node.name) + self.macro_def(node, macro_frame) + frame.assigned_names.add(node.name) + + def visit_CallBlock(self, node, frame): + children = node.iter_child_nodes(exclude=('call',)) + call_frame = self.macro_body(node, frame, children) + self.writeline('caller = ') + self.macro_def(node, call_frame) + self.start_write(frame, node) + self.visit_Call(node.call, call_frame, forward_caller=True) + self.end_write(frame) + + def visit_FilterBlock(self, node, frame): + filter_frame = frame.inner() + filter_frame.inspect(node.iter_child_nodes()) + aliases = self.push_scope(filter_frame) + self.pull_locals(filter_frame) + self.buffer(filter_frame) + self.blockvisit(node.body, filter_frame) + self.start_write(frame, node) + self.visit_Filter(node.filter, filter_frame) + self.end_write(frame) + self.pop_scope(aliases, filter_frame) + + def visit_ExprStmt(self, node, frame): + self.newline(node) + self.visit(node.node, frame) + + def visit_Output(self, node, frame): + # if we have a known extends statement, we don't output anything + # if we are in a require_output_check section + if self.has_known_extends and frame.require_output_check: + return + + if self.environment.finalize: + finalize = lambda x: text_type(self.environment.finalize(x)) + else: + finalize = text_type + + # if we are inside a frame that requires output checking, we do so + outdent_later = False + if frame.require_output_check: + self.writeline('if parent_template is None:') + self.indent() + outdent_later = True + + # try to evaluate as many chunks as possible into a static + # string at compile time. + body = [] + for child in node.nodes: + try: + const = child.as_const(frame.eval_ctx) + except nodes.Impossible: + body.append(child) + continue + # the frame can't be volatile here, becaus otherwise the + # as_const() function would raise an Impossible exception + # at that point. + try: + if frame.eval_ctx.autoescape: + if hasattr(const, '__html__'): + const = const.__html__() + else: + const = escape(const) + const = finalize(const) + except Exception: + # if something goes wrong here we evaluate the node + # at runtime for easier debugging + body.append(child) + continue + if body and isinstance(body[-1], list): + body[-1].append(const) + else: + body.append([const]) + + # if we have less than 3 nodes or a buffer we yield or extend/append + if len(body) < 3 or frame.buffer is not None: + if frame.buffer is not None: + # for one item we append, for more we extend + if len(body) == 1: + self.writeline('%s.append(' % frame.buffer) + else: + self.writeline('%s.extend((' % frame.buffer) + self.indent() + for item in body: + if isinstance(item, list): + val = repr(concat(item)) + if frame.buffer is None: + self.writeline('yield ' + val) + else: + self.writeline(val + ', ') + else: + if frame.buffer is None: + self.writeline('yield ', item) + else: + self.newline(item) + close = 1 + if frame.eval_ctx.volatile: + self.write('(context.eval_ctx.autoescape and' + ' escape or to_string)(') + elif frame.eval_ctx.autoescape: + self.write('escape(') + else: + self.write('to_string(') + if self.environment.finalize is not None: + self.write('environment.finalize(') + close += 1 + self.visit(item, frame) + self.write(')' * close) + if frame.buffer is not None: + self.write(', ') + if frame.buffer is not None: + # close the open parentheses + self.outdent() + self.writeline(len(body) == 1 and ')' or '))') + + # otherwise we create a format string as this is faster in that case + else: + format = [] + arguments = [] + for item in body: + if isinstance(item, list): + format.append(concat(item).replace('%', '%%')) + else: + format.append('%s') + arguments.append(item) + self.writeline('yield ') + self.write(repr(concat(format)) + ' % (') + idx = -1 + self.indent() + for argument in arguments: + self.newline(argument) + close = 0 + if frame.eval_ctx.volatile: + self.write('(context.eval_ctx.autoescape and' + ' escape or to_string)(') + close += 1 + elif frame.eval_ctx.autoescape: + self.write('escape(') + close += 1 + if self.environment.finalize is not None: + self.write('environment.finalize(') + close += 1 + self.visit(argument, frame) + self.write(')' * close + ', ') + self.outdent() + self.writeline(')') + + if outdent_later: + self.outdent() + + def visit_Assign(self, node, frame): + self.newline(node) + # toplevel assignments however go into the local namespace and + # the current template's context. We create a copy of the frame + # here and add a set so that the Name visitor can add the assigned + # names here. + if frame.toplevel: + assignment_frame = frame.copy() + assignment_frame.toplevel_assignments = set() + else: + assignment_frame = frame + self.visit(node.target, assignment_frame) + self.write(' = ') + self.visit(node.node, frame) + + # make sure toplevel assignments are added to the context. + if frame.toplevel: + public_names = [x for x in assignment_frame.toplevel_assignments + if not x.startswith('_')] + if len(assignment_frame.toplevel_assignments) == 1: + name = next(iter(assignment_frame.toplevel_assignments)) + self.writeline('context.vars[%r] = l_%s' % (name, name)) + else: + self.writeline('context.vars.update({') + for idx, name in enumerate(assignment_frame.toplevel_assignments): + if idx: + self.write(', ') + self.write('%r: l_%s' % (name, name)) + self.write('})') + if public_names: + if len(public_names) == 1: + self.writeline('context.exported_vars.add(%r)' % + public_names[0]) + else: + self.writeline('context.exported_vars.update((%s))' % + ', '.join(imap(repr, public_names))) + + # -- Expression Visitors + + def visit_Name(self, node, frame): + if node.ctx == 'store' and frame.toplevel: + frame.toplevel_assignments.add(node.name) + self.write('l_' + node.name) + frame.assigned_names.add(node.name) + + def visit_Const(self, node, frame): + val = node.value + if isinstance(val, float): + self.write(str(val)) + else: + self.write(repr(val)) + + def visit_TemplateData(self, node, frame): + try: + self.write(repr(node.as_const(frame.eval_ctx))) + except nodes.Impossible: + self.write('(context.eval_ctx.autoescape and Markup or identity)(%r)' + % node.data) + + def visit_Tuple(self, node, frame): + self.write('(') + idx = -1 + for idx, item in enumerate(node.items): + if idx: + self.write(', ') + self.visit(item, frame) + self.write(idx == 0 and ',)' or ')') + + def visit_List(self, node, frame): + self.write('[') + for idx, item in enumerate(node.items): + if idx: + self.write(', ') + self.visit(item, frame) + self.write(']') + + def visit_Dict(self, node, frame): + self.write('{') + for idx, item in enumerate(node.items): + if idx: + self.write(', ') + self.visit(item.key, frame) + self.write(': ') + self.visit(item.value, frame) + self.write('}') + + def binop(operator, interceptable=True): + def visitor(self, node, frame): + if self.environment.sandboxed and \ + operator in self.environment.intercepted_binops: + self.write('environment.call_binop(context, %r, ' % operator) + self.visit(node.left, frame) + self.write(', ') + self.visit(node.right, frame) + else: + self.write('(') + self.visit(node.left, frame) + self.write(' %s ' % operator) + self.visit(node.right, frame) + self.write(')') + return visitor + + def uaop(operator, interceptable=True): + def visitor(self, node, frame): + if self.environment.sandboxed and \ + operator in self.environment.intercepted_unops: + self.write('environment.call_unop(context, %r, ' % operator) + self.visit(node.node, frame) + else: + self.write('(' + operator) + self.visit(node.node, frame) + self.write(')') + return visitor + + visit_Add = binop('+') + visit_Sub = binop('-') + visit_Mul = binop('*') + visit_Div = binop('/') + visit_FloorDiv = binop('//') + visit_Pow = binop('**') + visit_Mod = binop('%') + visit_And = binop('and', interceptable=False) + visit_Or = binop('or', interceptable=False) + visit_Pos = uaop('+') + visit_Neg = uaop('-') + visit_Not = uaop('not ', interceptable=False) + del binop, uaop + + def visit_Concat(self, node, frame): + if frame.eval_ctx.volatile: + func_name = '(context.eval_ctx.volatile and' \ + ' markup_join or unicode_join)' + elif frame.eval_ctx.autoescape: + func_name = 'markup_join' + else: + func_name = 'unicode_join' + self.write('%s((' % func_name) + for arg in node.nodes: + self.visit(arg, frame) + self.write(', ') + self.write('))') + + def visit_Compare(self, node, frame): + self.visit(node.expr, frame) + for op in node.ops: + self.visit(op, frame) + + def visit_Operand(self, node, frame): + self.write(' %s ' % operators[node.op]) + self.visit(node.expr, frame) + + def visit_Getattr(self, node, frame): + self.write('environment.getattr(') + self.visit(node.node, frame) + self.write(', %r)' % node.attr) + + def visit_Getitem(self, node, frame): + # slices bypass the environment getitem method. + if isinstance(node.arg, nodes.Slice): + self.visit(node.node, frame) + self.write('[') + self.visit(node.arg, frame) + self.write(']') + else: + self.write('environment.getitem(') + self.visit(node.node, frame) + self.write(', ') + self.visit(node.arg, frame) + self.write(')') + + def visit_Slice(self, node, frame): + if node.start is not None: + self.visit(node.start, frame) + self.write(':') + if node.stop is not None: + self.visit(node.stop, frame) + if node.step is not None: + self.write(':') + self.visit(node.step, frame) + + def visit_Filter(self, node, frame): + self.write(self.filters[node.name] + '(') + func = self.environment.filters.get(node.name) + if func is None: + self.fail('no filter named %r' % node.name, node.lineno) + if getattr(func, 'contextfilter', False): + self.write('context, ') + elif getattr(func, 'evalcontextfilter', False): + self.write('context.eval_ctx, ') + elif getattr(func, 'environmentfilter', False): + self.write('environment, ') + + # if the filter node is None we are inside a filter block + # and want to write to the current buffer + if node.node is not None: + self.visit(node.node, frame) + elif frame.eval_ctx.volatile: + self.write('(context.eval_ctx.autoescape and' + ' Markup(concat(%s)) or concat(%s))' % + (frame.buffer, frame.buffer)) + elif frame.eval_ctx.autoescape: + self.write('Markup(concat(%s))' % frame.buffer) + else: + self.write('concat(%s)' % frame.buffer) + self.signature(node, frame) + self.write(')') + + def visit_Test(self, node, frame): + self.write(self.tests[node.name] + '(') + if node.name not in self.environment.tests: + self.fail('no test named %r' % node.name, node.lineno) + self.visit(node.node, frame) + self.signature(node, frame) + self.write(')') + + def visit_CondExpr(self, node, frame): + def write_expr2(): + if node.expr2 is not None: + return self.visit(node.expr2, frame) + self.write('environment.undefined(%r)' % ('the inline if-' + 'expression on %s evaluated to false and ' + 'no else section was defined.' % self.position(node))) + + self.write('(') + self.visit(node.expr1, frame) + self.write(' if ') + self.visit(node.test, frame) + self.write(' else ') + write_expr2() + self.write(')') + + def visit_Call(self, node, frame, forward_caller=False): + if self.environment.sandboxed: + self.write('environment.call(context, ') + else: + self.write('context.call(') + self.visit(node.node, frame) + extra_kwargs = forward_caller and {'caller': 'caller'} or None + self.signature(node, frame, extra_kwargs) + self.write(')') + + def visit_Keyword(self, node, frame): + self.write(node.key + '=') + self.visit(node.value, frame) + + # -- Unused nodes for extensions + + def visit_MarkSafe(self, node, frame): + self.write('Markup(') + self.visit(node.expr, frame) + self.write(')') + + def visit_MarkSafeIfAutoescape(self, node, frame): + self.write('(context.eval_ctx.autoescape and Markup or identity)(') + self.visit(node.expr, frame) + self.write(')') + + def visit_EnvironmentAttribute(self, node, frame): + self.write('environment.' + node.name) + + def visit_ExtensionAttribute(self, node, frame): + self.write('environment.extensions[%r].%s' % (node.identifier, node.name)) + + def visit_ImportedName(self, node, frame): + self.write(self.import_aliases[node.importname]) + + def visit_InternalName(self, node, frame): + self.write(node.name) + + def visit_ContextReference(self, node, frame): + self.write('context') + + def visit_Continue(self, node, frame): + self.writeline('continue', node) + + def visit_Break(self, node, frame): + self.writeline('break', node) + + def visit_Scope(self, node, frame): + scope_frame = frame.inner() + scope_frame.inspect(node.iter_child_nodes()) + aliases = self.push_scope(scope_frame) + self.pull_locals(scope_frame) + self.blockvisit(node.body, scope_frame) + self.pop_scope(aliases, scope_frame) + + def visit_EvalContextModifier(self, node, frame): + for keyword in node.options: + self.writeline('context.eval_ctx.%s = ' % keyword.key) + self.visit(keyword.value, frame) + try: + val = keyword.value.as_const(frame.eval_ctx) + except nodes.Impossible: + frame.eval_ctx.volatile = True + else: + setattr(frame.eval_ctx, keyword.key, val) + + def visit_ScopedEvalContextModifier(self, node, frame): + old_ctx_name = self.temporary_identifier() + safed_ctx = frame.eval_ctx.save() + self.writeline('%s = context.eval_ctx.save()' % old_ctx_name) + self.visit_EvalContextModifier(node, frame) + for child in node.body: + self.visit(child, frame) + frame.eval_ctx.revert(safed_ctx) + self.writeline('context.eval_ctx.revert(%s)' % old_ctx_name) diff --git a/env/lib/python2.7/site-packages/jinja2/compiler.pyc b/env/lib/python2.7/site-packages/jinja2/compiler.pyc new file mode 100644 index 0000000000000000000000000000000000000000..427ff94856d073f33a731f155b72b32d1b28714b GIT binary patch literal 56861 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 Z_D*cwdvNbZ_Kxk{wRi8{5AWUh{{xiaQ~Ce^ literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jinja2/constants.py b/env/lib/python2.7/site-packages/jinja2/constants.py new file mode 100644 index 0000000..cab203c --- /dev/null +++ b/env/lib/python2.7/site-packages/jinja2/constants.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +""" + jinja.constants + ~~~~~~~~~~~~~~~ + + Various constants. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" + + +#: list of lorem ipsum words used by the lipsum() helper function +LOREM_IPSUM_WORDS = u'''\ +a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at +auctor augue bibendum blandit class commodo condimentum congue consectetuer +consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus +diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend +elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames +faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac +hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum +justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem +luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie +mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non +nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque +penatibus per pharetra phasellus placerat platea porta porttitor posuere +potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus +ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit +sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor +tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices +ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus +viverra volutpat vulputate''' diff --git a/env/lib/python2.7/site-packages/jinja2/constants.pyc b/env/lib/python2.7/site-packages/jinja2/constants.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a748541ae6b2da8b2849c4505ef69065569b104 GIT binary patch literal 1713 zcmY+FO^+Nk5Qb+H@u8NG;KJF*MS`8M7o-(JC}b4{5+;*=&2JMBv z!jI(2fv0*_L5#Yq%ItUUo3Oh7ouPl^t)C;t)#@GcZ1wJJH9lC~ zoIkWLe<23P@4cq?{vza5n@_DSbASH-H!PFC`l7j4_rdkzG=CNHd{=aTXjkq$eB~}5 zef!95?_4{G``LoKH{z#@CB{|MAgRigdwlccYga|w^JhO@zr4A2yIkCqi?~sm*H|xx ze)Z96<(&^ap-SECaS>T~2+g-t^JOsKh89 z!DO^)3($+-YU^dOh}27k$!fPK*e9)3Z3@>MK|bar!Hr$*txonr z(H7mDMA01?4H);hC6bmTLP!Cql#DN-p+}nSDV;|v3A>#Sz^(ehs92NKVFzo5((MRm zvfM}CN#84BcZFJLjNa{f4dV92A9eKZU@23Ed!tst3c~@6MGD9ccSQ06DD|ORa2=ga zvy@SRsEH@Y+{}S$?xifcSkZK@eHz~P+Oms4PcV%JX7n@>%Oj<-q2NHNi>ZAFC8Xqn z%G+ETn?kHiL!>uwpS;kZa60*Y@{7b}@=N$59LEuG z>=U?9ni=rIS))%I9YtF0#6}}_E`uo|H=0t%4zVx+`jcU-G%z);BG&i99p$V{Q^>`T z^~mSIc{&*ij!vmuZ|=y&O5md$EPIa;?FG}3bgWeNk~Zdmvb{Wiz#ZQ{L2Nc-4x3H;0{i)^*VivL&wjai`(pFktJhC%&Y4{OC+bs% z>$g=(T|dsGv>vw`h+j)Ot~p8T`L0o~%Zu;UkSyQKKK$;vh}O#=$>rKE#^s;n0>@8@ S^*z^1kMhHST@BL5U;Yb7%wRbH literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jinja2/debug.py b/env/lib/python2.7/site-packages/jinja2/debug.py new file mode 100644 index 0000000..815cc18 --- /dev/null +++ b/env/lib/python2.7/site-packages/jinja2/debug.py @@ -0,0 +1,337 @@ +# -*- coding: utf-8 -*- +""" + jinja2.debug + ~~~~~~~~~~~~ + + Implements the debug interface for Jinja. This module does some pretty + ugly stuff with the Python traceback system in order to achieve tracebacks + with correct line numbers, locals and contents. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +import sys +import traceback +from types import TracebackType +from jinja2.utils import missing, internal_code +from jinja2.exceptions import TemplateSyntaxError +from jinja2._compat import iteritems, reraise, code_type + +# on pypy we can take advantage of transparent proxies +try: + from __pypy__ import tproxy +except ImportError: + tproxy = None + + +# how does the raise helper look like? +try: + exec("raise TypeError, 'foo'") +except SyntaxError: + raise_helper = 'raise __jinja_exception__[1]' +except TypeError: + raise_helper = 'raise __jinja_exception__[0], __jinja_exception__[1]' + + +class TracebackFrameProxy(object): + """Proxies a traceback frame.""" + + def __init__(self, tb): + self.tb = tb + self._tb_next = None + + @property + def tb_next(self): + return self._tb_next + + def set_next(self, next): + if tb_set_next is not None: + try: + tb_set_next(self.tb, next and next.tb or None) + except Exception: + # this function can fail due to all the hackery it does + # on various python implementations. We just catch errors + # down and ignore them if necessary. + pass + self._tb_next = next + + @property + def is_jinja_frame(self): + return '__jinja_template__' in self.tb.tb_frame.f_globals + + def __getattr__(self, name): + return getattr(self.tb, name) + + +def make_frame_proxy(frame): + proxy = TracebackFrameProxy(frame) + if tproxy is None: + return proxy + def operation_handler(operation, *args, **kwargs): + if operation in ('__getattribute__', '__getattr__'): + return getattr(proxy, args[0]) + elif operation == '__setattr__': + proxy.__setattr__(*args, **kwargs) + else: + return getattr(proxy, operation)(*args, **kwargs) + return tproxy(TracebackType, operation_handler) + + +class ProcessedTraceback(object): + """Holds a Jinja preprocessed traceback for printing or reraising.""" + + def __init__(self, exc_type, exc_value, frames): + assert frames, 'no frames for this traceback?' + self.exc_type = exc_type + self.exc_value = exc_value + self.frames = frames + + # newly concatenate the frames (which are proxies) + prev_tb = None + for tb in self.frames: + if prev_tb is not None: + prev_tb.set_next(tb) + prev_tb = tb + prev_tb.set_next(None) + + def render_as_text(self, limit=None): + """Return a string with the traceback.""" + lines = traceback.format_exception(self.exc_type, self.exc_value, + self.frames[0], limit=limit) + return ''.join(lines).rstrip() + + def render_as_html(self, full=False): + """Return a unicode string with the traceback as rendered HTML.""" + from jinja2.debugrenderer import render_traceback + return u'%s\n\n' % ( + render_traceback(self, full=full), + self.render_as_text().decode('utf-8', 'replace') + ) + + @property + def is_template_syntax_error(self): + """`True` if this is a template syntax error.""" + return isinstance(self.exc_value, TemplateSyntaxError) + + @property + def exc_info(self): + """Exception info tuple with a proxy around the frame objects.""" + return self.exc_type, self.exc_value, self.frames[0] + + @property + def standard_exc_info(self): + """Standard python exc_info for re-raising""" + tb = self.frames[0] + # the frame will be an actual traceback (or transparent proxy) if + # we are on pypy or a python implementation with support for tproxy + if type(tb) is not TracebackType: + tb = tb.tb + return self.exc_type, self.exc_value, tb + + +def make_traceback(exc_info, source_hint=None): + """Creates a processed traceback object from the exc_info.""" + exc_type, exc_value, tb = exc_info + if isinstance(exc_value, TemplateSyntaxError): + exc_info = translate_syntax_error(exc_value, source_hint) + initial_skip = 0 + else: + initial_skip = 1 + return translate_exception(exc_info, initial_skip) + + +def translate_syntax_error(error, source=None): + """Rewrites a syntax error to please traceback systems.""" + error.source = source + error.translated = True + exc_info = (error.__class__, error, None) + filename = error.filename + if filename is None: + filename = '' + return fake_exc_info(exc_info, filename, error.lineno) + + +def translate_exception(exc_info, initial_skip=0): + """If passed an exc_info it will automatically rewrite the exceptions + all the way down to the correct line numbers and frames. + """ + tb = exc_info[2] + frames = [] + + # skip some internal frames if wanted + for x in range(initial_skip): + if tb is not None: + tb = tb.tb_next + initial_tb = tb + + while tb is not None: + # skip frames decorated with @internalcode. These are internal + # calls we can't avoid and that are useless in template debugging + # output. + if tb.tb_frame.f_code in internal_code: + tb = tb.tb_next + continue + + # save a reference to the next frame if we override the current + # one with a faked one. + next = tb.tb_next + + # fake template exceptions + template = tb.tb_frame.f_globals.get('__jinja_template__') + if template is not None: + lineno = template.get_corresponding_lineno(tb.tb_lineno) + tb = fake_exc_info(exc_info[:2] + (tb,), template.filename, + lineno)[2] + + frames.append(make_frame_proxy(tb)) + tb = next + + # if we don't have any exceptions in the frames left, we have to + # reraise it unchanged. + # XXX: can we backup here? when could this happen? + if not frames: + reraise(exc_info[0], exc_info[1], exc_info[2]) + + return ProcessedTraceback(exc_info[0], exc_info[1], frames) + + +def fake_exc_info(exc_info, filename, lineno): + """Helper for `translate_exception`.""" + exc_type, exc_value, tb = exc_info + + # figure the real context out + if tb is not None: + real_locals = tb.tb_frame.f_locals.copy() + ctx = real_locals.get('context') + if ctx: + locals = ctx.get_all() + else: + locals = {} + for name, value in iteritems(real_locals): + if name.startswith('l_') and value is not missing: + locals[name[2:]] = value + + # if there is a local called __jinja_exception__, we get + # rid of it to not break the debug functionality. + locals.pop('__jinja_exception__', None) + else: + locals = {} + + # assamble fake globals we need + globals = { + '__name__': filename, + '__file__': filename, + '__jinja_exception__': exc_info[:2], + + # we don't want to keep the reference to the template around + # to not cause circular dependencies, but we mark it as Jinja + # frame for the ProcessedTraceback + '__jinja_template__': None + } + + # and fake the exception + code = compile('\n' * (lineno - 1) + raise_helper, filename, 'exec') + + # if it's possible, change the name of the code. This won't work + # on some python environments such as google appengine + try: + if tb is None: + location = 'template' + else: + function = tb.tb_frame.f_code.co_name + if function == 'root': + location = 'top-level template code' + elif function.startswith('block_'): + location = 'block "%s"' % function[6:] + else: + location = 'template' + code = code_type(0, code.co_nlocals, code.co_stacksize, + code.co_flags, code.co_code, code.co_consts, + code.co_names, code.co_varnames, filename, + location, code.co_firstlineno, + code.co_lnotab, (), ()) + except: + pass + + # execute the code and catch the new traceback + try: + exec(code, globals, locals) + except: + exc_info = sys.exc_info() + new_tb = exc_info[2].tb_next + + # return without this frame + return exc_info[:2] + (new_tb,) + + +def _init_ugly_crap(): + """This function implements a few ugly things so that we can patch the + traceback objects. The function returned allows resetting `tb_next` on + any python traceback object. Do not attempt to use this on non cpython + interpreters + """ + import ctypes + from types import TracebackType + + # figure out side of _Py_ssize_t + if hasattr(ctypes.pythonapi, 'Py_InitModule4_64'): + _Py_ssize_t = ctypes.c_int64 + else: + _Py_ssize_t = ctypes.c_int + + # regular python + class _PyObject(ctypes.Structure): + pass + _PyObject._fields_ = [ + ('ob_refcnt', _Py_ssize_t), + ('ob_type', ctypes.POINTER(_PyObject)) + ] + + # python with trace + if hasattr(sys, 'getobjects'): + class _PyObject(ctypes.Structure): + pass + _PyObject._fields_ = [ + ('_ob_next', ctypes.POINTER(_PyObject)), + ('_ob_prev', ctypes.POINTER(_PyObject)), + ('ob_refcnt', _Py_ssize_t), + ('ob_type', ctypes.POINTER(_PyObject)) + ] + + class _Traceback(_PyObject): + pass + _Traceback._fields_ = [ + ('tb_next', ctypes.POINTER(_Traceback)), + ('tb_frame', ctypes.POINTER(_PyObject)), + ('tb_lasti', ctypes.c_int), + ('tb_lineno', ctypes.c_int) + ] + + def tb_set_next(tb, next): + """Set the tb_next attribute of a traceback object.""" + if not (isinstance(tb, TracebackType) and + (next is None or isinstance(next, TracebackType))): + raise TypeError('tb_set_next arguments must be traceback objects') + obj = _Traceback.from_address(id(tb)) + if tb.tb_next is not None: + old = _Traceback.from_address(id(tb.tb_next)) + old.ob_refcnt -= 1 + if next is None: + obj.tb_next = ctypes.POINTER(_Traceback)() + else: + next = _Traceback.from_address(id(next)) + next.ob_refcnt += 1 + obj.tb_next = ctypes.pointer(next) + + return tb_set_next + + +# try to get a tb_set_next implementation if we don't have transparent +# proxies. +tb_set_next = None +if tproxy is None: + try: + tb_set_next = _init_ugly_crap() + except: + pass + del _init_ugly_crap diff --git a/env/lib/python2.7/site-packages/jinja2/debug.pyc b/env/lib/python2.7/site-packages/jinja2/debug.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fede7a9fa9cc76e1d464cf75da1ea9d049285d2d GIT binary patch literal 11171 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 literal 0 HcmV?d00001 diff --git a/env/lib/python2.7/site-packages/jinja2/environment.py b/env/lib/python2.7/site-packages/jinja2/environment.py new file mode 100644 index 0000000..45fabad --- /dev/null +++ b/env/lib/python2.7/site-packages/jinja2/environment.py @@ -0,0 +1,1191 @@ +# -*- coding: utf-8 -*- +""" + jinja2.environment + ~~~~~~~~~~~~~~~~~~ + + Provides a class that holds runtime and parsing time options. + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +import os +import sys +from jinja2 import nodes +from jinja2.defaults import BLOCK_START_STRING, \ + BLOCK_END_STRING, VARIABLE_START_STRING, VARIABLE_END_STRING, \ + COMMENT_START_STRING, COMMENT_END_STRING, LINE_STATEMENT_PREFIX, \ + LINE_COMMENT_PREFIX, TRIM_BLOCKS, NEWLINE_SEQUENCE, \ + DEFAULT_FILTERS, DEFAULT_TESTS, DEFAULT_NAMESPACE, \ + KEEP_TRAILING_NEWLINE, LSTRIP_BLOCKS +from jinja2.lexer import get_lexer, TokenStream +from jinja2.parser import Parser +from jinja2.nodes import EvalContext +from jinja2.optimizer import optimize +from jinja2.compiler import generate +from jinja2.runtime import Undefined, new_context +from jinja2.exceptions import TemplateSyntaxError, TemplateNotFound, \ + TemplatesNotFound, TemplateRuntimeError +from jinja2.utils import import_string, LRUCache, Markup, missing, \ + concat, consume, internalcode +from jinja2._compat import imap, ifilter, string_types, iteritems, \ + text_type, reraise, implements_iterator, implements_to_string, \ + get_next, encode_filename, PY2, PYPY +from functools import reduce + + +# for direct template usage we have up to ten living environments +_spontaneous_environments = LRUCache(10) + +# the function to create jinja traceback objects. This is dynamically +# imported on the first exception in the exception handler. +_make_traceback = None + + +def get_spontaneous_environment(*args): + """Return a new spontaneous environment. A spontaneous environment is an + unnamed and unaccessible (in theory) environment that is used for + templates generated from a string and not from the file system. + """ + try: + env = _spontaneous_environments.get(args) + except TypeError: + return Environment(*args) + if env is not None: + return env + _spontaneous_environments[args] = env = Environment(*args) + env.shared = True + return env + + +def create_cache(size): + """Return the cache class for the given size.""" + if size == 0: + return None + if size < 0: + return {} + return LRUCache(size) + + +def copy_cache(cache): + """Create an empty copy of the given cache.""" + if cache is None: + return None + elif type(cache) is dict: + return {} + return LRUCache(cache.capacity) + + +def load_extensions(environment, extensions): + """Load the extensions from the list and bind it to the environment. + Returns a dict of instantiated environments. + """ + result = {} + for extension in extensions: + if isinstance(extension, string_types): + extension = import_string(extension) + result[extension.identifier] = extension(environment) + return result + + +def _environment_sanity_check(environment): + """Perform a sanity check on the environment.""" + assert issubclass(environment.undefined, Undefined), 'undefined must ' \ + 'be a subclass of undefined because filters depend on it.' + assert environment.block_start_string != \ + environment.variable_start_string != \ + environment.comment_start_string, 'block, variable and comment ' \ + 'start strings must be different' + assert environment.newline_sequence in ('\r', '\r\n', '\n'), \ + 'newline_sequence set to unknown line ending string.' + return environment + + +class Environment(object): + r"""The core component of Jinja is the `Environment`. It contains + important shared variables like configuration, filters, tests, + globals and others. Instances of this class may be modified if + they are not shared and if no template was loaded so far. + Modifications on environments after the first template was loaded + will lead to surprising effects and undefined behavior. + + Here the possible initialization parameters: + + `block_start_string` + The string marking the begin of a block. Defaults to ``'{%'``. + + `block_end_string` + The string marking the end of a block. Defaults to ``'%}'``. + + `variable_start_string` + The string marking the begin of a print statement. + Defaults to ``'{{'``. + + `variable_end_string` + The string marking the end of a print statement. Defaults to + ``'}}'``. + + `comment_start_string` + The string marking the begin of a comment. Defaults to ``'{#'``. + + `comment_end_string` + The string marking the end of a comment. Defaults to ``'#}'``. + + `line_statement_prefix` + If given and a string, this will be used as prefix for line based + statements. See also :ref:`line-statements`. + + `line_comment_prefix` + If given and a string, this will be used as prefix for line based + based comments. See also :ref:`line-statements`. + + .. versionadded:: 2.2 + + `trim_blocks` + If this is set to ``True`` the first newline after a block is + removed (block, not variable tag!). Defaults to `False`. + + `lstrip_blocks` + If this is set to ``True`` leading spaces and tabs are stripped + from the start of a line to a block. Defaults to `False`. + + `newline_sequence` + The sequence that starts a newline. Must be one of ``'\r'``, + ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a + useful default for Linux and OS X systems as well as web + applications. + + `keep_trailing_newline` + Preserve the trailing newline when rendering templates. + The default is ``False``, which causes a single newline, + if present, to be stripped from the end of the template. + + .. versionadded:: 2.7 + + `extensions` + List of Jinja extensions to use. This can either be import paths + as strings or extension classes. For more information have a + look at :ref:`the extensions documentation `. + + `optimized` + should the optimizer be enabled? Default is `True`. + + `undefined` + :class:`Undefined` or a subclass of it that is used to represent + undefined values in the template. + + `finalize` + A callable that can be used to process the result of a variable + expression before it is output. For example one can convert + `None` implicitly into an empty string here. + + `autoescape` + If set to true the XML/HTML autoescaping feature is enabled by + default. For more details about auto escaping see + :class:`~jinja2.utils.Markup`. As of Jinja 2.4 this can also + be a callable that is passed the template name and has to + return `True` or `False` depending on autoescape should be + enabled by default. + + .. versionchanged:: 2.4 + `autoescape` can now be a function + + `loader` + The template loader for this environment. + + `cache_size` + The size of the cache. Per default this is ``50`` which means + that if more than 50 templates are loaded the loader will clean + out the least recently used template. If the cache size is set to + ``0`` templates are recompiled all the time, if the cache size is + ``-1`` the cache will not be cleaned. + + `auto_reload` + Some loaders load templates from locations where the template + sources may change (ie: file system or database). If + `auto_reload` is set to `True` (default) every time a template is + requested the loader checks if the source changed and if yes, it + will reload the template. For higher performance it's possible to + disable that. + + `bytecode_cache` + If set to a bytecode cache object, this object will provide a + cache for the internal Jinja bytecode so that templates don't + have to be parsed if they were not changed. + + See :ref:`bytecode-cache` for more information. + """ + + #: if this environment is sandboxed. Modifying this variable won't make + #: the environment sandboxed though. For a real sandboxed environment + #: have a look at jinja2.sandbox. This flag alone controls the code + #: generation by the compiler. + sandboxed = False + + #: True if the environment is just an overlay + overlayed = False + + #: the environment this environment is linked to if it is an overlay + linked_to = None + + #: shared environments have this set to `True`. A shared environment + #: must not be modified + shared = False + + #: these are currently EXPERIMENTAL undocumented features. + exception_handler = None + exception_formatter = None + + def __init__(self, + block_start_string=BLOCK_START_STRING, + block_end_string=BLOCK_END_STRING, + variable_start_string=VARIABLE_START_STRING, + variable_end_string=VARIABLE_END_STRING, + comment_start_string=COMMENT_START_STRING, + comment_end_string=COMMENT_END_STRING, + line_statement_prefix=LINE_STATEMENT_PREFIX, + line_comment_prefix=LINE_COMMENT_PREFIX, + trim_blocks=TRIM_BLOCKS, + lstrip_blocks=LSTRIP_BLOCKS, + newline_sequence=NEWLINE_SEQUENCE, + keep_trailing_newline=KEEP_TRAILING_NEWLINE, + extensions=(), + optimized=True, + undefined=Undefined, + finalize=None, + autoescape=False, + loader=None, + cache_size=50, + auto_reload=True, + bytecode_cache=None): + # !!Important notice!! + # The constructor accepts quite a few arguments that should be + # passed by keyword rather than position. However it's important to + # not change the order of arguments because it's used at least + # internally in those cases: + # - spontaneous environments (i18n extension and Template) + # - unittests + # If parameter changes are required only add parameters at the end + # and don't change the arguments (or the defaults!) of the arguments + # existing already. + + # lexer / parser information + self.block_start_string = block_start_string + self.block_end_string = block_end_string + self.variable_start_string = variable_start_string + self.variable_end_string = variable_end_string + self.comment_start_string = comment_start_string + self.comment_end_string = comment_end_string + self.line_statement_prefix = line_statement_prefix + self.line_comment_prefix = line_comment_prefix + self.trim_blocks = trim_blocks + self.lstrip_blocks = lstrip_blocks + self.newline_sequence = newline_sequence + self.keep_trailing_newline = keep_trailing_newline + + # runtime information + self.undefined = undefined + self.optimized = optimized + self.finalize = finalize + self.autoescape = autoescape + + # defaults + self.filters = DEFAULT_FILTERS.copy() + self.tests = DEFAULT_TESTS.copy() + self.globals = DEFAULT_NAMESPACE.copy() + + # set the loader provided + self.loader = loader + self.cache = create_cache(cache_size) + self.bytecode_cache = bytecode_cache + self.auto_reload = auto_reload + + # load extensions + self.extensions = load_extensions(self, extensions) + + _environment_sanity_check(self) + + def add_extension(self, extension): + """Adds an extension after the environment was created. + + .. versionadded:: 2.5 + """ + self.extensions.update(load_extensions(self, [extension])) + + def extend(self, **attributes): + """Add the items to the instance of the environment if they do not exist + yet. This is used by :ref:`extensions ` to register + callbacks and configuration values without breaking inheritance. + """ + for key, value in iteritems(attributes): + if not hasattr(self, key): + setattr(self, key, value) + + def overlay(self, block_start_string=missing, block_end_string=missing, + variable_start_string=missing, variable_end_string=missing, + comment_start_string=missing, comment_end_string=missing, + line_statement_prefix=missing, line_comment_prefix=missing, + trim_blocks=missing, lstrip_blocks=missing, + extensions=missing, optimized=missing, + undefined=missing, finalize=missing, autoescape=missing, + loader=missing, cache_size=missing, auto_reload=missing, + bytecode_cache=missing): + """Create a new overlay environment that shares all the data with the + current environment except of cache and the overridden attributes. + Extensions cannot be removed for an overlayed environment. An overlayed + environment automatically gets all the extensions of the environment it + is linked to plus optional extra extensions. + + Creating overlays should happen after the initial environment was set + up completely. Not all attributes are truly linked, some are just + copied over so modifications on the original environment may not shine + through. + """ + args = dict(locals()) + del args['self'], args['cache_size'], args['extensions'] + + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.overlayed = True + rv.linked_to = self + + for key, value in iteritems(args): + if value is not missing: + setattr(rv, key, value) + + if cache_size is not missing: + rv.cache = create_cache(cache_size) + else: + rv.cache = copy_cache(self.cache) + + rv.extensions = {} + for key, value in iteritems(self.extensions): + rv.extensions[key] = value.bind(rv) + if extensions is not missing: + rv.extensions.update(load_extensions(rv, extensions)) + + return _environment_sanity_check(rv) + + lexer = property(get_lexer, doc="The lexer for this environment.") + + def iter_extensions(self): + """Iterates over the extensions by priority.""" + return iter(sorted(self.extensions.values(), + key=lambda x: x.priority)) + + def getitem(self, obj, argument): + """Get an item or attribute of an object but prefer the item.""" + try: + return obj[argument] + except (TypeError, LookupError): + if isinstance(argument, string_types): + try: + attr = str(argument) + except Exception: + pass + else: + try: + return getattr(obj, attr) + except AttributeError: + pass + return self.undefined(obj=obj, name=argument) + + def getattr(self, obj, attribute): + """Get an item or attribute of an object but prefer the attribute. + Unlike :meth:`getitem` the attribute *must* be a bytestring. + """ + try: + return getattr(obj, attribute) + except AttributeError: + pass + try: + return obj[attribute] + except (TypeError, LookupError, AttributeError): + return self.undefined(obj=obj, name=attribute) + + def call_filter(self, name, value, args=None, kwargs=None, + context=None, eval_ctx=None): + """Invokes a filter on a value the same way the compiler does it. + + .. versionadded:: 2.7 + """ + func = self.filters.get(name) + if func is None: + raise TemplateRuntimeError('no filter named %r' % name) + args = [value] + list(args or ()) + if getattr(func, 'contextfilter', False): + if context is None: + raise TemplateRuntimeError('Attempted to invoke context ' + 'filter without context') + args.insert(0, context) + elif getattr(func, 'evalcontextfilter', False): + if eval_ctx is None: + if context is not None: + eval_ctx = context.eval_ctx + else: + eval_ctx = EvalContext(self) + args.insert(0, eval_ctx) + elif getattr(func, 'environmentfilter', False): + args.insert(0, self) + return func(*args, **(kwargs or {})) + + def call_test(self, name, value, args=None, kwargs=None): + """Invokes a test on a value the same way the compiler does it. + + .. versionadded:: 2.7 + """ + func = self.tests.get(name) + if func is None: + raise TemplateRuntimeError('no test named %r' % name) + return func(value, *(args or ()), **(kwargs or {})) + + @internalcode + def parse(self, source, name=None, filename=None): + """Parse the sourcecode and return the abstract syntax tree. This + tree of nodes is used by the compiler to convert the template into + executable source- or bytecode. This is useful for debugging or to + extract information from templates. + + If you are :ref:`developing Jinja2 extensions ` + this gives you a good overview of the node tree generated. + """ + try: + return self._parse(source, name, filename) + except TemplateSyntaxError: + exc_info = sys.exc_info() + self.handle_exception(exc_info, source_hint=source) + + def _parse(self, source, name, filename): + """Internal parsing function used by `parse` and `compile`.""" + return Parser(self, source, name, encode_filename(filename)).parse() + + def lex(self, source, name=None, filename=None): + """Lex the given sourcecode and return a generator that yields + tokens as tuples in the form ``(lineno, token_type, value)``. + This can be useful for :ref:`extension development ` + and debugging templates. + + This does not perform preprocessing. If you want the preprocessing + of the extensions to be applied you have to filter source through + the :meth:`preprocess` method. + """ + source = text_type(source) + try: + return self.lexer.tokeniter(source, name, filename) + except TemplateSyntaxError: + exc_info = sys.exc_info() + self.handle_exception(exc_info, source_hint=source) + + def preprocess(self, source, name=None, filename=None): + """Preprocesses the source with all extensions. This is automatically + called for all parsing and compiling methods but *not* for :meth:`lex` + because there you usually only want the actual source tokenized. + """ + return reduce(lambda s, e: e.preprocess(s, name, filename), + self.iter_extensions(), text_type(source)) + + def _tokenize(self, source, name, filename=None, state=None): + """Called by the parser to do the preprocessing and filtering + for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. + """ + source = self.preprocess(source, name, filename) + stream = self.lexer.tokenize(source, name, filename, state) + for ext in self.iter_extensions(): + stream = ext.filter_stream(stream) + if not isinstance(stream, TokenStream): + stream = TokenStream(stream, name, filename) + return stream + + def _generate(self, source, name, filename, defer_init=False): + """Internal hook that can be overridden to hook a different generate + method in. + + .. versionadded:: 2.5 + """ + return generate(source, self, name, filename, defer_init=defer_init) + + def _compile(self, source, filename): + """Internal hook that can be overridden to hook a different compile + method in. + + .. versionadded:: 2.5 + """ + return compile(source, filename, 'exec') + + @internalcode + def compile(self, source, name=None, filename=None, raw=False, + defer_init=False): + """Compile a node or template source code. The `name` parameter is + the load name of the template after it was joined using + :meth:`join_path` if necessary, not the filename on the file system. + the `filename` parameter is the estimated filename of the template on + the file system. If the template came from a database or memory this + can be omitted. + + The return value of this method is a python code object. If the `raw` + parameter is `True` the return value will be a string with python + code equivalent to the bytecode returned otherwise. This method is + mainly used internally. + + `defer_init` is use internally to aid the module code generator. This + causes the generated code to be able to import without the global + environment variable to be set. + + .. versionadded:: 2.4 + `defer_init` parameter added. + """ + source_hint = None + try: + if isinstance(source, string_types): + source_hint = source + source = self._parse(source, name, filename) + if self.optimized: + source = optimize(source, self) + source = self._generate(source, name, filename, + defer_init=defer_init) + if raw: + return source + if filename is None: + filename = '