Reputation: 3
I need to obfuscate my Python code, I know the best way would be to convert it to a C file but I can't do that.
According to this article, although not 100% effective, I can "obfuscate" the code using:
python -OO -m py_compile <filename.py>
Doing this generates a PYC file, I tried to convert it to Exe using the Pyinstaller doing this:
pyinstaller --onefile filename.pyc
but it doesn't work, how can I then convert the obfuscated Pyc file to Exe? Is there any other way to obfuscate the code and then convert it to Exe without converting it to C language?
Upvotes: -4
Views: 1462
Reputation: 145
In addition to pyarmor
, there is another tool for obfuscation:
pyc-zipper
Firstly: use pip to install it:
pip install pyc-zipper
The pyc-zipper
tool can be used by two ways, either by hooking pyinstaller
or by command-line calls, and the most convenient one is to hook the pyinstaller
library.
The feature of Hooking PyInstaller utilizes the .spec
file generated automatically by PyInstaller itself.
After calling pyinstaller file.py
, a file named file.spec
will be generated, which is generally a Python file.
You only need to add the following at the beginning of file.spec
:
from pyc_zipper import hook_pyinstaller
hook_pyinstaller()
Additionally, you can customize your own parameters, such as:
hook_pyinstaller(comp_module="lzma", no_obfuscation=False,
obfuscate_global=True, obfuscate_lineno=True,
obfuscate_filename=True, obfuscate_code_name=True,
obfuscate_bytecode=True, obfuscate_argname=False)
Among these parameters, comp_module
is a string representing the name of the compression module, defaulting to None
.
Finally, run:
pyinstaller file.spec
Note that you cannot use pyinstaller file.py
there, as it will generate a new spec file that will overwrite file.spec
.
If you see output information from pyc-zipper
while running PyInstaller, such as:
3545 INFO: Building PYZ because PYZ-00.toc is non existent
3545 INFO: Building PYZ (ZlibArchive) E:\Git-repositories\Github-publish\build\file\PYZ-00.pyz
3919 INFO: Building PYZ (ZlibArchive) E:\Git-repositories\Github-publish\build\file\PYZ-00.pyz completed successfully.
3926 INFO: checking PKG
3927 INFO: Building PKG because PKG-00.toc is non existent
3927 INFO: Building PKG (CArchive) PKG-00.pkg
pyc-zipper: processing ('pyiboot01_bootstrap', 'D:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py') in _load_code
Obfuscating code '<module>'
Obfuscating code 'NullWriter'
Obfuscating code 'write'
Obfuscating code 'flush'
Obfuscating code 'isatty'
Obfuscating code '_frozen_name'
Obfuscating code 'PyInstallerImportError'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerCDLL'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerPyDLL'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerWinDLL'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerOleDLL'
Obfuscating code '__init__'
pyc-zipper: processing ('file', 'E:\\Git-repositories\\Github-publish\\file.py') in _load_code
Obfuscating code '<module>'
Then the obfuscation is successful.
pyc-zipper [options] [file1 file2 ...]
The available options are:
pyc-zipper [-h] [--obfuscate] [--obfuscate-global]
[--obfuscate-lineno] [--obfuscate-filename]
[--obfuscate-code-name] [--obfuscate-bytecode]
[--obfuscate-argname] [--unpack] [--version]
[--compress-module COMPRESS_MODULE] [--no-obfuscation]
[file1 [file2 ...]]
For example, use a pyc file:
pyc-zipper --obfuscate app.pyc --compress-module lzma
The obfuscated pyc file will use lzma
module to decompress itself, like EXE packing.
If a py file is used, pyc-zipper
will generate a pyc file (app.pyc
in this example):
pyc-zipper --no-obfuscation app.py --compress-module zlib
Additionally, if your terminal prompts that the pyc-zipper
command cannot be found, especially on Windows, you can use python -m pyc_zipper
as an alternative.
For the detailed documentation and how it works, you could refer to the README file in pyc-zipper · GitHub.
Note: I'm the developer of pyc-zipper
.
Upvotes: 1
Reputation: 1628
From How to Obfuscate Python Scripts With PyArmor:
Install PyArmor:
pip install pyarmor
Obfuscate script.py
with PyArmor:
pyarmor obfuscate script.py
The original script.py
file:
def main():
print("Hello World")
if __name__ == '__main__':
main()
After obfuscation:
from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x0a\x00\x6f\x0d\x0d\x0a\x09\x33\xe0\x02\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\xb2\x17\x00\x00\x00\x00\x00\x18\x4a\x9d\x70\x63\x25\x3b\xaf\x0e\x31\x3b\x1a\x3a\x18\x32\xa5\x92\x00\x00\x00\x00\x00\x00\x00\x00\x86\x7e\x95\xbd\xc0\x82\x5f\x72\xa1\xc3\x6d\x58\x28\xe2\x51\xd2\xee\x48\xee\x96\x83\x57\x9a\xf9\x45\x75\x6a\xe2\x4d\x35\xbd\xfb\xf0\xb4\xbe\xf4\xf3\x5a\x9e\x4c\x88\xd7\x42\x83\x60\x12\xa9\xbb\x4f\xb3\x18\xb5\x43\x0f\x1e\x72\xd1\xde\xd3\xc1\xde\x6c\x32\x38\x78\x51\xb0\x25\x1f\x11\x5d\x64\xd3\xf2\x81\x68\x3e\xe0\x6d\xc6\xcf\x6b\x9a\x27\x92\xad\xee\x97\xbf\xc6\x58\x2c\x5d\x7a\x21\xee\x65\xd8\x0c\xb0\x59\x04\xb8\x92\x29\x85\x61\x4c\x61\xe9\xc1\x0b\x98\x85\xe3\x41\x45\x34\xf1\xe8\xe2\x1a\xad\x88\x24\xb9\xca\xdc\x02\xbb\x63\x6d\x63\xca\x66\x32\x9a\x40\x12\x2a\xa6\xf7\x22\xbe\xea\x72\xab\x2c\x2f\x20\xbc\x77\xaa\xdb\x07\x9a\xf1\xff\x3e\x8f\xea\xa8\xa5\x7b\xe8\xa8\x85\x0c\x8e\x1a\xc4\xb2\x9b\xc8\x2d\xcd\xf6\xa4\xae\x8f\xcf\x76\xb7\x56\xb4\xe2\xcf\xaa\xd1\xeb\xfd\x29\xed\x77\x09\xc1\xb2\xc9\xd3\xce\x97\x60\x59\x22\xa3\xfa\x2c\x6e\x0a\xc1\x61\x87\x39\x96\x7e\x66\xc9\x79\x86\x42\x1b\xe4\x93\x83\x59\x42\xd9\x14\xba\x3e\x03\x08\xaf\x0a\x1d\xad\x91\x86\xf8\x2f\x5c\x5a\x1e\xd7\x74\x12\x9e\x08\xf4\x4e\xa0\xb2\x13\x8c\xce\x00\x97\x1d\x3d\xa5\x56\xe3\xe3\x28\x05\x1d\x0d\x1d\xc0\x85\x3b\xfe\xad\x81\x51\x6f\x1e\x81\xdc\x76\xdb\x5c\x4b\xa2\xf6\xe9\xbb\x11\x12\x47\xcd\x9f\xb3\x05\x73\xf8\xec\x36\xd5\xc9\x29\x54\x8d\x61\xb4\xaa\xec\x2c\xfa\x13\xdc\xed\xf9\xe7\x15\x08\xfa\xcd\x94\x02\x06\x8a\x43\xfc\xc2\x2f\xb4\x75\xeb\xe9\xa5\x85\x45\x99\xe0\xe8\xb5\x86\x3c\x54\x5e\x1f\x08\xaa\x19\x3a\xe3\x9e\xfd\x0e\x22\xaa\xe0\x0b\x52\xae\x1e\xd0\xf6\x52\xd3\x30\x06\xe0\x2e\x9b\x50\x90\x76\x96\xbf\xa2\xe1\x5a\x3f\x8d\x2f\xcb\xce\xab\x4a\xa1\x6e\x89\x91\xcc\xa6\x56\xf1\x65\xd2\xdc\xa9\xd9\x80\x6e\x82\x30\x5e\x6e\x7d\x82\x13\xfd\xe6\x5a\xb2\xcd\x4c\xab\xaa\x63\x79\x1d\x20\x8a\x8e\xd1\xea\x58\x05\xa5\xdc\x93\x65\x64\x74\xa6\x58\x40\x90\xa8\x7e\xd1\x7f\xcd\x40\xc1\x39\x0e\xf0\xa6\xd5\x7f\x00\xff\xd1\x37\x93\x0c\x10\x18\x18\xe8\xa1\x15\x42\x4f\x12\x4c\xcc\x9b\x58\x90\x95\x0e\xf3\xc4\x09\x76\x68\x7d\x77\x6e\xd4\xae\x5c\x5c\x95\x28\x01\x51\x9b\xeb\x08\x04\x6f\x3c\x48\xb5\x33\x92\xbf\xaa\xb0\x88\xcd\x76\x9f\x2b\x5a\x7b\xfe\xa2\x27\x92\x56\xed\xe9\xe2\x4b\x15\x3f\x47\x51\x82\x1b\x87\x1e\xcd\x6b\xfa\xc8\xb3\xa9\xce\xd6\x89\x7c\x98\x90\x95\xdf\x4c\xad\x4c\x9f\x3d\x7b\x27\x44\x53\x32\x5b\x9c\x5c\xad\x9b\xb2\x05\x33\xd9\xde\x54\x03\xb2\x25\xdc\x5e\xcd\x53\x3f\x39\xbb\x1a\x39\x5b\x13\x18\x49\x38\x0b\x1d\xd2\x8b\x78\x6a\xa0\x07\x12\x0f\x44\x71\xa4\xd5\x38\x29\xe0\x0e\x6d\xc5\x72\x15\xe3\xab\x89\x7c\x37\x1b\xb5\xb3\x87\x7c\xd2\x5d\xdc\xfc\xe5\x9d\xe6\xec\x9e\xb1\x39\xe1\x41\x99\x25\xe8\xb9\xd2\x92\x54\x24\x31\x4d\x1b\xa2\xc9\x91\xde\xac\x2a\xa5\x0d\xb8\x56\x69\x65\x29\xa1\xf5\xf8\x0d\x10\x3f\x26\x8c\x49\x00\x72\x27\xbb\x4b\x66\x9f\x8f\x31\x31\x0e\xb5\xa8\x40\xa9\xe0\xef\x80\x50\xec\xdd\xe9\x79\x10\x7f\x98\x29\xc5\xe2\x84\x98\xc7\x4f\xc0\xe7\x11\xae\xb9\x2f\xe0\x39\x91\xce\x8f\xaa\xb4\x5a\x0f\x53\x78\x8f\xbc\x7e\x0c\x81\x5d\x32\x0b\xcc\x0b\x9d\xcd\x8d\x88\xe2\xff\x62\x23\xbb\x45\x92\xd2\x6b\xc0\x2b\x60\xf7\x63\x94\xbf\x3c\xc6\x72\x88\x0f\x92\xbd\xce\xc2\xcb\x4c\x8b\x99\x8d\x8b\x60\xe6\x38\x7b\x1a\xd7\x67\xbf\x31\x68\x49\x92\x08\xfb\xdd\x89\xde\x05\x88\x7f\x54\x76\xba\x96\x60\x2b\x07\xf6\xc3\xaa\xa9\x71\xf3\x05\xd8\xb9\x22\xbc\x6e\x6e\xa7\x81\x8a\x2e\x9d\x70\xa0\x16\x90\xc9\x51\x05\x8f\x5d\xec\xb8\x7e\x9b\xef\x32\x35\xca\x98\xd4\x2f\xde\x0b\xc7\x00\x6e\xb8\x34\xf3\xed\xa0\x1b\xfc\x66\x03\x45\x4d\xa4\xa4\x31\xe8\x9d\x23\x38\x08\x26\xcd\x6d\x33\x1e\xcb\xd0\x9a\xc4\xca\x4e\xbc\x11\x71\xfc\xdc\xcb\x5f\x61\x06\xf9\xfd\xe6\x22\xdb\x89\xc0\x43\x14\x63\x36\xc3\x70\x63\xb7\x57\x15\x73\x0c\xa6\x5a\xc5\x86\x84\x80\x98\xc9\x1f\x56\x2b\x2e\xf3\x2d\x35\x70\xed\x4e\x01\xef\x03\x71\x66\xaa\x49\xdf\xcc\xa9\x53\x85\x35\x37\x40\x64\x25\x34\xb8\x27\xb9\x86\x3a\x50\xfe\x40\x4b\xfe\x89\x3e\xa5\x5a\xc5\xc0\xb5\x1d\x2a\x40\xd1\x3a\x27\x12\x4a\x98\xcb\xaf\xb4\xdc\xce\xde\xf7\xf8\x22\xa9\x98\x38\x32\x58\xf3\xc3\xe8\x20\x4d\x48\x2c\xfe\x4f\x24\x79\xd0\x67\xec\xaa\x96\xee\xf8\x5c\x27\xef\x09\x26\xe1\xd6\x95\x5f\x20\xfb\xda\x31\x01\x32\xf1\xb5\x5d\x8e\x51\x38\x67\x96\x5b\x0e\x7d\x55\xe6\xfa\xc5\x83\x92\x1e\x64\xb5\x5e\xbb\x2c\xad\xb3\xb3\x98\x8d\x15\xc6\xd3\xe4\x35\xd8\x43\x40\x45\x28\x30\xf6\x18\x23\x90\x1f\xaf\xa3\xac\xda\xdd\xf3\x4a\xca\x87\x4b\x36\x17\x45\x42\xad\x93\xed\x5f\x63\xd3\x3c\x7e\x64\x7d\xb8\xfb\x90\x43\xc1\xc0\x69\x2e\x9a\xdc\x26\xd5\xa9\x7f\x03\x44\xe6\xba\x51\x1f\x89\x75\xe6\xec\x9a\xee\x98\x9b\x55\x94\xf4\xd0\x73\xaf\x5b\x58\x97\xf5\x3f\xa9\xf9\x7a\x26\x16\x89\xd6\x3a\x54\x9c\x5c\x43\xaf\xdb\x00\x5e\x30\x59\x69\x6d\x60\x76\x77\xbd\xe0\x86\x78\xf3\xf6\xf9\x32\xfb\x5d\xf6\xf2\x09\x3f\x48\xf6\x51\xde\x1a\x88\x01\x89\x5e\x02\x9f\x48\xac\x27\xf2\xf5\x70\x1f\xd1\x2c\x3a\x48\x61\xd3\x22\xe2\xbf\x85\xb8\x63\x48\x72\xce\x50\x66\x80\x3e\x44\x8d\xbc\x15\x02\x2b\x7a\x1b\x76\xbd\x46\xca\x4f\xc6\x5d\x52\x02\x0c\xab\x67\x8a\xe8\x1b\xdd\x14\x93\x4d\x47\xf6\x03\xc3\xa1\xd1\x76\x01\xc6\x88\x06\xa1\x2e\xd2\x5e\x07\xde\x31\x30\x2f\xe5\xf1\xf2\xf6\x25\x88\x86\x38\xdc\x19\x1f\x55\x19\xad\x93\x06\x43\x48\x89\x67\xba\xfa\x2d\x19\xfe\x90\xb1\xff\x41\xb4\xf6\x65\x88\xd3\xb7\x7e\x96\x02\x7d\xa4\x83\xc3\x67\xb6\xed\x66\xa5\x98\x1f\xcf\xc2\xa3\xb4\xc5\x62\xfb\x14\x7e\xdc\x47\x33\x9d\x5f\x56\x6d\x29\xd1\xec\xa3\x05\xe9\x4f\x97\x00\x20\xea\x0b\xd1\x9d\x18\x14\x32\x24\xa5\x3b\xd1\x7b\x2c\xfe\xc0\xa3\x07\xc3\x04\xbd\xb0\x1b\x24\x4e\xbb\xc5\x30\x43\x2d\xc0\x59\x30\x0d\x8f\x2f\xb0\x4c\x30\xd3\x81\xe0\x79\xf9\x0f\x83\x72\x40\xa9\xba\x31\xd2\xa0\x86\x8e\x89\xff\x60\x5d\xec\x8a\xf7\x76\xe1\x14\x33\x9b\x6a\x12\xb6\xc2\xb7\xc1\xd2\x49\xd0\xd5\x11\x12\xe1\x53\x05\xfc\x62\x13\xaa\x33\x73\xd9\x87\x13\x56\xb2\xfe\x68\xed\x37\x9e\x8c\x9d\xa6\x00\x80\xbb\x31\xca\x42\xcf\xb9\x3d\x6d\x9d\x97\x7c\xb3\x83\x87\x2b\x1a\xba\x93\x4b\x42\xc6\x96\xe4\xbd\x83\xab\x72\xf4\xc3\x3f\xa9\x64\x7a\x16\x83\x75\x70\x8e\xe6\x0b\x60\xa5\xe2\xd4\xc5\x1a\xb4\x39\x5b\xb3\x77\x5b\xcd\x96\x74\x5a\xde\x1a\xdd\x59\x8b\x8a\xe9\xd9\xb5\xfe\xec\x53\x1a\xc0\x9d\x70\x67\x7a\xf9\x3e\xfb\xea\xbb\x7e\xeb\xe7\xb6\x9c\x5b\x21\x65\x42\xe9\x4b\x58\x84\x1c\x62\xe0\xd1\x15\x34\xab\x93\x91\xd8\xad\xaa\x74\x58\x17\xcb\x50\x00\x71\xd0\x92\x27\xe7\x12\xaa\xd2\xd0\x24\x39\xa6\xa1\xf8\xd8\x3d\x0e\x49\x86\x26\xb6\x67\xf6\x07\xf3\xaf\x95\x49\xee\xc1\x2a\x78\xbc\xd3\xa1\x39\x90\x9f\x2e\x79\xcc\x7e\x7d\x6a\xb6\x1b\x26\x9b\x54\x1c\x10\xfa\x02\xc6\x07\x0a\xc3\x15\xce\x16\xf5\x36\x38\x39\xf9\xf0\xe3\xaf\x38\x90\xf7\xe4\xf5\xcc\x16\x12\xb1\xaf\xf4\x80\x5c\xd8\xc2\x12\x71\xd2\x56\x8c\x24\x0d\x41\xbb\x04\xcd\xdb\xa9\x1d\x81\x1c\x92\xd5\x34\x5f\xc9\x8d\xcc\xc3\x12\xef\x19\xe5\x48\x44\x24\xa5\x57\xce\x0d\xa9\x72\xfb\xc3\x6c\x1b\xdb\xdf\x4e\x63\x54\xdf\xc5\x49\x95\x24\xf9\xca\x9c\x58\x61\x03\xff\x4d\xce\x29\x0d\x9b\xc2\x99\x73\xe1\xf6\xfd\xde\x52\x17\x07\x08\xe8\x82\x75\xce\x6f\xa9\x38\xdc\xbf\xa6\x64\x0c\x5c\xd2\x5c\x6d\x1c\x4c\x3b\xb7\x3e\x45\x7d\x34\x9f\x54\x8a\xbc\x7e\xa8\x7d\x66\x3d\xc8\x06\xbb\x2d\x5b\x73\x70\x6d\x94\xa0\xa6\xe8\x67\x00\x3d\x0e\xdb\x0d\xad\xa2\x2e\x8b\xc5\x6d\xc1\xcf\x59\x3b\x3a\x8a\x68\xec\xca\xf5\x70\x13\x05\xb9\xbb\xaa\x2a\x4c\xe7\x95\x6a\xe3\xc2\xb7\x21\xac\x84\x22\x94\xc3\xfb\x49\x87\x24\x19\xeb\x1b\xf6\x54\x4e\x8f\x82\x91\x18\x74\xc3\x18\x6e\xbf\xfd\x22\xb2\xf0\x53\x63\x18\x7d\x25\xfe\x97\x06\x4c\x56\x84\x8a\x56\x44\x0b\x44\xd1\x35\x8a\xad\x4a\x85\xc6\x6d\x85\x47\x28\x30\xb0\xb0\x41\x97\xec\x77\x98\xa3\x0f\xeb\xdf\x5c\x7e\xe1\x67\x3b\xf1\x39\x6c\x34\x38\xa2\x34\x43\x14\x3a\xa0\xcc\x7f\x6c\xee\x2c\x87\xa9\xdc\x22\xaa\x4d\x48\xb9\xbb\x9a\x81\x54\x04\x1f\xc6\x0d\x30\x96\xdd\x3d\xf2\xce\xde\x30\x94\xd5\xfa\xd2\x19\x7f\x7a\x25\x70\xff\x68\xc3\xbe\x05\x21\x29\x7d\xe2\x85\x90\xa8\x14\xd9\x27\xd4\x34\x19\xa2\x19\x87\xe7\xf4\xde\xbb\x14\x11\xca\xdc\x3d\x55\xc3\xdc\x9e\x31\xae\x6f\xef\x84\xe2\xbe\x8a\xfb\x8f\x21\x27\xcd\x99\xfa\x9f\xda\xa5\xe4\x81\xb7\xd1\x79\xed\x61\x58\x5d\x31\x7f\x19\x7e\x3f\xec\xe6\xbf\x64\x42\x81\x32\xe5\xac\x74\x9c\x8d\x69\xe4\xb1\x2c\x3b\x77\x4d\xe4\x6a\xd5\x4c\xa9\xd7\x66\x4a\x93\x94\x48\xfa\x25\x73\x75\x52\xc2\xfa\xd0\xed\x43\x43\x3b\x9d\x9c\x62\x3f\x7e\xfc\xa3\xff\xda\x79\xc0\x67\x0e\xf7\xc9\x8b\x0c\x73\xca\xf4\x72\xe8\x14\xcb\xa8\x80\x38\xa1\xeb\xce\xa0\x67\xd1\x57\x88\x7e\x6e\xc8\x35\x1f\xc5\x81\x3f\x79\x76\xfd\x90\xbb\x0e\x5d\xb3\x83\x2f\x34\x6c\xbf\x00\x14\xf5\xa9\x9a\x5b\x73\x66\xec\xe5\xca\xab\x77\x0a\xa0\x9d\xce\x98\x8a\x0e\x17\x5f\x9e\xf7\xfe\xdb\xee\x88\xb6\xd3\x54\x76\xa0\xbb\xa4\x9a\xd7\x94\x27\x11\x8c\x03\x71\x84\x00\xa6\xad\xa7\x3c\xbb\x13\x9a\x1d\x29\x8c\x1b\xe5\x81\x79\x85\xe8\xdc\xfb\x9f\xef\x63\xb9\x72\xd9\x54\x87\x4a\x04\x31\xa5\x16\x4c\xb4\x64\xc9\x03\xc5\x08\x18\x6e\x41\x74\xac\xfb\x6f\xca\x64\xcf\x27\xc5\xb1\x7e\x40\xb8\x5c\xce\xa2\xc5\xea\x46\x64\x2e\x0b\xce\xd9\xda\xfc\xf0\x89\x20\xdf\x85\x80\xa4\xe5\x37\xd0\xb3\x0e\x89\xab\x34\x64\xad\x3a\x6c\xca\xa2\x88\xbd\xd3\x79\xe1\x38\xee\x3b\xaf\x34\x21\x75\x8e\xc0\xf8\xd3\x63\xb6\x63\x6b\xb2\x39\x4f\x13\xad\x01\xd3\x1f\xbe\x38\x74\xa6\xf0\x83\x83\x6e\x67\x9e\x4a\xe4\xfd\x8f\x3a\x71\x1b\x63\x25\xe9\xc4\x1a\x47\x1b\xe6\xff\xad\xd4\x7f\xa5\xdb\xd3\x57\xc3\xe8\xf6\x2e\x34\x3b\x55\x5a\xeb\x72\x65\xad\xc2\x75\x28\x64\x68\x71\xa5\x6e\x5a\xf1\x82\x85\x68\x3d\x70\x19\xd0\x8c\xcf\x36\x7d\x11\x42\x10\x0c\x94\x43\x2d\xf2\x45\x72\x4d\x32\xac\xea\x9a\x4f\x6d\xb0\x0d\xf1\xfb\xf0\xf9\xe4\xb5\x97\xb9\x9a\x52\x10\x8c\xa6\x27\x65\xd0\x23\xde\x93\x04\x35\xc0\xb4\xb1\x20\xc7\x2c\xc2\xc7\xfc\xb7\x27\xce\x67\x0b\xc4\xaa\xf5\xd6\x2e\x99\x1e\x8b\x69\xb5\x5c\x44\xfe\xa5\x66\xfe\x1a\xb4\x12\xbc\x1e\x98\xa5\x7f\x2c\x96\x45\x10\x0b\xc8\x79\x98\x34\x5b\x2e\x94\xb9\x15\x0f\x18\x9b\xe7\x27\xb6\xb8\x8e\xbb\x06\x09\x81\xeb\x65\x25\x03\xb4\x41\x7a\x81\x84\x92\xee\xdb\x18\x44\x2e\xa8\xe1\x13\xce\xcf\xa3\xe6\xca\x7b\xf7\xf3\xab\x1b\xc3\xe3\x8e\x13\x8e\x29\xb0\x50\x2e\x68\x3e\x90\x97\x31\x3b\x0f\x02\x94\xdc\x97\xde\xa2\x7b\x74\xcf\x1b\x9c\x5f\xe0\xdc\xf7\xfb\x06\x34\x32\x9a\x56\x0d\xb5\x1a\x6d\x2b\x4e\xfc\x9c\xc7\x06\x9d\x2c\x29\xbb\x0c\x87\x93\xe7\xe7\x38\x49\x3f\xa2\x9a\x0a\x39\x5b\x7a\xb1\xdf\x03\xea\x9b\x84\x72\xe8\x3c\x72\xa1\xba\x4d\xbe\x29\x7d\x4d\x22\x58\xca\x84\xfa\x3a\x2c\x26\xc2\x60\x6a\xae\xce\xaa\x1e\xe5\x5e\x90\xc0\x72\x31\x00\xd7\x13\x37\x45\x9f\x1a\xdb\xf1\xf8\xe2\xf7\x9d\x4b\xe0\x7c\x66\x0f\x20\x57\xa3\xff\xd2\xa2\x72\x14\x5a\x14\x2a\xaf\xc5\x20\xad\x10\x40\xc2\x3f\x6b\xfc\xd9\x6a\xd2\x28\x7e\x73\xd8\xb8\x24\xb5\x7c\xaf\xcc\x2c\x1e\x84\xac\x5d\x65\x39\x1d\x33\x1c\x47\x05\x73\x54\x5f\x8a\xd8\x93\x56\xd4\x67\x2a\xee\x2c\x1b\x7f\xf4\x1d\x8b\x10\xa1\x30\xea\x50\x12\x0e\x13\x3f\x51\xf6\x4c\xff\xc5\xc4\x28\xb6\xb6\xe4\xb7\x6c\x53\xd4\xe4\xb9\x8a\xa9\xa3\x47\xa7\x1e\x41\x66\xe5\x7d\x3d\x1a\xae\xaa\x02\x4a\x78\x33\xd5\x69\x55\xeb\x4a\x16\x78\x0d\x8f\x14\xe8\xe9\x5f\x78\xec\x6b\x7c\xe6\x76\xe6\x0a\x15\x21\xae\x28\x06\x87\x67\xf4\x23\x0a\xeb\x87\x01\x0e\xee\x39\x00\x64\xc4\xbe\x32\x34\xdf\x75\xf9\x4c\xac\xd5\x85\x75\x6d\x35\x2c\xfa\x93\x02\xfc\x83\x05\x72\x1d\x4c\x5d\xb4\xab\x35\x3e\xc6\x3d\x44\xbe\x43\xde\x1f\x08\x81\xf9\xfb\x46\x6c\x38\xa9\xd8\x96\x36\x64\xc8\x49\x63\x7f\xcc\x3f\x4b\xd8\xf1\xb3\xc1\x0c\xe8\xd4\xd0\x82\xb6\x2b\x53\x88\x7f\xc6\x39\x56\xac\xe1\x9d\xc7\xfa\x66\x61\xf9\x0d\x95\x13\x1f\x71\x7c\x1e\x3f\xd5\x7c\x22\x08\xc2\x2e\x42\xe7\x2d\x59\x6d\xe0\x42\x4a\x0f\xdd\x00\xfa\x5c\x5a\x8c\xa9\x4d\x08\x18\xd9\x5d\x0b\x90\x5c\x53\x96\x1b\xc5\x33\x77\x9d\x54\x4b\x65\xda\x6c\xde\x76\x8f\x45\x52\xf2\xef\x26\x64\x3c\x7f\xc0\x12\x7e\x4c\x56\x35\x01\x3e\x82\x2f\x62\x88\xf7\xaf\xdc\x6c\x4d\x33\x51\x57\x72\x31\xc4\xa6\x02\x23\x9e\x60\x83\x70\x97\x1c\xed\x4f\x96\x8f\xac\x72\xdb\x57\xa2\x9a\x22\x51\x09\x82\x24\x34\x05\x82\x63\x4a\xba\x08\x48\x73\xb9\xcb\xaf\xf2\xea\xf6\x4a\x9b\x20\x00\x4e\xc1\x45\x6f\x06\x83\x17\x5c\x9b\x7a\x07\xf1\x1a\xfa\x15\x88\x0e\xee\x4a\xd9\x35\xec\xaa\x9e\x7c\x91\x2d\x24\x63\xa9\x05\x2e\x92\xb1\xb0\xb9\x9b\x49\xa9\xe2\xc1\x6c\xcc\x2c\x0a\x05\xf8\x32\xc4\xb4\x95\x19\x10\x25\xef\x06\x44\x2a\xc8\xed\x26\x12\x74\xf3\x2d\xb7\xcf\x48\xd4\xb5\x77\x42\x7d\xcf\x6e\xc7\x3d\xcd\xe6\xa7\xbe\x3a\x6a\xad\x87\xa7\x22\x36\x96\x14\x1b\x4a\x02\x09\x81\x60\x3c\xdf\x70\xb1\xfa\xc3\x36\x44\x06\x1b\x8f\x8b\x7b\xf7\x82\xe7\xb5\x60\x07\x31\xa1\xd6\x54\x81\x9d\x24\x37\x6e\xc8\x48\xa6\xe2\xde\x48\x1e\x1f\x27\xb9\xd3\xd3\xd1\x39\x66\x72\xf5\x7b\x07\x33\x5d\x0b\x9b\xf1\xab\x3f\x7f\x32\x35\xd2\xd4\x52\xcb\x68\x2d\x3c\xec\x51\x88\xee\x5c\x45\x11\x1a\xa4\x17\x0b\x34\x9b\xcf\x03\x86\xae\xb4\xde\x02\x94\xb7\xd8\x15\x64\x99\xdc\xb3\xfe\x30\x50\x09\x6d\x9d\x32\x34\xf8\x9d\x1e\x4a\x59\x15\x4f\x37\xb0\x23\xad\xd1\x26\x64\x9d\x6c\xa4\x76\x50\x04\x3a\x08\xe0\x62\x35\x51\x17\x29\xc5\xcf\xdd\xa2\x83\xcc\xbb\xd3\x86\x59\xa1\x50\x1d\x95\x1b\xe8\x4e\x88\x15\xf2\xc5\x86\x8a\xee\xf9\x1a\xe2\x28\x99\xb7\x19\xad\x4d\x35\xa6\x2d\xf9\xf6\x37\x78\x94\x26\x7b\x9e\x68\xfe\x49\xa0\x39\x24\xe3\x86\x6b\x0d\x76\xe4\x23\xc3\xdb\x78\x0e\x41\xb3\x3b\xe2\xd1\x91\x45\xe9\xdd\x6f\xb8\xdd\x8e\x6a\x05\x83\x4d\x01\xc2\xbb\xd8\x29\x2b\x4f\x6c\x2d\xa9\xb6\x39\x26\x77\xcd\x62\x2b\xe0\xf1\xd2\xa5\xaf\x78\x98\x15\x22\x0a\xb9\xa7\x92\x65\xad\x1b\x29\x62\x30\x8a\xa2\x5c\xe8\x98\xc9\xf7\x2f\xc5\x37\x6b\xf3\xc4\xa2\xbc\x76\x60\x38\xe7\x28\x46\x98\xac\xc5\x49\xec\x2a\xdb\x6a\x2c\x35\xaf\xc2\x27\x99\x2d\xfd\x1e\x86\x84\xcb\xb6\x91\x81\x1c\xa9\xd9\x74\xf0\xd0\x38\x72\x23\xd8\x2f\xb2\xca\xb2\x91\x5c\x5b\x8a\x19\xb3\x5e\xe1\x22\x90\xd4\xa2\x9c\x16\xdd\x4b\x92\x79\xac\xb0\xd2\x6d\x01\xd4\x97\xe8\x02\x71\x87\xff\xf4\x16\xf7\x37\x89\x89\x1f\x32\xa6\x70\xb9\xc7\x58\xf6\x02\x99\x86\x65\x49\x0e\x4d\x7f\xfb\xce\x83\x6f\xa7\x35\xf4\x34\x71\x0e\xee\xff\xa4\xc7\xdb\x14\x38\x4e\xa6\x4a\x27\x3e\x8d\x37\x9e\x04\x4d\xf1\x2a\x15\x16\x59\x4f\x04\x96\xe0\xca\xc4\x54\xe7\xbf\x27\x8b\xa6\x47\xf4\xe0\xb0\x51\x51\xaf\x48\xd0\xd0\x9f\x1b\xec\xa2\x99\x80\x07\x7d\xe9\xe4\x40\x70\x08\xda\x91\x87\x84\xf7\x1c\x22\x13\xea\xe0\xab\xa0\x39\x63\xe8\x6e\x46\xe8\x74\x65\x84\xa8\xe7\x7e\x1c\x2e\x12\x71\xb6\xa5\x07\x7a\xfa\xb6\x1f\x1d\x50\x12\x76\xb6\x14\xaf\x0f\x6a\x53\xce\xc7\xd7\x01\x38\x7d\x81\x7e\xd3\x35\xfb\x1e\x40\x68\xe4\x6b\x40\xcd\x2e\x54\x18\xcd\x63\xc4\x30\x24\x4c\x71\x3e\x2d\xe5\x6a\x0f\x14\xed\x24\x2a\x85\x5f\xaf\x55\xae\xa7\x9a\x2d\x58\x14\xdf\xad\xc0\xe3\xa4\xaf\x1b\xfa\x80\x8c\x84\x68\x36\x32\xe9\x18\xd1\x61\x43\xbc\xc5\xd1\x08\xa8\x91\x29\x42\x58\x0e\xf4\x94\x27\xd3\xcf\x80\xee\xc6\x67\xaf\xa5\xde\x01\x1d\x66\xbf\x01\xe3\xe4\xbf\xcf\x28\xa7\x21\xda\x79\xb5\x18\x46\xe3\x48\x11\x1e\x2c\xfe\xb0\xce\x79\xee\x86\x65\x6b\x55\x71\x34\xf5\x23\x07\x55\xd1\x84\x57\xa2\xe9\xfe\x0b\xa2\xaa\x86\x52\x9b\x61\x1b\x8e\x90\xa7\xee\x0e\x28\x37\xe8\x10\x5e\x17\x8c\x92\xf4\xc9\x90\xb5\xea\xe3\x42\xaa\x99\x6c\x19\x10\x7f\x94\x28\xa1\xce\xa6\x1f\xe1\xd4\x25\x49\x02\xf0\xf6\xa1\xbb\xe5\x2f\x7c\xfa\x36\x8c\x2b\xb0\xd0\x75\x2c\x6c\x2c\xcd\x65\x89\x9e\x37\xcb\xbc\x83\xc4\x7a\xbe\x8f\xb6\x39\xa5\x94\x13\x71\x1c\x80\x65\x41\x0e\x09\x4f\xdd\x2c\x44\x47\x37\xc5\x5a\x4c\x53\xcc\x2e\x18\x66\xbf\x74\x09\xb8\x26\x07\xea\x5c\xf1\x1b\xd6\x59\xda\x50\x4e\xed\xa4\xb3\x93\xd2\x78\x77\x69\x98\xb0\xee\x8b\xcf\xbb\x48\x5c\x64\x55\x67\x80\x2b\x1c\x46\xb2\x52\xa7\x7d\x14\xd9\x48\x0d\x52\xad\x99\xd2\x06\x52\x7c\xf0\x89\xd7\x5f\xdd\xca\x4a\x90\xbf\x45\x7f\xe1\x11\xc5\xd6\xef\xbe\x8a\xbb\xa2\x69\xf8\x77\x14\x61\xa6\x9d\x34\x69\x29\x42\xa0\x87\x90\x7c\xd9\xdf\x4b\x56\x39\xca\x2c\x8a\x2e\xa9\x39\x3b\xcb\x9c\x5e\x01\xdf\x67\xa4\x27\xa9\xba\xb5\x8a\x97\x35\x5d\xd1\x4a\x3f\x9f\x07\x0f\x5a\xeb\x11\x89\xd2\xae\x59\xc2\x74\x04\x7e\xf4\xa1\x29\x0b\x08\x80\xf2\x8d\x85\x0b\x32\x18\xaa\x24\xbb\x47\x1a\x0e\xc8\xea\xf7\x53\xdf\x6d\x1b\xab\xdc\xf0\xb4\x53\xb9\xa1\xf1\x82\xc6\x61\x6b\xb1\xed\xfc\xe6\xdb\x57\x95\x6b\x56\xd9\x80\x6c\xf0\xcf\x0b\x04\x4f\x1b\x76\xe6\x9c\x19\x72\x0d\xea\x45\x6f\x68\x8c\x78\x82\x6a\x72\x6e\xd8\xca\x79\xb3\x6a\x60\x99\xb6\xb4\x47\x7e\x54\xab\x95\xc2\x60\x15\xcb\x26\x53\xbe\x7c\xc6\x69\xc7\x20\xdc\x58\xa8\x60\x19\xf5\x8d\xcf\x14\x05\x3f\x30\x5b\x53\x83\x09\x3b\x62\xa8\x1f\xa0\x71\x7e\x3e\xab\x63\x80\x9f\xb7\xa3\x4f\xdc\x0d\x70\xc9\xbb\x9a\xff\x39\x7e\x2f\x53\x33\xec\xc1\x0a\x96\xa1\x13\x2d\xfa\x4b\xb9\xa9\xa4\xeb\xaa\x6d\xfe\x1d\xcd\xa5\x4e\x3f\x83\xf1\x9c\xa7\x29\x21\x89\xeb\x80\xad\xdb\x16\x8e\xf4\x53\xf5\xab\xdc\xb9\x01\x56\xa0\x58\x02\xc3\xa8\xdb\x1a\x37\xf8\x2d\x71\x78\xd4\x28\x8d\x18\xaf\xb4\xa2\xf9\x80\x8d\x18\x3b\x72\x34\x62\xb8\xbe\xcc\x24\x79\xd4\x8c\x32\x57\x0e\x4e\x91\xba\xe0\x05\xc2\x4e\xf9\xc6\x37\x97\x31\x1b\x89\x62\xb2\xb4\xca\xbc\x83\xe2\x02\xc0\xb1\x60\x03\x59\xa7\xc5\x21\x92\x5c\xe0\x56\xb3\x89\x4d\x91\xf5\x68\x5c\x9d\x8d\x71\x56\xa6\x77\x70\x8f\x25\x40\xf1\x89\x1e\x4c\xa2\xbe\xc2\xb5\xbd\xf4\xb8\xb2\x06\xc4\xaf\x7d\x15\x7c\xcf\x63\xfc\x52\xf5\x85\x7c\x1f\x4c\x87\x13\x70\x7f\x6b\x47\x2a\x63\x7c\x24\x41\x12\x6c\xec\x3e\x1f\xa0\x4a\x3f\x29\x03\xd9\x58\x86\x5a\x44\x82\x46\xd9\x6b\xa4\xa1\xd3\x55\x11\x64\xf8\x08\x8b\x1f\xb9\x3b\x98\x7b\x6c\xd3\xeb\x3e\x8b\xec\x52\x60\xe6\x08\xd9\xff\x14\x1a\x07\x2d\x49\x07\xe7\x95\x23\xfb\x68\x81\xc0\x63\x8c\xc9\xe7\xad\xe6\x63\xef\x18\x9a\xb8\xb6\x27\xc9\x59\x35\x36\xda\xc0\x49\x9a\x1c\x40\x5b\x44\x00\x02\xbe\x50\x71\x23\x9e\xa5\x97\xe4\xc9\x41\xdb\x85\xbe\x8c\x33\xa2\x45\xd1\xa5\xc1\x25\x9d\x0f\x13\x00\xb4\x1d\x71\xaa\x03\xba\x31\x1f\x50\x40\xb1\xe4\x2a\x96\x04\xdf\x35\xf0\xa5\x56\x09\x3f\x6a\x9d\x5d\x58\xcd\xd4\x1b\x6e\x47\x15\xce\x4a\x51\xbb\x97\xdc\x8a\xe1\x87\xb2\xba\x6f\x9b\xb8\x76\x06\xf0\xc7\x7b\x10\x80\xf2\x67\x4a\xd3\xc8\x08\xb1\x0b\x34\x51\x2a\xa7\xec\x24\x0e\xed\x4c\x51\x0a\x99\xa3\x4d\xbe\xb6\x77\xed\xec\x14\xc3\xc9\xff\x63\x24\xcf\x44\xf0\x7c\x4a\xe3\xc4\x5a\x90\x89\x23\xed\x3c\x26\x25\x33\xbb\xb0\x30\xfd\x0d\x2c\x25\xe7\x44\x57\x35\xa4\x34\x7b\x28\xfa\x2e\x8a\x2a\x2a\x52\x85\x22\x80\xb4\xce\x33\xe6\x42\x51\x02\x1f\x26\x7d\x2c\x2f\x28\x03\xbf\x6c\x5a\x39\x31\xae\xd5\x3d\x66\xef\x10\x86\xed\xfd\xe8\xf6\x41\x38\xe8\xd3\x4f\x68\xe2\x7d\x34\x44\xa7\xca\xc6\x49\xdc\xcf\xed\xb0\xc1\x81\xf4\x50\xa5\x1f\x7d\x14\x94\xdf\xcc\xc5\xa7\x79\x0b\xf6\x3a\x03\x65\x88\x22\x50\x94\xbd\xb6\x8b\x6b\xd6\xcd\xda\xd9\xe6\x17\x40\x5b\xa5\x7e\xc1\x0e\x1f\x69\x25\x13\x57\xcf\xd3\x3d\xe6\x2a\x36\x42\x45\x72\x90\x7d\x0e\x10\x2f\xcc\x22\xad\xf4\xc8\x6e\x44\x9c\xd1\xd8\x5c\x24\x6f\x81\xcd\x00\x3a\xbe\x6f\x64\xe9\x9d\x2a\x86\xf5\x7c\x15\xc1\xcc\x38\x96\x9f\xb3\xc0\xa0\x4f\x23\x14\x1a\x8e\x03\x5f\xc9\xae\x15\xdd\xbc\x2a\xcc\x57\x67\x93\xbc\xb3\xd2\x2b\xae\x9c\x52\x60\x9c\x0a\x90\x4c\x28\xd5\x17\x5d\x29\x6e\x67\xda\x38\xad\xbb\x5c\xbe\x1b\x02\x1d\x6d\x3f\x0f\xb3\x8a\x1c\x71\x3d\x28\xfc\xe4\x19\x99\x08\xfa\xd3\xe6\xbe\x4b\x32\x38\x56\x93\xbd\x86\xd3\x73\xab\xc3\x83\x62\xe7\xd7\xcf\x84\x4c\x19\x6a\x11\x6f\xcd\x23\x53\x43\x5b\xd9\xc6\xab\xa5\x2f\x07\xf2\xb0\xe3\xaa\xd0\xed\xe0\x8e\xc9\x0b\xdb\x60\x29\x10\xfa\x8f\xc7\xbc\x17\x3f\x1f\x55\x6d\x8c\x79\xe5\xa2\x54\xc7\x9a\x07\x00\xc2\xf7\x19\xa9\xa0\x78\x74\xed\x67\xb3\x88\xa6\x88\x79\x71\x90\x25\x03\xf8\xa3\xb9\x7f\x4e\x83\x44\x8f\x06\x2c\x96\x6d\xd3\xa5\xf9\xa0\x46\x3b\x2b\x8e\x2d\xf5\x93\xbb\xe9\x88\x04\xeb\x08\xa3\xe3\xdf\x24\xb8\x45\xda\x87\xcc\x04\x07\xd1\x5e\xdc\x49\xc8\xaa\x25\x53\x05\x4f\xf8\xf4\x60\xb5\x9b\xd3\x81\x94\xd6\xd0\xcb\x56\x58\xc6\x4f\x10\x4e\xc5\x9c\x9a\xa6\x57\x29\xd3\x86\xec\xbf\x5d\x15\x74\xe7\x95\xcb\x44\x7d\xb3\x01\xed\x3d\x5e\xd5\xf2\xb8\x64\xeb\xc8\x46\xdb\x2c\x10\xfe\xc9\x40\xce\x90\x30\x76\x81\x2e\x7b\xa1\x36\x7b\x94\x2a\xf5\xaf\x4c\x1f\x28\x29\xc8\x72\xbd\x9d\xd8\x1b\x9c\x79\x13\x95\x4a\xa9\xb2\xb2\xbb\xda\xc0\x25\xa4\xb6\x42\x50\xf1\x2b\x58\xbb\xbd\x4c\x0a\x61\x8a\xe8\x49\x00\xab\xa6\xb4\xa8\xfe\x7b\xaa\x03\x25\xb4\xa0\x70\x44\x2a\x46\xc9\x0e\xbe\xcd\xc7\x4e\x01\xc9\x30\x4f\x96\xae\x73\x03\xc3\x60\xb3\x1d\xc3\x19\x0f\xf2\x82\xc2\xb2\x42\x0f\x8b\x11\xa6\x80\xbf\xf7\x2c\xfb\xa5\x96\xc6\xea\x91\xc3\x46\xe1\x33\x33\x1e\xa0\x70\x5b\xad\xd6\x8e\xe3\xb0\xc1\xa9\x6b\xbf\x28\x93\x94\x10\x3f\x90\x23\x14\xee\x6f\x56\x74\x8e\xf1\xb4\xfb\xbd\x33\x51\x9d\x08\xd3\x3e\x58\x15\x17\x91\xf1\x19\xac\x7e\x8b\x70\x4b\x52\x3d\x89\x55\x73\x54\x43\x72\x99\x66\x83\x85\x13\x58\xe0\xce\x24\x65\x6b\x9b\x27\x2b\x4e\xf5\x01\x39\x86\x58\xf0\x46\x6d\x44\xdd\xbc\x18\xf1\xce\xbc\x9b\x20\x31\x52\x95\xe3\x7e\x52\x48\xf9\xfb\x19\x04\x74\x63\x8c\xc8\x38\x40\x43\x31\x0f\x10\xd4\xa3\x48\x9c\x19\xf7\xf5\x9a\x75\xb6\x2b\xcd\x49\x3e\x28\x2f\x3b\xf9\xd5\x18\xee\x8b\x78\x3d\xde\x21\x42\x69\x29\x48\x85\x72\x6f\x1d\x8b\xd6\xa1\xc0\xe9\x30\x4c\x23\x58\xc5\x50\x1d\xf6\xac\x14\x7f\xb4\x41\xff\xa7\x73\xa5\xcc\x3a\xe0\x17\xaf\x98\xf4\x0c\xb7\x46\x66\x15\xe5\x43\x89\x0f\x8c\x1a\xbe\xd1\x96\x61\xc7\x89\x81\xbe\xcf\xf7\x2b\xf0\x8b\x22\x74\xe3\x50\x1c\x75\xdb\xd6\x04\x78\x96\x77\x77\x0b\x43\x73\x95\xf4\x0f\x54\xaf\x2f\x3b\xc9\xb7\x61\xd4\x97\x19\x8d\x23\x50\x9a\x86\x63\xca\x9f\xf7\xe5\x94\xe5\x59\x26\x6c\x16\xcc\x40\x3a\xde\x09\xc4\x1b\x3c\x50\x68\xa1\x27\x45\x88\xc8\xfd\x7a\x67\x49\x98\x8e\x24\xe7\xba\x5a\xe6\x77\xdc\x7b\x69\xd8\x92\xa8\x4e\x25\xa6\x9c\x95\xe5\xaf\x67\x5b\x87\x67\x92\xae\xc9\xc3\x74\x84\x09\x3b\x45\x3f\x72\xf1\x79\x5d\xe1\x8e\xec\x40\x15\x11\xb6\x7e\x7c\x9d\x98\x6b\xd9\x9e\x1e\xf0\xea\x18\x2c\x25\xb5\x7d\xaa\x1d\xca\x04\xec\xfc\xd5\x04\x24\x60\x1c\x45\x3c\x67\x6e\x5c\x7e\x1d\x66\xa9\xc5\xc9\xa1\xb9\x3d\xf1\x71\x28\xcd\x13\xc4\x8e\x0f\x81\x9c\x44\x88\xcc\x31\xa3\xf6\x03\xfb\x33\x9f\x9e\xf3\xa2\x95\x89\xb0\xbe\x5a\x9b\xbe\xfc\x62\x0f\xeb\x69\x81\xea\xd9\xe1\x3c\x9f\x1e\xea\xeb\x8d\xc3\x4f\xd3\x8c\x0e\x89\x32\x3e\x99\x2a\xe1\x0f\x9f\xed\xa1\xe0\xfd\x40\x83\x7f\x40\x07\x49\xc0\x58\x3f\xd2\xf6\xe3\x91\x4e\x62\x90\xbe\xce\xa5\xab\x15\x51\x53\x54\xc7\xc4\xbd\x2c\x92\x57\xc0\x6b\xa9\x7f\x15\x5d\xa1\x09\x9d\xb2\x4f\xf6\xd9\xa2\xeb\xcd\xd5\x62\x6f\x84\x89\xe3\xa4\x9c\x5a\xd9\xdd\x2e\xfc\xde\xb5\xa5\x18\x83\x9e\x86\x44\xf7\x06\x03\x9a\xb8\x12\xf6\xe9\xf5\x87\x81\x30\xa9\x2d\x1d\xc1\x35\x7e\x5a\xf7\x34\x93\x71\xf8\x39\x4c\xd4\x90\x07\xda\x2c\x7b\x3f\x98\xfd\x75\x51\x64\x09\xb8\x52\x65\x7f\x06\x91\x53\x38\xa3\x31\xae\x0a\x25\x7a\x34\xd8\xab\x7b\x3d\x72\x04\x04\x6e\x1b\x2b\x59\x11\xa8\x1c\xd0\x98\xa9\x09\x0a\x3d\x95\xc3\x02\xc6\xb0\x00\x35\x9c\x0d\xb1\xc9\xc2\x1f\x66\xfd\xc4\x2a\xb2\xcb\x45\x96\x9c\x09\x5b\x2e\x4d\xb5\x9f\xa6\x8a\x97\xf6\x07\xb0\x80\x73\xa2\x7f\x43\x30\xd4\xe3\x31\x96\xc6\x0c\xf3\xaf\xba\x4c\xc8\x65\xec\x72\x90\x9b\x12\x0a\xe2\xb8\x10\x3f\xf9\xbc\xcc\x35\xd4\xde\x70\xa3\x99\x2f\x16\x51\x11\x00\x2f\x48\x4d\x55\x69\xa7\xbf\x92\xe7\x75\x7a\x9f\xda\xda\xee\x0b\xc2\x5b\x6e\x03\xb1\x7b\x2e\xd5\x56\xa7\x00\x44\x89\xb0\x24\xcf\x70\x39\x76\x42\x84\x5c\x83\x20\xac\x01\x97\xe7\x08\x14\x1b\x98\x65\xae\xbe\xfc\x1e\x7b\x96\x54\x65\xc7\x6d\xe5\x55\xdd\x38\x5d\xd0\x12\xf5\xdb\x0c\x49\xc1\xe6\x02\x0e\xbd\xf4\x17\x3c\x69\x0d\x78\x0e\x24\x6d\x65\xa2\xc2\x13\x9f\x21\x44\xf7\x41\x8f\x87\x83\xfe\xcb\x59\x73\x22\xaf\x39\xd9\xaf\x89\xfb\xec\x6b\xc4\xe8\x84\x41\xdb\xe8\xa2\x62\xe6\xbd\x05\xb3\x53\x5c\xce\xcb\xd8\x71\xfd\xdc\x69\xf7\x8e\xc4\xa1\xe9\x0a\xd3\x2a\xf9\x74\xe9\x61\xc9\x8a\xe2\x7d\x86\xc2\x84\x8f\x9e\x52\x29\x99\x1c\xe7\x94\x1a\xdc\x70\x45\xa3\x3f\xa1\xa5\xea\xbf\x55\x3f\x5f\x17\x1b\xc0\xd1\x1d\xe8\xe1\x6e\xc4\x19\xd4\x68\xe6\xb6\xc5\xca\x61\xb4\x6c\x0a\xe8\xea\xb4\xe6\xcf\xb7\xd2\x2d\xd3\xa0\x26\xd5\x45\x46\x52\x14\xeb\xaa\x2b\x97\x97\xa8\xbd\x50\xc3\x32\x01\x1a\x15\x5e\xaa\x99\x8e\x50\xfb\x8f\xe7\x11\xa8\x5b\x16\x1d\xb1\xe3\x99\x32\x53\x03\x31\x7e\x69\xfc\x32\xb8\x6d\xc1\xbb\x00\xf3\x6a\x3a\x05\x86\xec\xfe\xac\x46\x2c\xc4\x99\x78\x5f\xb3\x0f\xce\x54\x6f\x8a\x6e\x73\x5f\x45\xb4\x77\x86\xfa\xae\x82\x1e\x80\x8c\x61\x4f\x63\x43\x55\x64\x64\x2f\x43\xa4\xc9\x8a\x0c\x32\xac\x20\xea\x1e\xc4\x48\x0f\xd9\xec\xad\x4f\x6a\x4d\x5e\xc3\x9b\x98\x09\xf4\x5a\xac\xd5\x79\xea\xc5\x44\xc4\xd8\xa5\xc5\xb0\x92\x75\xad\x32\x07\x6e\x98\x11\x8d\x4b\x3c\x91\x6e\x76\xcc\xdb\xab\xc8\x15\xa5\x7d\x85\x57\x87\x2c\xea\x2a\x4b\x51\x9a\x2c\x7a\x98\x4f\x02\x3b\xf6\xb4\xb5\x79\x0c\xb5\xc1\xc4\x84\x7c\x88\xb1\xe9\x02\xcb\x8d\xfa\x60\xeb\x55\x31\x2e\xa8\xe7\xa3\xf9\x6c\x32\x5f\x48\xb8\x46\x6b\xe2\x1c\xc0\xe9\xb5\xb1\xb9\x6c\x44\x37\xd9\xb6\xec\x1d\x47\x56\x67\x1d\x57\x17\xd6\x87\x70\x74\xae\x61\x24\x7a\x93\x2f\x5e\x8f\x07\xc7\x9a\x42\x2a\xf4\x52\x44\x29\x7b\xfb\xc3\x0a\x9c\x17\x00\xe9\xc6\xea\xd0\xe3\x46\xf0\x6f\x7a\x6b\x51\xd5\x18\x0d\x5a\xa5\x87\x26\x5b\x92\xba\xe9\x34\x2c\x34\x97\xd9\x9f\x48\x3c\xeb\x18\xa1\xc1\xf7\xdc\xfb\x18\xe9\xc7\xb5\x4c\xae\x54\x6b\x4f\x94\x81\xd2\xb5\x49\xbd\x1f\x23\xb7\xa5\xb1\x70\x34\xb2\xb5\x34\x67\x70\xa6\x67\xca\x7c\x24\xaf\x5d\x14\x30\x2a\xe2\x49\x25\x31\xc0\x71\x18\xf6\xd9\x51\xde\xd0\x63\x45\xdc\x2b\xc6\x71\x14\xeb\x89\x3a\x81\xfd\xb7\x0b\xec\xfd\x77\x21\x8b\xe6\x5e\x70\xb8\xf2\x10\x73\x44\x71\xc5\x16\x1c\x47\x1c\x9d\xf4\x9d\x2e\x53\xe4\x7d\xed\x54\xb4\xd2\x7c\x1b\x9b\x98\x27\x73\x4d\x42\xbb\x70\xaa\x92\x4e\xce\x4f\xa7\x04\x6f\x5b\x31\xe6\x0a\xfc\xb2\x80\xfc\xaa\x3e\x12\xd9\xf0\x46\x86\x75\x48\x84\xeb\x3a\x88\xd8\x8c\x78\x5e\x5f\xef\x3d\x79\xc1', 2)
If you want to also obfuscate the strings, you can specify the --mix-str
option:
pyarmor obfuscate --mix-str script.py
In order to package your Python application, you need pyinstaller
:
pip install pyinstaller
Then run:
pyarmor pack script.py
In the dist
folder, you will find the obfuscated bundled application to distribute.
Upvotes: 1