Browse Source

first commit

galo 1 year ago
commit
c1667fc136
100 changed files with 22951 additions and 0 deletions
  1. 451 0
      build/main/Analysis-00.toc
  2. 177 0
      build/main/EXE-00.toc
  3. 170 0
      build/main/PKG-00.toc
  4. BIN
      build/main/PYZ-00.pyz
  5. 301 0
      build/main/PYZ-00.toc
  6. 3305 0
      build/main/Tree-00.toc
  7. 353 0
      build/main/Tree-01.toc
  8. 25 0
      build/main/Tree-02.toc
  9. BIN
      build/main/base_library.zip
  10. 30 0
      build/main/main.exe.manifest
  11. BIN
      build/main/main.pkg
  12. 33 0
      build/main/warn-main.txt
  13. 6685 0
      build/main/xref-main.html
  14. BIN
      dist/main.exe
  15. 65 0
      ffmpegpy/Lib/site-packages/PyInstaller/__init__.py
  16. 188 0
      ffmpegpy/Lib/site-packages/PyInstaller/__main__.py
  17. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/__init__.cpython-37.pyc
  18. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/__main__.cpython-37.pyc
  19. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/_recursion_to_deep_message.cpython-37.pyc
  20. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/_shared_with_waf.cpython-37.pyc
  21. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/compat.cpython-37.pyc
  22. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/config.cpython-37.pyc
  23. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/configure.cpython-37.pyc
  24. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/exceptions.cpython-37.pyc
  25. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/log.cpython-37.pyc
  26. 45 0
      ffmpegpy/Lib/site-packages/PyInstaller/_recursion_to_deep_message.py
  27. 82 0
      ffmpegpy/Lib/site-packages/PyInstaller/_shared_with_waf.py
  28. 1 0
      ffmpegpy/Lib/site-packages/PyInstaller/archive/__init__.py
  29. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/__init__.cpython-37.pyc
  30. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/pyz_crypto.cpython-37.pyc
  31. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/readers.cpython-37.pyc
  32. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/writers.cpython-37.pyc
  33. 39 0
      ffmpegpy/Lib/site-packages/PyInstaller/archive/pyz_crypto.py
  34. 242 0
      ffmpegpy/Lib/site-packages/PyInstaller/archive/readers.py
  35. 568 0
      ffmpegpy/Lib/site-packages/PyInstaller/archive/writers.py
  36. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/run.exe
  37. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/run_d.exe
  38. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/runw.exe
  39. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/runw_d.exe
  40. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/bootloader/images/icon-console.ico
  41. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/bootloader/images/icon-windowed.ico
  42. 1 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/__init__.py
  43. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/__init__.cpython-37.pyc
  44. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/api.cpython-37.pyc
  45. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/build_main.cpython-37.pyc
  46. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/datastruct.cpython-37.pyc
  47. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/icon.cpython-37.pyc
  48. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/makespec.cpython-37.pyc
  49. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/osx.cpython-37.pyc
  50. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/splash.cpython-37.pyc
  51. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/splash_templates.cpython-37.pyc
  52. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/templates.cpython-37.pyc
  53. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/toc_conversion.cpython-37.pyc
  54. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/utils.cpython-37.pyc
  55. 1028 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/api.py
  56. 842 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/build_main.py
  57. 295 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/datastruct.py
  58. 70 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/icon.py
  59. 822 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/makespec.py
  60. 264 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/osx.py
  61. 486 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/splash.py
  62. 229 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/splash_templates.py
  63. 142 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/templates.py
  64. 165 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/toc_conversion.py
  65. 698 0
      ffmpegpy/Lib/site-packages/PyInstaller/building/utils.py
  66. 769 0
      ffmpegpy/Lib/site-packages/PyInstaller/compat.py
  67. 54 0
      ffmpegpy/Lib/site-packages/PyInstaller/config.py
  68. 95 0
      ffmpegpy/Lib/site-packages/PyInstaller/configure.py
  69. 1 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__init__.py
  70. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/__init__.cpython-37.pyc
  71. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/analysis.cpython-37.pyc
  72. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/bindepend.cpython-37.pyc
  73. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/bytecode.cpython-37.pyc
  74. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/dylib.cpython-37.pyc
  75. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/imphook.cpython-37.pyc
  76. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/imphookapi.cpython-37.pyc
  77. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/utils.cpython-37.pyc
  78. 847 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/analysis.py
  79. 947 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/bindepend.py
  80. 250 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/bytecode.py
  81. 453 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/dylib.py
  82. 560 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/imphook.py
  83. 452 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/imphookapi.py
  84. 416 0
      ffmpegpy/Lib/site-packages/PyInstaller/depend/utils.py
  85. 30 0
      ffmpegpy/Lib/site-packages/PyInstaller/exceptions.py
  86. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/__pycache__/pyi_splash.cpython-37.pyc
  87. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/__pycache__/site.cpython-37.pyc
  88. 223 0
      ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/pyi_splash.py
  89. 51 0
      ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/site.py
  90. 1 0
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__init__.py
  91. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/__init__.cpython-37.pyc
  92. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.Image.cpython-37.pyc
  93. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.ImageFilter.cpython-37.pyc
  94. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.SpiderImagePlugin.cpython-37.pyc
  95. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.cpython-37.pyc
  96. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt.cpython-37.pyc
  97. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtCore.cpython-37.pyc
  98. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtGui.cpython-37.pyc
  99. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtHelp.cpython-37.pyc
  100. BIN
      ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtLocation.cpython-37.pyc

+ 451 - 0
build/main/Analysis-00.toc

@@ -0,0 +1,451 @@
+(['F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\ffmpegpyproject\\main.py'],
+ ['F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\ffmpegpyproject'],
+ ['codecs'],
+ ['f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks',
+  'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\stdhooks\\__pycache__',
+  'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\rthooks',
+  'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks\\rthooks\\__pycache__',
+  'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\_pyinstaller_hooks_contrib\\hooks'],
+ {},
+ [],
+ [],
+ False,
+ False,
+ False,
+ '3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit '
+ '(AMD64)]',
+ [('pyi_rth_subprocess',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_subprocess.py',
+   'PYSOURCE'),
+  ('main',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\ffmpegpyproject\\main.py',
+   'PYSOURCE')],
+ [('base64',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\base64.py',
+   'PYMODULE'),
+  ('getopt',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\getopt.py',
+   'PYMODULE'),
+  ('gettext',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\gettext.py',
+   'PYMODULE'),
+  ('copy',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\copy.py',
+   'PYMODULE'),
+  ('struct',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\struct.py',
+   'PYMODULE'),
+  ('bz2',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\bz2.py',
+   'PYMODULE'),
+  ('threading',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\threading.py',
+   'PYMODULE'),
+  ('_threading_local',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_threading_local.py',
+   'PYMODULE'),
+  ('contextlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\contextlib.py',
+   'PYMODULE'),
+  ('_strptime',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_strptime.py',
+   'PYMODULE'),
+  ('datetime',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\datetime.py',
+   'PYMODULE'),
+  ('calendar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\calendar.py',
+   'PYMODULE'),
+  ('argparse',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\argparse.py',
+   'PYMODULE'),
+  ('textwrap',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\textwrap.py',
+   'PYMODULE'),
+  ('_compression',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_compression.py',
+   'PYMODULE'),
+  ('stringprep',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\stringprep.py',
+   'PYMODULE'),
+  ('quopri',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\quopri.py',
+   'PYMODULE'),
+  ('_py_abc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_py_abc.py',
+   'PYMODULE'),
+  ('token',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\token.py',
+   'PYMODULE'),
+  ('tracemalloc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\tracemalloc.py',
+   'PYMODULE'),
+  ('pickle',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\pickle.py',
+   'PYMODULE'),
+  ('pprint',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\pprint.py',
+   'PYMODULE'),
+  ('_compat_pickle',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_compat_pickle.py',
+   'PYMODULE'),
+  ('ntpath',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ntpath.py',
+   'PYMODULE'),
+  ('string',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\string.py',
+   'PYMODULE'),
+  ('genericpath',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\genericpath.py',
+   'PYMODULE'),
+  ('stat',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\stat.py',
+   'PYMODULE'),
+  ('fnmatch',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\fnmatch.py',
+   'PYMODULE'),
+  ('posixpath',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\posixpath.py',
+   'PYMODULE'),
+  ('typing',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\typing.py',
+   'PYMODULE'),
+  ('keyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\__init__.py',
+   'PYMODULE'),
+  ('keyboard._canonical_names',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_canonical_names.py',
+   'PYMODULE'),
+  ('keyboard._generic',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_generic.py',
+   'PYMODULE'),
+  ('keyboard._keyboard_event',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_keyboard_event.py',
+   'PYMODULE'),
+  ('json',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\__init__.py',
+   'PYMODULE'),
+  ('json.encoder',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\encoder.py',
+   'PYMODULE'),
+  ('json.decoder',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\decoder.py',
+   'PYMODULE'),
+  ('json.scanner',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\scanner.py',
+   'PYMODULE'),
+  ('keyboard._darwinkeyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_darwinkeyboard.py',
+   'PYMODULE'),
+  ('ctypes.util',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\util.py',
+   'PYMODULE'),
+  ('tempfile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\tempfile.py',
+   'PYMODULE'),
+  ('random',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\random.py',
+   'PYMODULE'),
+  ('bisect',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\bisect.py',
+   'PYMODULE'),
+  ('hashlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\hashlib.py',
+   'PYMODULE'),
+  ('logging',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\logging\\__init__.py',
+   'PYMODULE'),
+  ('ctypes._aix',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\_aix.py',
+   'PYMODULE'),
+  ('ctypes.macholib.dyld',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\dyld.py',
+   'PYMODULE'),
+  ('ctypes.macholib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\__init__.py',
+   'PYMODULE'),
+  ('ctypes.macholib.dylib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\dylib.py',
+   'PYMODULE'),
+  ('ctypes.macholib.framework',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\framework.py',
+   'PYMODULE'),
+  ('importlib.machinery',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\machinery.py',
+   'PYMODULE'),
+  ('importlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\__init__.py',
+   'PYMODULE'),
+  ('importlib.abc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\abc.py',
+   'PYMODULE'),
+  ('importlib._bootstrap_external',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\_bootstrap_external.py',
+   'PYMODULE'),
+  ('importlib._bootstrap',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\_bootstrap.py',
+   'PYMODULE'),
+  ('shutil',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\shutil.py',
+   'PYMODULE'),
+  ('zipfile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\zipfile.py',
+   'PYMODULE'),
+  ('py_compile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\py_compile.py',
+   'PYMODULE'),
+  ('importlib.util',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\util.py',
+   'PYMODULE'),
+  ('tarfile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\tarfile.py',
+   'PYMODULE'),
+  ('gzip',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\gzip.py',
+   'PYMODULE'),
+  ('lzma',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\lzma.py',
+   'PYMODULE'),
+  ('ctypes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\__init__.py',
+   'PYMODULE'),
+  ('ctypes._endian',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\_endian.py',
+   'PYMODULE'),
+  ('keyboard._nixkeyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_nixkeyboard.py',
+   'PYMODULE'),
+  ('keyboard._nixcommon',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_nixcommon.py',
+   'PYMODULE'),
+  ('glob',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\glob.py',
+   'PYMODULE'),
+  ('keyboard._winkeyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_winkeyboard.py',
+   'PYMODULE'),
+  ('ctypes.wintypes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\wintypes.py',
+   'PYMODULE'),
+  ('platform',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\platform.py',
+   'PYMODULE'),
+  ('socket',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\socket.py',
+   'PYMODULE'),
+  ('selectors',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\selectors.py',
+   'PYMODULE'),
+  ('queue',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\queue.py',
+   'PYMODULE'),
+  ('__future__',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\__future__.py',
+   'PYMODULE'),
+  ('os',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\os.py',
+   'PYMODULE'),
+  ('subprocess',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\subprocess.py',
+   'PYMODULE'),
+  ('signal',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\signal.py',
+   'PYMODULE')],
+ [('api-ms-win-crt-locale-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-locale-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-runtime-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-runtime-l1-1-0.dll',
+   'BINARY'),
+  ('python37.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\python37.dll',
+   'BINARY'),
+  ('api-ms-win-crt-heap-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-heap-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-stdio-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-stdio-l1-1-0.dll',
+   'BINARY'),
+  ('VCRUNTIME140.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\VCRUNTIME140.dll',
+   'BINARY'),
+  ('api-ms-win-crt-math-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-math-l1-1-0.dll',
+   'BINARY'),
+  ('ucrtbase.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla Firefox\\ucrtbase.dll',
+   'BINARY'),
+  ('api-ms-win-crt-filesystem-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-filesystem-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-conio-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-conio-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-convert-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-convert-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-process-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-process-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-string-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-string-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-time-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-time-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-environment-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-environment-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-file-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-file-l1-2-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-synch-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-synch-l1-2-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-file-l2-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-file-l2-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-processthreads-l1-1-1.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-processthreads-l1-1-1.dll',
+   'BINARY'),
+  ('api-ms-win-core-timezone-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-timezone-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-localization-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-localization-l1-2-0.dll',
+   'BINARY'),
+  ('_bz2',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_bz2.pyd',
+   'EXTENSION'),
+  ('unicodedata',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\unicodedata.pyd',
+   'EXTENSION'),
+  ('_hashlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_hashlib.pyd',
+   'EXTENSION'),
+  ('_lzma',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_lzma.pyd',
+   'EXTENSION'),
+  ('_ctypes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_ctypes.pyd',
+   'EXTENSION'),
+  ('select',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\select.pyd',
+   'EXTENSION'),
+  ('_socket',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_socket.pyd',
+   'EXTENSION'),
+  ('_queue',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_queue.pyd',
+   'EXTENSION'),
+  ('libcrypto-1_1.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\libcrypto-1_1.dll',
+   'BINARY'),
+  ('api-ms-win-crt-utility-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-utility-l1-1-0.dll',
+   'BINARY')],
+ [],
+ [],
+ [('base_library.zip',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\base_library.zip',
+   'DATA')],
+ [])

+ 177 - 0
build/main/EXE-00.toc

@@ -0,0 +1,177 @@
+('F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\dist\\main.exe',
+ False,
+ False,
+ False,
+ 'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\bootloader\\images\\icon-windowed.ico',
+ None,
+ False,
+ False,
+ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"><assemblyIdentity name="main" processorArchitecture="amd64" type="win32" version="1.0.0.0"/><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="asInvoker" uiAccess="false"/></requestedPrivileges></security></trustInfo><dependency><dependentAssembly><assemblyIdentity language="*" name="Microsoft.Windows.Common-Controls" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" type="win32" version="6.0.0.0"/></dependentAssembly></dependency><compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"><application><supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/></application></compatibility><application xmlns="urn:schemas-microsoft-com:asm.v3"><windowsSettings><longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware></windowsSettings></application></assembly>',
+ True,
+ True,
+ False,
+ None,
+ None,
+ None,
+ 'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\main.pkg',
+ [('PYZ-00.pyz',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\PYZ-00.pyz',
+   'PYZ'),
+  ('struct',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\struct.pyo',
+   'PYMODULE'),
+  ('pyimod01_os_path',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod01_os_path.pyc',
+   'PYMODULE'),
+  ('pyimod02_archive',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod02_archive.pyc',
+   'PYMODULE'),
+  ('pyimod03_importers',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod03_importers.pyc',
+   'PYMODULE'),
+  ('pyimod04_ctypes',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod04_ctypes.pyc',
+   'PYMODULE'),
+  ('pyiboot01_bootstrap',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py',
+   'PYSOURCE'),
+  ('pyi_rth_subprocess',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_subprocess.py',
+   'PYSOURCE'),
+  ('main',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\ffmpegpyproject\\main.py',
+   'PYSOURCE'),
+  ('api-ms-win-crt-locale-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-locale-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-runtime-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-runtime-l1-1-0.dll',
+   'BINARY'),
+  ('python37.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\python37.dll',
+   'BINARY'),
+  ('api-ms-win-crt-heap-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-heap-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-stdio-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-stdio-l1-1-0.dll',
+   'BINARY'),
+  ('VCRUNTIME140.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\VCRUNTIME140.dll',
+   'BINARY'),
+  ('api-ms-win-crt-math-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-math-l1-1-0.dll',
+   'BINARY'),
+  ('ucrtbase.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla Firefox\\ucrtbase.dll',
+   'BINARY'),
+  ('api-ms-win-crt-filesystem-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-filesystem-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-conio-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-conio-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-convert-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-convert-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-process-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-process-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-string-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-string-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-time-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-time-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-environment-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-environment-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-file-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-file-l1-2-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-synch-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-synch-l1-2-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-file-l2-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-file-l2-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-processthreads-l1-1-1.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-processthreads-l1-1-1.dll',
+   'BINARY'),
+  ('api-ms-win-core-timezone-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-timezone-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-localization-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-localization-l1-2-0.dll',
+   'BINARY'),
+  ('_bz2',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_bz2.pyd',
+   'EXTENSION'),
+  ('unicodedata',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\unicodedata.pyd',
+   'EXTENSION'),
+  ('_hashlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_hashlib.pyd',
+   'EXTENSION'),
+  ('_lzma',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_lzma.pyd',
+   'EXTENSION'),
+  ('_ctypes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_ctypes.pyd',
+   'EXTENSION'),
+  ('select',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\select.pyd',
+   'EXTENSION'),
+  ('_socket',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_socket.pyd',
+   'EXTENSION'),
+  ('_queue',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_queue.pyd',
+   'EXTENSION'),
+  ('libcrypto-1_1.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\libcrypto-1_1.dll',
+   'BINARY'),
+  ('api-ms-win-crt-utility-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-utility-l1-1-0.dll',
+   'BINARY'),
+  ('base_library.zip',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\base_library.zip',
+   'DATA')],
+ [],
+ False,
+ False,
+ 1656390656,
+ [('runw.exe',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\bootloader\\Windows-64bit\\runw.exe',
+   'EXECUTABLE')])

+ 170 - 0
build/main/PKG-00.toc

@@ -0,0 +1,170 @@
+('F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\main.pkg',
+ {'BINARY': 1,
+  'DATA': 1,
+  'EXECUTABLE': 1,
+  'EXTENSION': 1,
+  'PYMODULE': 1,
+  'PYSOURCE': 1,
+  'PYZ': 0,
+  'SPLASH': 1},
+ [('PYZ-00.pyz',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\PYZ-00.pyz',
+   'PYZ'),
+  ('struct',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\struct.pyo',
+   'PYMODULE'),
+  ('pyimod01_os_path',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod01_os_path.pyc',
+   'PYMODULE'),
+  ('pyimod02_archive',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod02_archive.pyc',
+   'PYMODULE'),
+  ('pyimod03_importers',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod03_importers.pyc',
+   'PYMODULE'),
+  ('pyimod04_ctypes',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyimod04_ctypes.pyc',
+   'PYMODULE'),
+  ('pyiboot01_bootstrap',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py',
+   'PYSOURCE'),
+  ('pyi_rth_subprocess',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_subprocess.py',
+   'PYSOURCE'),
+  ('main',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\ffmpegpyproject\\main.py',
+   'PYSOURCE'),
+  ('api-ms-win-crt-locale-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-locale-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-runtime-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-runtime-l1-1-0.dll',
+   'BINARY'),
+  ('python37.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\python37.dll',
+   'BINARY'),
+  ('api-ms-win-crt-heap-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-heap-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-stdio-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-stdio-l1-1-0.dll',
+   'BINARY'),
+  ('VCRUNTIME140.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\VCRUNTIME140.dll',
+   'BINARY'),
+  ('api-ms-win-crt-math-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-math-l1-1-0.dll',
+   'BINARY'),
+  ('ucrtbase.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla Firefox\\ucrtbase.dll',
+   'BINARY'),
+  ('api-ms-win-crt-filesystem-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-filesystem-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-conio-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-conio-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-convert-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-convert-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-process-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-process-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-string-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-string-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-time-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-time-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-crt-environment-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-environment-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-file-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-file-l1-2-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-synch-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-synch-l1-2-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-file-l2-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-file-l2-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-processthreads-l1-1-1.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-processthreads-l1-1-1.dll',
+   'BINARY'),
+  ('api-ms-win-core-timezone-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-timezone-l1-1-0.dll',
+   'BINARY'),
+  ('api-ms-win-core-localization-l1-2-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-core-localization-l1-2-0.dll',
+   'BINARY'),
+  ('_bz2',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_bz2.pyd',
+   'EXTENSION'),
+  ('unicodedata',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\unicodedata.pyd',
+   'EXTENSION'),
+  ('_hashlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_hashlib.pyd',
+   'EXTENSION'),
+  ('_lzma',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_lzma.pyd',
+   'EXTENSION'),
+  ('_ctypes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_ctypes.pyd',
+   'EXTENSION'),
+  ('select',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\select.pyd',
+   'EXTENSION'),
+  ('_socket',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_socket.pyd',
+   'EXTENSION'),
+  ('_queue',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\_queue.pyd',
+   'EXTENSION'),
+  ('libcrypto-1_1.dll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\\libcrypto-1_1.dll',
+   'BINARY'),
+  ('api-ms-win-crt-utility-l1-1-0.dll',
+   'C:\\Users\\windows 10\\AppData\\Local\\Mozilla '
+   'Firefox\\api-ms-win-crt-utility-l1-1-0.dll',
+   'BINARY'),
+  ('base_library.zip',
+   'F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\base_library.zip',
+   'DATA')],
+ False,
+ False,
+ False,
+ [],
+ None,
+ None,
+ None)

BIN
build/main/PYZ-00.pyz


+ 301 - 0
build/main/PYZ-00.toc

@@ -0,0 +1,301 @@
+('F:\\Users\\Galo\\Documents\\GitHub\\PyFFMPEG\\build\\main\\PYZ-00.pyz',
+ [('base64',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\base64.py',
+   'PYMODULE'),
+  ('getopt',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\getopt.py',
+   'PYMODULE'),
+  ('gettext',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\gettext.py',
+   'PYMODULE'),
+  ('copy',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\copy.py',
+   'PYMODULE'),
+  ('struct',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\struct.py',
+   'PYMODULE'),
+  ('bz2',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\bz2.py',
+   'PYMODULE'),
+  ('threading',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\threading.py',
+   'PYMODULE'),
+  ('_threading_local',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_threading_local.py',
+   'PYMODULE'),
+  ('contextlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\contextlib.py',
+   'PYMODULE'),
+  ('_strptime',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_strptime.py',
+   'PYMODULE'),
+  ('datetime',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\datetime.py',
+   'PYMODULE'),
+  ('calendar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\calendar.py',
+   'PYMODULE'),
+  ('argparse',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\argparse.py',
+   'PYMODULE'),
+  ('textwrap',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\textwrap.py',
+   'PYMODULE'),
+  ('_compression',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_compression.py',
+   'PYMODULE'),
+  ('stringprep',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\stringprep.py',
+   'PYMODULE'),
+  ('quopri',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\quopri.py',
+   'PYMODULE'),
+  ('_py_abc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_py_abc.py',
+   'PYMODULE'),
+  ('token',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\token.py',
+   'PYMODULE'),
+  ('tracemalloc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\tracemalloc.py',
+   'PYMODULE'),
+  ('pickle',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\pickle.py',
+   'PYMODULE'),
+  ('pprint',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\pprint.py',
+   'PYMODULE'),
+  ('_compat_pickle',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\_compat_pickle.py',
+   'PYMODULE'),
+  ('ntpath',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ntpath.py',
+   'PYMODULE'),
+  ('string',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\string.py',
+   'PYMODULE'),
+  ('genericpath',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\genericpath.py',
+   'PYMODULE'),
+  ('stat',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\stat.py',
+   'PYMODULE'),
+  ('fnmatch',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\fnmatch.py',
+   'PYMODULE'),
+  ('posixpath',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\posixpath.py',
+   'PYMODULE'),
+  ('typing',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\typing.py',
+   'PYMODULE'),
+  ('keyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\__init__.py',
+   'PYMODULE'),
+  ('keyboard._canonical_names',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_canonical_names.py',
+   'PYMODULE'),
+  ('keyboard._generic',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_generic.py',
+   'PYMODULE'),
+  ('keyboard._keyboard_event',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_keyboard_event.py',
+   'PYMODULE'),
+  ('json',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\__init__.py',
+   'PYMODULE'),
+  ('json.encoder',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\encoder.py',
+   'PYMODULE'),
+  ('json.decoder',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\decoder.py',
+   'PYMODULE'),
+  ('json.scanner',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\json\\scanner.py',
+   'PYMODULE'),
+  ('keyboard._darwinkeyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_darwinkeyboard.py',
+   'PYMODULE'),
+  ('ctypes.util',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\util.py',
+   'PYMODULE'),
+  ('tempfile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\tempfile.py',
+   'PYMODULE'),
+  ('random',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\random.py',
+   'PYMODULE'),
+  ('bisect',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\bisect.py',
+   'PYMODULE'),
+  ('hashlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\hashlib.py',
+   'PYMODULE'),
+  ('logging',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\logging\\__init__.py',
+   'PYMODULE'),
+  ('ctypes._aix',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\_aix.py',
+   'PYMODULE'),
+  ('ctypes.macholib.dyld',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\dyld.py',
+   'PYMODULE'),
+  ('ctypes.macholib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\__init__.py',
+   'PYMODULE'),
+  ('ctypes.macholib.dylib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\dylib.py',
+   'PYMODULE'),
+  ('ctypes.macholib.framework',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\macholib\\framework.py',
+   'PYMODULE'),
+  ('importlib.machinery',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\machinery.py',
+   'PYMODULE'),
+  ('importlib',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\__init__.py',
+   'PYMODULE'),
+  ('importlib.abc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\abc.py',
+   'PYMODULE'),
+  ('importlib._bootstrap_external',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\_bootstrap_external.py',
+   'PYMODULE'),
+  ('importlib._bootstrap',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\_bootstrap.py',
+   'PYMODULE'),
+  ('shutil',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\shutil.py',
+   'PYMODULE'),
+  ('zipfile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\zipfile.py',
+   'PYMODULE'),
+  ('py_compile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\py_compile.py',
+   'PYMODULE'),
+  ('importlib.util',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\importlib\\util.py',
+   'PYMODULE'),
+  ('tarfile',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\tarfile.py',
+   'PYMODULE'),
+  ('gzip',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\gzip.py',
+   'PYMODULE'),
+  ('lzma',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\lzma.py',
+   'PYMODULE'),
+  ('ctypes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\__init__.py',
+   'PYMODULE'),
+  ('ctypes._endian',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\_endian.py',
+   'PYMODULE'),
+  ('keyboard._nixkeyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_nixkeyboard.py',
+   'PYMODULE'),
+  ('keyboard._nixcommon',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_nixcommon.py',
+   'PYMODULE'),
+  ('glob',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\glob.py',
+   'PYMODULE'),
+  ('keyboard._winkeyboard',
+   'f:\\users\\galo\\documents\\github\\pyffmpeg\\ffmpegpy\\lib\\site-packages\\keyboard\\_winkeyboard.py',
+   'PYMODULE'),
+  ('ctypes.wintypes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\ctypes\\wintypes.py',
+   'PYMODULE'),
+  ('platform',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\platform.py',
+   'PYMODULE'),
+  ('socket',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\socket.py',
+   'PYMODULE'),
+  ('selectors',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\selectors.py',
+   'PYMODULE'),
+  ('queue',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\queue.py',
+   'PYMODULE'),
+  ('__future__',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\__future__.py',
+   'PYMODULE'),
+  ('os',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\os.py',
+   'PYMODULE'),
+  ('subprocess',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\subprocess.py',
+   'PYMODULE'),
+  ('signal',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\lib\\signal.py',
+   'PYMODULE')])

+ 3305 - 0
build/main/Tree-00.toc

@@ -0,0 +1,3305 @@
+('C:\\Users\\windows '
+ '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6',
+ 'tcl',
+ ['demos', '*.lib', 'tclConfig.sh'],
+ 'DATA',
+ [('tcl\\auto.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\auto.tcl',
+   'DATA'),
+  ('tcl\\clock.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\clock.tcl',
+   'DATA'),
+  ('tcl\\history.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\history.tcl',
+   'DATA'),
+  ('tcl\\init.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\init.tcl',
+   'DATA'),
+  ('tcl\\package.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\package.tcl',
+   'DATA'),
+  ('tcl\\parray.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\parray.tcl',
+   'DATA'),
+  ('tcl\\safe.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\safe.tcl',
+   'DATA'),
+  ('tcl\\tclIndex',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tclIndex',
+   'DATA'),
+  ('tcl\\tm.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tm.tcl',
+   'DATA'),
+  ('tcl\\word.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\word.tcl',
+   'DATA'),
+  ('tcl\\tzdata\\CET',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\CET',
+   'DATA'),
+  ('tcl\\tzdata\\CST6CDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\CST6CDT',
+   'DATA'),
+  ('tcl\\tzdata\\Cuba',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Cuba',
+   'DATA'),
+  ('tcl\\tzdata\\EET',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\EET',
+   'DATA'),
+  ('tcl\\tzdata\\Egypt',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Egypt',
+   'DATA'),
+  ('tcl\\tzdata\\Eire',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Eire',
+   'DATA'),
+  ('tcl\\tzdata\\EST',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\EST',
+   'DATA'),
+  ('tcl\\tzdata\\EST5EDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\EST5EDT',
+   'DATA'),
+  ('tcl\\tzdata\\GB',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\GB',
+   'DATA'),
+  ('tcl\\tzdata\\GB-Eire',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\GB-Eire',
+   'DATA'),
+  ('tcl\\tzdata\\GMT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\GMT',
+   'DATA'),
+  ('tcl\\tzdata\\GMT+0',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\GMT+0',
+   'DATA'),
+  ('tcl\\tzdata\\GMT-0',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\GMT-0',
+   'DATA'),
+  ('tcl\\tzdata\\GMT0',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\GMT0',
+   'DATA'),
+  ('tcl\\tzdata\\Greenwich',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Greenwich',
+   'DATA'),
+  ('tcl\\tzdata\\Hongkong',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Hongkong',
+   'DATA'),
+  ('tcl\\tzdata\\HST',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\HST',
+   'DATA'),
+  ('tcl\\tzdata\\Iceland',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Iceland',
+   'DATA'),
+  ('tcl\\tzdata\\Iran',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Iran',
+   'DATA'),
+  ('tcl\\tzdata\\Israel',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Israel',
+   'DATA'),
+  ('tcl\\tzdata\\Jamaica',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Jamaica',
+   'DATA'),
+  ('tcl\\tzdata\\Japan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Japan',
+   'DATA'),
+  ('tcl\\tzdata\\Kwajalein',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Kwajalein',
+   'DATA'),
+  ('tcl\\tzdata\\Libya',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Libya',
+   'DATA'),
+  ('tcl\\tzdata\\MET',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\MET',
+   'DATA'),
+  ('tcl\\tzdata\\MST',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\MST',
+   'DATA'),
+  ('tcl\\tzdata\\MST7MDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\MST7MDT',
+   'DATA'),
+  ('tcl\\tzdata\\Navajo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Navajo',
+   'DATA'),
+  ('tcl\\tzdata\\NZ',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\NZ',
+   'DATA'),
+  ('tcl\\tzdata\\NZ-CHAT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\NZ-CHAT',
+   'DATA'),
+  ('tcl\\tzdata\\Poland',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Poland',
+   'DATA'),
+  ('tcl\\tzdata\\Portugal',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Portugal',
+   'DATA'),
+  ('tcl\\tzdata\\PRC',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\PRC',
+   'DATA'),
+  ('tcl\\tzdata\\PST8PDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\PST8PDT',
+   'DATA'),
+  ('tcl\\tzdata\\ROC',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\ROC',
+   'DATA'),
+  ('tcl\\tzdata\\ROK',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\ROK',
+   'DATA'),
+  ('tcl\\tzdata\\Singapore',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Singapore',
+   'DATA'),
+  ('tcl\\tzdata\\Turkey',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Turkey',
+   'DATA'),
+  ('tcl\\tzdata\\UCT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\UCT',
+   'DATA'),
+  ('tcl\\tzdata\\Universal',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Universal',
+   'DATA'),
+  ('tcl\\tzdata\\UTC',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\UTC',
+   'DATA'),
+  ('tcl\\tzdata\\W-SU',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\W-SU',
+   'DATA'),
+  ('tcl\\tzdata\\WET',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\WET',
+   'DATA'),
+  ('tcl\\tzdata\\Zulu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Zulu',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Alaska',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Alaska',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Aleutian',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Aleutian',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Arizona',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Arizona',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Central',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Central',
+   'DATA'),
+  ('tcl\\tzdata\\US\\East-Indiana',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\East-Indiana',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Eastern',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Eastern',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Hawaii',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Hawaii',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Indiana-Starke',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Indiana-Starke',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Michigan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Michigan',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Mountain',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Mountain',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Pacific',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Pacific',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Pacific-New',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Pacific-New',
+   'DATA'),
+  ('tcl\\tzdata\\US\\Samoa',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\US\\Samoa',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\AST4',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\AST4',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\AST4ADT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\AST4ADT',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\CST6',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\CST6',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\CST6CDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\CST6CDT',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\EST5',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\EST5',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\EST5EDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\EST5EDT',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\HST10',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\HST10',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\MST7',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\MST7',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\MST7MDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\MST7MDT',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\PST8',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\PST8',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\PST8PDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\PST8PDT',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\YST9',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\YST9',
+   'DATA'),
+  ('tcl\\tzdata\\SystemV\\YST9YDT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\SystemV\\YST9YDT',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Apia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Apia',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Auckland',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Auckland',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Bougainville',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Bougainville',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Chatham',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Chatham',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Chuuk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Chuuk',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Easter',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Easter',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Efate',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Efate',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Enderbury',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Enderbury',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Fakaofo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Fakaofo',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Fiji',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Fiji',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Funafuti',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Funafuti',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Galapagos',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Galapagos',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Gambier',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Gambier',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Guadalcanal',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Guadalcanal',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Guam',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Guam',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Honolulu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Honolulu',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Johnston',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Johnston',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Kiritimati',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Kiritimati',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Kosrae',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Kosrae',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Kwajalein',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Kwajalein',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Majuro',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Majuro',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Marquesas',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Marquesas',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Midway',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Midway',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Nauru',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Nauru',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Niue',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Niue',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Norfolk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Norfolk',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Noumea',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Noumea',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Pago_Pago',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Pago_Pago',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Palau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Palau',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Pitcairn',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Pitcairn',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Pohnpei',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Pohnpei',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Ponape',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Ponape',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Port_Moresby',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Port_Moresby',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Rarotonga',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Rarotonga',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Saipan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Saipan',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Samoa',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Samoa',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Tahiti',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Tahiti',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Tarawa',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Tarawa',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Tongatapu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Tongatapu',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Truk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Truk',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Wake',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Wake',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Wallis',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Wallis',
+   'DATA'),
+  ('tcl\\tzdata\\Pacific\\Yap',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Pacific\\Yap',
+   'DATA'),
+  ('tcl\\tzdata\\Mexico\\BajaNorte',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Mexico\\BajaNorte',
+   'DATA'),
+  ('tcl\\tzdata\\Mexico\\BajaSur',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Mexico\\BajaSur',
+   'DATA'),
+  ('tcl\\tzdata\\Mexico\\General',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Mexico\\General',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Antananarivo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Antananarivo',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Chagos',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Chagos',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Christmas',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Christmas',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Cocos',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Cocos',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Comoro',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Comoro',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Kerguelen',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Kerguelen',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Mahe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Mahe',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Maldives',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Maldives',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Mauritius',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Mauritius',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Mayotte',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Mayotte',
+   'DATA'),
+  ('tcl\\tzdata\\Indian\\Reunion',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Indian\\Reunion',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Amsterdam',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Amsterdam',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Andorra',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Andorra',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Astrakhan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Astrakhan',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Athens',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Athens',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Belfast',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Belfast',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Belgrade',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Belgrade',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Berlin',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Berlin',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Bratislava',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Bratislava',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Brussels',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Brussels',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Bucharest',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Bucharest',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Budapest',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Budapest',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Busingen',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Busingen',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Chisinau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Chisinau',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Copenhagen',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Copenhagen',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Dublin',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Dublin',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Gibraltar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Gibraltar',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Guernsey',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Guernsey',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Helsinki',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Helsinki',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Isle_of_Man',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Isle_of_Man',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Istanbul',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Istanbul',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Jersey',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Jersey',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Kaliningrad',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Kaliningrad',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Kiev',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Kiev',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Kirov',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Kirov',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Lisbon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Lisbon',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Ljubljana',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Ljubljana',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\London',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\London',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Luxembourg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Luxembourg',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Madrid',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Madrid',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Malta',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Malta',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Mariehamn',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Mariehamn',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Minsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Minsk',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Monaco',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Monaco',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Moscow',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Moscow',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Nicosia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Nicosia',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Oslo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Oslo',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Paris',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Paris',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Podgorica',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Podgorica',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Prague',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Prague',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Riga',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Riga',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Rome',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Rome',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Samara',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Samara',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\San_Marino',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\San_Marino',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Sarajevo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Sarajevo',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Saratov',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Saratov',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Simferopol',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Simferopol',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Skopje',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Skopje',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Sofia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Sofia',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Stockholm',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Stockholm',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Tallinn',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Tallinn',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Tirane',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Tirane',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Tiraspol',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Tiraspol',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Ulyanovsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Ulyanovsk',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Uzhgorod',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Uzhgorod',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Vaduz',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Vaduz',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Vatican',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Vatican',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Vienna',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Vienna',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Vilnius',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Vilnius',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Volgograd',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Volgograd',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Warsaw',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Warsaw',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Zagreb',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Zagreb',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Zaporozhye',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Zaporozhye',
+   'DATA'),
+  ('tcl\\tzdata\\Europe\\Zurich',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Europe\\Zurich',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+0',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+0',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+1',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+1',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+10',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+10',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+11',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+11',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+12',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+12',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+2',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+2',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+3',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+3',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+4',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+4',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+5',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+5',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+6',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+6',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+7',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+7',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+8',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+8',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT+9',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT+9',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-0',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-0',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-1',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-1',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-10',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-10',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-11',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-11',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-12',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-12',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-13',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-13',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-14',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-14',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-2',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-2',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-3',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-3',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-4',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-4',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-5',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-5',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-6',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-6',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-7',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-7',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-8',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-8',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT-9',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT-9',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\GMT0',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\GMT0',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\Greenwich',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\Greenwich',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\UCT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\UCT',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\Universal',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\Universal',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\UTC',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\UTC',
+   'DATA'),
+  ('tcl\\tzdata\\Etc\\Zulu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Etc\\Zulu',
+   'DATA'),
+  ('tcl\\tzdata\\Chile\\Continental',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Chile\\Continental',
+   'DATA'),
+  ('tcl\\tzdata\\Chile\\EasterIsland',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Chile\\EasterIsland',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Atlantic',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Atlantic',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Central',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Central',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\East-Saskatchewan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\East-Saskatchewan',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Eastern',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Eastern',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Mountain',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Mountain',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Newfoundland',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Newfoundland',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Pacific',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Pacific',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Saskatchewan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Saskatchewan',
+   'DATA'),
+  ('tcl\\tzdata\\Canada\\Yukon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Canada\\Yukon',
+   'DATA'),
+  ('tcl\\tzdata\\Brazil\\Acre',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Brazil\\Acre',
+   'DATA'),
+  ('tcl\\tzdata\\Brazil\\DeNoronha',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Brazil\\DeNoronha',
+   'DATA'),
+  ('tcl\\tzdata\\Brazil\\East',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Brazil\\East',
+   'DATA'),
+  ('tcl\\tzdata\\Brazil\\West',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Brazil\\West',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\ACT',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\ACT',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Adelaide',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Adelaide',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Brisbane',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Brisbane',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Broken_Hill',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Broken_Hill',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Canberra',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Canberra',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Currie',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Currie',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Darwin',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Darwin',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Eucla',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Eucla',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Hobart',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Hobart',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\LHI',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\LHI',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Lindeman',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Lindeman',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Lord_Howe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Lord_Howe',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Melbourne',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Melbourne',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\North',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\North',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\NSW',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\NSW',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Perth',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Perth',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Queensland',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Queensland',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\South',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\South',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Sydney',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Sydney',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Tasmania',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Tasmania',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Victoria',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Victoria',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\West',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\West',
+   'DATA'),
+  ('tcl\\tzdata\\Australia\\Yancowinna',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Australia\\Yancowinna',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Azores',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Azores',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Bermuda',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Bermuda',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Canary',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Canary',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Cape_Verde',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Cape_Verde',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Faeroe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Faeroe',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Faroe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Faroe',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Jan_Mayen',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Jan_Mayen',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Madeira',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Madeira',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Reykjavik',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Reykjavik',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\South_Georgia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\South_Georgia',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\Stanley',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\Stanley',
+   'DATA'),
+  ('tcl\\tzdata\\Atlantic\\St_Helena',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Atlantic\\St_Helena',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Aden',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Aden',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Almaty',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Almaty',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Amman',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Amman',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Anadyr',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Anadyr',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Aqtau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Aqtau',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Aqtobe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Aqtobe',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Ashgabat',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Ashgabat',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Ashkhabad',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Ashkhabad',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Atyrau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Atyrau',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Baghdad',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Baghdad',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Bahrain',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Bahrain',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Baku',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Baku',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Bangkok',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Bangkok',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Barnaul',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Barnaul',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Beirut',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Beirut',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Bishkek',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Bishkek',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Brunei',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Brunei',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Calcutta',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Calcutta',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Chita',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Chita',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Choibalsan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Choibalsan',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Chongqing',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Chongqing',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Chungking',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Chungking',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Colombo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Colombo',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Dacca',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Dacca',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Damascus',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Damascus',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Dhaka',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Dhaka',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Dili',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Dili',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Dubai',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Dubai',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Dushanbe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Dushanbe',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Famagusta',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Famagusta',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Gaza',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Gaza',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Harbin',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Harbin',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Hebron',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Hebron',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Hong_Kong',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Hong_Kong',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Hovd',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Hovd',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Ho_Chi_Minh',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Ho_Chi_Minh',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Irkutsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Irkutsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Istanbul',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Istanbul',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Jakarta',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Jakarta',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Jayapura',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Jayapura',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Jerusalem',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Jerusalem',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kabul',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kabul',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kamchatka',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kamchatka',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Karachi',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Karachi',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kashgar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kashgar',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kathmandu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kathmandu',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Katmandu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Katmandu',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Khandyga',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Khandyga',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kolkata',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kolkata',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Krasnoyarsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Krasnoyarsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kuala_Lumpur',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kuala_Lumpur',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kuching',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kuching',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Kuwait',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Kuwait',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Macao',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Macao',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Macau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Macau',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Magadan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Magadan',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Makassar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Makassar',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Manila',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Manila',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Muscat',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Muscat',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Nicosia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Nicosia',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Novokuznetsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Novokuznetsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Novosibirsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Novosibirsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Omsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Omsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Oral',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Oral',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Phnom_Penh',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Phnom_Penh',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Pontianak',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Pontianak',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Pyongyang',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Pyongyang',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Qatar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Qatar',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Qyzylorda',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Qyzylorda',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Rangoon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Rangoon',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Riyadh',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Riyadh',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Saigon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Saigon',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Sakhalin',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Sakhalin',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Samarkand',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Samarkand',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Seoul',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Seoul',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Shanghai',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Shanghai',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Singapore',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Singapore',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Srednekolymsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Srednekolymsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Taipei',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Taipei',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Tashkent',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Tashkent',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Tbilisi',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Tbilisi',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Tehran',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Tehran',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Tel_Aviv',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Tel_Aviv',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Thimbu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Thimbu',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Thimphu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Thimphu',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Tokyo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Tokyo',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Tomsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Tomsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Ujung_Pandang',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Ujung_Pandang',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Ulaanbaatar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Ulaanbaatar',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Ulan_Bator',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Ulan_Bator',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Urumqi',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Urumqi',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Ust-Nera',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Ust-Nera',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Vientiane',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Vientiane',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Vladivostok',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Vladivostok',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Yakutsk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Yakutsk',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Yangon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Yangon',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Yekaterinburg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Yekaterinburg',
+   'DATA'),
+  ('tcl\\tzdata\\Asia\\Yerevan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Asia\\Yerevan',
+   'DATA'),
+  ('tcl\\tzdata\\Arctic\\Longyearbyen',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Arctic\\Longyearbyen',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Casey',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Casey',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Davis',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Davis',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\DumontDUrville',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\DumontDUrville',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Macquarie',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Macquarie',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Mawson',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Mawson',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\McMurdo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\McMurdo',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Palmer',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Palmer',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Rothera',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Rothera',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\South_Pole',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\South_Pole',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Syowa',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Syowa',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Troll',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Troll',
+   'DATA'),
+  ('tcl\\tzdata\\Antarctica\\Vostok',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Antarctica\\Vostok',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Adak',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Adak',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Anchorage',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Anchorage',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Anguilla',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Anguilla',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Antigua',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Antigua',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Araguaina',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Araguaina',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Aruba',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Aruba',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Asuncion',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Asuncion',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Atikokan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Atikokan',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Atka',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Atka',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Bahia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Bahia',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Bahia_Banderas',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Bahia_Banderas',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Barbados',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Barbados',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Belem',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Belem',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Belize',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Belize',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Blanc-Sablon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Blanc-Sablon',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Boa_Vista',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Boa_Vista',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Bogota',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Bogota',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Boise',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Boise',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Buenos_Aires',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Buenos_Aires',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Cambridge_Bay',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Cambridge_Bay',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Campo_Grande',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Campo_Grande',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Cancun',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Cancun',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Caracas',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Caracas',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Catamarca',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Catamarca',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Cayenne',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Cayenne',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Cayman',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Cayman',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Chicago',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Chicago',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Chihuahua',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Chihuahua',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Coral_Harbour',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Coral_Harbour',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Cordoba',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Cordoba',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Costa_Rica',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Costa_Rica',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Creston',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Creston',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Cuiaba',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Cuiaba',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Curacao',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Curacao',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Danmarkshavn',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Danmarkshavn',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Dawson',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Dawson',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Dawson_Creek',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Dawson_Creek',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Denver',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Denver',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Detroit',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Detroit',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Dominica',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Dominica',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Edmonton',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Edmonton',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Eirunepe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Eirunepe',
+   'DATA'),
+  ('tcl\\tzdata\\America\\El_Salvador',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\El_Salvador',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Ensenada',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Ensenada',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Fortaleza',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Fortaleza',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Fort_Nelson',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Fort_Nelson',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Fort_Wayne',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Fort_Wayne',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Glace_Bay',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Glace_Bay',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Godthab',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Godthab',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Goose_Bay',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Goose_Bay',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Grand_Turk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Grand_Turk',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Grenada',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Grenada',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Guadeloupe',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Guadeloupe',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Guatemala',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Guatemala',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Guayaquil',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Guayaquil',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Guyana',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Guyana',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Halifax',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Halifax',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Havana',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Havana',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Hermosillo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Hermosillo',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indianapolis',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indianapolis',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Inuvik',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Inuvik',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Iqaluit',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Iqaluit',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Jamaica',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Jamaica',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Jujuy',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Jujuy',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Juneau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Juneau',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Knox_IN',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Knox_IN',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Kralendijk',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Kralendijk',
+   'DATA'),
+  ('tcl\\tzdata\\America\\La_Paz',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\La_Paz',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Lima',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Lima',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Los_Angeles',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Los_Angeles',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Louisville',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Louisville',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Lower_Princes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Lower_Princes',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Maceio',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Maceio',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Managua',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Managua',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Manaus',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Manaus',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Marigot',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Marigot',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Martinique',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Martinique',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Matamoros',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Matamoros',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Mazatlan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Mazatlan',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Mendoza',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Mendoza',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Menominee',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Menominee',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Merida',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Merida',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Metlakatla',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Metlakatla',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Mexico_City',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Mexico_City',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Miquelon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Miquelon',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Moncton',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Moncton',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Monterrey',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Monterrey',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Montevideo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Montevideo',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Montreal',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Montreal',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Montserrat',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Montserrat',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Nassau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Nassau',
+   'DATA'),
+  ('tcl\\tzdata\\America\\New_York',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\New_York',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Nipigon',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Nipigon',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Nome',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Nome',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Noronha',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Noronha',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Ojinaga',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Ojinaga',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Panama',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Panama',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Pangnirtung',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Pangnirtung',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Paramaribo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Paramaribo',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Phoenix',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Phoenix',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Port-au-Prince',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Port-au-Prince',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Porto_Acre',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Porto_Acre',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Porto_Velho',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Porto_Velho',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Port_of_Spain',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Port_of_Spain',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Puerto_Rico',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Puerto_Rico',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Punta_Arenas',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Punta_Arenas',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Rainy_River',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Rainy_River',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Rankin_Inlet',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Rankin_Inlet',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Recife',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Recife',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Regina',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Regina',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Resolute',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Resolute',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Rio_Branco',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Rio_Branco',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Rosario',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Rosario',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Santarem',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Santarem',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Santa_Isabel',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Santa_Isabel',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Santiago',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Santiago',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Santo_Domingo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Santo_Domingo',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Sao_Paulo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Sao_Paulo',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Scoresbysund',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Scoresbysund',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Shiprock',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Shiprock',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Sitka',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Sitka',
+   'DATA'),
+  ('tcl\\tzdata\\America\\St_Barthelemy',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\St_Barthelemy',
+   'DATA'),
+  ('tcl\\tzdata\\America\\St_Johns',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\St_Johns',
+   'DATA'),
+  ('tcl\\tzdata\\America\\St_Kitts',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\St_Kitts',
+   'DATA'),
+  ('tcl\\tzdata\\America\\St_Lucia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\St_Lucia',
+   'DATA'),
+  ('tcl\\tzdata\\America\\St_Thomas',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\St_Thomas',
+   'DATA'),
+  ('tcl\\tzdata\\America\\St_Vincent',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\St_Vincent',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Swift_Current',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Swift_Current',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Tegucigalpa',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Tegucigalpa',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Thule',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Thule',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Thunder_Bay',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Thunder_Bay',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Tijuana',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Tijuana',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Toronto',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Toronto',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Tortola',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Tortola',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Vancouver',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Vancouver',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Virgin',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Virgin',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Whitehorse',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Whitehorse',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Winnipeg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Winnipeg',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Yakutat',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Yakutat',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Yellowknife',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Yellowknife',
+   'DATA'),
+  ('tcl\\tzdata\\America\\North_Dakota\\Beulah',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\North_Dakota\\Beulah',
+   'DATA'),
+  ('tcl\\tzdata\\America\\North_Dakota\\Center',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\North_Dakota\\Center',
+   'DATA'),
+  ('tcl\\tzdata\\America\\North_Dakota\\New_Salem',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\North_Dakota\\New_Salem',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Kentucky\\Louisville',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Kentucky\\Louisville',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Kentucky\\Monticello',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Kentucky\\Monticello',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Indianapolis',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Indianapolis',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Knox',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Knox',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Marengo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Marengo',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Petersburg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Petersburg',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Tell_City',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Tell_City',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Vevay',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Vevay',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Vincennes',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Vincennes',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Indiana\\Winamac',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Indiana\\Winamac',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Buenos_Aires',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Buenos_Aires',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Catamarca',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Catamarca',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\ComodRivadavia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\ComodRivadavia',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Cordoba',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Cordoba',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Jujuy',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Jujuy',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\La_Rioja',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\La_Rioja',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Mendoza',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Mendoza',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Rio_Gallegos',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Rio_Gallegos',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Salta',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Salta',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\San_Juan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\San_Juan',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\San_Luis',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\San_Luis',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Tucuman',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Tucuman',
+   'DATA'),
+  ('tcl\\tzdata\\America\\Argentina\\Ushuaia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\America\\Argentina\\Ushuaia',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Abidjan',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Abidjan',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Accra',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Accra',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Addis_Ababa',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Addis_Ababa',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Algiers',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Algiers',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Asmara',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Asmara',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Asmera',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Asmera',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Bamako',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Bamako',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Bangui',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Bangui',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Banjul',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Banjul',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Bissau',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Bissau',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Blantyre',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Blantyre',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Brazzaville',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Brazzaville',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Bujumbura',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Bujumbura',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Cairo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Cairo',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Casablanca',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Casablanca',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Ceuta',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Ceuta',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Conakry',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Conakry',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Dakar',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Dakar',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Dar_es_Salaam',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Dar_es_Salaam',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Djibouti',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Djibouti',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Douala',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Douala',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\El_Aaiun',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\El_Aaiun',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Freetown',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Freetown',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Gaborone',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Gaborone',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Harare',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Harare',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Johannesburg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Johannesburg',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Juba',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Juba',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Kampala',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Kampala',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Khartoum',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Khartoum',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Kigali',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Kigali',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Kinshasa',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Kinshasa',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Lagos',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Lagos',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Libreville',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Libreville',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Lome',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Lome',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Luanda',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Luanda',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Lubumbashi',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Lubumbashi',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Lusaka',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Lusaka',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Malabo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Malabo',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Maputo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Maputo',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Maseru',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Maseru',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Mbabane',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Mbabane',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Mogadishu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Mogadishu',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Monrovia',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Monrovia',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Nairobi',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Nairobi',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Ndjamena',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Ndjamena',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Niamey',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Niamey',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Nouakchott',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Nouakchott',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Ouagadougou',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Ouagadougou',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Porto-Novo',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Porto-Novo',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Sao_Tome',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Sao_Tome',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Timbuktu',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Timbuktu',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Tripoli',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Tripoli',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Tunis',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Tunis',
+   'DATA'),
+  ('tcl\\tzdata\\Africa\\Windhoek',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\tzdata\\Africa\\Windhoek',
+   'DATA'),
+  ('tcl\\opt0.4\\optparse.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\opt0.4\\optparse.tcl',
+   'DATA'),
+  ('tcl\\opt0.4\\pkgIndex.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\opt0.4\\pkgIndex.tcl',
+   'DATA'),
+  ('tcl\\msgs\\af.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\af.msg',
+   'DATA'),
+  ('tcl\\msgs\\af_za.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\af_za.msg',
+   'DATA'),
+  ('tcl\\msgs\\ar.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ar.msg',
+   'DATA'),
+  ('tcl\\msgs\\ar_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ar_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\ar_jo.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ar_jo.msg',
+   'DATA'),
+  ('tcl\\msgs\\ar_lb.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ar_lb.msg',
+   'DATA'),
+  ('tcl\\msgs\\ar_sy.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ar_sy.msg',
+   'DATA'),
+  ('tcl\\msgs\\be.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\be.msg',
+   'DATA'),
+  ('tcl\\msgs\\bg.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\bg.msg',
+   'DATA'),
+  ('tcl\\msgs\\bn.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\bn.msg',
+   'DATA'),
+  ('tcl\\msgs\\bn_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\bn_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\ca.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ca.msg',
+   'DATA'),
+  ('tcl\\msgs\\cs.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\cs.msg',
+   'DATA'),
+  ('tcl\\msgs\\da.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\da.msg',
+   'DATA'),
+  ('tcl\\msgs\\de.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\de.msg',
+   'DATA'),
+  ('tcl\\msgs\\de_at.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\de_at.msg',
+   'DATA'),
+  ('tcl\\msgs\\de_be.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\de_be.msg',
+   'DATA'),
+  ('tcl\\msgs\\el.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\el.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_au.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_au.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_be.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_be.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_bw.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_bw.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_ca.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_ca.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_gb.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_gb.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_hk.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_hk.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_ie.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_ie.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_nz.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_nz.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_ph.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_ph.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_sg.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_sg.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_za.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_za.msg',
+   'DATA'),
+  ('tcl\\msgs\\en_zw.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\en_zw.msg',
+   'DATA'),
+  ('tcl\\msgs\\eo.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\eo.msg',
+   'DATA'),
+  ('tcl\\msgs\\es.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_ar.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_ar.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_bo.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_bo.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_cl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_cl.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_co.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_co.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_cr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_cr.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_do.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_do.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_ec.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_ec.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_gt.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_gt.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_hn.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_hn.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_mx.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_mx.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_ni.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_ni.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_pa.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_pa.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_pe.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_pe.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_pr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_pr.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_py.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_py.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_sv.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_sv.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_uy.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_uy.msg',
+   'DATA'),
+  ('tcl\\msgs\\es_ve.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\es_ve.msg',
+   'DATA'),
+  ('tcl\\msgs\\et.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\et.msg',
+   'DATA'),
+  ('tcl\\msgs\\eu.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\eu.msg',
+   'DATA'),
+  ('tcl\\msgs\\eu_es.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\eu_es.msg',
+   'DATA'),
+  ('tcl\\msgs\\fa.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fa.msg',
+   'DATA'),
+  ('tcl\\msgs\\fa_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fa_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\fa_ir.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fa_ir.msg',
+   'DATA'),
+  ('tcl\\msgs\\fi.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fi.msg',
+   'DATA'),
+  ('tcl\\msgs\\fo.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fo.msg',
+   'DATA'),
+  ('tcl\\msgs\\fo_fo.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fo_fo.msg',
+   'DATA'),
+  ('tcl\\msgs\\fr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fr.msg',
+   'DATA'),
+  ('tcl\\msgs\\fr_be.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fr_be.msg',
+   'DATA'),
+  ('tcl\\msgs\\fr_ca.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fr_ca.msg',
+   'DATA'),
+  ('tcl\\msgs\\fr_ch.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\fr_ch.msg',
+   'DATA'),
+  ('tcl\\msgs\\ga.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ga.msg',
+   'DATA'),
+  ('tcl\\msgs\\ga_ie.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ga_ie.msg',
+   'DATA'),
+  ('tcl\\msgs\\gl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\gl.msg',
+   'DATA'),
+  ('tcl\\msgs\\gl_es.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\gl_es.msg',
+   'DATA'),
+  ('tcl\\msgs\\gv.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\gv.msg',
+   'DATA'),
+  ('tcl\\msgs\\gv_gb.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\gv_gb.msg',
+   'DATA'),
+  ('tcl\\msgs\\he.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\he.msg',
+   'DATA'),
+  ('tcl\\msgs\\hi.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\hi.msg',
+   'DATA'),
+  ('tcl\\msgs\\hi_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\hi_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\hr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\hr.msg',
+   'DATA'),
+  ('tcl\\msgs\\hu.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\hu.msg',
+   'DATA'),
+  ('tcl\\msgs\\id.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\id.msg',
+   'DATA'),
+  ('tcl\\msgs\\id_id.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\id_id.msg',
+   'DATA'),
+  ('tcl\\msgs\\is.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\is.msg',
+   'DATA'),
+  ('tcl\\msgs\\it.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\it.msg',
+   'DATA'),
+  ('tcl\\msgs\\it_ch.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\it_ch.msg',
+   'DATA'),
+  ('tcl\\msgs\\ja.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ja.msg',
+   'DATA'),
+  ('tcl\\msgs\\kl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\kl.msg',
+   'DATA'),
+  ('tcl\\msgs\\kl_gl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\kl_gl.msg',
+   'DATA'),
+  ('tcl\\msgs\\ko.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ko.msg',
+   'DATA'),
+  ('tcl\\msgs\\kok.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\kok.msg',
+   'DATA'),
+  ('tcl\\msgs\\kok_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\kok_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\ko_kr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ko_kr.msg',
+   'DATA'),
+  ('tcl\\msgs\\kw.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\kw.msg',
+   'DATA'),
+  ('tcl\\msgs\\kw_gb.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\kw_gb.msg',
+   'DATA'),
+  ('tcl\\msgs\\lt.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\lt.msg',
+   'DATA'),
+  ('tcl\\msgs\\lv.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\lv.msg',
+   'DATA'),
+  ('tcl\\msgs\\mk.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\mk.msg',
+   'DATA'),
+  ('tcl\\msgs\\mr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\mr.msg',
+   'DATA'),
+  ('tcl\\msgs\\mr_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\mr_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\ms.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ms.msg',
+   'DATA'),
+  ('tcl\\msgs\\ms_my.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ms_my.msg',
+   'DATA'),
+  ('tcl\\msgs\\mt.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\mt.msg',
+   'DATA'),
+  ('tcl\\msgs\\nb.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\nb.msg',
+   'DATA'),
+  ('tcl\\msgs\\nl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\nl.msg',
+   'DATA'),
+  ('tcl\\msgs\\nl_be.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\nl_be.msg',
+   'DATA'),
+  ('tcl\\msgs\\nn.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\nn.msg',
+   'DATA'),
+  ('tcl\\msgs\\pl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\pl.msg',
+   'DATA'),
+  ('tcl\\msgs\\pt.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\pt.msg',
+   'DATA'),
+  ('tcl\\msgs\\pt_br.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\pt_br.msg',
+   'DATA'),
+  ('tcl\\msgs\\ro.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ro.msg',
+   'DATA'),
+  ('tcl\\msgs\\ru.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ru.msg',
+   'DATA'),
+  ('tcl\\msgs\\ru_ua.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ru_ua.msg',
+   'DATA'),
+  ('tcl\\msgs\\sh.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\sh.msg',
+   'DATA'),
+  ('tcl\\msgs\\sk.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\sk.msg',
+   'DATA'),
+  ('tcl\\msgs\\sl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\sl.msg',
+   'DATA'),
+  ('tcl\\msgs\\sq.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\sq.msg',
+   'DATA'),
+  ('tcl\\msgs\\sr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\sr.msg',
+   'DATA'),
+  ('tcl\\msgs\\sv.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\sv.msg',
+   'DATA'),
+  ('tcl\\msgs\\sw.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\sw.msg',
+   'DATA'),
+  ('tcl\\msgs\\ta.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ta.msg',
+   'DATA'),
+  ('tcl\\msgs\\ta_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\ta_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\te.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\te.msg',
+   'DATA'),
+  ('tcl\\msgs\\te_in.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\te_in.msg',
+   'DATA'),
+  ('tcl\\msgs\\th.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\th.msg',
+   'DATA'),
+  ('tcl\\msgs\\tr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\tr.msg',
+   'DATA'),
+  ('tcl\\msgs\\uk.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\uk.msg',
+   'DATA'),
+  ('tcl\\msgs\\vi.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\vi.msg',
+   'DATA'),
+  ('tcl\\msgs\\zh.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\zh.msg',
+   'DATA'),
+  ('tcl\\msgs\\zh_cn.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\zh_cn.msg',
+   'DATA'),
+  ('tcl\\msgs\\zh_hk.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\zh_hk.msg',
+   'DATA'),
+  ('tcl\\msgs\\zh_sg.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\zh_sg.msg',
+   'DATA'),
+  ('tcl\\msgs\\zh_tw.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\msgs\\zh_tw.msg',
+   'DATA'),
+  ('tcl\\http1.0\\http.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\http1.0\\http.tcl',
+   'DATA'),
+  ('tcl\\http1.0\\pkgIndex.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\http1.0\\pkgIndex.tcl',
+   'DATA'),
+  ('tcl\\encoding\\ascii.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\ascii.enc',
+   'DATA'),
+  ('tcl\\encoding\\big5.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\big5.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1250.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1250.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1251.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1251.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1252.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1252.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1253.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1253.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1254.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1254.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1255.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1255.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1256.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1256.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1257.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1257.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp1258.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp1258.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp437.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp437.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp737.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp737.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp775.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp775.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp850.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp850.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp852.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp852.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp855.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp855.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp857.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp857.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp860.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp860.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp861.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp861.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp862.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp862.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp863.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp863.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp864.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp864.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp865.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp865.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp866.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp866.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp869.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp869.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp874.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp874.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp932.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp932.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp936.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp936.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp949.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp949.enc',
+   'DATA'),
+  ('tcl\\encoding\\cp950.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\cp950.enc',
+   'DATA'),
+  ('tcl\\encoding\\dingbats.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\dingbats.enc',
+   'DATA'),
+  ('tcl\\encoding\\ebcdic.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\ebcdic.enc',
+   'DATA'),
+  ('tcl\\encoding\\euc-cn.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\euc-cn.enc',
+   'DATA'),
+  ('tcl\\encoding\\euc-jp.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\euc-jp.enc',
+   'DATA'),
+  ('tcl\\encoding\\euc-kr.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\euc-kr.enc',
+   'DATA'),
+  ('tcl\\encoding\\gb12345.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\gb12345.enc',
+   'DATA'),
+  ('tcl\\encoding\\gb1988.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\gb1988.enc',
+   'DATA'),
+  ('tcl\\encoding\\gb2312-raw.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\gb2312-raw.enc',
+   'DATA'),
+  ('tcl\\encoding\\gb2312.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\gb2312.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso2022-jp.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso2022-jp.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso2022-kr.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso2022-kr.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso2022.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso2022.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-1.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-1.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-10.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-10.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-13.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-13.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-14.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-14.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-15.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-15.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-16.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-16.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-2.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-2.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-3.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-3.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-4.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-4.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-5.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-5.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-6.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-6.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-7.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-7.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-8.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-8.enc',
+   'DATA'),
+  ('tcl\\encoding\\iso8859-9.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\iso8859-9.enc',
+   'DATA'),
+  ('tcl\\encoding\\jis0201.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\jis0201.enc',
+   'DATA'),
+  ('tcl\\encoding\\jis0208.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\jis0208.enc',
+   'DATA'),
+  ('tcl\\encoding\\jis0212.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\jis0212.enc',
+   'DATA'),
+  ('tcl\\encoding\\koi8-r.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\koi8-r.enc',
+   'DATA'),
+  ('tcl\\encoding\\koi8-u.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\koi8-u.enc',
+   'DATA'),
+  ('tcl\\encoding\\ksc5601.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\ksc5601.enc',
+   'DATA'),
+  ('tcl\\encoding\\macCentEuro.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macCentEuro.enc',
+   'DATA'),
+  ('tcl\\encoding\\macCroatian.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macCroatian.enc',
+   'DATA'),
+  ('tcl\\encoding\\macCyrillic.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macCyrillic.enc',
+   'DATA'),
+  ('tcl\\encoding\\macDingbats.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macDingbats.enc',
+   'DATA'),
+  ('tcl\\encoding\\macGreek.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macGreek.enc',
+   'DATA'),
+  ('tcl\\encoding\\macIceland.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macIceland.enc',
+   'DATA'),
+  ('tcl\\encoding\\macJapan.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macJapan.enc',
+   'DATA'),
+  ('tcl\\encoding\\macRoman.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macRoman.enc',
+   'DATA'),
+  ('tcl\\encoding\\macRomania.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macRomania.enc',
+   'DATA'),
+  ('tcl\\encoding\\macThai.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macThai.enc',
+   'DATA'),
+  ('tcl\\encoding\\macTurkish.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macTurkish.enc',
+   'DATA'),
+  ('tcl\\encoding\\macUkraine.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\macUkraine.enc',
+   'DATA'),
+  ('tcl\\encoding\\shiftjis.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\shiftjis.enc',
+   'DATA'),
+  ('tcl\\encoding\\symbol.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\symbol.enc',
+   'DATA'),
+  ('tcl\\encoding\\tis-620.enc',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\encoding\\tis-620.enc',
+   'DATA')])

+ 353 - 0
build/main/Tree-01.toc

@@ -0,0 +1,353 @@
+('C:\\Users\\windows '
+ '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6',
+ 'tk',
+ ['demos', '*.lib', 'tkConfig.sh'],
+ 'DATA',
+ [('tk\\bgerror.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\bgerror.tcl',
+   'DATA'),
+  ('tk\\button.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\button.tcl',
+   'DATA'),
+  ('tk\\choosedir.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\choosedir.tcl',
+   'DATA'),
+  ('tk\\clrpick.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\clrpick.tcl',
+   'DATA'),
+  ('tk\\comdlg.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\comdlg.tcl',
+   'DATA'),
+  ('tk\\console.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\console.tcl',
+   'DATA'),
+  ('tk\\dialog.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\dialog.tcl',
+   'DATA'),
+  ('tk\\entry.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\entry.tcl',
+   'DATA'),
+  ('tk\\focus.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\focus.tcl',
+   'DATA'),
+  ('tk\\fontchooser.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\fontchooser.tcl',
+   'DATA'),
+  ('tk\\iconlist.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\iconlist.tcl',
+   'DATA'),
+  ('tk\\icons.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\icons.tcl',
+   'DATA'),
+  ('tk\\license.terms',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\license.terms',
+   'DATA'),
+  ('tk\\listbox.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\listbox.tcl',
+   'DATA'),
+  ('tk\\megawidget.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\megawidget.tcl',
+   'DATA'),
+  ('tk\\menu.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\menu.tcl',
+   'DATA'),
+  ('tk\\mkpsenc.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\mkpsenc.tcl',
+   'DATA'),
+  ('tk\\msgbox.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgbox.tcl',
+   'DATA'),
+  ('tk\\obsolete.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\obsolete.tcl',
+   'DATA'),
+  ('tk\\optMenu.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\optMenu.tcl',
+   'DATA'),
+  ('tk\\palette.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\palette.tcl',
+   'DATA'),
+  ('tk\\panedwindow.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\panedwindow.tcl',
+   'DATA'),
+  ('tk\\pkgIndex.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\pkgIndex.tcl',
+   'DATA'),
+  ('tk\\safetk.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\safetk.tcl',
+   'DATA'),
+  ('tk\\scale.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\scale.tcl',
+   'DATA'),
+  ('tk\\scrlbar.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\scrlbar.tcl',
+   'DATA'),
+  ('tk\\spinbox.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\spinbox.tcl',
+   'DATA'),
+  ('tk\\tclIndex',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\tclIndex',
+   'DATA'),
+  ('tk\\tearoff.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\tearoff.tcl',
+   'DATA'),
+  ('tk\\text.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\text.tcl',
+   'DATA'),
+  ('tk\\tk.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\tk.tcl',
+   'DATA'),
+  ('tk\\tkfbox.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\tkfbox.tcl',
+   'DATA'),
+  ('tk\\unsupported.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\unsupported.tcl',
+   'DATA'),
+  ('tk\\xmfbox.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\xmfbox.tcl',
+   'DATA'),
+  ('tk\\ttk\\altTheme.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\altTheme.tcl',
+   'DATA'),
+  ('tk\\ttk\\aquaTheme.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\aquaTheme.tcl',
+   'DATA'),
+  ('tk\\ttk\\button.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\button.tcl',
+   'DATA'),
+  ('tk\\ttk\\clamTheme.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\clamTheme.tcl',
+   'DATA'),
+  ('tk\\ttk\\classicTheme.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\classicTheme.tcl',
+   'DATA'),
+  ('tk\\ttk\\combobox.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\combobox.tcl',
+   'DATA'),
+  ('tk\\ttk\\cursors.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\cursors.tcl',
+   'DATA'),
+  ('tk\\ttk\\defaults.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\defaults.tcl',
+   'DATA'),
+  ('tk\\ttk\\entry.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\entry.tcl',
+   'DATA'),
+  ('tk\\ttk\\fonts.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\fonts.tcl',
+   'DATA'),
+  ('tk\\ttk\\menubutton.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\menubutton.tcl',
+   'DATA'),
+  ('tk\\ttk\\notebook.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\notebook.tcl',
+   'DATA'),
+  ('tk\\ttk\\panedwindow.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\panedwindow.tcl',
+   'DATA'),
+  ('tk\\ttk\\progress.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\progress.tcl',
+   'DATA'),
+  ('tk\\ttk\\scale.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\scale.tcl',
+   'DATA'),
+  ('tk\\ttk\\scrollbar.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\scrollbar.tcl',
+   'DATA'),
+  ('tk\\ttk\\sizegrip.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\sizegrip.tcl',
+   'DATA'),
+  ('tk\\ttk\\spinbox.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\spinbox.tcl',
+   'DATA'),
+  ('tk\\ttk\\treeview.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\treeview.tcl',
+   'DATA'),
+  ('tk\\ttk\\ttk.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\ttk.tcl',
+   'DATA'),
+  ('tk\\ttk\\utils.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\utils.tcl',
+   'DATA'),
+  ('tk\\ttk\\vistaTheme.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\vistaTheme.tcl',
+   'DATA'),
+  ('tk\\ttk\\winTheme.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\winTheme.tcl',
+   'DATA'),
+  ('tk\\ttk\\xpTheme.tcl',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\ttk\\xpTheme.tcl',
+   'DATA'),
+  ('tk\\msgs\\cs.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\cs.msg',
+   'DATA'),
+  ('tk\\msgs\\da.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\da.msg',
+   'DATA'),
+  ('tk\\msgs\\de.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\de.msg',
+   'DATA'),
+  ('tk\\msgs\\el.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\el.msg',
+   'DATA'),
+  ('tk\\msgs\\en.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\en.msg',
+   'DATA'),
+  ('tk\\msgs\\en_gb.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\en_gb.msg',
+   'DATA'),
+  ('tk\\msgs\\eo.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\eo.msg',
+   'DATA'),
+  ('tk\\msgs\\es.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\es.msg',
+   'DATA'),
+  ('tk\\msgs\\fr.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\fr.msg',
+   'DATA'),
+  ('tk\\msgs\\hu.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\hu.msg',
+   'DATA'),
+  ('tk\\msgs\\it.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\it.msg',
+   'DATA'),
+  ('tk\\msgs\\nl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\nl.msg',
+   'DATA'),
+  ('tk\\msgs\\pl.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\pl.msg',
+   'DATA'),
+  ('tk\\msgs\\pt.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\pt.msg',
+   'DATA'),
+  ('tk\\msgs\\ru.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\ru.msg',
+   'DATA'),
+  ('tk\\msgs\\sv.msg',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\msgs\\sv.msg',
+   'DATA'),
+  ('tk\\images\\logo.eps',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\logo.eps',
+   'DATA'),
+  ('tk\\images\\logo100.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\logo100.gif',
+   'DATA'),
+  ('tk\\images\\logo64.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\logo64.gif',
+   'DATA'),
+  ('tk\\images\\logoLarge.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\logoLarge.gif',
+   'DATA'),
+  ('tk\\images\\logoMed.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\logoMed.gif',
+   'DATA'),
+  ('tk\\images\\pwrdLogo.eps',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\pwrdLogo.eps',
+   'DATA'),
+  ('tk\\images\\pwrdLogo100.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\pwrdLogo100.gif',
+   'DATA'),
+  ('tk\\images\\pwrdLogo150.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\pwrdLogo150.gif',
+   'DATA'),
+  ('tk\\images\\pwrdLogo175.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\pwrdLogo175.gif',
+   'DATA'),
+  ('tk\\images\\pwrdLogo200.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\pwrdLogo200.gif',
+   'DATA'),
+  ('tk\\images\\pwrdLogo75.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\pwrdLogo75.gif',
+   'DATA'),
+  ('tk\\images\\README',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\README',
+   'DATA'),
+  ('tk\\images\\tai-ku.gif',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tk8.6\\images\\tai-ku.gif',
+   'DATA')])

+ 25 - 0
build/main/Tree-02.toc

@@ -0,0 +1,25 @@
+('C:\\Users\\windows '
+ '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\..\\tcl8',
+ 'tcl8',
+ [],
+ 'DATA',
+ [('tcl8\\8.6\\http-2.9.0.tm',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\..\\tcl8\\8.6\\http-2.9.0.tm',
+   'DATA'),
+  ('tcl8\\8.5\\msgcat-1.6.1.tm',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\..\\tcl8\\8.5\\msgcat-1.6.1.tm',
+   'DATA'),
+  ('tcl8\\8.5\\tcltest-2.5.0.tm',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\..\\tcl8\\8.5\\tcltest-2.5.0.tm',
+   'DATA'),
+  ('tcl8\\8.4\\platform-1.0.14.tm',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform-1.0.14.tm',
+   'DATA'),
+  ('tcl8\\8.4\\platform\\shell-1.1.4.tm',
+   'C:\\Users\\windows '
+   '10\\AppData\\Local\\Programs\\Python\\Python37\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform\\shell-1.1.4.tm',
+   'DATA')])

BIN
build/main/base_library.zip


+ 30 - 0
build/main/main.exe.manifest

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+  <assemblyIdentity name="main" processorArchitecture="amd64" type="win32" version="1.0.0.0"/>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+    <security>
+      <requestedPrivileges>
+        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+  <dependency>
+    <dependentAssembly>
+      <assemblyIdentity language="*" name="Microsoft.Windows.Common-Controls" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" type="win32" version="6.0.0.0"/>
+    </dependentAssembly>
+  </dependency>
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+    </application>
+  </compatibility>
+  <application xmlns="urn:schemas-microsoft-com:asm.v3">
+    <windowsSettings>
+      <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
+    </windowsSettings>
+  </application>
+</assembly>

BIN
build/main/main.pkg


+ 33 - 0
build/main/warn-main.txt

@@ -0,0 +1,33 @@
+
+This file lists modules PyInstaller was not able to find. This does not
+necessarily mean this module is required for running your program. Python and
+Python 3rd-party packages include a lot of conditional or optional modules. For
+example the module 'ntpath' only exists on Windows, whereas the module
+'posixpath' only exists on Posix systems.
+
+Types if import:
+* top-level: imported at the top-level - look at these first
+* conditional: imported within an if-statement
+* delayed: imported within a function
+* optional: imported within a try-except-statement
+
+IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
+            tracking down the missing module yourself. Thanks!
+
+missing module named org - imported by copy (optional)
+missing module named 'org.python' - imported by pickle (optional), xml.sax (delayed, conditional)
+missing module named pwd - imported by posixpath (delayed, conditional), shutil (optional), tarfile (optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed)
+missing module named AppKit - imported by keyboard._darwinkeyboard (top-level)
+missing module named Quartz - imported by keyboard._darwinkeyboard (top-level)
+missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional)
+excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional)
+missing module named grp - imported by shutil (optional), tarfile (optional)
+missing module named fcntl - imported by keyboard._nixcommon (delayed)
+missing module named vms_lib - imported by platform (delayed, conditional, optional)
+missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
+missing module named java - imported by platform (delayed)
+missing module named _winreg - imported by platform (delayed, optional)
+missing module named Queue - imported by keyboard (optional), keyboard._nixcommon (optional), keyboard._generic (optional)
+missing module named posix - imported by os (conditional, optional)
+missing module named resource - imported by posix (top-level)
+missing module named _posixsubprocess - imported by subprocess (conditional)

+ 6685 - 0
build/main/xref-main.html

@@ -0,0 +1,6685 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <title>modulegraph cross reference for main.py, pyi_rth_subprocess.py</title>
+    <style>
+      .node { padding: 0.5em 0 0.5em; border-top: thin grey dotted; }
+      .moduletype { font: smaller italic }
+      .node a { text-decoration: none; color: #006699; }
+      .node a:visited { text-decoration: none; color: #2f0099; }
+    </style>
+  </head>
+  <body>
+    <h1>modulegraph cross reference for main.py, pyi_rth_subprocess.py</h1>
+
+<div class="node">
+  <a name="main.py"></a>
+  <a target="code" href="///F:/Users/Galo/Documents/GitHub/PyFFMPEG/ffmpegpyproject/main.py" type="text/plain"><tt>main.py</tt></a>
+<span class="moduletype">Script</span>  <div class="import">
+imports:
+    <a href="#_bootlocale">_bootlocale</a>
+ &#8226;   <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#_weakrefset">_weakrefset</a>
+ &#8226;   <a href="#abc">abc</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#collections.abc">collections.abc</a>
+ &#8226;   <a href="#copyreg">copyreg</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#encodings.aliases">encodings.aliases</a>
+ &#8226;   <a href="#encodings.ascii">encodings.ascii</a>
+ &#8226;   <a href="#encodings.base64_codec">encodings.base64_codec</a>
+ &#8226;   <a href="#encodings.big5">encodings.big5</a>
+ &#8226;   <a href="#encodings.big5hkscs">encodings.big5hkscs</a>
+ &#8226;   <a href="#encodings.bz2_codec">encodings.bz2_codec</a>
+ &#8226;   <a href="#encodings.charmap">encodings.charmap</a>
+ &#8226;   <a href="#encodings.cp037">encodings.cp037</a>
+ &#8226;   <a href="#encodings.cp1006">encodings.cp1006</a>
+ &#8226;   <a href="#encodings.cp1026">encodings.cp1026</a>
+ &#8226;   <a href="#encodings.cp1125">encodings.cp1125</a>
+ &#8226;   <a href="#encodings.cp1140">encodings.cp1140</a>
+ &#8226;   <a href="#encodings.cp1250">encodings.cp1250</a>
+ &#8226;   <a href="#encodings.cp1251">encodings.cp1251</a>
+ &#8226;   <a href="#encodings.cp1252">encodings.cp1252</a>
+ &#8226;   <a href="#encodings.cp1253">encodings.cp1253</a>
+ &#8226;   <a href="#encodings.cp1254">encodings.cp1254</a>
+ &#8226;   <a href="#encodings.cp1255">encodings.cp1255</a>
+ &#8226;   <a href="#encodings.cp1256">encodings.cp1256</a>
+ &#8226;   <a href="#encodings.cp1257">encodings.cp1257</a>
+ &#8226;   <a href="#encodings.cp1258">encodings.cp1258</a>
+ &#8226;   <a href="#encodings.cp273">encodings.cp273</a>
+ &#8226;   <a href="#encodings.cp424">encodings.cp424</a>
+ &#8226;   <a href="#encodings.cp437">encodings.cp437</a>
+ &#8226;   <a href="#encodings.cp500">encodings.cp500</a>
+ &#8226;   <a href="#encodings.cp65001">encodings.cp65001</a>
+ &#8226;   <a href="#encodings.cp720">encodings.cp720</a>
+ &#8226;   <a href="#encodings.cp737">encodings.cp737</a>
+ &#8226;   <a href="#encodings.cp775">encodings.cp775</a>
+ &#8226;   <a href="#encodings.cp850">encodings.cp850</a>
+ &#8226;   <a href="#encodings.cp852">encodings.cp852</a>
+ &#8226;   <a href="#encodings.cp855">encodings.cp855</a>
+ &#8226;   <a href="#encodings.cp856">encodings.cp856</a>
+ &#8226;   <a href="#encodings.cp857">encodings.cp857</a>
+ &#8226;   <a href="#encodings.cp858">encodings.cp858</a>
+ &#8226;   <a href="#encodings.cp860">encodings.cp860</a>
+ &#8226;   <a href="#encodings.cp861">encodings.cp861</a>
+ &#8226;   <a href="#encodings.cp862">encodings.cp862</a>
+ &#8226;   <a href="#encodings.cp863">encodings.cp863</a>
+ &#8226;   <a href="#encodings.cp864">encodings.cp864</a>
+ &#8226;   <a href="#encodings.cp865">encodings.cp865</a>
+ &#8226;   <a href="#encodings.cp866">encodings.cp866</a>
+ &#8226;   <a href="#encodings.cp869">encodings.cp869</a>
+ &#8226;   <a href="#encodings.cp874">encodings.cp874</a>
+ &#8226;   <a href="#encodings.cp875">encodings.cp875</a>
+ &#8226;   <a href="#encodings.cp932">encodings.cp932</a>
+ &#8226;   <a href="#encodings.cp949">encodings.cp949</a>
+ &#8226;   <a href="#encodings.cp950">encodings.cp950</a>
+ &#8226;   <a href="#encodings.euc_jis_2004">encodings.euc_jis_2004</a>
+ &#8226;   <a href="#encodings.euc_jisx0213">encodings.euc_jisx0213</a>
+ &#8226;   <a href="#encodings.euc_jp">encodings.euc_jp</a>
+ &#8226;   <a href="#encodings.euc_kr">encodings.euc_kr</a>
+ &#8226;   <a href="#encodings.gb18030">encodings.gb18030</a>
+ &#8226;   <a href="#encodings.gb2312">encodings.gb2312</a>
+ &#8226;   <a href="#encodings.gbk">encodings.gbk</a>
+ &#8226;   <a href="#encodings.hex_codec">encodings.hex_codec</a>
+ &#8226;   <a href="#encodings.hp_roman8">encodings.hp_roman8</a>
+ &#8226;   <a href="#encodings.hz">encodings.hz</a>
+ &#8226;   <a href="#encodings.idna">encodings.idna</a>
+ &#8226;   <a href="#encodings.iso2022_jp">encodings.iso2022_jp</a>
+ &#8226;   <a href="#encodings.iso2022_jp_1">encodings.iso2022_jp_1</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2">encodings.iso2022_jp_2</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2004">encodings.iso2022_jp_2004</a>
+ &#8226;   <a href="#encodings.iso2022_jp_3">encodings.iso2022_jp_3</a>
+ &#8226;   <a href="#encodings.iso2022_jp_ext">encodings.iso2022_jp_ext</a>
+ &#8226;   <a href="#encodings.iso2022_kr">encodings.iso2022_kr</a>
+ &#8226;   <a href="#encodings.iso8859_1">encodings.iso8859_1</a>
+ &#8226;   <a href="#encodings.iso8859_10">encodings.iso8859_10</a>
+ &#8226;   <a href="#encodings.iso8859_11">encodings.iso8859_11</a>
+ &#8226;   <a href="#encodings.iso8859_13">encodings.iso8859_13</a>
+ &#8226;   <a href="#encodings.iso8859_14">encodings.iso8859_14</a>
+ &#8226;   <a href="#encodings.iso8859_15">encodings.iso8859_15</a>
+ &#8226;   <a href="#encodings.iso8859_16">encodings.iso8859_16</a>
+ &#8226;   <a href="#encodings.iso8859_2">encodings.iso8859_2</a>
+ &#8226;   <a href="#encodings.iso8859_3">encodings.iso8859_3</a>
+ &#8226;   <a href="#encodings.iso8859_4">encodings.iso8859_4</a>
+ &#8226;   <a href="#encodings.iso8859_5">encodings.iso8859_5</a>
+ &#8226;   <a href="#encodings.iso8859_6">encodings.iso8859_6</a>
+ &#8226;   <a href="#encodings.iso8859_7">encodings.iso8859_7</a>
+ &#8226;   <a href="#encodings.iso8859_8">encodings.iso8859_8</a>
+ &#8226;   <a href="#encodings.iso8859_9">encodings.iso8859_9</a>
+ &#8226;   <a href="#encodings.johab">encodings.johab</a>
+ &#8226;   <a href="#encodings.koi8_r">encodings.koi8_r</a>
+ &#8226;   <a href="#encodings.koi8_t">encodings.koi8_t</a>
+ &#8226;   <a href="#encodings.koi8_u">encodings.koi8_u</a>
+ &#8226;   <a href="#encodings.kz1048">encodings.kz1048</a>
+ &#8226;   <a href="#encodings.latin_1">encodings.latin_1</a>
+ &#8226;   <a href="#encodings.mac_arabic">encodings.mac_arabic</a>
+ &#8226;   <a href="#encodings.mac_centeuro">encodings.mac_centeuro</a>
+ &#8226;   <a href="#encodings.mac_croatian">encodings.mac_croatian</a>
+ &#8226;   <a href="#encodings.mac_cyrillic">encodings.mac_cyrillic</a>
+ &#8226;   <a href="#encodings.mac_farsi">encodings.mac_farsi</a>
+ &#8226;   <a href="#encodings.mac_greek">encodings.mac_greek</a>
+ &#8226;   <a href="#encodings.mac_iceland">encodings.mac_iceland</a>
+ &#8226;   <a href="#encodings.mac_latin2">encodings.mac_latin2</a>
+ &#8226;   <a href="#encodings.mac_roman">encodings.mac_roman</a>
+ &#8226;   <a href="#encodings.mac_romanian">encodings.mac_romanian</a>
+ &#8226;   <a href="#encodings.mac_turkish">encodings.mac_turkish</a>
+ &#8226;   <a href="#encodings.mbcs">encodings.mbcs</a>
+ &#8226;   <a href="#encodings.oem">encodings.oem</a>
+ &#8226;   <a href="#encodings.palmos">encodings.palmos</a>
+ &#8226;   <a href="#encodings.ptcp154">encodings.ptcp154</a>
+ &#8226;   <a href="#encodings.punycode">encodings.punycode</a>
+ &#8226;   <a href="#encodings.quopri_codec">encodings.quopri_codec</a>
+ &#8226;   <a href="#encodings.raw_unicode_escape">encodings.raw_unicode_escape</a>
+ &#8226;   <a href="#encodings.rot_13">encodings.rot_13</a>
+ &#8226;   <a href="#encodings.shift_jis">encodings.shift_jis</a>
+ &#8226;   <a href="#encodings.shift_jis_2004">encodings.shift_jis_2004</a>
+ &#8226;   <a href="#encodings.shift_jisx0213">encodings.shift_jisx0213</a>
+ &#8226;   <a href="#encodings.tis_620">encodings.tis_620</a>
+ &#8226;   <a href="#encodings.undefined">encodings.undefined</a>
+ &#8226;   <a href="#encodings.unicode_escape">encodings.unicode_escape</a>
+ &#8226;   <a href="#encodings.unicode_internal">encodings.unicode_internal</a>
+ &#8226;   <a href="#encodings.utf_16">encodings.utf_16</a>
+ &#8226;   <a href="#encodings.utf_16_be">encodings.utf_16_be</a>
+ &#8226;   <a href="#encodings.utf_16_le">encodings.utf_16_le</a>
+ &#8226;   <a href="#encodings.utf_32">encodings.utf_32</a>
+ &#8226;   <a href="#encodings.utf_32_be">encodings.utf_32_be</a>
+ &#8226;   <a href="#encodings.utf_32_le">encodings.utf_32_le</a>
+ &#8226;   <a href="#encodings.utf_7">encodings.utf_7</a>
+ &#8226;   <a href="#encodings.utf_8">encodings.utf_8</a>
+ &#8226;   <a href="#encodings.utf_8_sig">encodings.utf_8_sig</a>
+ &#8226;   <a href="#encodings.uu_codec">encodings.uu_codec</a>
+ &#8226;   <a href="#encodings.zlib_codec">encodings.zlib_codec</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#heapq">heapq</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyword">keyword</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#operator">operator</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pyi_rth_subprocess.py">pyi_rth_subprocess.py</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#reprlib">reprlib</a>
+ &#8226;   <a href="#sre_compile">sre_compile</a>
+ &#8226;   <a href="#sre_constants">sre_constants</a>
+ &#8226;   <a href="#sre_parse">sre_parse</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="pyi_rth_subprocess.py"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/PyInstaller/hooks/rthooks/pyi_rth_subprocess.py" type="text/plain"><tt>pyi_rth_subprocess.py</tt></a>
+<span class="moduletype">Script</span>  <div class="import">
+imports:
+    <a href="#io">io</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="'java.lang'"></a>
+  <a target="code" href="" type="text/plain"><tt>'java.lang'</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#platform">platform</a>
+ &#8226;   <a href="#xml.sax._exceptions">xml.sax._exceptions</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="'org.python'"></a>
+  <a target="code" href="" type="text/plain"><tt>'org.python'</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#pickle">pickle</a>
+ &#8226;   <a href="#xml.sax">xml.sax</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="AppKit"></a>
+  <a target="code" href="" type="text/plain"><tt>AppKit</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="Quartz"></a>
+  <a target="code" href="" type="text/plain"><tt>Quartz</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="Queue"></a>
+  <a target="code" href="" type="text/plain"><tt>Queue</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._generic">keyboard._generic</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="__future__"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/__future__.py" type="text/plain"><tt>__future__</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imported by:
+    <a href="#codeop">codeop</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_abc"></a>
+  <tt>_abc</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#abc">abc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_bisect"></a>
+  <tt>_bisect</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#bisect">bisect</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_blake2"></a>
+  <tt>_blake2</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_bootlocale"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_bootlocale.py" type="text/plain"><tt>_bootlocale</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_locale">_locale</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#locale">locale</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_bz2"></a>
+  <tt>_bz2</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\_bz2.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#bz2">bz2</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_codecs"></a>
+  <tt>_codecs</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#codecs">codecs</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_codecs_cn"></a>
+  <tt>_codecs_cn</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.gb18030">encodings.gb18030</a>
+ &#8226;   <a href="#encodings.gb2312">encodings.gb2312</a>
+ &#8226;   <a href="#encodings.gbk">encodings.gbk</a>
+ &#8226;   <a href="#encodings.hz">encodings.hz</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_codecs_hk"></a>
+  <tt>_codecs_hk</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.big5hkscs">encodings.big5hkscs</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_codecs_iso2022"></a>
+  <tt>_codecs_iso2022</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.iso2022_jp">encodings.iso2022_jp</a>
+ &#8226;   <a href="#encodings.iso2022_jp_1">encodings.iso2022_jp_1</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2">encodings.iso2022_jp_2</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2004">encodings.iso2022_jp_2004</a>
+ &#8226;   <a href="#encodings.iso2022_jp_3">encodings.iso2022_jp_3</a>
+ &#8226;   <a href="#encodings.iso2022_jp_ext">encodings.iso2022_jp_ext</a>
+ &#8226;   <a href="#encodings.iso2022_kr">encodings.iso2022_kr</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_codecs_jp"></a>
+  <tt>_codecs_jp</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.cp932">encodings.cp932</a>
+ &#8226;   <a href="#encodings.euc_jis_2004">encodings.euc_jis_2004</a>
+ &#8226;   <a href="#encodings.euc_jisx0213">encodings.euc_jisx0213</a>
+ &#8226;   <a href="#encodings.euc_jp">encodings.euc_jp</a>
+ &#8226;   <a href="#encodings.shift_jis">encodings.shift_jis</a>
+ &#8226;   <a href="#encodings.shift_jis_2004">encodings.shift_jis_2004</a>
+ &#8226;   <a href="#encodings.shift_jisx0213">encodings.shift_jisx0213</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_codecs_kr"></a>
+  <tt>_codecs_kr</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.cp949">encodings.cp949</a>
+ &#8226;   <a href="#encodings.euc_kr">encodings.euc_kr</a>
+ &#8226;   <a href="#encodings.johab">encodings.johab</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_codecs_tw"></a>
+  <tt>_codecs_tw</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.big5">encodings.big5</a>
+ &#8226;   <a href="#encodings.cp950">encodings.cp950</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_collections"></a>
+  <tt>_collections</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#threading">threading</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_collections_abc"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_collections_abc.py" type="text/plain"><tt>_collections_abc</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#abc">abc</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#collections.abc">collections.abc</a>
+ &#8226;   <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_compat_pickle"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_compat_pickle.py" type="text/plain"><tt>_compat_pickle</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imported by:
+    <a href="#_pickle">_pickle</a>
+ &#8226;   <a href="#pickle">pickle</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_compression"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_compression.py" type="text/plain"><tt>_compression</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#io">io</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#bz2">bz2</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#lzma">lzma</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_ctypes"></a>
+  <tt>_ctypes</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\_ctypes.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#ctypes">ctypes</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_datetime"></a>
+  <tt>_datetime</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imports:
+    <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#datetime">datetime</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_frozen_importlib"></a>
+  <a target="code" href="" type="text/plain"><tt>_frozen_importlib</tt></a>
+<span class="moduletype">ExcludedModule</span>  <div class="import">
+imported by:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_frozen_importlib_external"></a>
+  <a target="code" href="" type="text/plain"><tt>_frozen_importlib_external</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib._bootstrap">importlib._bootstrap</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_functools"></a>
+  <tt>_functools</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#functools">functools</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_hashlib"></a>
+  <tt>_hashlib</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\_hashlib.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_heapq"></a>
+  <tt>_heapq</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#heapq">heapq</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_imp"></a>
+  <tt>_imp</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.machinery">importlib.machinery</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_io"></a>
+  <tt>_io</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#io">io</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_json"></a>
+  <tt>_json</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imports:
+    <a href="#json.decoder">json.decoder</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#json.decoder">json.decoder</a>
+ &#8226;   <a href="#json.encoder">json.encoder</a>
+ &#8226;   <a href="#json.scanner">json.scanner</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_locale"></a>
+  <tt>_locale</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#_bootlocale">_bootlocale</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_lzma"></a>
+  <tt>_lzma</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\_lzma.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#lzma">lzma</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_md5"></a>
+  <tt>_md5</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_multibytecodec"></a>
+  <tt>_multibytecodec</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.big5">encodings.big5</a>
+ &#8226;   <a href="#encodings.big5hkscs">encodings.big5hkscs</a>
+ &#8226;   <a href="#encodings.cp932">encodings.cp932</a>
+ &#8226;   <a href="#encodings.cp949">encodings.cp949</a>
+ &#8226;   <a href="#encodings.cp950">encodings.cp950</a>
+ &#8226;   <a href="#encodings.euc_jis_2004">encodings.euc_jis_2004</a>
+ &#8226;   <a href="#encodings.euc_jisx0213">encodings.euc_jisx0213</a>
+ &#8226;   <a href="#encodings.euc_jp">encodings.euc_jp</a>
+ &#8226;   <a href="#encodings.euc_kr">encodings.euc_kr</a>
+ &#8226;   <a href="#encodings.gb18030">encodings.gb18030</a>
+ &#8226;   <a href="#encodings.gb2312">encodings.gb2312</a>
+ &#8226;   <a href="#encodings.gbk">encodings.gbk</a>
+ &#8226;   <a href="#encodings.hz">encodings.hz</a>
+ &#8226;   <a href="#encodings.iso2022_jp">encodings.iso2022_jp</a>
+ &#8226;   <a href="#encodings.iso2022_jp_1">encodings.iso2022_jp_1</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2">encodings.iso2022_jp_2</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2004">encodings.iso2022_jp_2004</a>
+ &#8226;   <a href="#encodings.iso2022_jp_3">encodings.iso2022_jp_3</a>
+ &#8226;   <a href="#encodings.iso2022_jp_ext">encodings.iso2022_jp_ext</a>
+ &#8226;   <a href="#encodings.iso2022_kr">encodings.iso2022_kr</a>
+ &#8226;   <a href="#encodings.johab">encodings.johab</a>
+ &#8226;   <a href="#encodings.shift_jis">encodings.shift_jis</a>
+ &#8226;   <a href="#encodings.shift_jis_2004">encodings.shift_jis_2004</a>
+ &#8226;   <a href="#encodings.shift_jisx0213">encodings.shift_jisx0213</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_operator"></a>
+  <tt>_operator</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#operator">operator</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_pickle"></a>
+  <tt>_pickle</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imports:
+    <a href="#_compat_pickle">_compat_pickle</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#copyreg">copyreg</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#pickle">pickle</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_posixsubprocess"></a>
+  <a target="code" href="" type="text/plain"><tt>_posixsubprocess</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imports:
+    <a href="#gc">gc</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#subprocess">subprocess</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_py_abc"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_py_abc.py" type="text/plain"><tt>_py_abc</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_weakrefset">_weakrefset</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#abc">abc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_queue"></a>
+  <tt>_queue</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\_queue.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#queue">queue</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_random"></a>
+  <tt>_random</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#random">random</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_sha1"></a>
+  <tt>_sha1</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_sha256"></a>
+  <tt>_sha256</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_sha3"></a>
+  <tt>_sha3</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_sha512"></a>
+  <tt>_sha512</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_signal"></a>
+  <tt>_signal</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#signal">signal</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_socket"></a>
+  <tt>_socket</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\_socket.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#socket">socket</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_sre"></a>
+  <tt>_sre</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imports:
+    <a href="#copy">copy</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#sre_compile">sre_compile</a>
+ &#8226;   <a href="#sre_constants">sre_constants</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_ssl"></a>
+  <tt>_ssl</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\_ssl.pyd</tt></span>  <div class="import">
+imports:
+    <a href="#socket">socket</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ssl">ssl</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_stat"></a>
+  <tt>_stat</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#stat">stat</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_string"></a>
+  <tt>_string</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#string">string</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_strptime"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_strptime.py" type="text/plain"><tt>_strptime</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_thread">_thread</a>
+ &#8226;   <a href="#calendar">calendar</a>
+ &#8226;   <a href="#datetime">datetime</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_datetime">_datetime</a>
+ &#8226;   <a href="#datetime">datetime</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_struct"></a>
+  <tt>_struct</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#struct">struct</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_thread"></a>
+  <tt>_thread</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#reprlib">reprlib</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+ &#8226;   <a href="#threading">threading</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_threading_local"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_threading_local.py" type="text/plain"><tt>_threading_local</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#threading">threading</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_tracemalloc"></a>
+  <tt>_tracemalloc</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#tracemalloc">tracemalloc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_warnings"></a>
+  <tt>_warnings</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#warnings">warnings</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_weakref"></a>
+  <tt>_weakref</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#_weakrefset">_weakrefset</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#weakref">weakref</a>
+ &#8226;   <a href="#xml.sax.expatreader">xml.sax.expatreader</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_weakrefset"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/_weakrefset.py" type="text/plain"><tt>_weakrefset</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_weakref">_weakref</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_py_abc">_py_abc</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_winapi"></a>
+  <tt>_winapi</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="_winreg"></a>
+  <a target="code" href="" type="text/plain"><tt>_winreg</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#platform">platform</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="abc"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/abc.py" type="text/plain"><tt>abc</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_abc">_abc</a>
+ &#8226;   <a href="#_py_abc">_py_abc</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#email._policybase">email._policybase</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#selectors">selectors</a>
+ &#8226;   <a href="#typing">typing</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="argparse"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/argparse.py" type="text/plain"><tt>argparse</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#copy">copy</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#textwrap">textwrap</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#calendar">calendar</a>
+ &#8226;   <a href="#code">code</a>
+ &#8226;   <a href="#dis">dis</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#unittest.main">unittest.main</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="atexit"></a>
+  <tt>atexit</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="base64"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/base64.py" type="text/plain"><tt>base64</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#binascii">binascii</a>
+ &#8226;   <a href="#getopt">getopt</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#email._encoded_words">email._encoded_words</a>
+ &#8226;   <a href="#email.base64mime">email.base64mime</a>
+ &#8226;   <a href="#email.encoders">email.encoders</a>
+ &#8226;   <a href="#encodings.base64_codec">encodings.base64_codec</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="binascii"></a>
+  <tt>binascii</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#base64">base64</a>
+ &#8226;   <a href="#email._encoded_words">email._encoded_words</a>
+ &#8226;   <a href="#email.base64mime">email.base64mime</a>
+ &#8226;   <a href="#email.contentmanager">email.contentmanager</a>
+ &#8226;   <a href="#email.header">email.header</a>
+ &#8226;   <a href="#encodings.hex_codec">encodings.hex_codec</a>
+ &#8226;   <a href="#encodings.uu_codec">encodings.uu_codec</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#quopri">quopri</a>
+ &#8226;   <a href="#uu">uu</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="bisect"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/bisect.py" type="text/plain"><tt>bisect</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_bisect">_bisect</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#random">random</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="builtins"></a>
+  <tt>builtins</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#bz2">bz2</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#lzma">lzma</a>
+ &#8226;   <a href="#operator">operator</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#reprlib">reprlib</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="bz2"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/bz2.py" type="text/plain"><tt>bz2</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_bz2">_bz2</a>
+ &#8226;   <a href="#_compression">_compression</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings.bz2_codec">encodings.bz2_codec</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="calendar"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/calendar.py" type="text/plain"><tt>calendar</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#datetime">datetime</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#email._parseaddr">email._parseaddr</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#ssl">ssl</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="codecs"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/codecs.py" type="text/plain"><tt>codecs</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs">_codecs</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_pickle">_pickle</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#encodings.ascii">encodings.ascii</a>
+ &#8226;   <a href="#encodings.base64_codec">encodings.base64_codec</a>
+ &#8226;   <a href="#encodings.big5">encodings.big5</a>
+ &#8226;   <a href="#encodings.big5hkscs">encodings.big5hkscs</a>
+ &#8226;   <a href="#encodings.bz2_codec">encodings.bz2_codec</a>
+ &#8226;   <a href="#encodings.charmap">encodings.charmap</a>
+ &#8226;   <a href="#encodings.cp037">encodings.cp037</a>
+ &#8226;   <a href="#encodings.cp1006">encodings.cp1006</a>
+ &#8226;   <a href="#encodings.cp1026">encodings.cp1026</a>
+ &#8226;   <a href="#encodings.cp1125">encodings.cp1125</a>
+ &#8226;   <a href="#encodings.cp1140">encodings.cp1140</a>
+ &#8226;   <a href="#encodings.cp1250">encodings.cp1250</a>
+ &#8226;   <a href="#encodings.cp1251">encodings.cp1251</a>
+ &#8226;   <a href="#encodings.cp1252">encodings.cp1252</a>
+ &#8226;   <a href="#encodings.cp1253">encodings.cp1253</a>
+ &#8226;   <a href="#encodings.cp1254">encodings.cp1254</a>
+ &#8226;   <a href="#encodings.cp1255">encodings.cp1255</a>
+ &#8226;   <a href="#encodings.cp1256">encodings.cp1256</a>
+ &#8226;   <a href="#encodings.cp1257">encodings.cp1257</a>
+ &#8226;   <a href="#encodings.cp1258">encodings.cp1258</a>
+ &#8226;   <a href="#encodings.cp273">encodings.cp273</a>
+ &#8226;   <a href="#encodings.cp424">encodings.cp424</a>
+ &#8226;   <a href="#encodings.cp437">encodings.cp437</a>
+ &#8226;   <a href="#encodings.cp500">encodings.cp500</a>
+ &#8226;   <a href="#encodings.cp65001">encodings.cp65001</a>
+ &#8226;   <a href="#encodings.cp720">encodings.cp720</a>
+ &#8226;   <a href="#encodings.cp737">encodings.cp737</a>
+ &#8226;   <a href="#encodings.cp775">encodings.cp775</a>
+ &#8226;   <a href="#encodings.cp850">encodings.cp850</a>
+ &#8226;   <a href="#encodings.cp852">encodings.cp852</a>
+ &#8226;   <a href="#encodings.cp855">encodings.cp855</a>
+ &#8226;   <a href="#encodings.cp856">encodings.cp856</a>
+ &#8226;   <a href="#encodings.cp857">encodings.cp857</a>
+ &#8226;   <a href="#encodings.cp858">encodings.cp858</a>
+ &#8226;   <a href="#encodings.cp860">encodings.cp860</a>
+ &#8226;   <a href="#encodings.cp861">encodings.cp861</a>
+ &#8226;   <a href="#encodings.cp862">encodings.cp862</a>
+ &#8226;   <a href="#encodings.cp863">encodings.cp863</a>
+ &#8226;   <a href="#encodings.cp864">encodings.cp864</a>
+ &#8226;   <a href="#encodings.cp865">encodings.cp865</a>
+ &#8226;   <a href="#encodings.cp866">encodings.cp866</a>
+ &#8226;   <a href="#encodings.cp869">encodings.cp869</a>
+ &#8226;   <a href="#encodings.cp874">encodings.cp874</a>
+ &#8226;   <a href="#encodings.cp875">encodings.cp875</a>
+ &#8226;   <a href="#encodings.cp932">encodings.cp932</a>
+ &#8226;   <a href="#encodings.cp949">encodings.cp949</a>
+ &#8226;   <a href="#encodings.cp950">encodings.cp950</a>
+ &#8226;   <a href="#encodings.euc_jis_2004">encodings.euc_jis_2004</a>
+ &#8226;   <a href="#encodings.euc_jisx0213">encodings.euc_jisx0213</a>
+ &#8226;   <a href="#encodings.euc_jp">encodings.euc_jp</a>
+ &#8226;   <a href="#encodings.euc_kr">encodings.euc_kr</a>
+ &#8226;   <a href="#encodings.gb18030">encodings.gb18030</a>
+ &#8226;   <a href="#encodings.gb2312">encodings.gb2312</a>
+ &#8226;   <a href="#encodings.gbk">encodings.gbk</a>
+ &#8226;   <a href="#encodings.hex_codec">encodings.hex_codec</a>
+ &#8226;   <a href="#encodings.hp_roman8">encodings.hp_roman8</a>
+ &#8226;   <a href="#encodings.hz">encodings.hz</a>
+ &#8226;   <a href="#encodings.idna">encodings.idna</a>
+ &#8226;   <a href="#encodings.iso2022_jp">encodings.iso2022_jp</a>
+ &#8226;   <a href="#encodings.iso2022_jp_1">encodings.iso2022_jp_1</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2">encodings.iso2022_jp_2</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2004">encodings.iso2022_jp_2004</a>
+ &#8226;   <a href="#encodings.iso2022_jp_3">encodings.iso2022_jp_3</a>
+ &#8226;   <a href="#encodings.iso2022_jp_ext">encodings.iso2022_jp_ext</a>
+ &#8226;   <a href="#encodings.iso2022_kr">encodings.iso2022_kr</a>
+ &#8226;   <a href="#encodings.iso8859_1">encodings.iso8859_1</a>
+ &#8226;   <a href="#encodings.iso8859_10">encodings.iso8859_10</a>
+ &#8226;   <a href="#encodings.iso8859_11">encodings.iso8859_11</a>
+ &#8226;   <a href="#encodings.iso8859_13">encodings.iso8859_13</a>
+ &#8226;   <a href="#encodings.iso8859_14">encodings.iso8859_14</a>
+ &#8226;   <a href="#encodings.iso8859_15">encodings.iso8859_15</a>
+ &#8226;   <a href="#encodings.iso8859_16">encodings.iso8859_16</a>
+ &#8226;   <a href="#encodings.iso8859_2">encodings.iso8859_2</a>
+ &#8226;   <a href="#encodings.iso8859_3">encodings.iso8859_3</a>
+ &#8226;   <a href="#encodings.iso8859_4">encodings.iso8859_4</a>
+ &#8226;   <a href="#encodings.iso8859_5">encodings.iso8859_5</a>
+ &#8226;   <a href="#encodings.iso8859_6">encodings.iso8859_6</a>
+ &#8226;   <a href="#encodings.iso8859_7">encodings.iso8859_7</a>
+ &#8226;   <a href="#encodings.iso8859_8">encodings.iso8859_8</a>
+ &#8226;   <a href="#encodings.iso8859_9">encodings.iso8859_9</a>
+ &#8226;   <a href="#encodings.johab">encodings.johab</a>
+ &#8226;   <a href="#encodings.koi8_r">encodings.koi8_r</a>
+ &#8226;   <a href="#encodings.koi8_t">encodings.koi8_t</a>
+ &#8226;   <a href="#encodings.koi8_u">encodings.koi8_u</a>
+ &#8226;   <a href="#encodings.kz1048">encodings.kz1048</a>
+ &#8226;   <a href="#encodings.latin_1">encodings.latin_1</a>
+ &#8226;   <a href="#encodings.mac_arabic">encodings.mac_arabic</a>
+ &#8226;   <a href="#encodings.mac_centeuro">encodings.mac_centeuro</a>
+ &#8226;   <a href="#encodings.mac_croatian">encodings.mac_croatian</a>
+ &#8226;   <a href="#encodings.mac_cyrillic">encodings.mac_cyrillic</a>
+ &#8226;   <a href="#encodings.mac_farsi">encodings.mac_farsi</a>
+ &#8226;   <a href="#encodings.mac_greek">encodings.mac_greek</a>
+ &#8226;   <a href="#encodings.mac_iceland">encodings.mac_iceland</a>
+ &#8226;   <a href="#encodings.mac_latin2">encodings.mac_latin2</a>
+ &#8226;   <a href="#encodings.mac_roman">encodings.mac_roman</a>
+ &#8226;   <a href="#encodings.mac_romanian">encodings.mac_romanian</a>
+ &#8226;   <a href="#encodings.mac_turkish">encodings.mac_turkish</a>
+ &#8226;   <a href="#encodings.mbcs">encodings.mbcs</a>
+ &#8226;   <a href="#encodings.oem">encodings.oem</a>
+ &#8226;   <a href="#encodings.palmos">encodings.palmos</a>
+ &#8226;   <a href="#encodings.ptcp154">encodings.ptcp154</a>
+ &#8226;   <a href="#encodings.punycode">encodings.punycode</a>
+ &#8226;   <a href="#encodings.quopri_codec">encodings.quopri_codec</a>
+ &#8226;   <a href="#encodings.raw_unicode_escape">encodings.raw_unicode_escape</a>
+ &#8226;   <a href="#encodings.rot_13">encodings.rot_13</a>
+ &#8226;   <a href="#encodings.shift_jis">encodings.shift_jis</a>
+ &#8226;   <a href="#encodings.shift_jis_2004">encodings.shift_jis_2004</a>
+ &#8226;   <a href="#encodings.shift_jisx0213">encodings.shift_jisx0213</a>
+ &#8226;   <a href="#encodings.tis_620">encodings.tis_620</a>
+ &#8226;   <a href="#encodings.undefined">encodings.undefined</a>
+ &#8226;   <a href="#encodings.unicode_escape">encodings.unicode_escape</a>
+ &#8226;   <a href="#encodings.unicode_internal">encodings.unicode_internal</a>
+ &#8226;   <a href="#encodings.utf_16">encodings.utf_16</a>
+ &#8226;   <a href="#encodings.utf_16_be">encodings.utf_16_be</a>
+ &#8226;   <a href="#encodings.utf_16_le">encodings.utf_16_le</a>
+ &#8226;   <a href="#encodings.utf_32">encodings.utf_32</a>
+ &#8226;   <a href="#encodings.utf_32_be">encodings.utf_32_be</a>
+ &#8226;   <a href="#encodings.utf_32_le">encodings.utf_32_le</a>
+ &#8226;   <a href="#encodings.utf_7">encodings.utf_7</a>
+ &#8226;   <a href="#encodings.utf_8">encodings.utf_8</a>
+ &#8226;   <a href="#encodings.utf_8_sig">encodings.utf_8_sig</a>
+ &#8226;   <a href="#encodings.uu_codec">encodings.uu_codec</a>
+ &#8226;   <a href="#encodings.zlib_codec">encodings.zlib_codec</a>
+ &#8226;   <a href="#json">json</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#xml.sax.saxutils">xml.sax.saxutils</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="collections"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/collections/__init__.py" type="text/plain"><tt>collections</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#_collections">_collections</a>
+ &#8226;   <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#_weakref">_weakref</a>
+ &#8226;   <a href="#copy">copy</a>
+ &#8226;   <a href="#heapq">heapq</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#keyword">keyword</a>
+ &#8226;   <a href="#operator">operator</a>
+ &#8226;   <a href="#reprlib">reprlib</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ast">ast</a>
+ &#8226;   <a href="#collections.abc">collections.abc</a>
+ &#8226;   <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#difflib">difflib</a>
+ &#8226;   <a href="#dis">dis</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#email._header_value_parser">email._header_value_parser</a>
+ &#8226;   <a href="#email.feedparser">email.feedparser</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#queue">queue</a>
+ &#8226;   <a href="#selectors">selectors</a>
+ &#8226;   <a href="#shlex">shlex</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#string">string</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#typing">typing</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+ &#8226;   <a href="#unittest.util">unittest.util</a>
+ &#8226;   <a href="#urllib.parse">urllib.parse</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="collections.abc"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/collections/abc.py" type="text/plain"><tt>collections.abc</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#collections">collections</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#http.client">http.client</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#selectors">selectors</a>
+ &#8226;   <a href="#tracemalloc">tracemalloc</a>
+ &#8226;   <a href="#typing">typing</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="contextlib"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/contextlib.py" type="text/plain"><tt>contextlib</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#abc">abc</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_threading_local">_threading_local</a>
+ &#8226;   <a href="#getpass">getpass</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#typing">typing</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="copy"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/copy.py" type="text/plain"><tt>copy</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#copyreg">copyreg</a>
+ &#8226;   <a href="#org">org</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_sre">_sre</a>
+ &#8226;   <a href="#argparse">argparse</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#email.generator">email.generator</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#weakref">weakref</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="copyreg"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/copyreg.py" type="text/plain"><tt>copyreg</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imported by:
+    <a href="#_pickle">_pickle</a>
+ &#8226;   <a href="#copy">copy</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/__init__.py" type="text/plain"><tt>ctypes</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#_ctypes">_ctypes</a>
+ &#8226;   <a href="#ctypes._endian">ctypes._endian</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes._aix">ctypes._aix</a>
+ &#8226;   <a href="#ctypes._endian">ctypes._endian</a>
+ &#8226;   <a href="#ctypes.macholib">ctypes.macholib</a>
+ &#8226;   <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#ctypes.wintypes">ctypes.wintypes</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes._aix"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/_aix.py" type="text/plain"><tt>ctypes._aix</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.util">ctypes.util</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes._endian"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/_endian.py" type="text/plain"><tt>ctypes._endian</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes">ctypes</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes.macholib"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/macholib/__init__.py" type="text/plain"><tt>ctypes.macholib</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#ctypes">ctypes</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.macholib.dyld">ctypes.macholib.dyld</a>
+ &#8226;   <a href="#ctypes.macholib.dylib">ctypes.macholib.dylib</a>
+ &#8226;   <a href="#ctypes.macholib.framework">ctypes.macholib.framework</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes.macholib.dyld"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/macholib/dyld.py" type="text/plain"><tt>ctypes.macholib.dyld</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#ctypes.macholib">ctypes.macholib</a>
+ &#8226;   <a href="#ctypes.macholib.dylib">ctypes.macholib.dylib</a>
+ &#8226;   <a href="#ctypes.macholib.framework">ctypes.macholib.framework</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#os">os</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.util">ctypes.util</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes.macholib.dylib"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/macholib/dylib.py" type="text/plain"><tt>ctypes.macholib.dylib</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#ctypes.macholib">ctypes.macholib</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.macholib.dyld">ctypes.macholib.dyld</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes.macholib.framework"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/macholib/framework.py" type="text/plain"><tt>ctypes.macholib.framework</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#ctypes.macholib">ctypes.macholib</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.macholib.dyld">ctypes.macholib.dyld</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes.util"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/util.py" type="text/plain"><tt>ctypes.util</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#ctypes._aix">ctypes._aix</a>
+ &#8226;   <a href="#ctypes.macholib.dyld">ctypes.macholib.dyld</a>
+ &#8226;   <a href="#importlib.machinery">importlib.machinery</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ctypes.wintypes"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ctypes/wintypes.py" type="text/plain"><tt>ctypes.wintypes</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#ctypes">ctypes</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="datetime"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/datetime.py" type="text/plain"><tt>datetime</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_datetime">_datetime</a>
+ &#8226;   <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#math">math</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#calendar">calendar</a>
+ &#8226;   <a href="#email.utils">email.utils</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/__init__.py" type="text/plain"><tt>encodings</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#_winapi">_winapi</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#encodings.aliases">encodings.aliases</a>
+ &#8226;   <a href="#encodings.ascii">encodings.ascii</a>
+ &#8226;   <a href="#encodings.base64_codec">encodings.base64_codec</a>
+ &#8226;   <a href="#encodings.big5">encodings.big5</a>
+ &#8226;   <a href="#encodings.big5hkscs">encodings.big5hkscs</a>
+ &#8226;   <a href="#encodings.bz2_codec">encodings.bz2_codec</a>
+ &#8226;   <a href="#encodings.charmap">encodings.charmap</a>
+ &#8226;   <a href="#encodings.cp037">encodings.cp037</a>
+ &#8226;   <a href="#encodings.cp1006">encodings.cp1006</a>
+ &#8226;   <a href="#encodings.cp1026">encodings.cp1026</a>
+ &#8226;   <a href="#encodings.cp1125">encodings.cp1125</a>
+ &#8226;   <a href="#encodings.cp1140">encodings.cp1140</a>
+ &#8226;   <a href="#encodings.cp1250">encodings.cp1250</a>
+ &#8226;   <a href="#encodings.cp1251">encodings.cp1251</a>
+ &#8226;   <a href="#encodings.cp1252">encodings.cp1252</a>
+ &#8226;   <a href="#encodings.cp1253">encodings.cp1253</a>
+ &#8226;   <a href="#encodings.cp1254">encodings.cp1254</a>
+ &#8226;   <a href="#encodings.cp1255">encodings.cp1255</a>
+ &#8226;   <a href="#encodings.cp1256">encodings.cp1256</a>
+ &#8226;   <a href="#encodings.cp1257">encodings.cp1257</a>
+ &#8226;   <a href="#encodings.cp1258">encodings.cp1258</a>
+ &#8226;   <a href="#encodings.cp273">encodings.cp273</a>
+ &#8226;   <a href="#encodings.cp424">encodings.cp424</a>
+ &#8226;   <a href="#encodings.cp437">encodings.cp437</a>
+ &#8226;   <a href="#encodings.cp500">encodings.cp500</a>
+ &#8226;   <a href="#encodings.cp65001">encodings.cp65001</a>
+ &#8226;   <a href="#encodings.cp720">encodings.cp720</a>
+ &#8226;   <a href="#encodings.cp737">encodings.cp737</a>
+ &#8226;   <a href="#encodings.cp775">encodings.cp775</a>
+ &#8226;   <a href="#encodings.cp850">encodings.cp850</a>
+ &#8226;   <a href="#encodings.cp852">encodings.cp852</a>
+ &#8226;   <a href="#encodings.cp855">encodings.cp855</a>
+ &#8226;   <a href="#encodings.cp856">encodings.cp856</a>
+ &#8226;   <a href="#encodings.cp857">encodings.cp857</a>
+ &#8226;   <a href="#encodings.cp858">encodings.cp858</a>
+ &#8226;   <a href="#encodings.cp860">encodings.cp860</a>
+ &#8226;   <a href="#encodings.cp861">encodings.cp861</a>
+ &#8226;   <a href="#encodings.cp862">encodings.cp862</a>
+ &#8226;   <a href="#encodings.cp863">encodings.cp863</a>
+ &#8226;   <a href="#encodings.cp864">encodings.cp864</a>
+ &#8226;   <a href="#encodings.cp865">encodings.cp865</a>
+ &#8226;   <a href="#encodings.cp866">encodings.cp866</a>
+ &#8226;   <a href="#encodings.cp869">encodings.cp869</a>
+ &#8226;   <a href="#encodings.cp874">encodings.cp874</a>
+ &#8226;   <a href="#encodings.cp875">encodings.cp875</a>
+ &#8226;   <a href="#encodings.cp932">encodings.cp932</a>
+ &#8226;   <a href="#encodings.cp949">encodings.cp949</a>
+ &#8226;   <a href="#encodings.cp950">encodings.cp950</a>
+ &#8226;   <a href="#encodings.euc_jis_2004">encodings.euc_jis_2004</a>
+ &#8226;   <a href="#encodings.euc_jisx0213">encodings.euc_jisx0213</a>
+ &#8226;   <a href="#encodings.euc_jp">encodings.euc_jp</a>
+ &#8226;   <a href="#encodings.euc_kr">encodings.euc_kr</a>
+ &#8226;   <a href="#encodings.gb18030">encodings.gb18030</a>
+ &#8226;   <a href="#encodings.gb2312">encodings.gb2312</a>
+ &#8226;   <a href="#encodings.gbk">encodings.gbk</a>
+ &#8226;   <a href="#encodings.hex_codec">encodings.hex_codec</a>
+ &#8226;   <a href="#encodings.hp_roman8">encodings.hp_roman8</a>
+ &#8226;   <a href="#encodings.hz">encodings.hz</a>
+ &#8226;   <a href="#encodings.idna">encodings.idna</a>
+ &#8226;   <a href="#encodings.iso2022_jp">encodings.iso2022_jp</a>
+ &#8226;   <a href="#encodings.iso2022_jp_1">encodings.iso2022_jp_1</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2">encodings.iso2022_jp_2</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2004">encodings.iso2022_jp_2004</a>
+ &#8226;   <a href="#encodings.iso2022_jp_3">encodings.iso2022_jp_3</a>
+ &#8226;   <a href="#encodings.iso2022_jp_ext">encodings.iso2022_jp_ext</a>
+ &#8226;   <a href="#encodings.iso2022_kr">encodings.iso2022_kr</a>
+ &#8226;   <a href="#encodings.iso8859_1">encodings.iso8859_1</a>
+ &#8226;   <a href="#encodings.iso8859_10">encodings.iso8859_10</a>
+ &#8226;   <a href="#encodings.iso8859_11">encodings.iso8859_11</a>
+ &#8226;   <a href="#encodings.iso8859_13">encodings.iso8859_13</a>
+ &#8226;   <a href="#encodings.iso8859_14">encodings.iso8859_14</a>
+ &#8226;   <a href="#encodings.iso8859_15">encodings.iso8859_15</a>
+ &#8226;   <a href="#encodings.iso8859_16">encodings.iso8859_16</a>
+ &#8226;   <a href="#encodings.iso8859_2">encodings.iso8859_2</a>
+ &#8226;   <a href="#encodings.iso8859_3">encodings.iso8859_3</a>
+ &#8226;   <a href="#encodings.iso8859_4">encodings.iso8859_4</a>
+ &#8226;   <a href="#encodings.iso8859_5">encodings.iso8859_5</a>
+ &#8226;   <a href="#encodings.iso8859_6">encodings.iso8859_6</a>
+ &#8226;   <a href="#encodings.iso8859_7">encodings.iso8859_7</a>
+ &#8226;   <a href="#encodings.iso8859_8">encodings.iso8859_8</a>
+ &#8226;   <a href="#encodings.iso8859_9">encodings.iso8859_9</a>
+ &#8226;   <a href="#encodings.johab">encodings.johab</a>
+ &#8226;   <a href="#encodings.koi8_r">encodings.koi8_r</a>
+ &#8226;   <a href="#encodings.koi8_t">encodings.koi8_t</a>
+ &#8226;   <a href="#encodings.koi8_u">encodings.koi8_u</a>
+ &#8226;   <a href="#encodings.kz1048">encodings.kz1048</a>
+ &#8226;   <a href="#encodings.latin_1">encodings.latin_1</a>
+ &#8226;   <a href="#encodings.mac_arabic">encodings.mac_arabic</a>
+ &#8226;   <a href="#encodings.mac_centeuro">encodings.mac_centeuro</a>
+ &#8226;   <a href="#encodings.mac_croatian">encodings.mac_croatian</a>
+ &#8226;   <a href="#encodings.mac_cyrillic">encodings.mac_cyrillic</a>
+ &#8226;   <a href="#encodings.mac_farsi">encodings.mac_farsi</a>
+ &#8226;   <a href="#encodings.mac_greek">encodings.mac_greek</a>
+ &#8226;   <a href="#encodings.mac_iceland">encodings.mac_iceland</a>
+ &#8226;   <a href="#encodings.mac_latin2">encodings.mac_latin2</a>
+ &#8226;   <a href="#encodings.mac_roman">encodings.mac_roman</a>
+ &#8226;   <a href="#encodings.mac_romanian">encodings.mac_romanian</a>
+ &#8226;   <a href="#encodings.mac_turkish">encodings.mac_turkish</a>
+ &#8226;   <a href="#encodings.mbcs">encodings.mbcs</a>
+ &#8226;   <a href="#encodings.oem">encodings.oem</a>
+ &#8226;   <a href="#encodings.palmos">encodings.palmos</a>
+ &#8226;   <a href="#encodings.ptcp154">encodings.ptcp154</a>
+ &#8226;   <a href="#encodings.punycode">encodings.punycode</a>
+ &#8226;   <a href="#encodings.quopri_codec">encodings.quopri_codec</a>
+ &#8226;   <a href="#encodings.raw_unicode_escape">encodings.raw_unicode_escape</a>
+ &#8226;   <a href="#encodings.rot_13">encodings.rot_13</a>
+ &#8226;   <a href="#encodings.shift_jis">encodings.shift_jis</a>
+ &#8226;   <a href="#encodings.shift_jis_2004">encodings.shift_jis_2004</a>
+ &#8226;   <a href="#encodings.shift_jisx0213">encodings.shift_jisx0213</a>
+ &#8226;   <a href="#encodings.tis_620">encodings.tis_620</a>
+ &#8226;   <a href="#encodings.undefined">encodings.undefined</a>
+ &#8226;   <a href="#encodings.unicode_escape">encodings.unicode_escape</a>
+ &#8226;   <a href="#encodings.unicode_internal">encodings.unicode_internal</a>
+ &#8226;   <a href="#encodings.utf_16">encodings.utf_16</a>
+ &#8226;   <a href="#encodings.utf_16_be">encodings.utf_16_be</a>
+ &#8226;   <a href="#encodings.utf_16_le">encodings.utf_16_le</a>
+ &#8226;   <a href="#encodings.utf_32">encodings.utf_32</a>
+ &#8226;   <a href="#encodings.utf_32_be">encodings.utf_32_be</a>
+ &#8226;   <a href="#encodings.utf_32_le">encodings.utf_32_le</a>
+ &#8226;   <a href="#encodings.utf_7">encodings.utf_7</a>
+ &#8226;   <a href="#encodings.utf_8">encodings.utf_8</a>
+ &#8226;   <a href="#encodings.utf_8_sig">encodings.utf_8_sig</a>
+ &#8226;   <a href="#encodings.uu_codec">encodings.uu_codec</a>
+ &#8226;   <a href="#encodings.zlib_codec">encodings.zlib_codec</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#encodings.aliases">encodings.aliases</a>
+ &#8226;   <a href="#encodings.ascii">encodings.ascii</a>
+ &#8226;   <a href="#encodings.base64_codec">encodings.base64_codec</a>
+ &#8226;   <a href="#encodings.big5">encodings.big5</a>
+ &#8226;   <a href="#encodings.big5hkscs">encodings.big5hkscs</a>
+ &#8226;   <a href="#encodings.bz2_codec">encodings.bz2_codec</a>
+ &#8226;   <a href="#encodings.charmap">encodings.charmap</a>
+ &#8226;   <a href="#encodings.cp037">encodings.cp037</a>
+ &#8226;   <a href="#encodings.cp1006">encodings.cp1006</a>
+ &#8226;   <a href="#encodings.cp1026">encodings.cp1026</a>
+ &#8226;   <a href="#encodings.cp1125">encodings.cp1125</a>
+ &#8226;   <a href="#encodings.cp1140">encodings.cp1140</a>
+ &#8226;   <a href="#encodings.cp1250">encodings.cp1250</a>
+ &#8226;   <a href="#encodings.cp1251">encodings.cp1251</a>
+ &#8226;   <a href="#encodings.cp1252">encodings.cp1252</a>
+ &#8226;   <a href="#encodings.cp1253">encodings.cp1253</a>
+ &#8226;   <a href="#encodings.cp1254">encodings.cp1254</a>
+ &#8226;   <a href="#encodings.cp1255">encodings.cp1255</a>
+ &#8226;   <a href="#encodings.cp1256">encodings.cp1256</a>
+ &#8226;   <a href="#encodings.cp1257">encodings.cp1257</a>
+ &#8226;   <a href="#encodings.cp1258">encodings.cp1258</a>
+ &#8226;   <a href="#encodings.cp273">encodings.cp273</a>
+ &#8226;   <a href="#encodings.cp424">encodings.cp424</a>
+ &#8226;   <a href="#encodings.cp437">encodings.cp437</a>
+ &#8226;   <a href="#encodings.cp500">encodings.cp500</a>
+ &#8226;   <a href="#encodings.cp65001">encodings.cp65001</a>
+ &#8226;   <a href="#encodings.cp720">encodings.cp720</a>
+ &#8226;   <a href="#encodings.cp737">encodings.cp737</a>
+ &#8226;   <a href="#encodings.cp775">encodings.cp775</a>
+ &#8226;   <a href="#encodings.cp850">encodings.cp850</a>
+ &#8226;   <a href="#encodings.cp852">encodings.cp852</a>
+ &#8226;   <a href="#encodings.cp855">encodings.cp855</a>
+ &#8226;   <a href="#encodings.cp856">encodings.cp856</a>
+ &#8226;   <a href="#encodings.cp857">encodings.cp857</a>
+ &#8226;   <a href="#encodings.cp858">encodings.cp858</a>
+ &#8226;   <a href="#encodings.cp860">encodings.cp860</a>
+ &#8226;   <a href="#encodings.cp861">encodings.cp861</a>
+ &#8226;   <a href="#encodings.cp862">encodings.cp862</a>
+ &#8226;   <a href="#encodings.cp863">encodings.cp863</a>
+ &#8226;   <a href="#encodings.cp864">encodings.cp864</a>
+ &#8226;   <a href="#encodings.cp865">encodings.cp865</a>
+ &#8226;   <a href="#encodings.cp866">encodings.cp866</a>
+ &#8226;   <a href="#encodings.cp869">encodings.cp869</a>
+ &#8226;   <a href="#encodings.cp874">encodings.cp874</a>
+ &#8226;   <a href="#encodings.cp875">encodings.cp875</a>
+ &#8226;   <a href="#encodings.cp932">encodings.cp932</a>
+ &#8226;   <a href="#encodings.cp949">encodings.cp949</a>
+ &#8226;   <a href="#encodings.cp950">encodings.cp950</a>
+ &#8226;   <a href="#encodings.euc_jis_2004">encodings.euc_jis_2004</a>
+ &#8226;   <a href="#encodings.euc_jisx0213">encodings.euc_jisx0213</a>
+ &#8226;   <a href="#encodings.euc_jp">encodings.euc_jp</a>
+ &#8226;   <a href="#encodings.euc_kr">encodings.euc_kr</a>
+ &#8226;   <a href="#encodings.gb18030">encodings.gb18030</a>
+ &#8226;   <a href="#encodings.gb2312">encodings.gb2312</a>
+ &#8226;   <a href="#encodings.gbk">encodings.gbk</a>
+ &#8226;   <a href="#encodings.hex_codec">encodings.hex_codec</a>
+ &#8226;   <a href="#encodings.hp_roman8">encodings.hp_roman8</a>
+ &#8226;   <a href="#encodings.hz">encodings.hz</a>
+ &#8226;   <a href="#encodings.idna">encodings.idna</a>
+ &#8226;   <a href="#encodings.iso2022_jp">encodings.iso2022_jp</a>
+ &#8226;   <a href="#encodings.iso2022_jp_1">encodings.iso2022_jp_1</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2">encodings.iso2022_jp_2</a>
+ &#8226;   <a href="#encodings.iso2022_jp_2004">encodings.iso2022_jp_2004</a>
+ &#8226;   <a href="#encodings.iso2022_jp_3">encodings.iso2022_jp_3</a>
+ &#8226;   <a href="#encodings.iso2022_jp_ext">encodings.iso2022_jp_ext</a>
+ &#8226;   <a href="#encodings.iso2022_kr">encodings.iso2022_kr</a>
+ &#8226;   <a href="#encodings.iso8859_1">encodings.iso8859_1</a>
+ &#8226;   <a href="#encodings.iso8859_10">encodings.iso8859_10</a>
+ &#8226;   <a href="#encodings.iso8859_11">encodings.iso8859_11</a>
+ &#8226;   <a href="#encodings.iso8859_13">encodings.iso8859_13</a>
+ &#8226;   <a href="#encodings.iso8859_14">encodings.iso8859_14</a>
+ &#8226;   <a href="#encodings.iso8859_15">encodings.iso8859_15</a>
+ &#8226;   <a href="#encodings.iso8859_16">encodings.iso8859_16</a>
+ &#8226;   <a href="#encodings.iso8859_2">encodings.iso8859_2</a>
+ &#8226;   <a href="#encodings.iso8859_3">encodings.iso8859_3</a>
+ &#8226;   <a href="#encodings.iso8859_4">encodings.iso8859_4</a>
+ &#8226;   <a href="#encodings.iso8859_5">encodings.iso8859_5</a>
+ &#8226;   <a href="#encodings.iso8859_6">encodings.iso8859_6</a>
+ &#8226;   <a href="#encodings.iso8859_7">encodings.iso8859_7</a>
+ &#8226;   <a href="#encodings.iso8859_8">encodings.iso8859_8</a>
+ &#8226;   <a href="#encodings.iso8859_9">encodings.iso8859_9</a>
+ &#8226;   <a href="#encodings.johab">encodings.johab</a>
+ &#8226;   <a href="#encodings.koi8_r">encodings.koi8_r</a>
+ &#8226;   <a href="#encodings.koi8_t">encodings.koi8_t</a>
+ &#8226;   <a href="#encodings.koi8_u">encodings.koi8_u</a>
+ &#8226;   <a href="#encodings.kz1048">encodings.kz1048</a>
+ &#8226;   <a href="#encodings.latin_1">encodings.latin_1</a>
+ &#8226;   <a href="#encodings.mac_arabic">encodings.mac_arabic</a>
+ &#8226;   <a href="#encodings.mac_centeuro">encodings.mac_centeuro</a>
+ &#8226;   <a href="#encodings.mac_croatian">encodings.mac_croatian</a>
+ &#8226;   <a href="#encodings.mac_cyrillic">encodings.mac_cyrillic</a>
+ &#8226;   <a href="#encodings.mac_farsi">encodings.mac_farsi</a>
+ &#8226;   <a href="#encodings.mac_greek">encodings.mac_greek</a>
+ &#8226;   <a href="#encodings.mac_iceland">encodings.mac_iceland</a>
+ &#8226;   <a href="#encodings.mac_latin2">encodings.mac_latin2</a>
+ &#8226;   <a href="#encodings.mac_roman">encodings.mac_roman</a>
+ &#8226;   <a href="#encodings.mac_romanian">encodings.mac_romanian</a>
+ &#8226;   <a href="#encodings.mac_turkish">encodings.mac_turkish</a>
+ &#8226;   <a href="#encodings.mbcs">encodings.mbcs</a>
+ &#8226;   <a href="#encodings.oem">encodings.oem</a>
+ &#8226;   <a href="#encodings.palmos">encodings.palmos</a>
+ &#8226;   <a href="#encodings.ptcp154">encodings.ptcp154</a>
+ &#8226;   <a href="#encodings.punycode">encodings.punycode</a>
+ &#8226;   <a href="#encodings.quopri_codec">encodings.quopri_codec</a>
+ &#8226;   <a href="#encodings.raw_unicode_escape">encodings.raw_unicode_escape</a>
+ &#8226;   <a href="#encodings.rot_13">encodings.rot_13</a>
+ &#8226;   <a href="#encodings.shift_jis">encodings.shift_jis</a>
+ &#8226;   <a href="#encodings.shift_jis_2004">encodings.shift_jis_2004</a>
+ &#8226;   <a href="#encodings.shift_jisx0213">encodings.shift_jisx0213</a>
+ &#8226;   <a href="#encodings.tis_620">encodings.tis_620</a>
+ &#8226;   <a href="#encodings.undefined">encodings.undefined</a>
+ &#8226;   <a href="#encodings.unicode_escape">encodings.unicode_escape</a>
+ &#8226;   <a href="#encodings.unicode_internal">encodings.unicode_internal</a>
+ &#8226;   <a href="#encodings.utf_16">encodings.utf_16</a>
+ &#8226;   <a href="#encodings.utf_16_be">encodings.utf_16_be</a>
+ &#8226;   <a href="#encodings.utf_16_le">encodings.utf_16_le</a>
+ &#8226;   <a href="#encodings.utf_32">encodings.utf_32</a>
+ &#8226;   <a href="#encodings.utf_32_be">encodings.utf_32_be</a>
+ &#8226;   <a href="#encodings.utf_32_le">encodings.utf_32_le</a>
+ &#8226;   <a href="#encodings.utf_7">encodings.utf_7</a>
+ &#8226;   <a href="#encodings.utf_8">encodings.utf_8</a>
+ &#8226;   <a href="#encodings.utf_8_sig">encodings.utf_8_sig</a>
+ &#8226;   <a href="#encodings.uu_codec">encodings.uu_codec</a>
+ &#8226;   <a href="#encodings.zlib_codec">encodings.zlib_codec</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.aliases"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/aliases.py" type="text/plain"><tt>encodings.aliases</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.ascii"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/ascii.py" type="text/plain"><tt>encodings.ascii</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.base64_codec"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/base64_codec.py" type="text/plain"><tt>encodings.base64_codec</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#base64">base64</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.big5"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/big5.py" type="text/plain"><tt>encodings.big5</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_tw">_codecs_tw</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.big5hkscs"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/big5hkscs.py" type="text/plain"><tt>encodings.big5hkscs</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_hk">_codecs_hk</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.bz2_codec"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/bz2_codec.py" type="text/plain"><tt>encodings.bz2_codec</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#bz2">bz2</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.charmap"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/charmap.py" type="text/plain"><tt>encodings.charmap</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp037"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp037.py" type="text/plain"><tt>encodings.cp037</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1006"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1006.py" type="text/plain"><tt>encodings.cp1006</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1026"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1026.py" type="text/plain"><tt>encodings.cp1026</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1125"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1125.py" type="text/plain"><tt>encodings.cp1125</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1140"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1140.py" type="text/plain"><tt>encodings.cp1140</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1250"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1250.py" type="text/plain"><tt>encodings.cp1250</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1251"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1251.py" type="text/plain"><tt>encodings.cp1251</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1252"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1252.py" type="text/plain"><tt>encodings.cp1252</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1253"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1253.py" type="text/plain"><tt>encodings.cp1253</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1254"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1254.py" type="text/plain"><tt>encodings.cp1254</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1255"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1255.py" type="text/plain"><tt>encodings.cp1255</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1256"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1256.py" type="text/plain"><tt>encodings.cp1256</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1257"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1257.py" type="text/plain"><tt>encodings.cp1257</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp1258"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp1258.py" type="text/plain"><tt>encodings.cp1258</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp273"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp273.py" type="text/plain"><tt>encodings.cp273</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp424"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp424.py" type="text/plain"><tt>encodings.cp424</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp437"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp437.py" type="text/plain"><tt>encodings.cp437</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp500"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp500.py" type="text/plain"><tt>encodings.cp500</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp65001"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp65001.py" type="text/plain"><tt>encodings.cp65001</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#functools">functools</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp720"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp720.py" type="text/plain"><tt>encodings.cp720</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp737"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp737.py" type="text/plain"><tt>encodings.cp737</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp775"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp775.py" type="text/plain"><tt>encodings.cp775</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp850"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp850.py" type="text/plain"><tt>encodings.cp850</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp852"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp852.py" type="text/plain"><tt>encodings.cp852</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp855"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp855.py" type="text/plain"><tt>encodings.cp855</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp856"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp856.py" type="text/plain"><tt>encodings.cp856</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp857"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp857.py" type="text/plain"><tt>encodings.cp857</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp858"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp858.py" type="text/plain"><tt>encodings.cp858</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp860"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp860.py" type="text/plain"><tt>encodings.cp860</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp861"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp861.py" type="text/plain"><tt>encodings.cp861</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp862"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp862.py" type="text/plain"><tt>encodings.cp862</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp863"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp863.py" type="text/plain"><tt>encodings.cp863</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp864"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp864.py" type="text/plain"><tt>encodings.cp864</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp865"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp865.py" type="text/plain"><tt>encodings.cp865</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp866"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp866.py" type="text/plain"><tt>encodings.cp866</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp869"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp869.py" type="text/plain"><tt>encodings.cp869</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp874"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp874.py" type="text/plain"><tt>encodings.cp874</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp875"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp875.py" type="text/plain"><tt>encodings.cp875</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp932"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp932.py" type="text/plain"><tt>encodings.cp932</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_jp">_codecs_jp</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp949"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp949.py" type="text/plain"><tt>encodings.cp949</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_kr">_codecs_kr</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.cp950"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/cp950.py" type="text/plain"><tt>encodings.cp950</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_tw">_codecs_tw</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.euc_jis_2004"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/euc_jis_2004.py" type="text/plain"><tt>encodings.euc_jis_2004</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_jp">_codecs_jp</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.euc_jisx0213"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/euc_jisx0213.py" type="text/plain"><tt>encodings.euc_jisx0213</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_jp">_codecs_jp</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.euc_jp"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/euc_jp.py" type="text/plain"><tt>encodings.euc_jp</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_jp">_codecs_jp</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.euc_kr"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/euc_kr.py" type="text/plain"><tt>encodings.euc_kr</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_kr">_codecs_kr</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.gb18030"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/gb18030.py" type="text/plain"><tt>encodings.gb18030</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_cn">_codecs_cn</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.gb2312"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/gb2312.py" type="text/plain"><tt>encodings.gb2312</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_cn">_codecs_cn</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.gbk"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/gbk.py" type="text/plain"><tt>encodings.gbk</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_cn">_codecs_cn</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.hex_codec"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/hex_codec.py" type="text/plain"><tt>encodings.hex_codec</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#binascii">binascii</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.hp_roman8"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/hp_roman8.py" type="text/plain"><tt>encodings.hp_roman8</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.hz"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/hz.py" type="text/plain"><tt>encodings.hz</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_cn">_codecs_cn</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.idna"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/idna.py" type="text/plain"><tt>encodings.idna</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#stringprep">stringprep</a>
+ &#8226;   <a href="#unicodedata">unicodedata</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso2022_jp"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso2022_jp.py" type="text/plain"><tt>encodings.iso2022_jp</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_iso2022">_codecs_iso2022</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso2022_jp_1"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso2022_jp_1.py" type="text/plain"><tt>encodings.iso2022_jp_1</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_iso2022">_codecs_iso2022</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso2022_jp_2"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso2022_jp_2.py" type="text/plain"><tt>encodings.iso2022_jp_2</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_iso2022">_codecs_iso2022</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso2022_jp_2004"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso2022_jp_2004.py" type="text/plain"><tt>encodings.iso2022_jp_2004</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_iso2022">_codecs_iso2022</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso2022_jp_3"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso2022_jp_3.py" type="text/plain"><tt>encodings.iso2022_jp_3</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_iso2022">_codecs_iso2022</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso2022_jp_ext"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso2022_jp_ext.py" type="text/plain"><tt>encodings.iso2022_jp_ext</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_iso2022">_codecs_iso2022</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso2022_kr"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso2022_kr.py" type="text/plain"><tt>encodings.iso2022_kr</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_iso2022">_codecs_iso2022</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_1"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_1.py" type="text/plain"><tt>encodings.iso8859_1</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_10"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_10.py" type="text/plain"><tt>encodings.iso8859_10</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_11"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_11.py" type="text/plain"><tt>encodings.iso8859_11</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_13"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_13.py" type="text/plain"><tt>encodings.iso8859_13</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_14"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_14.py" type="text/plain"><tt>encodings.iso8859_14</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_15"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_15.py" type="text/plain"><tt>encodings.iso8859_15</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_16"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_16.py" type="text/plain"><tt>encodings.iso8859_16</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_2"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_2.py" type="text/plain"><tt>encodings.iso8859_2</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_3"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_3.py" type="text/plain"><tt>encodings.iso8859_3</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_4"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_4.py" type="text/plain"><tt>encodings.iso8859_4</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_5"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_5.py" type="text/plain"><tt>encodings.iso8859_5</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_6"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_6.py" type="text/plain"><tt>encodings.iso8859_6</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_7"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_7.py" type="text/plain"><tt>encodings.iso8859_7</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_8"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_8.py" type="text/plain"><tt>encodings.iso8859_8</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.iso8859_9"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/iso8859_9.py" type="text/plain"><tt>encodings.iso8859_9</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.johab"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/johab.py" type="text/plain"><tt>encodings.johab</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_kr">_codecs_kr</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.koi8_r"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/koi8_r.py" type="text/plain"><tt>encodings.koi8_r</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.koi8_t"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/koi8_t.py" type="text/plain"><tt>encodings.koi8_t</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.koi8_u"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/koi8_u.py" type="text/plain"><tt>encodings.koi8_u</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.kz1048"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/kz1048.py" type="text/plain"><tt>encodings.kz1048</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.latin_1"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/latin_1.py" type="text/plain"><tt>encodings.latin_1</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_arabic"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_arabic.py" type="text/plain"><tt>encodings.mac_arabic</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_centeuro"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_centeuro.py" type="text/plain"><tt>encodings.mac_centeuro</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_croatian"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_croatian.py" type="text/plain"><tt>encodings.mac_croatian</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_cyrillic"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_cyrillic.py" type="text/plain"><tt>encodings.mac_cyrillic</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_farsi"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_farsi.py" type="text/plain"><tt>encodings.mac_farsi</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_greek"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_greek.py" type="text/plain"><tt>encodings.mac_greek</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_iceland"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_iceland.py" type="text/plain"><tt>encodings.mac_iceland</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_latin2"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_latin2.py" type="text/plain"><tt>encodings.mac_latin2</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_roman"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_roman.py" type="text/plain"><tt>encodings.mac_roman</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_romanian"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_romanian.py" type="text/plain"><tt>encodings.mac_romanian</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mac_turkish"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mac_turkish.py" type="text/plain"><tt>encodings.mac_turkish</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.mbcs"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/mbcs.py" type="text/plain"><tt>encodings.mbcs</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.oem"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/oem.py" type="text/plain"><tt>encodings.oem</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.palmos"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/palmos.py" type="text/plain"><tt>encodings.palmos</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.ptcp154"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/ptcp154.py" type="text/plain"><tt>encodings.ptcp154</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.punycode"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/punycode.py" type="text/plain"><tt>encodings.punycode</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.quopri_codec"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/quopri_codec.py" type="text/plain"><tt>encodings.quopri_codec</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#quopri">quopri</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.raw_unicode_escape"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/raw_unicode_escape.py" type="text/plain"><tt>encodings.raw_unicode_escape</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.rot_13"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/rot_13.py" type="text/plain"><tt>encodings.rot_13</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.shift_jis"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/shift_jis.py" type="text/plain"><tt>encodings.shift_jis</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_jp">_codecs_jp</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.shift_jis_2004"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/shift_jis_2004.py" type="text/plain"><tt>encodings.shift_jis_2004</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_jp">_codecs_jp</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.shift_jisx0213"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/shift_jisx0213.py" type="text/plain"><tt>encodings.shift_jisx0213</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_codecs_jp">_codecs_jp</a>
+ &#8226;   <a href="#_multibytecodec">_multibytecodec</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.tis_620"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/tis_620.py" type="text/plain"><tt>encodings.tis_620</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.undefined"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/undefined.py" type="text/plain"><tt>encodings.undefined</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.unicode_escape"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/unicode_escape.py" type="text/plain"><tt>encodings.unicode_escape</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.unicode_internal"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/unicode_internal.py" type="text/plain"><tt>encodings.unicode_internal</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_16"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_16.py" type="text/plain"><tt>encodings.utf_16</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_16_be"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_16_be.py" type="text/plain"><tt>encodings.utf_16_be</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_16_le"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_16_le.py" type="text/plain"><tt>encodings.utf_16_le</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_32"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_32.py" type="text/plain"><tt>encodings.utf_32</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_32_be"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_32_be.py" type="text/plain"><tt>encodings.utf_32_be</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_32_le"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_32_le.py" type="text/plain"><tt>encodings.utf_32_le</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_7"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_7.py" type="text/plain"><tt>encodings.utf_7</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_8"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_8.py" type="text/plain"><tt>encodings.utf_8</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.utf_8_sig"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/utf_8_sig.py" type="text/plain"><tt>encodings.utf_8_sig</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.uu_codec"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/uu_codec.py" type="text/plain"><tt>encodings.uu_codec</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#binascii">binascii</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#io">io</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="encodings.zlib_codec"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/encodings/zlib_codec.py" type="text/plain"><tt>encodings.zlib_codec</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#zlib">zlib</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings">encodings</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="enum"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/enum.py" type="text/plain"><tt>enum</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections">_collections</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#http">http</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#signal">signal</a>
+ &#8226;   <a href="#socket">socket</a>
+ &#8226;   <a href="#ssl">ssl</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="errno"></a>
+  <tt>errno</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#gettext">gettext</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#socket">socket</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="fcntl"></a>
+  <a target="code" href="" type="text/plain"><tt>fcntl</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="fnmatch"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/fnmatch.py" type="text/plain"><tt>fnmatch</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#functools">functools</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#bdb">bdb</a>
+ &#8226;   <a href="#glob">glob</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#tracemalloc">tracemalloc</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="functools"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/functools.py" type="text/plain"><tt>functools</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_functools">_functools</a>
+ &#8226;   <a href="#_thread">_thread</a>
+ &#8226;   <a href="#abc">abc</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#reprlib">reprlib</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#typing">typing</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#email._encoded_words">email._encoded_words</a>
+ &#8226;   <a href="#email.charset">email.charset</a>
+ &#8226;   <a href="#encodings.cp65001">encodings.cp65001</a>
+ &#8226;   <a href="#fnmatch">fnmatch</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#keyboard._generic">keyboard._generic</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#operator">operator</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#signal">signal</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+ &#8226;   <a href="#tracemalloc">tracemalloc</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#typing">typing</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+ &#8226;   <a href="#unittest.result">unittest.result</a>
+ &#8226;   <a href="#unittest.signals">unittest.signals</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="gc"></a>
+  <tt>gc</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imports:
+    <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_posixsubprocess">_posixsubprocess</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="genericpath"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/genericpath.py" type="text/plain"><tt>genericpath</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#os">os</a>
+ &#8226;   <a href="#stat">stat</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="getopt"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/getopt.py" type="text/plain"><tt>getopt</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#gettext">gettext</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#base64">base64</a>
+ &#8226;   <a href="#mimetypes">mimetypes</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#quopri">quopri</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="gettext"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/gettext.py" type="text/plain"><tt>gettext</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#builtins">builtins</a>
+ &#8226;   <a href="#copy">copy</a>
+ &#8226;   <a href="#errno">errno</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#getopt">getopt</a>
+ &#8226;   <a href="#optparse">optparse</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="glob"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/glob.py" type="text/plain"><tt>glob</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#fnmatch">fnmatch</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="grp"></a>
+  <a target="code" href="" type="text/plain"><tt>grp</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#shutil">shutil</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="gzip"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/gzip.py" type="text/plain"><tt>gzip</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_compression">_compression</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#errno">errno</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#zlib">zlib</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#tarfile">tarfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="hashlib"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/hashlib.py" type="text/plain"><tt>hashlib</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_blake2">_blake2</a>
+ &#8226;   <a href="#_hashlib">_hashlib</a>
+ &#8226;   <a href="#_md5">_md5</a>
+ &#8226;   <a href="#_sha1">_sha1</a>
+ &#8226;   <a href="#_sha256">_sha256</a>
+ &#8226;   <a href="#_sha3">_sha3</a>
+ &#8226;   <a href="#_sha512">_sha512</a>
+ &#8226;   <a href="#logging">logging</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#random">random</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="heapq"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/heapq.py" type="text/plain"><tt>heapq</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_heapq">_heapq</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#difflib">difflib</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#queue">queue</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="importlib"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/importlib/__init__.py" type="text/plain"><tt>importlib</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#_frozen_importlib">_frozen_importlib</a>
+ &#8226;   <a href="#_frozen_importlib_external">_frozen_importlib_external</a>
+ &#8226;   <a href="#_imp">_imp</a>
+ &#8226;   <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib._bootstrap">importlib._bootstrap</a>
+ &#8226;   <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib._bootstrap">importlib._bootstrap</a>
+ &#8226;   <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#importlib.machinery">importlib.machinery</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="importlib._bootstrap"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/importlib/_bootstrap.py" type="text/plain"><tt>importlib._bootstrap</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_frozen_importlib_external">_frozen_importlib_external</a>
+ &#8226;   <a href="#importlib">importlib</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#importlib.machinery">importlib.machinery</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="importlib._bootstrap_external"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/importlib/_bootstrap_external.py" type="text/plain"><tt>importlib._bootstrap_external</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#importlib.machinery">importlib.machinery</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="importlib.abc"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/importlib/abc.py" type="text/plain"><tt>importlib.abc</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_frozen_importlib">_frozen_importlib</a>
+ &#8226;   <a href="#_frozen_importlib_external">_frozen_importlib_external</a>
+ &#8226;   <a href="#abc">abc</a>
+ &#8226;   <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib._bootstrap">importlib._bootstrap</a>
+ &#8226;   <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
+ &#8226;   <a href="#importlib.machinery">importlib.machinery</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="importlib.machinery"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/importlib/machinery.py" type="text/plain"><tt>importlib.machinery</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_imp">_imp</a>
+ &#8226;   <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib._bootstrap">importlib._bootstrap</a>
+ &#8226;   <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#runpy">runpy</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="importlib.util"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/importlib/util.py" type="text/plain"><tt>importlib.util</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_imp">_imp</a>
+ &#8226;   <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib._bootstrap">importlib._bootstrap</a>
+ &#8226;   <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#runpy">runpy</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="io"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/io.py" type="text/plain"><tt>io</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_io">_io</a>
+ &#8226;   <a href="#abc">abc</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_compression">_compression</a>
+ &#8226;   <a href="#bz2">bz2</a>
+ &#8226;   <a href="#dis">dis</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#email.feedparser">email.feedparser</a>
+ &#8226;   <a href="#email.generator">email.generator</a>
+ &#8226;   <a href="#email.iterators">email.iterators</a>
+ &#8226;   <a href="#email.message">email.message</a>
+ &#8226;   <a href="#email.parser">email.parser</a>
+ &#8226;   <a href="#encodings.quopri_codec">encodings.quopri_codec</a>
+ &#8226;   <a href="#encodings.uu_codec">encodings.uu_codec</a>
+ &#8226;   <a href="#getpass">getpass</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#http.client">http.client</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#lzma">lzma</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#pyi_rth_subprocess.py">pyi_rth_subprocess.py</a>
+ &#8226;   <a href="#quopri">quopri</a>
+ &#8226;   <a href="#shlex">shlex</a>
+ &#8226;   <a href="#socket">socket</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#unittest.result">unittest.result</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#xml.sax">xml.sax</a>
+ &#8226;   <a href="#xml.sax.saxutils">xml.sax.saxutils</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="itertools"></a>
+  <tt>itertools</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#calendar">calendar</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#ctypes.macholib.dyld">ctypes.macholib.dyld</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#reprlib">reprlib</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="java"></a>
+  <a target="code" href="" type="text/plain"><tt>java</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#platform">platform</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="json"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/json/__init__.py" type="text/plain"><tt>json</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#codecs">codecs</a>
+ &#8226;   <a href="#json.decoder">json.decoder</a>
+ &#8226;   <a href="#json.encoder">json.encoder</a>
+ &#8226;   <a href="#json.scanner">json.scanner</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#json.decoder">json.decoder</a>
+ &#8226;   <a href="#json.encoder">json.encoder</a>
+ &#8226;   <a href="#json.scanner">json.scanner</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="json.decoder"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/json/decoder.py" type="text/plain"><tt>json.decoder</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_json">_json</a>
+ &#8226;   <a href="#json">json</a>
+ &#8226;   <a href="#json.scanner">json.scanner</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_json">_json</a>
+ &#8226;   <a href="#json">json</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="json.encoder"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/json/encoder.py" type="text/plain"><tt>json.encoder</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_json">_json</a>
+ &#8226;   <a href="#json">json</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#json">json</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="json.scanner"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/json/scanner.py" type="text/plain"><tt>json.scanner</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_json">_json</a>
+ &#8226;   <a href="#json">json</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#json">json</a>
+ &#8226;   <a href="#json.decoder">json.decoder</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/__init__.py" type="text/plain"><tt>keyboard</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#Queue">Queue</a>
+ &#8226;   <a href="#__future__">__future__</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._generic">keyboard._generic</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#queue">queue</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._generic">keyboard._generic</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard._canonical_names"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/_canonical_names.py" type="text/plain"><tt>keyboard._canonical_names</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#__future__">__future__</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#platform">platform</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard._darwinkeyboard"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/_darwinkeyboard.py" type="text/plain"><tt>keyboard._darwinkeyboard</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#AppKit">AppKit</a>
+ &#8226;   <a href="#Quartz">Quartz</a>
+ &#8226;   <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard._generic"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/_generic.py" type="text/plain"><tt>keyboard._generic</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#Queue">Queue</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#queue">queue</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#traceback">traceback</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard._keyboard_event"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/_keyboard_event.py" type="text/plain"><tt>keyboard._keyboard_event</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#json">json</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard._nixcommon"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/_nixcommon.py" type="text/plain"><tt>keyboard._nixcommon</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#Queue">Queue</a>
+ &#8226;   <a href="#atexit">atexit</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#fcntl">fcntl</a>
+ &#8226;   <a href="#glob">glob</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#queue">queue</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard._nixkeyboard"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/_nixkeyboard.py" type="text/plain"><tt>keyboard._nixkeyboard</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#traceback">traceback</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyboard._winkeyboard"></a>
+  <a target="code" href="///F:/users/galo/documents/github/pyffmpeg/ffmpegpy/lib/site-packages/keyboard/_winkeyboard.py" type="text/plain"><tt>keyboard._winkeyboard</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#__future__">__future__</a>
+ &#8226;   <a href="#atexit">atexit</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#ctypes.wintypes">ctypes.wintypes</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#traceback">traceback</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="keyword"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/keyword.py" type="text/plain"><tt>keyword</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="linecache"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/linecache.py" type="text/plain"><tt>linecache</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#functools">functools</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#bdb">bdb</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#tracemalloc">tracemalloc</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="locale"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/locale.py" type="text/plain"><tt>locale</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_bootlocale">_bootlocale</a>
+ &#8226;   <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#_locale">_locale</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#encodings.aliases">encodings.aliases</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_bootlocale">_bootlocale</a>
+ &#8226;   <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#calendar">calendar</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#main.py">main.py</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="logging"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/logging/__init__.py" type="text/plain"><tt>logging</tt></a>
+<span class="moduletype">Package</span>  <div class="import">
+imports:
+    <a href="#atexit">atexit</a>
+ &#8226;   <a href="#collections.abc">collections.abc</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#string">string</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#hashlib">hashlib</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="lzma"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/lzma.py" type="text/plain"><tt>lzma</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_compression">_compression</a>
+ &#8226;   <a href="#_lzma">_lzma</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#os">os</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#shutil">shutil</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="math"></a>
+  <tt>math</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#datetime">datetime</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#selectors">selectors</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="msvcrt"></a>
+  <tt>msvcrt</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#getpass">getpass</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="nt"></a>
+  <tt>nt</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#shutil">shutil</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ntpath"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/ntpath.py" type="text/plain"><tt>ntpath</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#genericpath">genericpath</a>
+ &#8226;   <a href="#nt">nt</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#stat">stat</a>
+ &#8226;   <a href="#string">string</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#os">os</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="ntpath"></a>
+  <a target="code" href="" type="text/plain"><tt>ntpath</tt></a>
+<span class="moduletype">AliasNode</span>  <div class="import">
+imports:
+    <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#os">os</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#os">os</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#tracemalloc">tracemalloc</a>
+ &#8226;   <a href="#unittest">unittest</a>
+ &#8226;   <a href="#unittest.util">unittest.util</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="operator"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/operator.py" type="text/plain"><tt>operator</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_operator">_operator</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#functools">functools</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#email._header_value_parser">email._header_value_parser</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#typing">typing</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="org"></a>
+  <a target="code" href="" type="text/plain"><tt>org</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#copy">copy</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="os"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/os.py" type="text/plain"><tt>os</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#abc">abc</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#nt">nt</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#posix">posix</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+ &#8226;   <a href="#stat">stat</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#bdb">bdb</a>
+ &#8226;   <a href="#bz2">bz2</a>
+ &#8226;   <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#ctypes._aix">ctypes._aix</a>
+ &#8226;   <a href="#ctypes.macholib.dyld">ctypes.macholib.dyld</a>
+ &#8226;   <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#email.utils">email.utils</a>
+ &#8226;   <a href="#fnmatch">fnmatch</a>
+ &#8226;   <a href="#genericpath">genericpath</a>
+ &#8226;   <a href="#getopt">getopt</a>
+ &#8226;   <a href="#getpass">getpass</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#glob">glob</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#lzma">lzma</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#mimetypes">mimetypes</a>
+ &#8226;   <a href="#netrc">netrc</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#optparse">optparse</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#shlex">shlex</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#socket">socket</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+ &#8226;   <a href="#unittest.main">unittest.main</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#uu">uu</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+ &#8226;   <a href="#xml.sax">xml.sax</a>
+ &#8226;   <a href="#xml.sax.saxutils">xml.sax.saxutils</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="pickle"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/pickle.py" type="text/plain"><tt>pickle</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#'org.python'">'org.python'</a>
+ &#8226;   <a href="#_compat_pickle">_compat_pickle</a>
+ &#8226;   <a href="#_pickle">_pickle</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#copyreg">copyreg</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#types">types</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#logging">logging</a>
+ &#8226;   <a href="#tracemalloc">tracemalloc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="platform"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/platform.py" type="text/plain"><tt>platform</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#'java.lang'">'java.lang'</a>
+ &#8226;   <a href="#_winreg">_winreg</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#java">java</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#socket">socket</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#vms_lib">vms_lib</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#winreg">winreg</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._canonical_names">keyboard._canonical_names</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="posix"></a>
+  <a target="code" href="" type="text/plain"><tt>posix</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imports:
+    <a href="#resource">resource</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#os">os</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="posixpath"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/posixpath.py" type="text/plain"><tt>posixpath</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#genericpath">genericpath</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pwd">pwd</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#stat">stat</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#fnmatch">fnmatch</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#mimetypes">mimetypes</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="pprint"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/pprint.py" type="text/plain"><tt>pprint</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#types">types</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="pwd"></a>
+  <a target="code" href="" type="text/plain"><tt>pwd</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#getpass">getpass</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#netrc">netrc</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="py_compile"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/py_compile.py" type="text/plain"><tt>py_compile</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#enum">enum</a>
+ &#8226;   <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
+ &#8226;   <a href="#importlib.machinery">importlib.machinery</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#traceback">traceback</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="queue"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/queue.py" type="text/plain"><tt>queue</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_queue">_queue</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#heapq">heapq</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#time">time</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._generic">keyboard._generic</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="quopri"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/quopri.py" type="text/plain"><tt>quopri</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#binascii">binascii</a>
+ &#8226;   <a href="#getopt">getopt</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#email.encoders">email.encoders</a>
+ &#8226;   <a href="#email.message">email.message</a>
+ &#8226;   <a href="#encodings.quopri_codec">encodings.quopri_codec</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="random"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/random.py" type="text/plain"><tt>random</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#_random">_random</a>
+ &#8226;   <a href="#bisect">bisect</a>
+ &#8226;   <a href="#hashlib">hashlib</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#math">math</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#email.generator">email.generator</a>
+ &#8226;   <a href="#email.utils">email.utils</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="re"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/re.py" type="text/plain"><tt>re</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_locale">_locale</a>
+ &#8226;   <a href="#copyreg">copyreg</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#sre_compile">sre_compile</a>
+ &#8226;   <a href="#sre_constants">sre_constants</a>
+ &#8226;   <a href="#sre_parse">sre_parse</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_sre">_sre</a>
+ &#8226;   <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#argparse">argparse</a>
+ &#8226;   <a href="#base64">base64</a>
+ &#8226;   <a href="#ctypes._aix">ctypes._aix</a>
+ &#8226;   <a href="#ctypes.macholib.dylib">ctypes.macholib.dylib</a>
+ &#8226;   <a href="#ctypes.macholib.framework">ctypes.macholib.framework</a>
+ &#8226;   <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#difflib">difflib</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#email._encoded_words">email._encoded_words</a>
+ &#8226;   <a href="#email._header_value_parser">email._header_value_parser</a>
+ &#8226;   <a href="#email.feedparser">email.feedparser</a>
+ &#8226;   <a href="#email.generator">email.generator</a>
+ &#8226;   <a href="#email.header">email.header</a>
+ &#8226;   <a href="#email.message">email.message</a>
+ &#8226;   <a href="#email.policy">email.policy</a>
+ &#8226;   <a href="#email.quoprimime">email.quoprimime</a>
+ &#8226;   <a href="#email.utils">email.utils</a>
+ &#8226;   <a href="#encodings.idna">encodings.idna</a>
+ &#8226;   <a href="#fnmatch">fnmatch</a>
+ &#8226;   <a href="#ftplib">ftplib</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#glob">glob</a>
+ &#8226;   <a href="#html">html</a>
+ &#8226;   <a href="#http.client">http.client</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#json.decoder">json.decoder</a>
+ &#8226;   <a href="#json.encoder">json.encoder</a>
+ &#8226;   <a href="#json.scanner">json.scanner</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#keyword">keyword</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#shlex">shlex</a>
+ &#8226;   <a href="#string">string</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#textwrap">textwrap</a>
+ &#8226;   <a href="#token">token</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#typing">typing</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+ &#8226;   <a href="#urllib.parse">urllib.parse</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="reprlib"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/reprlib.py" type="text/plain"><tt>reprlib</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_thread">_thread</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#itertools">itertools</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#bdb">bdb</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="resource"></a>
+  <a target="code" href="" type="text/plain"><tt>resource</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#posix">posix</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="select"></a>
+  <tt>select</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\select.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#http.server">http.server</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#selectors">selectors</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="selectors"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/selectors.py" type="text/plain"><tt>selectors</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#abc">abc</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#collections.abc">collections.abc</a>
+ &#8226;   <a href="#math">math</a>
+ &#8226;   <a href="#select">select</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#socket">socket</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="shutil"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/shutil.py" type="text/plain"><tt>shutil</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#bz2">bz2</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#errno">errno</a>
+ &#8226;   <a href="#fnmatch">fnmatch</a>
+ &#8226;   <a href="#grp">grp</a>
+ &#8226;   <a href="#lzma">lzma</a>
+ &#8226;   <a href="#nt">nt</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pwd">pwd</a>
+ &#8226;   <a href="#stat">stat</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+ &#8226;   <a href="#zlib">zlib</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="signal"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/signal.py" type="text/plain"><tt>signal</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_signal">_signal</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#functools">functools</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#pdb">pdb</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#unittest.signals">unittest.signals</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="socket"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/socket.py" type="text/plain"><tt>socket</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_socket">_socket</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#errno">errno</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#selectors">selectors</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_ssl">_ssl</a>
+ &#8226;   <a href="#email.utils">email.utils</a>
+ &#8226;   <a href="#ftplib">ftplib</a>
+ &#8226;   <a href="#http.client">http.client</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="sre_compile"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/sre_compile.py" type="text/plain"><tt>sre_compile</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_sre">_sre</a>
+ &#8226;   <a href="#sre_constants">sre_constants</a>
+ &#8226;   <a href="#sre_parse">sre_parse</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#main.py">main.py</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="sre_constants"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/sre_constants.py" type="text/plain"><tt>sre_constants</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_sre">_sre</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#main.py">main.py</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sre_compile">sre_compile</a>
+ &#8226;   <a href="#sre_parse">sre_parse</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="sre_parse"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/sre_parse.py" type="text/plain"><tt>sre_parse</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#sre_constants">sre_constants</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#main.py">main.py</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sre_compile">sre_compile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="stat"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/stat.py" type="text/plain"><tt>stat</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_stat">_stat</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#genericpath">genericpath</a>
+ &#8226;   <a href="#netrc">netrc</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="string"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/string.py" type="text/plain"><tt>string</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_string">_string</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#cmd">cmd</a>
+ &#8226;   <a href="#email._encoded_words">email._encoded_words</a>
+ &#8226;   <a href="#email._header_value_parser">email._header_value_parser</a>
+ &#8226;   <a href="#email.quoprimime">email.quoprimime</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#nturl2path">nturl2path</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="stringprep"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/stringprep.py" type="text/plain"><tt>stringprep</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#unicodedata">unicodedata</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#encodings.idna">encodings.idna</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="struct"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/struct.py" type="text/plain"><tt>struct</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_struct">_struct</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#base64">base64</a>
+ &#8226;   <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="subprocess"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/subprocess.py" type="text/plain"><tt>subprocess</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_posixsubprocess">_posixsubprocess</a>
+ &#8226;   <a href="#_winapi">_winapi</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#errno">errno</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#msvcrt">msvcrt</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#select">select</a>
+ &#8226;   <a href="#selectors">selectors</a>
+ &#8226;   <a href="#signal">signal</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes._aix">ctypes._aix</a>
+ &#8226;   <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#pyi_rth_subprocess.py">pyi_rth_subprocess.py</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="sys"></a>
+  <tt>sys</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#_bootlocale">_bootlocale</a>
+ &#8226;   <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#argparse">argparse</a>
+ &#8226;   <a href="#base64">base64</a>
+ &#8226;   <a href="#bdb">bdb</a>
+ &#8226;   <a href="#calendar">calendar</a>
+ &#8226;   <a href="#cmd">cmd</a>
+ &#8226;   <a href="#code">code</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#ctypes">ctypes</a>
+ &#8226;   <a href="#ctypes._aix">ctypes._aix</a>
+ &#8226;   <a href="#ctypes._endian">ctypes._endian</a>
+ &#8226;   <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#datetime">datetime</a>
+ &#8226;   <a href="#dis">dis</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#email._header_value_parser">email._header_value_parser</a>
+ &#8226;   <a href="#email.generator">email.generator</a>
+ &#8226;   <a href="#email.iterators">email.iterators</a>
+ &#8226;   <a href="#email.policy">email.policy</a>
+ &#8226;   <a href="#encodings">encodings</a>
+ &#8226;   <a href="#encodings.rot_13">encodings.rot_13</a>
+ &#8226;   <a href="#encodings.utf_16">encodings.utf_16</a>
+ &#8226;   <a href="#encodings.utf_32">encodings.utf_32</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#ftplib">ftplib</a>
+ &#8226;   <a href="#getopt">getopt</a>
+ &#8226;   <a href="#getpass">getpass</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#keyword">keyword</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#mimetypes">mimetypes</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#optparse">optparse</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#posixpath">posixpath</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#pyi_rth_subprocess.py">pyi_rth_subprocess.py</a>
+ &#8226;   <a href="#quopri">quopri</a>
+ &#8226;   <a href="#runpy">runpy</a>
+ &#8226;   <a href="#selectors">selectors</a>
+ &#8226;   <a href="#shlex">shlex</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#socket">socket</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#sre_compile">sre_compile</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#token">token</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#types">types</a>
+ &#8226;   <a href="#typing">typing</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+ &#8226;   <a href="#unittest.main">unittest.main</a>
+ &#8226;   <a href="#unittest.result">unittest.result</a>
+ &#8226;   <a href="#unittest.runner">unittest.runner</a>
+ &#8226;   <a href="#unittest.suite">unittest.suite</a>
+ &#8226;   <a href="#urllib.parse">urllib.parse</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#uu">uu</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#weakref">weakref</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+ &#8226;   <a href="#xml.parsers.expat">xml.parsers.expat</a>
+ &#8226;   <a href="#xml.sax">xml.sax</a>
+ &#8226;   <a href="#xml.sax._exceptions">xml.sax._exceptions</a>
+ &#8226;   <a href="#xml.sax.expatreader">xml.sax.expatreader</a>
+ &#8226;   <a href="#xml.sax.saxutils">xml.sax.saxutils</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="tarfile"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/tarfile.py" type="text/plain"><tt>tarfile</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#bz2">bz2</a>
+ &#8226;   <a href="#copy">copy</a>
+ &#8226;   <a href="#grp">grp</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#lzma">lzma</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pwd">pwd</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#stat">stat</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#zlib">zlib</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#shutil">shutil</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="tempfile"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/tempfile.py" type="text/plain"><tt>tempfile</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_thread">_thread</a>
+ &#8226;   <a href="#errno">errno</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#weakref">weakref</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#ctypes.util">ctypes.util</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#urllib.response">urllib.response</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="textwrap"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/textwrap.py" type="text/plain"><tt>textwrap</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#re">re</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#optparse">optparse</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="threading"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/threading.py" type="text/plain"><tt>threading</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections">_collections</a>
+ &#8226;   <a href="#_thread">_thread</a>
+ &#8226;   <a href="#_threading_local">_threading_local</a>
+ &#8226;   <a href="#_weakrefset">_weakrefset</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_threading_local">_threading_local</a>
+ &#8226;   <a href="#bz2">bz2</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._generic">keyboard._generic</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#queue">queue</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#webbrowser">webbrowser</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="time"></a>
+  <tt>time</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imports:
+    <a href="#_strptime">_strptime</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_datetime">_datetime</a>
+ &#8226;   <a href="#_strptime">_strptime</a>
+ &#8226;   <a href="#datetime">datetime</a>
+ &#8226;   <a href="#email._parseaddr">email._parseaddr</a>
+ &#8226;   <a href="#email.generator">email.generator</a>
+ &#8226;   <a href="#email.utils">email.utils</a>
+ &#8226;   <a href="#gc">gc</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#http.server">http.server</a>
+ &#8226;   <a href="#keyboard">keyboard</a>
+ &#8226;   <a href="#keyboard._darwinkeyboard">keyboard._darwinkeyboard</a>
+ &#8226;   <a href="#keyboard._keyboard_event">keyboard._keyboard_event</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#queue">queue</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#unittest.runner">unittest.runner</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="token"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/token.py" type="text/plain"><tt>token</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#inspect">inspect</a>
+ &#8226;   <a href="#tokenize">tokenize</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="tokenize"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/tokenize.py" type="text/plain"><tt>tokenize</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#builtins">builtins</a>
+ &#8226;   <a href="#codecs">codecs</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#token">token</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#importlib._bootstrap_external">importlib._bootstrap_external</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="traceback"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/traceback.py" type="text/plain"><tt>traceback</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#collections">collections</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#code">code</a>
+ &#8226;   <a href="#doctest">doctest</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#keyboard._generic">keyboard._generic</a>
+ &#8226;   <a href="#keyboard._nixkeyboard">keyboard._nixkeyboard</a>
+ &#8226;   <a href="#keyboard._winkeyboard">keyboard._winkeyboard</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pdb">pdb</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#socketserver">socketserver</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+ &#8226;   <a href="#unittest.result">unittest.result</a>
+ &#8226;   <a href="#warnings">warnings</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="tracemalloc"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/tracemalloc.py" type="text/plain"><tt>tracemalloc</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_tracemalloc">_tracemalloc</a>
+ &#8226;   <a href="#collections.abc">collections.abc</a>
+ &#8226;   <a href="#fnmatch">fnmatch</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#ntpath">ntpath</a>
+ &#8226;   <a href="#pickle">pickle</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#warnings">warnings</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="types"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/types.py" type="text/plain"><tt>types</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#copy">copy</a>
+ &#8226;   <a href="#dis">dis</a>
+ &#8226;   <a href="#email.headerregistry">email.headerregistry</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#pickle">pickle</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#pprint">pprint</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#runpy">runpy</a>
+ &#8226;   <a href="#typing">typing</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="typing"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/typing.py" type="text/plain"><tt>typing</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#abc">abc</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#collections.abc">collections.abc</a>
+ &#8226;   <a href="#contextlib">contextlib</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#operator">operator</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#types">types</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#functools">functools</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="unicodedata"></a>
+  <tt>unicodedata</tt> <span class="moduletype"><tt>C:\Users\windows 10\AppData\Local\Programs\Python\Python37\DLLs\unicodedata.pyd</tt></span>  <div class="import">
+imported by:
+    <a href="#encodings.idna">encodings.idna</a>
+ &#8226;   <a href="#stringprep">stringprep</a>
+ &#8226;   <a href="#urllib.parse">urllib.parse</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="vms_lib"></a>
+  <a target="code" href="" type="text/plain"><tt>vms_lib</tt></a>
+<span class="moduletype">MissingModule</span>  <div class="import">
+imported by:
+    <a href="#platform">platform</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="warnings"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/warnings.py" type="text/plain"><tt>warnings</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_warnings">_warnings</a>
+ &#8226;   <a href="#linecache">linecache</a>
+ &#8226;   <a href="#re">re</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#traceback">traceback</a>
+ &#8226;   <a href="#tracemalloc">tracemalloc</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#base64">base64</a>
+ &#8226;   <a href="#bz2">bz2</a>
+ &#8226;   <a href="#collections">collections</a>
+ &#8226;   <a href="#enum">enum</a>
+ &#8226;   <a href="#ftplib">ftplib</a>
+ &#8226;   <a href="#getpass">getpass</a>
+ &#8226;   <a href="#gettext">gettext</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#http.client">http.client</a>
+ &#8226;   <a href="#http.cookiejar">http.cookiejar</a>
+ &#8226;   <a href="#importlib">importlib</a>
+ &#8226;   <a href="#importlib.abc">importlib.abc</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#inspect">inspect</a>
+ &#8226;   <a href="#keyboard._nixcommon">keyboard._nixcommon</a>
+ &#8226;   <a href="#locale">locale</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#pkgutil">pkgutil</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#plistlib">plistlib</a>
+ &#8226;   <a href="#pydoc">pydoc</a>
+ &#8226;   <a href="#random">random</a>
+ &#8226;   <a href="#runpy">runpy</a>
+ &#8226;   <a href="#sre_parse">sre_parse</a>
+ &#8226;   <a href="#ssl">ssl</a>
+ &#8226;   <a href="#subprocess">subprocess</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#unittest.case">unittest.case</a>
+ &#8226;   <a href="#unittest.loader">unittest.loader</a>
+ &#8226;   <a href="#unittest.runner">unittest.runner</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="weakref"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/weakref.py" type="text/plain"><tt>weakref</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#_collections_abc">_collections_abc</a>
+ &#8226;   <a href="#_weakref">_weakref</a>
+ &#8226;   <a href="#_weakrefset">_weakrefset</a>
+ &#8226;   <a href="#atexit">atexit</a>
+ &#8226;   <a href="#copy">copy</a>
+ &#8226;   <a href="#gc">gc</a>
+ &#8226;   <a href="#itertools">itertools</a>
+ &#8226;   <a href="#sys">sys</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#_threading_local">_threading_local</a>
+ &#8226;   <a href="#copy">copy</a>
+ &#8226;   <a href="#functools">functools</a>
+ &#8226;   <a href="#logging">logging</a>
+ &#8226;   <a href="#main.py">main.py</a>
+ &#8226;   <a href="#tempfile">tempfile</a>
+ &#8226;   <a href="#unittest.signals">unittest.signals</a>
+ &#8226;   <a href="#xml.sax.expatreader">xml.sax.expatreader</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="winreg"></a>
+  <tt>winreg</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#mimetypes">mimetypes</a>
+ &#8226;   <a href="#platform">platform</a>
+ &#8226;   <a href="#urllib.request">urllib.request</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="zipfile"></a>
+  <a target="code" href="///C:/Users/windows%2010/AppData/Local/Programs/Python/Python37/lib/zipfile.py" type="text/plain"><tt>zipfile</tt></a>
+<span class="moduletype">SourceModule</span>  <div class="import">
+imports:
+    <a href="#argparse">argparse</a>
+ &#8226;   <a href="#binascii">binascii</a>
+ &#8226;   <a href="#bz2">bz2</a>
+ &#8226;   <a href="#importlib.util">importlib.util</a>
+ &#8226;   <a href="#io">io</a>
+ &#8226;   <a href="#lzma">lzma</a>
+ &#8226;   <a href="#os">os</a>
+ &#8226;   <a href="#py_compile">py_compile</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#stat">stat</a>
+ &#8226;   <a href="#struct">struct</a>
+ &#8226;   <a href="#sys">sys</a>
+ &#8226;   <a href="#threading">threading</a>
+ &#8226;   <a href="#time">time</a>
+ &#8226;   <a href="#warnings">warnings</a>
+ &#8226;   <a href="#zlib">zlib</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#shutil">shutil</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="zipimport"></a>
+  <tt>zipimport</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imports:
+    <a href="#zlib">zlib</a>
+
+  </div>
+  <div class="import">
+imported by:
+    <a href="#pkgutil">pkgutil</a>
+
+  </div>
+
+</div>
+
+<div class="node">
+  <a name="zlib"></a>
+  <tt>zlib</tt> <span class="moduletype"><i>(builtin module)</i></span>  <div class="import">
+imported by:
+    <a href="#encodings.zlib_codec">encodings.zlib_codec</a>
+ &#8226;   <a href="#gzip">gzip</a>
+ &#8226;   <a href="#shutil">shutil</a>
+ &#8226;   <a href="#tarfile">tarfile</a>
+ &#8226;   <a href="#zipfile">zipfile</a>
+ &#8226;   <a href="#zipimport">zipimport</a>
+
+  </div>
+
+</div>
+
+  </body>
+</html>

BIN
dist/main.exe


+ 65 - 0
ffmpegpy/Lib/site-packages/PyInstaller/__init__.py

@@ -0,0 +1,65 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+__all__ = ('HOMEPATH', 'PLATFORM', '__version__', 'DEFAULT_DISTPATH', 'DEFAULT_SPECPATH', 'DEFAULT_WORKPATH')
+
+import os
+import sys
+
+from PyInstaller import compat
+from PyInstaller.utils.git import get_repo_revision
+
+# Note: Keep this variable as plain string so it could be updated automatically when doing a release.
+__version__ = '5.1'
+
+# Absolute path of this package's directory. Save this early so all submodules can use the absolute path. This is
+# required for example if the current directory changes prior to loading the hooks.
+PACKAGEPATH = os.path.abspath(os.path.dirname(__file__))
+
+HOMEPATH = os.path.dirname(PACKAGEPATH)
+
+# Update __version__ as necessary.
+if os.path.exists(os.path.join(HOMEPATH, 'setup.py')):
+    # PyInstaller is run directly from source without installation, or __version__ is called from 'setup.py'...
+    if compat.getenv('PYINSTALLER_DO_RELEASE') == '1':
+        # Suppress the git revision when doing a release.
+        pass
+    elif 'sdist' not in sys.argv:
+        # and 'setup.py' was not called with 'sdist' argument. For creating source tarball we do not want git revision
+        # in the filename.
+        try:
+            __version__ += get_repo_revision()
+        except Exception:
+            # Write to stderr because stdout is used for eval() statement in some subprocesses.
+            sys.stderr.write('WARN: failed to parse git revision')
+else:
+    # PyInstaller was installed by `python setup.py install'.
+    import pkg_resources
+    __version__ = pkg_resources.get_distribution('PyInstaller').version
+
+# Default values of paths where to put files created by PyInstaller. If changing these, do not forget to update the
+# help text for corresponding command-line options, defined in build_main.
+
+# Where to put created .spec file.
+DEFAULT_SPECPATH = os.getcwd()
+# Where to put the final frozen application.
+DEFAULT_DISTPATH = os.path.join(os.getcwd(), 'dist')
+# Where to put all the temporary files; .log, .pyz, etc.
+DEFAULT_WORKPATH = os.path.join(os.getcwd(), 'build')
+
+PLATFORM = compat.system + '-' + compat.architecture
+# Include machine name in path to bootloader for some machines (e.g., 'arm'). Explicitly avoid doing this on macOS,
+# where we keep universal2 bootloaders in Darwin-64bit folder regardless of whether we are on x86_64 or arm64.
+if compat.machine and not compat.is_darwin:
+    PLATFORM += '-' + compat.machine
+# Similarly, disambiguate musl Linux from glibc Linux.
+if compat.is_musl:
+    PLATFORM += '-musl'

+ 188 - 0
ffmpegpy/Lib/site-packages/PyInstaller/__main__.py

@@ -0,0 +1,188 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2013-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Main command-line interface to PyInstaller.
+"""
+
+import argparse
+import os
+import platform
+from collections import defaultdict
+
+from PyInstaller import __version__
+from PyInstaller import log as logging
+# Note: do not import anything else until compat.check_requirements function is run!
+from PyInstaller import compat
+
+logger = logging.getLogger(__name__)
+
+# Taken from https://stackoverflow.com/a/22157136 to format args more flexibly: any help text which beings with ``R|``
+# will have all newlines preserved; the help text will be line wrapped. See
+# https://docs.python.org/3/library/argparse.html#formatter-class.
+
+
+# This is used by the ``--debug`` option.
+class _SmartFormatter(argparse.HelpFormatter):
+    def _split_lines(self, text, width):
+        if text.startswith('R|'):
+            # The underlying implementation of ``RawTextHelpFormatter._split_lines`` invokes this; mimic it.
+            return text[2:].splitlines()
+        else:
+            # Invoke the usual formatter.
+            return super()._split_lines(text, width)
+
+
+def run_makespec(filenames, **opts):
+    # Split pathex by using the path separator
+    temppaths = opts['pathex'][:]
+    pathex = opts['pathex'] = []
+    for p in temppaths:
+        pathex.extend(p.split(os.pathsep))
+
+    import PyInstaller.building.makespec
+
+    spec_file = PyInstaller.building.makespec.main(filenames, **opts)
+    logger.info('wrote %s' % spec_file)
+    return spec_file
+
+
+def run_build(pyi_config, spec_file, **kwargs):
+    import PyInstaller.building.build_main
+    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
+
+
+def __add_options(parser):
+    parser.add_argument(
+        '-v',
+        '--version',
+        action='version',
+        version=__version__,
+        help='Show program version info and exit.',
+    )
+
+
+class _PyiArgumentParser(argparse.ArgumentParser):
+    def __init__(self, *args, **kwargs):
+        self._pyi_action_groups = defaultdict(list)
+        super().__init__(*args, **kwargs)
+
+    def _add_options(self, __add_options: callable, name: str = ""):
+        """
+        Mutate self with the given callable, storing any new actions added in a named group
+        """
+        n_actions_before = len(getattr(self, "_actions", []))
+        __add_options(self)  # preserves old behavior
+        new_actions = getattr(self, "_actions", [])[n_actions_before:]
+        self._pyi_action_groups[name].extend(new_actions)
+
+    def _option_name(self, action):
+        """
+        Get the option name(s) associated with an action
+
+        For options that define both short and long names, this function will
+        return the long names joined by "/"
+        """
+        longnames = [name for name in action.option_strings if name.startswith("--")]
+        if longnames:
+            name = "/".join(longnames)
+        else:
+            name = action.option_strings[0]
+        return name
+
+    def _forbid_options(self, args: argparse.Namespace, group: str, errmsg: str = ""):
+        """Forbid options from a named action group"""
+        options = defaultdict(str)
+        for action in self._pyi_action_groups[group]:
+            dest = action.dest
+            name = self._option_name(action)
+            if getattr(args, dest) is not self.get_default(dest):
+                if dest in options:
+                    options[dest] += "/"
+                options[dest] += name
+
+        # if any options from the forbidden group are not the default values,
+        # the user must have passed them in, so issue an error report
+        if options:
+            sep = "\n  "
+            bad = sep.join(options.values())
+            if errmsg:
+                errmsg = "\n" + errmsg
+            raise SystemExit(f"option(s) not allowed:{sep}{bad}{errmsg}")
+
+
+def generate_parser() -> _PyiArgumentParser:
+    """
+    Build an argparse parser for PyInstaller's main CLI.
+    """
+
+    import PyInstaller.building.build_main
+    import PyInstaller.building.makespec
+    import PyInstaller.log
+
+    parser = _PyiArgumentParser(formatter_class=_SmartFormatter)
+    parser.prog = "pyinstaller"
+
+    parser._add_options(__add_options)
+    parser._add_options(PyInstaller.building.makespec.__add_options, name="makespec")
+    parser._add_options(PyInstaller.building.build_main.__add_options, name="build_main")
+    parser._add_options(PyInstaller.log.__add_options, name="log")
+
+    parser.add_argument(
+        'filenames',
+        metavar='scriptname',
+        nargs='+',
+        help="Name of scriptfiles to be processed or exactly one .spec file. If a .spec file is specified, most "
+        "options are unnecessary and are ignored.",
+    )
+
+    return parser
+
+
+def run(pyi_args=None, pyi_config=None):
+    """
+    pyi_args     allows running PyInstaller programmatically without a subprocess
+    pyi_config   allows checking configuration once when running multiple tests
+    """
+    compat.check_requirements()
+
+    import PyInstaller.log
+
+    try:
+        parser = generate_parser()
+        args = parser.parse_args(pyi_args)
+        PyInstaller.log.__process_options(parser, args)
+
+        # Print PyInstaller version, Python version, and platform as the first line to stdout. This helps us identify
+        # PyInstaller, Python, and platform version when users report issues.
+        logger.info('PyInstaller: %s' % __version__)
+        logger.info('Python: %s%s', platform.python_version(), " (conda)" if compat.is_conda else "")
+        logger.info('Platform: %s' % platform.platform())
+
+        # Skip creating .spec when .spec file is supplied.
+        if args.filenames[0].endswith('.spec'):
+            parser._forbid_options(
+                args, group="makespec", errmsg="makespec options not valid when a .spec file is given"
+            )
+            spec_file = args.filenames[0]
+        else:
+            spec_file = run_makespec(**vars(args))
+
+        run_build(pyi_config, spec_file, **vars(args))
+
+    except KeyboardInterrupt:
+        raise SystemExit("Aborted by user request.")
+    except RecursionError:
+        from PyInstaller import _recursion_to_deep_message
+        _recursion_to_deep_message.raise_with_msg()
+
+
+if __name__ == '__main__':
+    run()

BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/__init__.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/__main__.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/_recursion_to_deep_message.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/_shared_with_waf.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/compat.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/config.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/configure.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/exceptions.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/__pycache__/log.cpython-37.pyc


+ 45 - 0
ffmpegpy/Lib/site-packages/PyInstaller/_recursion_to_deep_message.py

@@ -0,0 +1,45 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2013-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+msg = """
+=============================================================
+A RecursionError (maximum recursion depth exceeded) occurred.
+For working around please follow these instructions
+=============================================================
+
+1. In your program's .spec file add this line near the top::
+
+     import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)
+
+2. Build your program by running PyInstaller with the .spec file as
+   argument::
+
+     pyinstaller myprog.spec
+
+3. If this fails, you most probably hit an endless recursion in
+   PyInstaller. Please try to track this down has far as possible,
+   create a minimal example so we can reproduce and open an issue at
+   https://github.com/pyinstaller/pyinstaller/issues following the
+   instructions in the issue template. Many thanks.
+
+Explanation: Python's stack-limit is a safety-belt against endless recursion,
+eating up memory. PyInstaller imports modules recursively. If the structure
+how modules are imported within your program is awkward, this leads to the
+nesting being too deep and hitting Python's stack-limit.
+
+With the default recursion limit (1000), the recursion error occurs at about
+115 nested imported, with limit 2000 at about 240, with limit 5000 at about
+660.
+"""
+
+
+def raise_with_msg():
+    raise SystemExit(msg)

+ 82 - 0
ffmpegpy/Lib/site-packages/PyInstaller/_shared_with_waf.py

@@ -0,0 +1,82 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Code to be shared by PyInstaller and the bootloader/wscript file.
+
+This code must not assume that either PyInstaller or any of its dependencies installed. I.e., the only imports allowed
+in here are standard library ones. Within reason, it is preferable that this file should still run under Python 2.7 as
+many compiler docker images still have only Python 2 installed.
+"""
+
+import platform
+import re
+
+
+def _pyi_machine(machine, system):
+    # type: (str, str) -> str
+    """
+    Choose an intentionally simplified architecture identifier to be used in the bootloader's directory name.
+
+    Args:
+        machine:
+            The output of ``platform.machine()`` or any known architecture alias or shorthand that may be used by a
+            C compiler.
+        system:
+            The output of ``platform.system()`` on the target machine.
+    Returns:
+        Either a string tag or, on platforms that don't need an architecture tag, ``None``.
+
+    Ideally, we would just use ``platform.machine()`` directly, but that makes cross-compiling the bootloader almost
+    impossible, because you need to know at compile time exactly what ``platform.machine()`` will be at run time, based
+    only on the machine name alias or shorthand reported by the C compiler at the build time. Rather, use a loose
+    differentiation, and trust that anyone mixing armv6l with armv6h knows what they are doing.
+    """
+    # See the corresponding tests in tests/unit/test_compat.py for examples.
+
+    if platform.machine() == "sw_64" or platform.machine() == "loongarch64":
+        # This explicitly inhibits cross compiling the bootloader for or on SunWay and LoongArch machine.
+        return platform.machine()
+
+    if system != "Linux":
+        # No architecture specifier for anything par Linux.
+        # - Windows only has one 32 and one 64 bit architecture, but lots of aliases for each so it is both pointless
+        #   and painful to give Windows an architecture specifier.
+        # - macOS is on two 64 bit architectures, but they are merged into one "universal2" bootloader.
+        # - BSD supports a wide range of architectures, but according to PyPI's download statistics, every one of our
+        #   BSD users are on x86_64. This may change in the distant future.
+        return
+
+    if machine.startswith(("arm", "aarch")):
+        # ARM has a huge number of similar and aliased sub-versions, such as armv5, armv6l armv8h, aarch64.
+        return "arm"
+    if machine in ("thumb"):
+        # Reported by waf/gcc when Thumb instruction set is enabled on 32-bit ARM. The platform.machine() returns "arm"
+        # regardless of the instruction set.
+        return "arm"
+    if machine in ("x86_64", "x64", "x86"):
+        return "intel"
+    if re.fullmatch("i[1-6]86", machine):
+        return "intel"
+    if machine.startswith(("ppc", "powerpc")):
+        # PowerPC comes in 64 vs 32 bit and little vs big endian variants.
+        return "ppc"
+    if machine in ("mips64", "mips"):
+        return "mips"
+    if machine.startswith("riscv"):
+        return "riscv"
+    # Machines with no known aliases :)
+    if machine in ("s390x",):
+        return machine
+
+    # Unknown architectures are allowed by default, but will all be placed under one directory. In theory, trying to
+    # have multiple unknown architectures in one copy of PyInstaller will not work, but that should be sufficiently
+    # unlikely to ever happen.
+    return "unknown"

+ 1 - 0
ffmpegpy/Lib/site-packages/PyInstaller/archive/__init__.py

@@ -0,0 +1 @@
+__author__ = 'martin'

BIN
ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/__init__.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/pyz_crypto.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/readers.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/archive/__pycache__/writers.cpython-37.pyc


+ 39 - 0
ffmpegpy/Lib/site-packages/PyInstaller/archive/pyz_crypto.py

@@ -0,0 +1,39 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+import os
+
+BLOCK_SIZE = 16
+
+
+class PyiBlockCipher:
+    """
+    This class is used only to encrypt Python modules.
+    """
+    def __init__(self, key=None):
+        assert type(key) is str
+        if len(key) > BLOCK_SIZE:
+            self.key = key[0:BLOCK_SIZE]
+        else:
+            self.key = key.zfill(BLOCK_SIZE)
+        assert len(self.key) == BLOCK_SIZE
+
+        import tinyaes
+        self._aesmod = tinyaes
+
+    def encrypt(self, data):
+        iv = os.urandom(BLOCK_SIZE)
+        return iv + self.__create_cipher(iv).CTR_xcrypt_buffer(data)
+
+    def __create_cipher(self, iv):
+        # The 'AES' class is stateful, and this factory method is used to re-initialize the block cipher class with
+        # each call to xcrypt().
+        return self._aesmod.AES(self.key.encode(), iv)

+ 242 - 0
ffmpegpy/Lib/site-packages/PyInstaller/archive/readers.py

@@ -0,0 +1,242 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2013-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+This CArchiveReader is used only by the archieve_viewer utility.
+"""
+
+# TODO clean up this module
+
+import os
+import struct
+
+from PyInstaller.loader.pyimod02_archive import ArchiveReader
+
+
+class NotAnArchiveError(Exception):
+    pass
+
+
+class CTOCReader:
+    """
+    A class encapsulating the table of contents of a CArchive.
+
+    When written to disk, it is easily read from C.
+    """
+    # (structlen, dpos, dlen, ulen, flag, typcd) followed by name
+    ENTRYSTRUCT = '!iIIIBB'
+    ENTRYLEN = struct.calcsize(ENTRYSTRUCT)
+
+    def __init__(self):
+        self.data = []
+
+    def frombinary(self, s):
+        """
+        Decode the binary string into an in memory list.
+
+        S is a binary string.
+        """
+        p = 0
+
+        while p < len(s):
+            slen, dpos, dlen, ulen, flag, typcd = struct.unpack(self.ENTRYSTRUCT, s[p:p + self.ENTRYLEN])
+            nmlen = slen - self.ENTRYLEN
+            p = p + self.ENTRYLEN
+            nm, = struct.unpack('%is' % nmlen, s[p:p + nmlen])
+            p = p + nmlen
+            # nm may have up to 15 bytes of padding
+            nm = nm.rstrip(b'\0')
+            nm = nm.decode('utf-8')
+            typcd = chr(typcd)
+            self.data.append((dpos, dlen, ulen, flag, typcd, nm))
+
+    def get(self, ndx):
+        """
+        Return the table of contents entry (tuple) at index NDX.
+        """
+        return self.data[ndx]
+
+    def __getitem__(self, ndx):
+        return self.data[ndx]
+
+    def find(self, name):
+        """
+        Return the index of the toc entry with name NAME.
+
+        Return -1 for failure.
+        """
+        for i, nm in enumerate(self.data):
+            if nm[-1] == name:
+                return i
+        return -1
+
+
+class CArchiveReader(ArchiveReader):
+    """
+    An Archive subclass that can hold arbitrary data.
+
+    This class encapsulates all files that are bundled within an executable. It can contain ZlibArchive (Python .pyc
+    files), dlls, Python C extensions and all other data files that are bundled in --onefile mode.
+
+    Easily handled from C or from Python.
+    """
+    # MAGIC is useful to verify that conversion of Python data types to C structure and back works properly.
+    MAGIC = b'MEI\014\013\012\013\016'
+    HDRLEN = 0
+    LEVEL = 9
+
+    # Cookie - holds some information for the bootloader. C struct format definition. '!' at the beginning means network
+    # byte order. C struct looks like:
+    #
+    #   typedef struct _cookie {
+    #       char magic[8]; /* 'MEI\014\013\012\013\016' */
+    #       uint32_t len;  /* len of entire package */
+    #       uint32_t TOC;  /* pos (rel to start) of TableOfContents */
+    #       int  TOClen;   /* length of TableOfContents */
+    #       int  pyvers;   /* new in v4 */
+    #       char pylibname[64];    /* Filename of Python dynamic library. */
+    #   } COOKIE;
+    #
+    _cookie_format = '!8sIIii64s'
+    _cookie_size = struct.calcsize(_cookie_format)
+
+    def __init__(self, archive_path=None, start=0, length=0, pylib_name=''):
+        """
+        Constructor.
+
+        archive_path path name of file (create empty CArchive if path is None).
+        start        is the seekposition within PATH.
+        len          is the length of the CArchive (if 0, then read till EOF).
+        pylib_name   name of Python DLL which bootloader will use.
+        """
+        self.length = length
+        self._pylib_name = pylib_name
+
+        # A CArchive created from scratch starts at 0, no leading bootloader.
+        self.pkg_start = 0
+        super().__init__(archive_path, start)
+
+    def checkmagic(self):
+        """
+        Verify that self is a valid CArchive.
+
+        Magic signature is at end of the archive.
+
+        This function is used by ArchiveViewer.py utility.
+        """
+        # Magic is at EOF; if we're embedded, we need to figure where that is.
+        if self.length:
+            self.lib.seek(self.start + self.length, 0)
+        else:
+            self.lib.seek(0, os.SEEK_END)
+        end_pos = self.lib.tell()
+
+        SEARCH_CHUNK_SIZE = 8192
+        magic_offset = -1
+        while end_pos >= len(self.MAGIC):
+            start_pos = max(end_pos - SEARCH_CHUNK_SIZE, 0)
+            chunk_size = end_pos - start_pos
+            # Is the remaining chunk large enough to hold the pattern?
+            if chunk_size < len(self.MAGIC):
+                break
+            # Read and scan the chunk
+            self.lib.seek(start_pos, os.SEEK_SET)
+            buf = self.lib.read(chunk_size)
+            pos = buf.rfind(self.MAGIC)
+            if pos != -1:
+                magic_offset = start_pos + pos
+                break
+            # Adjust search location for next chunk; ensure proper overlap
+            end_pos = start_pos + len(self.MAGIC) - 1
+        if magic_offset == -1:
+            raise RuntimeError("%s is not a valid %s archive file" % (self.path, self.__class__.__name__))
+        filelen = magic_offset + self._cookie_size
+        # Read the whole cookie
+        self.lib.seek(magic_offset, os.SEEK_SET)
+        buf = self.lib.read(self._cookie_size)
+        magic, totallen, tocpos, toclen, pyvers, pylib_name = struct.unpack(self._cookie_format, buf)
+        if magic != self.MAGIC:
+            raise RuntimeError("%s is not a valid %s archive file" % (self.path, self.__class__.__name__))
+
+        self.pkg_start = filelen - totallen
+        if self.length:
+            if totallen != self.length or self.pkg_start != self.start:
+                raise RuntimeError('Problem with embedded archive in %s' % self.path)
+        # Verify presence of Python library name.
+        if not pylib_name:
+            raise RuntimeError('Python library filename not defined in archive.')
+        self.tocpos, self.toclen = tocpos, toclen
+
+    def loadtoc(self):
+        """
+        Load the table of contents into memory.
+        """
+        self.toc = CTOCReader()
+        self.lib.seek(self.pkg_start + self.tocpos)
+        tocstr = self.lib.read(self.toclen)
+        self.toc.frombinary(tocstr)
+
+    def extract(self, name):
+        """
+        Get the contents of an entry.
+
+        NAME is an entry name OR the index to the TOC.
+
+        Return the tuple (ispkg, contents).
+        For non-Python resources, ispkg is meaningless (and 0).
+        Used by the import mechanism.
+        """
+        if isinstance(name, str):
+            ndx = self.toc.find(name)
+            if ndx == -1:
+                return None
+        else:
+            ndx = name
+        dpos, dlen, ulen, flag, typcd, nm = self.toc.get(ndx)
+
+        with self.lib:
+            self.lib.seek(self.pkg_start + dpos)
+            rslt = self.lib.read(dlen)
+
+        if flag == 1:
+            import zlib
+            rslt = zlib.decompress(rslt)
+        if typcd == 'M':
+            return 1, rslt
+
+        return typcd == 'M', rslt
+
+    def contents(self):
+        """
+        Return the names of the entries.
+        """
+        rslt = []
+        for dpos, dlen, ulen, flag, typcd, nm in self.toc:
+            rslt.append(nm)
+        return rslt
+
+    def openEmbedded(self, name):
+        """
+        Open a CArchive of name NAME embedded within this CArchive.
+
+        This function is used by ArchiveViewer.py utility.
+        """
+        ndx = self.toc.find(name)
+
+        if ndx == -1:
+            raise KeyError("Member '%s' not found in %s" % (name, self.path))
+        dpos, dlen, ulen, flag, typcd, nm = self.toc.get(ndx)
+
+        if typcd not in "zZ":
+            raise NotAnArchiveError('%s is not an archive' % name)
+
+        if flag:
+            raise ValueError('Cannot open compressed archive %s in place' % name)
+        return CArchiveReader(self.path, self.pkg_start + dpos, dlen)

+ 568 - 0
ffmpegpy/Lib/site-packages/PyInstaller/archive/writers.py

@@ -0,0 +1,568 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Utilities to create data structures for embedding Python modules and additional files into the executable.
+"""
+
+# While an Archive is really an abstraction for any "filesystem within a file", it is tuned for use with
+# imputil.FuncImporter. This assumes it contains python code objects, indexed by the the internal name (ie, no '.py').
+#
+# See pyi_carchive.py for a more general archive (contains anything) that can be understood by a C program.
+
+import marshal
+import os
+import shutil
+import struct
+import sys
+import zlib
+from types import CodeType
+
+from PyInstaller.building.utils import fake_pyc_timestamp, get_code_object, strip_paths_in_code
+from PyInstaller.compat import BYTECODE_MAGIC, is_win
+from PyInstaller.loader.pyimod02_archive import PYZ_TYPE_DATA, PYZ_TYPE_MODULE, PYZ_TYPE_NSPKG, PYZ_TYPE_PKG
+
+
+class ArchiveWriter:
+    """
+    A base class for a repository of python code objects. The extract method is used by imputil.ArchiveImporter to
+    get code objects by name (fully qualified name), so an end-user "import a.b" becomes extract('a.__init__') and
+    extract('a.b').
+    """
+    MAGIC = b'PYL\0'
+    HDRLEN = 12  # default is MAGIC followed by python's magic, int pos of toc
+    TOCPOS = 8
+
+    def __init__(self, archive_path, logical_toc):
+        """
+        Create an archive file of name 'archive_path'. logical_toc is a 'logical TOC', a list of (name, path, ...),
+        where name is the internal name (e.g., 'a') and path is a file to get the object from (e.g., './a.pyc').
+        """
+        self.start = 0
+
+        self._start_add_entries(archive_path)
+        self._add_from_table_of_contents(logical_toc)
+        self._finalize()
+
+    def _start_add_entries(self, archive_path):
+        """
+        Open an empty archive for addition of entries.
+        """
+        self.lib = open(archive_path, 'wb')
+        # Reserve space for the header.
+        if self.HDRLEN:
+            self.lib.write(b'\0' * self.HDRLEN)
+        # Create an empty table of contents. Use a list to support reproducible builds.
+        self.toc = []
+
+    def _add_from_table_of_contents(self, toc):
+        """
+        Add entries from a logical TOC (without absolute positioning info).
+        An entry in a logical TOC is a tuple:
+          entry[0] is name (under which it will be saved).
+          entry[1] is fullpathname of the file.
+          entry[2] is a flag for its storage format (True or 1 if compressed).
+          entry[3] is the entry's type code.
+        """
+        for toc_entry in toc:
+            self.add(toc_entry)  # The guts of the archive.
+
+    def _finalize(self):
+        """
+        Finalize an archive which has been opened using _start_add_entries(), writing any needed padding and the
+        table of contents.
+        """
+        toc_pos = self.lib.tell()
+        self.save_trailer(toc_pos)
+        if self.HDRLEN:
+            self.update_headers(toc_pos)
+        self.lib.close()
+
+    # manages keeping the internal TOC and the guts in sync #
+    def add(self, entry):
+        """
+        Override this to influence the mechanics of the Archive. Assumes entry is a seq beginning with (nm, pth, ...),
+        where nm is the key by which we will be asked for the object. pth is the name of where we find the object.
+        Overrides of get_obj_from can make use of further elements in entry.
+        """
+        nm = entry[0]
+        pth = entry[1]
+        pynm, ext = os.path.splitext(os.path.basename(pth))
+        ispkg = pynm == '__init__'
+        assert ext in ('.pyc', '.pyo')
+        self.toc.append((nm, (ispkg, self.lib.tell())))
+        with open(entry[1], 'rb') as f:
+            f.seek(8)  # skip magic and timestamp
+            self.lib.write(f.read())
+
+    def save_trailer(self, tocpos):
+        """
+        Default - toc is a dict Gets marshaled to self.lib
+        """
+        try:
+            self.lib.write(marshal.dumps(self.toc))
+        # If the TOC to be marshalled contains an unmarshallable object, Python raises a cryptic exception providing no
+        # details on why such object is unmarshallable. Correct this by iteratively inspecting the TOC for
+        # unmarshallable objects.
+        except ValueError as exception:
+            if str(exception) == 'unmarshallable object':
+                # List of all marshallable types.
+                MARSHALLABLE_TYPES = {
+                    bool, int, float, complex, str, bytes, bytearray, tuple, list, set, frozenset, dict, CodeType
+                }
+                for module_name, module_tuple in self.toc.items():
+                    if type(module_name) not in MARSHALLABLE_TYPES:
+                        print('Module name "%s" (%s) unmarshallable.' % (module_name, type(module_name)))
+                    if type(module_tuple) not in MARSHALLABLE_TYPES:
+                        print(
+                            'Module "%s" tuple "%s" (%s) unmarshallable.' %
+                            (module_name, module_tuple, type(module_tuple))
+                        )
+                    elif type(module_tuple) == tuple:
+                        for i in range(len(module_tuple)):
+                            if type(module_tuple[i]) not in MARSHALLABLE_TYPES:
+                                print(
+                                    'Module "%s" tuple index %s item "%s" (%s) unmarshallable.' %
+                                    (module_name, i, module_tuple[i], type(module_tuple[i]))
+                                )
+
+            raise
+
+    def update_headers(self, tocpos):
+        """
+        Default - MAGIC + Python's magic + tocpos
+        """
+        self.lib.seek(self.start)
+        self.lib.write(self.MAGIC)
+        self.lib.write(BYTECODE_MAGIC)
+        self.lib.write(struct.pack('!i', tocpos))
+
+
+class ZlibArchiveWriter(ArchiveWriter):
+    """
+    ZlibArchive - an archive with compressed entries. Archive is read from the executable created by PyInstaller.
+
+    This archive is used for bundling python modules inside the executable.
+
+    NOTE: The whole ZlibArchive (PYZ) is compressed, so it is not necessary to compress individual modules.
+    """
+    MAGIC = b'PYZ\0'
+    TOCPOS = 8
+    HDRLEN = ArchiveWriter.HDRLEN + 5
+    COMPRESSION_LEVEL = 6  # Default level of the 'zlib' module from Python.
+
+    def __init__(self, archive_path, logical_toc, code_dict=None, cipher=None):
+        """
+        code_dict      dict containing module code objects from ModuleGraph.
+        """
+        # Keep references to module code objects constructed by ModuleGraph to avoid writing .pyc/pyo files to hdd.
+        self.code_dict = code_dict or {}
+        self.cipher = cipher or None
+
+        super().__init__(archive_path, logical_toc)
+
+    def add(self, entry):
+        name, path, typ = entry
+        if typ == 'PYMODULE':
+            typ = PYZ_TYPE_MODULE
+            if path in ('-', None):
+                # This is a NamespacePackage, modulegraph marks them by using the filename '-'. (But wants to use None,
+                # so check for None, too, to be forward-compatible.)
+                typ = PYZ_TYPE_NSPKG
+            else:
+                base, ext = os.path.splitext(os.path.basename(path))
+                if base == '__init__':
+                    typ = PYZ_TYPE_PKG
+            data = marshal.dumps(self.code_dict[name])
+        else:
+            # Any data files, that might be required by pkg_resources.
+            typ = PYZ_TYPE_DATA
+            with open(path, 'rb') as fh:
+                data = fh.read()
+            # No need to use forward slash as path-separator here since pkg_resources on Windows back slash as
+            # path-separator.
+
+        obj = zlib.compress(data, self.COMPRESSION_LEVEL)
+
+        # First compress then encrypt.
+        if self.cipher:
+            obj = self.cipher.encrypt(obj)
+
+        self.toc.append((name, (typ, self.lib.tell(), len(obj))))
+        self.lib.write(obj)
+
+    def update_headers(self, tocpos):
+        """
+        Add level.
+        """
+        ArchiveWriter.update_headers(self, tocpos)
+        self.lib.write(struct.pack('!B', self.cipher is not None))
+
+
+class CTOC:
+    """
+    A class encapsulating the table of contents of a CArchive.
+
+    When written to disk, it is easily read from C.
+    """
+    # (structlen, dpos, dlen, ulen, flag, typcd) followed by name
+    ENTRYSTRUCT = '!iIIIBB'
+    ENTRYLEN = struct.calcsize(ENTRYSTRUCT)
+
+    def __init__(self):
+        self.data = []
+
+    def tobinary(self):
+        """
+        Return self as a binary string.
+        """
+        rslt = []
+        for (dpos, dlen, ulen, flag, typcd, nm) in self.data:
+            # Encode all names using UTF-8. This should be safe as standard python modules only contain ascii-characters
+            # (and standard shared libraries should have the same), and thus the C-code still can handle this correctly.
+            nm = nm.encode('utf-8')
+            nmlen = len(nm) + 1  # add 1 for a '\0'
+            # align to 16 byte boundary so xplatform C can read
+            toclen = nmlen + self.ENTRYLEN
+            if toclen % 16 == 0:
+                pad = b'\0'
+            else:
+                padlen = 16 - (toclen % 16)
+                pad = b'\0' * padlen
+                nmlen = nmlen + padlen
+            rslt.append(
+                struct.pack(
+                    self.ENTRYSTRUCT + '%is' % nmlen, nmlen + self.ENTRYLEN, dpos, dlen, ulen, flag, ord(typcd),
+                    nm + pad
+                )
+            )
+
+        return b''.join(rslt)
+
+    def add(self, dpos, dlen, ulen, flag, typcd, nm):
+        """
+        Add an entry to the table of contents.
+
+        DPOS is data position.
+        DLEN is data length.
+        ULEN is the uncompressed data len.
+        FLAG says if the data is compressed.
+        TYPCD is the "type" of the entry (used by the C code)
+        NM is the entry's name.
+
+        This function is used only while creating an executable.
+        """
+        # Ensure forward slashes in paths are on Windows converted to back slashes '\\' since on Windows the bootloader
+        # works only with back slashes.
+        nm = os.path.normpath(nm)
+        if is_win and os.path.sep == '/':
+            # When building under MSYS, the above path normalization uses Unix-style separators, so replace them
+            # manually.
+            nm = nm.replace(os.path.sep, '\\')
+        self.data.append((dpos, dlen, ulen, flag, typcd, nm))
+
+
+class CArchiveWriter(ArchiveWriter):
+    """
+    An Archive subclass that can hold arbitrary data.
+
+    This class encapsulates all files that are bundled within an executable. It can contain ZlibArchive (Python .pyc
+    files), dlls, Python C extensions and all other data files that are bundled in --onefile mode.
+
+    Easily handled from C or from Python.
+    """
+    # MAGIC is useful to verify that conversion of Python data types to C structure and back works properly.
+    MAGIC = b'MEI\014\013\012\013\016'
+    HDRLEN = 0
+    LEVEL = 9
+
+    # Cookie - holds some information for the bootloader. C struct format definition. '!' at the beginning means network
+    # byte order. C struct looks like:
+    #
+    #   typedef struct _cookie {
+    #       char magic[8]; /* 'MEI\014\013\012\013\016' */
+    #       uint32_t len;  /* len of entire package */
+    #       uint32_t TOC;  /* pos (rel to start) of TableOfContents */
+    #       int  TOClen;   /* length of TableOfContents */
+    #       int  pyvers;   /* new in v4 */
+    #       char pylibname[64];    /* Filename of Python dynamic library. */
+    #   } COOKIE;
+    #
+    _cookie_format = '!8sIIii64s'
+    _cookie_size = struct.calcsize(_cookie_format)
+
+    def __init__(self, archive_path, logical_toc, pylib_name):
+        """
+        Constructor.
+
+        archive_path path name of file (create empty CArchive if path is None).
+        start        is the seekposition within PATH.
+        len          is the length of the CArchive (if 0, then read till EOF).
+        pylib_name   name of Python DLL which bootloader will use.
+        """
+        self._pylib_name = pylib_name
+
+        # A CArchive created from scratch starts at 0, no leading bootloader.
+        super().__init__(archive_path, logical_toc)
+
+    def _start_add_entries(self, path):
+        """
+        Open an empty archive for addition of entries.
+        """
+        super()._start_add_entries(path)
+        # Override parents' toc {} with a class.
+        self.toc = CTOC()
+
+    def add(self, entry):
+        """
+        Add an ENTRY to the CArchive.
+
+        ENTRY must have:
+          entry[0] is name (under which it will be saved).
+          entry[1] is fullpathname of the file.
+          entry[2] is a flag for it's storage format (0==uncompressed, 1==compressed)
+          entry[3] is the entry's type code.
+            If the type code is 'o':
+              entry[0] is the runtime option
+              eg: v  (meaning verbose imports)
+                  u  (meaning unbuffered)
+                  W arg (warning option arg)
+                  s  (meaning do site.py processing.
+        """
+        dest, source, compress, type = entry[:4]
+        try:
+            if type in ('o', 'd'):
+                return self._write_blob(b"", dest, type)
+
+            if type == 's':
+                # If it is a source code file, compile it to a code object and marshall the object, so it can be
+                # unmarshalled by the bootloader.
+                code = get_code_object(dest, source)
+                code = strip_paths_in_code(code)
+                return self._write_blob(marshal.dumps(code), dest, type, compress=compress)
+
+            elif type == 'm':
+                with open(source, "rb") as f:
+                    data = f.read()
+                # Check if it is a PYC file
+                if data[:4] == BYTECODE_MAGIC:
+                    # Read whole header and load code. According to PEP-552, the PYC header consists of four 32-bit
+                    # words (magic, flags, and, depending on the flags, either timestamp and source file size, or a
+                    # 64-bit hash).
+                    header = data[:16]
+                    code = marshal.loads(data[16:])
+                    # Strip paths from code, marshal back into module form. The header fields (timestamp, size, hash,
+                    # etc.) are all referring to the source file, so our modification of the code object does not affect
+                    # them, and we can re-use the original header.
+                    code = strip_paths_in_code(code)
+                    data = header + marshal.dumps(code)
+                if source.endswith('.__init__.py'):
+                    type = 'M'
+                return self._write_blob(data, dest, type, compress=compress)
+
+            elif type == "M":
+                with open(source, "rb") as f:
+                    return self._write_blob(fake_pyc_timestamp(f.read()), dest, type, compress=compress)
+
+            else:
+                self._write_file(source, dest, type, compress=compress)
+
+        except IOError:
+            print("Cannot find ('%s', '%s', %s, '%s')" % (dest, source, compress, type))
+            raise
+
+    def _write_blob(self, blob: bytes, dest, type, compress=False):
+        """
+        Write the binary contents (**blob**) of a small file to both the archive and its table of contents.
+        """
+        start = self.lib.tell()
+        length = len(blob)
+        if compress:
+            blob = zlib.compress(blob, level=self.LEVEL)
+        self.lib.write(blob)
+        self.toc.add(start, len(blob), length, int(compress), type, dest)
+
+    def _write_file(self, source, dest, type, compress=False):
+        """
+        Stream copy a large file into the archive and update the table of contents.
+        """
+        start = self.lib.tell()
+        length = os.stat(source).st_size
+        with open(source, 'rb') as f:
+            if compress:
+                buffer = bytearray(16 * 1024)
+                compressor = zlib.compressobj(self.LEVEL)
+                while 1:
+                    read = f.readinto(buffer)
+                    if not read:
+                        break
+                    self.lib.write(compressor.compress(buffer[:read]))
+                self.lib.write(compressor.flush())
+
+            else:
+                shutil.copyfileobj(f, self.lib)
+        self.toc.add(start, self.lib.tell() - start, length, int(compress), type, dest)
+
+    def save_trailer(self, tocpos):
+        """
+        Save the table of contents and the cookie for the bootlader to disk.
+
+        CArchives can be opened from the end - the cookie points back to the start.
+        """
+        tocstr = self.toc.tobinary()
+        self.lib.write(tocstr)
+        toclen = len(tocstr)
+
+        # now save the cookie
+        total_len = tocpos + toclen + self._cookie_size
+        pyvers = sys.version_info[0] * 100 + sys.version_info[1]
+        # Before saving cookie we need to convert it to corresponding C representation.
+        cookie = struct.pack(
+            self._cookie_format, self.MAGIC, total_len, tocpos, toclen, pyvers, self._pylib_name.encode('ascii')
+        )
+        self.lib.write(cookie)
+
+
+class SplashWriter(ArchiveWriter):
+    """
+    This ArchiveWriter bundles the data for the splash screen resources.
+
+    Splash screen resources will be added as an entry into the CArchive with the typecode ARCHIVE_ITEM_SPLASH.
+    This writer creates the bundled information in the archive.
+    """
+    # This struct describes the splash resources as it will be in an buffer inside the bootloader. All necessary parts
+    # are bundled, the *_len and *_offset fields describe the data beyond this header definition.
+    # Whereas script and image fields are binary data, the requirements fields describe an array of strings. Each string
+    # is null-terminated in order to easily iterate over this list from within C.
+    #
+    #   typedef struct _splash_data_header {
+    #       char tcl_libname[16];  /* Name of tcl library, e.g. tcl86t.dll */
+    #       char tk_libname[16];   /* Name of tk library, e.g. tk86t.dll */
+    #       char tk_lib[16];       /* Tk Library generic, e.g. "tk/" */
+    #       char rundir[16];       /* temp folder inside extraction path in
+    #                               * which the dependencies are extracted */
+    #
+    #       int script_len;        /* Length of the script */
+    #       int script_offset;     /* Offset (rel to start) of the script */
+    #
+    #       int image_len;         /* Length of the image data */
+    #       int image_offset;      /* Offset (rel to start) of the image */
+    #
+    #       int requirements_len;
+    #       int requirements_offset;
+    #
+    #   } SPLASH_DATA_HEADER;
+    #
+    _header_format = '!16s 16s 16s 16s ii ii ii'
+    HDRLEN = struct.calcsize(_header_format)
+
+    # The created resource will be compressed by the CArchive, so no need to compress the data here.
+
+    def __init__(self, archive_path, name_list, tcl_libname, tk_libname, tklib, rundir, image, script):
+        """
+        Custom writer for splash screen resources which will be bundled into the CArchive as an entry.
+
+        :param archive_path: The filename of the archive to create
+        :param name_list: List of filenames for the requirements array
+        :param str tcl_libname: Name of the tcl shared library file
+        :param str tk_libname: Name of the tk shared library file
+        :param str tklib: Root of tk library (e.g. tk/)
+        :param str rundir: Unique path to extract requirements to
+        :param Union[str, bytes] image: Image like object
+        :param str script: The tcl/tk script to execute to create the screen.
+        """
+        self._tcl_libname = tcl_libname
+        self._tk_libname = tk_libname
+        self._tklib = tklib
+        self._rundir = rundir
+
+        self._image = image
+        self._image_len = 0
+        self._image_offset = 0
+
+        self._script = script
+        self._script_len = 0
+        self._script_offset = 0
+
+        self._requirements_len = 0
+        self._requirements_offset = 0
+
+        super().__init__(archive_path, name_list)
+
+    def add(self, name):
+        """
+        This methods adds a name to the requirement list in the splash data. This list (more an array) contains the
+        names of all files the bootloader needs to extract before the splash screen can be started. The
+        implementation terminates every name with a null-byte, that keeps the list short memory wise and makes it
+        iterable from C.
+        """
+        name = name.encode('utf-8')
+        self.lib.write(name + b'\0')
+        self._requirements_len += len(name) + 1  # zero byte at the end
+
+    def update_headers(self, tocpos):
+        """
+        Updates the offsets of the fields.
+
+        This function is called after self.save_trailer().
+        :param tocpos:
+        :return:
+        """
+        self.lib.seek(self.start)
+        self.lib.write(
+            struct.pack(
+                self._header_format,
+                self._tcl_libname.encode("utf-8"),
+                self._tk_libname.encode("utf-8"),
+                self._tklib.encode("utf-8"),
+                self._rundir.encode("utf-8"),
+                self._script_len,
+                self._script_offset,
+                self._image_len,
+                self._image_offset,
+                self._requirements_len,
+                self._requirements_offset,
+            )
+        )
+
+    def save_trailer(self, script_pos):
+        """
+        Adds the image and script.
+        """
+        self._requirements_offset = script_pos - self._requirements_len
+
+        self._script_offset = script_pos
+        self.save_script()
+        self._image_offset = self.lib.tell()
+        self.save_image()
+
+    def save_script(self):
+        """
+        Add the tcl/tk script into the archive. This strips out every comment in the source to save some space.
+        """
+        self._script_len = len(self._script)
+        self.lib.write(self._script.encode("utf-8"))
+
+    def save_image(self):
+        """
+        Copy the image into the archive. If self._image are bytes the buffer will be written directly into the archive,
+        otherwise it is assumed to be a path and the file will be written into it.
+        """
+        if isinstance(self._image, bytes):
+            # image was converted by PIL/Pillow
+            buf = self._image
+            self.lib.write(self._image)
+        else:
+            # Copy image to lib
+            with open(self._image, 'rb') as image_file:
+                buf = image_file.read()
+
+        self._image_len = len(buf)
+        self.lib.write(buf)

BIN
ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/run.exe


BIN
ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/run_d.exe


BIN
ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/runw.exe


BIN
ffmpegpy/Lib/site-packages/PyInstaller/bootloader/Windows-64bit/runw_d.exe


BIN
ffmpegpy/Lib/site-packages/PyInstaller/bootloader/images/icon-console.ico


BIN
ffmpegpy/Lib/site-packages/PyInstaller/bootloader/images/icon-windowed.ico


+ 1 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/__init__.py

@@ -0,0 +1 @@
+#

BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/__init__.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/api.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/build_main.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/datastruct.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/icon.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/makespec.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/osx.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/splash.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/splash_templates.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/templates.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/toc_conversion.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/building/__pycache__/utils.cpython-37.pyc


+ 1028 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/api.py

@@ -0,0 +1,1028 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+This module contains classes that are available for the .spec files.
+
+Spec file is generated by PyInstaller. The generated code from .spec file
+is a way how PyInstaller does the dependency analysis and creates executable.
+"""
+
+import os
+import subprocess
+import time
+import pprint
+import shutil
+from operator import itemgetter
+
+from PyInstaller import HOMEPATH, PLATFORM
+from PyInstaller import log as logging
+from PyInstaller.archive.writers import CArchiveWriter, ZlibArchiveWriter
+from PyInstaller.building.datastruct import TOC, Target, _check_guts_eq
+from PyInstaller.building.utils import (
+    _check_guts_toc, _make_clean_directory, _rmtree, add_suffix_to_extension, checkCache, get_code_object,
+    strip_paths_in_code
+)
+from PyInstaller.compat import (is_cygwin, is_darwin, is_linux, is_win)
+from PyInstaller.depend import bindepend
+from PyInstaller.depend.analysis import get_bootstrap_modules
+from PyInstaller.depend.utils import is_path_to_egg
+from PyInstaller.utils import misc
+
+logger = logging.getLogger(__name__)
+
+if is_win:
+    from PyInstaller.utils.win32 import (icon, versioninfo, winmanifest, winresource, winutils)
+
+if is_darwin:
+    import PyInstaller.utils.osx as osxutils
+
+
+class PYZ(Target):
+    """
+    Creates a ZlibArchive that contains all pure Python modules.
+    """
+    typ = 'PYZ'
+
+    def __init__(self, *tocs, **kwargs):
+        """
+        tocs
+                One or more TOCs (Tables of Contents), normally an Analysis.pure.
+
+                If this TOC has an attribute `_code_cache`, this is expected to be a dict of module code objects
+                from ModuleGraph.
+
+        kwargs
+            Possible keyword arguments:
+
+            name
+                A filename for the .pyz. Normally not needed, as the generated name will do fine.
+            cipher
+                The block cipher that will be used to encrypt Python bytecode.
+        """
+
+        from PyInstaller.config import CONF
+        Target.__init__(self)
+        name = kwargs.get('name', None)
+        cipher = kwargs.get('cipher', None)
+        self.toc = TOC()
+        # If available, use code objects directly from ModuleGraph to speed up PyInstaller.
+        self.code_dict = {}
+        for t in tocs:
+            self.toc.extend(t)
+            self.code_dict.update(getattr(t, '_code_cache', {}))
+
+        self.name = name
+        if name is None:
+            self.name = os.path.splitext(self.tocfilename)[0] + '.pyz'
+        # PyInstaller bootstrapping modules.
+        self.dependencies = get_bootstrap_modules()
+        # Bundle the crypto key.
+        self.cipher = cipher
+        if cipher:
+            key_file = ('pyimod00_crypto_key', os.path.join(CONF['workpath'], 'pyimod00_crypto_key.pyc'), 'PYMODULE')
+            # Insert the key as the first module in the list. The key module contains just variables and does not depend
+            # on other modules.
+            self.dependencies.insert(0, key_file)
+        # Compile the top-level modules so that they end up in the CArchive and can be imported by the bootstrap script.
+        self.dependencies = misc.compile_py_files(self.dependencies, CONF['workpath'])
+        self.__postinit__()
+
+    _GUTS = (  # input parameters
+        ('name', _check_guts_eq),
+        ('toc', _check_guts_toc),  # todo: pyc=1
+        # no calculated/analysed values
+    )
+
+    def _check_guts(self, data, last_build):
+        if Target._check_guts(self, data, last_build):
+            return True
+        return False
+
+    def assemble(self):
+        logger.info("Building PYZ (ZlibArchive) %s", self.name)
+        # Do not bundle PyInstaller bootstrap modules into PYZ archive.
+        toc = self.toc - self.dependencies
+        for entry in toc[:]:
+            if not entry[0] in self.code_dict and entry[2] == 'PYMODULE':
+                # For some reason the code-object that modulegraph created is unavailable. Re-create it.
+                try:
+                    self.code_dict[entry[0]] = get_code_object(entry[0], entry[1])
+                except SyntaxError:
+                    # Exclude the module in case this is code meant for a newer Python version.
+                    toc.remove(entry)
+        # Sort content alphabetically to support reproducible builds.
+        toc.sort()
+
+        # Remove leading parts of paths in code objects.
+        self.code_dict = {key: strip_paths_in_code(code) for key, code in self.code_dict.items()}
+
+        ZlibArchiveWriter(self.name, toc, code_dict=self.code_dict, cipher=self.cipher)
+        logger.info("Building PYZ (ZlibArchive) %s completed successfully.", self.name)
+
+
+class PKG(Target):
+    """
+    Creates a CArchive. CArchive is the data structure that is embedded into the executable. This data structure allows
+    to include various read-only data in a single-file deployment.
+    """
+    typ = 'PKG'
+    xformdict = {
+        'PYMODULE': 'm',
+        'PYSOURCE': 's',
+        'EXTENSION': 'b',
+        'PYZ': 'z',
+        'PKG': 'a',
+        'DATA': 'x',
+        'BINARY': 'b',
+        'ZIPFILE': 'Z',
+        'EXECUTABLE': 'b',
+        'DEPENDENCY': 'd',
+        'SPLASH': 'l'
+    }
+
+    def __init__(
+        self,
+        toc,
+        name=None,
+        cdict=None,
+        exclude_binaries=0,
+        strip_binaries=False,
+        upx_binaries=False,
+        upx_exclude=None,
+        target_arch=None,
+        codesign_identity=None,
+        entitlements_file=None
+    ):
+        """
+        toc
+                A TOC (Table of Contents)
+        name
+                An optional filename for the PKG.
+        cdict
+                Dictionary that specifies compression by typecode. For Example, PYZ is left uncompressed so that it
+                can be accessed inside the PKG. The default uses sensible values. If zlib is not available, no
+                compression is used.
+        exclude_binaries
+                If True, EXTENSIONs and BINARYs will be left out of the PKG, and forwarded to its container (usually
+                a COLLECT).
+        strip_binaries
+                If True, use 'strip' command to reduce the size of binary files.
+        upx_binaries
+        """
+        Target.__init__(self)
+        self.toc = toc
+        self.cdict = cdict
+        self.name = name
+        if name is None:
+            self.name = os.path.splitext(self.tocfilename)[0] + '.pkg'
+        self.exclude_binaries = exclude_binaries
+        self.strip_binaries = strip_binaries
+        self.upx_binaries = upx_binaries
+        self.upx_exclude = upx_exclude or []
+        self.target_arch = target_arch
+        self.codesign_identity = codesign_identity
+        self.entitlements_file = entitlements_file
+        # This dict tells PyInstaller what items embedded in the executable should be compressed.
+        if self.cdict is None:
+            self.cdict = {
+                'EXTENSION': COMPRESSED,
+                'DATA': COMPRESSED,
+                'BINARY': COMPRESSED,
+                'EXECUTABLE': COMPRESSED,
+                'PYSOURCE': COMPRESSED,
+                'PYMODULE': COMPRESSED,
+                'SPLASH': COMPRESSED,
+                # Do not compress PYZ as a whole. Single modules are compressed when creating PYZ archive.
+                'PYZ': UNCOMPRESSED
+            }
+        self.__postinit__()
+
+    _GUTS = (  # input parameters
+        ('name', _check_guts_eq),
+        ('cdict', _check_guts_eq),
+        ('toc', _check_guts_toc),  # list unchanged and no newer files
+        ('exclude_binaries', _check_guts_eq),
+        ('strip_binaries', _check_guts_eq),
+        ('upx_binaries', _check_guts_eq),
+        ('upx_exclude', _check_guts_eq),
+        ('target_arch', _check_guts_eq),
+        ('codesign_identity', _check_guts_eq),
+        ('entitlements_file', _check_guts_eq),
+        # no calculated/analysed values
+    )
+
+    def _check_guts(self, data, last_build):
+        if Target._check_guts(self, data, last_build):
+            return True
+        return False
+
+    def assemble(self):
+        logger.info("Building PKG (CArchive) %s", os.path.basename(self.name))
+        trash = []
+        mytoc = []
+        srctoc = []
+        seen_inms = {}
+        seen_fnms = {}
+        seen_fnms_typ = {}
+        # 'inm'  - relative filename inside a CArchive
+        # 'fnm'  - absolute filename as it is on the file system.
+        for inm, fnm, typ in self.toc:
+            # Adjust name for extensions, if applicable
+            inm, fnm, typ = add_suffix_to_extension(inm, fnm, typ)
+            # Ensure filename 'fnm' is not None or empty string. Otherwise, it will fail when 'typ' is OPTION.
+            if fnm and not os.path.isfile(fnm) and is_path_to_egg(fnm):
+                # File is contained within python egg; it is added with the egg.
+                continue
+            if typ in ('BINARY', 'EXTENSION', 'DEPENDENCY'):
+                if self.exclude_binaries and typ == 'EXTENSION':
+                    self.dependencies.append((inm, fnm, typ))
+                elif not self.exclude_binaries or typ == 'DEPENDENCY':
+                    if typ == 'BINARY':
+                        # Avoid importing the same binary extension twice. This might happen if they come from different
+                        # sources (eg. once from binary dependence, and once from direct import).
+                        if inm in seen_inms:
+                            logger.warning('Two binaries added with the same internal name.')
+                            logger.warning(pprint.pformat((inm, fnm, typ)))
+                            logger.warning('was placed previously at')
+                            logger.warning(pprint.pformat((inm, seen_inms[inm], seen_fnms_typ[seen_inms[inm]])))
+                            logger.warning('Skipping %s.' % fnm)
+                            continue
+
+                        # Warn if the same binary extension was included with multiple internal names
+                        if fnm in seen_fnms:
+                            logger.warning('One binary added with two internal names.')
+                            logger.warning(pprint.pformat((inm, fnm, typ)))
+                            logger.warning('was placed previously at')
+                            logger.warning(pprint.pformat((seen_fnms[fnm], fnm, seen_fnms_typ[fnm])))
+                    seen_inms[inm] = fnm
+                    seen_fnms[fnm] = inm
+                    seen_fnms_typ[fnm] = typ
+
+                    fnm = checkCache(
+                        fnm,
+                        strip=self.strip_binaries,
+                        upx=self.upx_binaries,
+                        upx_exclude=self.upx_exclude,
+                        dist_nm=inm,
+                        target_arch=self.target_arch,
+                        codesign_identity=self.codesign_identity,
+                        entitlements_file=self.entitlements_file,
+                        strict_arch_validation=(typ == 'EXTENSION'),
+                    )
+
+                    mytoc.append((inm, fnm, self.cdict.get(typ, 0), self.xformdict.get(typ, 'b')))
+            elif typ == 'OPTION':
+                mytoc.append((inm, '', 0, 'o'))
+            elif typ in ('PYSOURCE', 'PYMODULE'):
+                # collect sourcefiles and module in a toc of it's own which will not be sorted.
+                srctoc.append((inm, fnm, self.cdict[typ], self.xformdict[typ]))
+            else:
+                mytoc.append((inm, fnm, self.cdict.get(typ, 0), self.xformdict.get(typ, 'b')))
+
+        # Bootloader has to know the name of Python library. Pass python libname to CArchive.
+        pylib_name = os.path.basename(bindepend.get_python_library_path())
+
+        # Sort content alphabetically by type and name to support reproducible builds.
+        mytoc.sort(key=itemgetter(3, 0))
+        # Do *not* sort modules and scripts, as their order is important.
+        # TODO: Think about having all modules first and then all scripts.
+        CArchiveWriter(self.name, srctoc + mytoc, pylib_name=pylib_name)
+
+        for item in trash:
+            os.remove(item)
+        logger.info("Building PKG (CArchive) %s completed successfully.", os.path.basename(self.name))
+
+
+class EXE(Target):
+    """
+    Creates the final executable of the frozen app. This bundles all necessary files together.
+    """
+    typ = 'EXECUTABLE'
+
+    def __init__(self, *args, **kwargs):
+        """
+        args
+                One or more arguments that are either TOCs Targets.
+        kwargs
+            Possible keyword arguments:
+
+            bootloader_ignore_signals
+                Non-Windows only. If True, the bootloader process will ignore all ignorable signals. If False (default),
+                it will forward all signals to the child process. Useful in situations where for example a supervisor
+                process signals both the bootloader and the child (e.g., via a process group) to avoid signalling the
+                child twice.
+            console
+                On Windows or Mac OS governs whether to use the console executable or the windowed executable. Always
+                True on Linux/Unix (always console executable - it does not matter there).
+            disable_windowed_traceback
+                Disable traceback dump of unhandled exception in windowed (noconsole) mode (Windows and macOS only),
+                and instead display a message that this feature is disabled.
+            debug
+                Setting to True gives you progress messages from the executable (for console=False there will be
+                annoying MessageBoxes on Windows).
+            name
+                The filename for the executable. On Windows suffix '.exe' is appended.
+            exclude_binaries
+                Forwarded to the PKG the EXE builds.
+            icon
+                Windows and Mac OS only. icon='myicon.ico' to use an icon file or icon='notepad.exe,0' to grab an icon
+                resource. Defaults to use PyInstaller's console or windowed icon. Use icon=`NONE` to not add any icon.
+            version
+                Windows only. version='myversion.txt'. Use grab_version.py to get a version resource from an executable
+                and then edit the output to create your own. (The syntax of version resources is so arcane that I would
+                not attempt to write one from scratch).
+            uac_admin
+                Windows only. Setting to True creates a Manifest with will request elevation upon application start.
+            uac_uiaccess
+                Windows only. Setting to True allows an elevated application to work with Remote Desktop.
+            embed_manifest
+                Windows only. Setting to True (the default) embeds the manifest into the executable. Setting to False
+                generates an external .exe.manifest file. Applicable only in onedir mode (exclude_binaries=True); in
+                onefile mode (exclude_binaries=False), the manifest is always embedded in the executable, regardless
+                of this option.
+            argv_emulation
+                macOS only. Enables argv emulation in macOS .app bundles (i.e., windowed bootloader). If enabled, the
+                initial open document/URL Apple Events are intercepted by bootloader and converted into sys.argv.
+            target_arch
+                macOS only. Used to explicitly specify the target architecture; either single-arch ('x86_64' or 'arm64')
+                or 'universal2'. Used in checks that the collected binaries contain the requires arch slice(s) and/or
+                to convert fat binaries into thin ones as necessary. If not specified (default), a single-arch build
+                corresponding to running architecture is assumed.
+            codesign_identity
+                macOS only. Use the provided identity to sign collected binaries and the generated executable. If
+                signing identity is not provided, ad-hoc signing is performed.
+            entitlements_file
+                macOS only. Optional path to entitlements file to use with code signing of collected binaries
+                (--entitlements option to codesign utility).
+        """
+        from PyInstaller.config import CONF
+        Target.__init__(self)
+
+        # Available options for EXE in .spec files.
+        self.exclude_binaries = kwargs.get('exclude_binaries', False)
+        self.bootloader_ignore_signals = kwargs.get('bootloader_ignore_signals', False)
+        self.console = kwargs.get('console', True)
+        self.disable_windowed_traceback = kwargs.get('disable_windowed_traceback', False)
+        self.debug = kwargs.get('debug', False)
+        self.name = kwargs.get('name', None)
+        self.icon = kwargs.get('icon', None)
+        self.versrsrc = kwargs.get('version', None)
+        self.manifest = kwargs.get('manifest', None)
+        self.embed_manifest = kwargs.get('embed_manifest', True)
+        self.resources = kwargs.get('resources', [])
+        self.strip = kwargs.get('strip', False)
+        self.upx_exclude = kwargs.get("upx_exclude", [])
+        self.runtime_tmpdir = kwargs.get('runtime_tmpdir', None)
+        # If ``append_pkg`` is false, the archive will not be appended to the exe, but copied beside it.
+        self.append_pkg = kwargs.get('append_pkg', True)
+
+        # On Windows allows the exe to request admin privileges.
+        self.uac_admin = kwargs.get('uac_admin', False)
+        self.uac_uiaccess = kwargs.get('uac_uiaccess', False)
+
+        # macOS argv emulation
+        self.argv_emulation = kwargs.get('argv_emulation', False)
+
+        # Target architecture (macOS only)
+        self.target_arch = kwargs.get('target_arch', None)
+        if is_darwin:
+            if self.target_arch is None:
+                import platform
+                self.target_arch = platform.machine()
+            else:
+                assert self.target_arch in {'x86_64', 'arm64', 'universal2'}, \
+                    f"Unsupported target arch: {self.target_arch}"
+            logger.info("EXE target arch: %s", self.target_arch)
+        else:
+            self.target_arch = None  # explicitly disable
+
+        # Code signing identity (macOS only)
+        self.codesign_identity = kwargs.get('codesign_identity', None)
+        if is_darwin:
+            logger.info("Code signing identity: %s", self.codesign_identity)
+        else:
+            self.codesign_identity = None  # explicitly disable
+        # Code signing entitlements
+        self.entitlements_file = kwargs.get('entitlements_file', None)
+
+        if CONF['hasUPX']:
+            self.upx = kwargs.get('upx', False)
+        else:
+            self.upx = False
+
+        # Old .spec format included in 'name' the path where to put created app. New format includes only exename.
+        #
+        # Ignore fullpath in the 'name' and prepend DISTPATH or WORKPATH.
+        # DISTPATH - onefile
+        # WORKPATH - onedir
+        if self.exclude_binaries:
+            # onedir mode - create executable in WORKPATH.
+            self.name = os.path.join(CONF['workpath'], os.path.basename(self.name))
+        else:
+            # onefile mode - create executable in DISTPATH.
+            self.name = os.path.join(CONF['distpath'], os.path.basename(self.name))
+
+        # Old .spec format included on Windows in 'name' .exe suffix.
+        if is_win or is_cygwin:
+            # Append .exe suffix if it is not already there.
+            if not self.name.endswith('.exe'):
+                self.name += '.exe'
+            base_name = os.path.splitext(os.path.basename(self.name))[0]
+        else:
+            base_name = os.path.basename(self.name)
+        # Create the CArchive PKG in WORKPATH. When instancing PKG(), set name so that guts check can test whether the
+        # file already exists.
+        self.pkgname = os.path.join(CONF['workpath'], base_name + '.pkg')
+
+        self.toc = TOC()
+
+        for arg in args:
+            if isinstance(arg, TOC):
+                self.toc.extend(arg)
+            elif isinstance(arg, Target):
+                self.toc.append((os.path.basename(arg.name), arg.name, arg.typ))
+                self.toc.extend(arg.dependencies)
+            else:
+                self.toc.extend(arg)
+
+        if self.runtime_tmpdir is not None:
+            self.toc.append(("pyi-runtime-tmpdir " + self.runtime_tmpdir, "", "OPTION"))
+
+        if self.bootloader_ignore_signals:
+            # no value; presence means "true"
+            self.toc.append(("pyi-bootloader-ignore-signals", "", "OPTION"))
+
+        if self.disable_windowed_traceback:
+            # no value; presence means "true"
+            self.toc.append(("pyi-disable-windowed-traceback", "", "OPTION"))
+
+        if self.argv_emulation:
+            # no value; presence means "true"
+            self.toc.append(("pyi-macos-argv-emulation", "", "OPTION"))
+
+        # If the icon path is relative, make it relative to the .spec file.
+        if self.icon and self.icon != "NONE" and not os.path.isabs(self.icon):
+            self.icon = os.path.join(CONF['specpath'], self.icon)
+
+        if is_win:
+            if not self.exclude_binaries:
+                # onefile mode forces embed_manifest=True
+                if not self.embed_manifest:
+                    logger.warning("Ignoring embed_manifest=False setting in onefile mode!")
+                self.embed_manifest = True
+            if not self.icon:
+                # --icon not specified; use default from bootloader folder
+                if self.console:
+                    ico = 'icon-console.ico'
+                else:
+                    ico = 'icon-windowed.ico'
+                self.icon = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'bootloader', 'images', ico)
+            filename = os.path.join(CONF['workpath'], CONF['specnm'] + ".exe.manifest")
+            self.manifest = winmanifest.create_manifest(
+                filename, self.manifest, self.console, self.uac_admin, self.uac_uiaccess
+            )
+
+            manifest_filename = os.path.basename(self.name) + ".manifest"
+
+            # If external manifest file is requested (supported only in onedir mode), add the file to the TOC in order
+            # for it to be collected as an external manifest file. Otherwise, the assembly pipeline will embed the
+            # manifest into the executable later on.
+            if not self.embed_manifest:
+                self.toc.append((manifest_filename, filename, 'BINARY'))
+
+            if self.versrsrc:
+                if not isinstance(self.versrsrc, versioninfo.VSVersionInfo) and not os.path.isabs(self.versrsrc):
+                    # relative version-info path is relative to spec file
+                    self.versrsrc = os.path.join(CONF['specpath'], self.versrsrc)
+
+        self.pkg = PKG(
+            self.toc,
+            name=self.pkgname,
+            cdict=kwargs.get('cdict', None),
+            exclude_binaries=self.exclude_binaries,
+            strip_binaries=self.strip,
+            upx_binaries=self.upx,
+            upx_exclude=self.upx_exclude,
+            target_arch=self.target_arch,
+            codesign_identity=self.codesign_identity,
+            entitlements_file=self.entitlements_file
+        )
+        self.dependencies = self.pkg.dependencies
+
+        # Get the path of the bootloader and store it in a TOC, so it can be checked for being changed.
+        exe = self._bootloader_file('run', '.exe' if is_win or is_cygwin else '')
+        self.exefiles = TOC([(os.path.basename(exe), exe, 'EXECUTABLE')])
+
+        self.__postinit__()
+
+    _GUTS = (  # input parameters
+        ('name', _check_guts_eq),
+        ('console', _check_guts_eq),
+        ('debug', _check_guts_eq),
+        ('exclude_binaries', _check_guts_eq),
+        ('icon', _check_guts_eq),
+        ('versrsrc', _check_guts_eq),
+        ('uac_admin', _check_guts_eq),
+        ('uac_uiaccess', _check_guts_eq),
+        ('manifest', _check_guts_eq),
+        ('embed_manifest', _check_guts_eq),
+        ('append_pkg', _check_guts_eq),
+        ('argv_emulation', _check_guts_eq),
+        ('target_arch', _check_guts_eq),
+        ('codesign_identity', _check_guts_eq),
+        ('entitlements_file', _check_guts_eq),
+        # for the case the directory ius shared between platforms:
+        ('pkgname', _check_guts_eq),
+        ('toc', _check_guts_eq),
+        ('resources', _check_guts_eq),
+        ('strip', _check_guts_eq),
+        ('upx', _check_guts_eq),
+        ('mtm', None),  # checked below
+        # no calculated/analysed values
+        ('exefiles', _check_guts_toc),
+    )
+
+    def _check_guts(self, data, last_build):
+        if not os.path.exists(self.name):
+            logger.info("Rebuilding %s because %s missing", self.tocbasename, os.path.basename(self.name))
+            return 1
+        if not self.append_pkg and not os.path.exists(self.pkgname):
+            logger.info("Rebuilding because %s missing", os.path.basename(self.pkgname))
+            return 1
+
+        if Target._check_guts(self, data, last_build):
+            return True
+
+        if (data['versrsrc'] or data['resources']) and not is_win:
+            # todo: really ignore :-)
+            logger.warning('ignoring version, manifest and resources, platform not capable')
+        if data['icon'] and not (is_win or is_darwin):
+            logger.warning('ignoring icon, platform not capable')
+
+        mtm = data['mtm']
+        if mtm != misc.mtime(self.name):
+            logger.info("Rebuilding %s because mtimes don't match", self.tocbasename)
+            return True
+        if mtm < misc.mtime(self.pkg.tocfilename):
+            logger.info("Rebuilding %s because pkg is more recent", self.tocbasename)
+            return True
+        return False
+
+    def _bootloader_file(self, exe, extension=None):
+        """
+        Pick up the right bootloader file - debug, console, windowed.
+        """
+        # Having console/windowed bootloader makes sense only on Windows and Mac OS.
+        if is_win or is_darwin:
+            if not self.console:
+                exe = exe + 'w'
+        # There are two types of bootloaders:
+        # run     - release, no verbose messages in console.
+        # run_d   - contains verbose messages in console.
+        if self.debug:
+            exe = exe + '_d'
+        if extension:
+            exe = exe + extension
+        bootloader_file = os.path.join(HOMEPATH, 'PyInstaller', 'bootloader', PLATFORM, exe)
+        logger.info('Bootloader %s' % bootloader_file)
+        return bootloader_file
+
+    def assemble(self):
+        from PyInstaller.config import CONF
+
+        # On Windows, we must never create a file with a .exe suffix that we then have to (re)write to (see #6467).
+        # Any intermediate/temporary file must have an alternative suffix.
+        build_name = self.name + '.notanexecutable' if is_win or is_cygwin else self.name
+
+        logger.info("Building EXE from %s", self.tocbasename)
+        if os.path.exists(self.name):
+            if os.path.isdir(self.name):
+                _rmtree(self.name)  # will prompt for confirmation if --noconfirm is not given
+            else:
+                os.remove(self.name)
+        if not os.path.exists(os.path.dirname(self.name)):
+            os.makedirs(os.path.dirname(self.name))
+        exe = self.exefiles[0][1]  # pathname of bootloader
+        if not os.path.exists(exe):
+            raise SystemExit(_MISSING_BOOTLOADER_ERRORMSG)
+
+        # Step 1: copy the bootloader file, and perform any operations that need to be done prior to appending the PKG.
+        logger.info("Copying bootloader EXE to %s", build_name)
+        self._copyfile(exe, build_name)
+        os.chmod(build_name, 0o755)
+
+        if is_win:
+            # First, remove all resources from the file. This ensures that no manifest is embedded, even if bootloader
+            # was compiled with a toolchain that forcibly embeds a default manifest (e.g., mingw toolchain from msys2).
+            winresource.RemoveAllResources(build_name)
+            # Embed icon.
+            if self.icon != "NONE":
+                logger.info("Copying icon to EXE")
+                icon.CopyIcons(build_name, self.icon)
+            # Embed version info.
+            if self.versrsrc:
+                logger.info("Copying version information to EXE")
+                versioninfo.SetVersion(build_name, self.versrsrc)
+            # Embed other resources.
+            logger.info("Copying %d resources to EXE", len(self.resources))
+            for res in self.resources:
+                res = res.split(",")
+                for i in range(1, len(res)):
+                    try:
+                        res[i] = int(res[i])
+                    except ValueError:
+                        pass
+                resfile = res[0]
+                if not os.path.isabs(resfile):
+                    resfile = os.path.join(CONF['specpath'], resfile)
+                restype = resname = reslang = None
+                if len(res) > 1:
+                    restype = res[1]
+                if len(res) > 2:
+                    resname = res[2]
+                if len(res) > 3:
+                    reslang = res[3]
+                try:
+                    winresource.UpdateResourcesFromResFile(
+                        build_name, resfile, [restype or "*"], [resname or "*"], [reslang or "*"]
+                    )
+                except winresource.pywintypes.error as exc:
+                    if exc.args[0] != winresource.ERROR_BAD_EXE_FORMAT:
+                        logger.error(
+                            "Error while updating resources in %s from resource file %s!",
+                            build_name,
+                            resfile,
+                            exc_info=1
+                        )
+                        continue
+
+                    # Handle the case where the file contains no resources, and is intended as a single resource to be
+                    # added to the exe.
+                    if not restype or not resname:
+                        logger.error("Resource type and/or name not specified!")
+                        continue
+                    if "*" in (restype, resname):
+                        logger.error(
+                            "No wildcards allowed for resource type and name when the source file does not contain "
+                            "any resources!"
+                        )
+                        continue
+                    try:
+                        winresource.UpdateResourcesFromDataFile(build_name, resfile, restype, [resname], [reslang or 0])
+                    except winresource.pywintypes.error:
+                        logger.error(
+                            "Error while updating resource %s %s in %s from data file %s!",
+                            restype,
+                            resname,
+                            build_name,
+                            resfile,
+                            exc_info=1
+                        )
+            # Embed the manifest into the executable.
+            if self.embed_manifest:
+                logger.info("Embedding manifest in EXE")
+                self.manifest.update_resources(build_name, [1])
+        elif is_darwin:
+            # Convert bootloader to the target arch
+            logger.info("Converting EXE to target arch (%s)", self.target_arch)
+            osxutils.binary_to_target_arch(build_name, self.target_arch, display_name='Bootloader EXE')
+
+        # Step 2: append the PKG, if necessary
+        if self.append_pkg:
+            append_file = self.pkg.name  # Append PKG
+            append_type = 'PKG archive'  # For debug messages
+        else:
+            # In onefile mode, copy the stand-alone PKG next to the executable. In onedir, this will be done by the
+            # COLLECT() target.
+            if not self.exclude_binaries:
+                pkg_dst = os.path.join(os.path.dirname(build_name), os.path.basename(self.pkgname))
+                logger.info("Copying stand-alone PKG archive from %s to %s", self.pkg.name, pkg_dst)
+                self._copyfile(self.pkg.name, pkg_dst)
+            else:
+                logger.info("Stand-alone PKG archive will be handled by COLLECT")
+
+            # The bootloader requires package side-loading to be explicitly enabled, which is done by embedding custom
+            # signature to the executable. This extra signature ensures that the sideload-enabled executable is at least
+            # slightly different from the stock bootloader executables, which should prevent antivirus programs from
+            # flagging our stock bootloaders due to sideload-enabled applications in the wild.
+
+            # Write to temporary file
+            pkgsig_file = self.pkg.name + '.sig'
+            with open(pkgsig_file, "wb") as f:
+                # 8-byte MAGIC; slightly changed PKG MAGIC pattern
+                f.write(b'MEI\015\013\012\013\016')
+
+            append_file = pkgsig_file  # Append PKG-SIG
+            append_type = 'PKG sideload signature'  # For debug messages
+
+        if is_linux:
+            # Linux: append data into custom ELF section using objcopy.
+            logger.info("Appending %s to custom ELF section in EXE", append_type)
+            cmd = ['objcopy', '--add-section', f'pydata={append_file}', build_name]
+            p = subprocess.run(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, universal_newlines=True)
+            if p.returncode:
+                raise SystemError(f"objcopy Failure: {p.returncode} {p.stdout}")
+
+        elif is_darwin:
+            # macOS: remove signature, append data, and fix-up headers so that the appended data appears to be part of
+            # the executable (which is required by strict validation during code-signing).
+
+            # Strip signatures from all arch slices. Strictly speaking, we need to remove signature (if present) from
+            # the last slice, because we will be appending data to it. When building universal2 bootloaders natively on
+            # macOS, only arm64 slices have a (dummy) signature. However, when cross-compiling with osxcross, we seem to
+            # get dummy signatures on both x86_64 and arm64 slices. While the former should not have any impact, it does
+            # seem to cause issues with further binary signing using real identity. Therefore, we remove all signatures
+            # and re-sign the binary using dummy signature once the data is appended.
+            logger.info("Removing signature(s) from EXE")
+            osxutils.remove_signature_from_binary(build_name)
+
+            # Append the data
+            logger.info("Appending %s to EXE", append_type)
+            with open(build_name, 'ab') as outf:
+                with open(append_file, 'rb') as inf:
+                    shutil.copyfileobj(inf, outf, length=64 * 1024)
+
+            # Fix Mach-O headers
+            logger.info("Fixing EXE headers for code signing")
+            osxutils.fix_exe_for_code_signing(build_name)
+        else:
+            # Fall back to just appending data at the end of the file
+            logger.info("Appending %s to EXE", append_type)
+            with open(build_name, 'ab') as outf:
+                with open(append_file, 'rb') as inf:
+                    shutil.copyfileobj(inf, outf, length=64 * 1024)
+
+        # Step 3: post-processing
+        if is_win:
+            # Set checksum to appease antiviral software. Also set build timestamp to current time to increase entropy
+            # (but honor SOURCE_DATE_EPOCH environment variable for reproducible builds).
+            build_timestamp = int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
+            winutils.fixup_exe_headers(build_name, build_timestamp)
+        elif is_darwin:
+            # If the version of macOS SDK used to build bootloader exceeds that of macOS SDK used to built Python
+            # library (and, by extension, bundled Tcl/Tk libraries), force the version declared by the frozen executable
+            # to match that of the Python library.
+            # Having macOS attempt to enable new features (based on SDK version) for frozen application has no benefit
+            # if the Python library does not support them as well.
+            # On the other hand, there seem to be UI issues in tkinter due to failed or partial enablement of dark mode
+            # (i.e., the bootloader executable being built against SDK 10.14 or later, which causes macOS to enable dark
+            # mode, and Tk libraries being built against an earlier SDK version that does not support the dark mode).
+            # With python.org Intel macOS installers, this manifests as black Tk windows and UI elements (see issue
+            # #5827), while in Anaconda python, it may result in white text on bright background.
+            pylib_version = osxutils.get_macos_sdk_version(bindepend.get_python_library_path())
+            exe_version = osxutils.get_macos_sdk_version(build_name)
+            if pylib_version < exe_version:
+                logger.info(
+                    "Rewriting the executable's macOS SDK version (%d.%d.%d) to match the SDK version of the Python "
+                    "library (%d.%d.%d) in order to avoid inconsistent behavior and potential UI issues in the "
+                    "frozen application.", *exe_version, *pylib_version
+                )
+                osxutils.set_macos_sdk_version(build_name, *pylib_version)
+
+            # Re-sign the binary (either ad-hoc or using real identity, if provided).
+            logger.info("Re-signing the EXE")
+            osxutils.sign_binary(build_name, self.codesign_identity, self.entitlements_file)
+
+        # Ensure executable flag is set
+        os.chmod(build_name, 0o755)
+        # Get mtime for storing into the guts
+        self.mtm = misc.mtime(build_name)
+        if build_name != self.name:
+            os.rename(build_name, self.name)
+        logger.info("Building EXE from %s completed successfully.", self.tocbasename)
+
+    def _copyfile(self, infile, outfile):
+        with open(infile, 'rb') as infh:
+            with open(outfile, 'wb') as outfh:
+                shutil.copyfileobj(infh, outfh, length=64 * 1024)
+
+
+class COLLECT(Target):
+    """
+    In one-dir mode creates the output folder with all necessary files.
+    """
+    def __init__(self, *args, **kws):
+        """
+        args
+                One or more arguments that are either TOCs Targets.
+        kws
+            Possible keyword arguments:
+
+                name
+                    The name of the directory to be built.
+        """
+        from PyInstaller.config import CONF
+        Target.__init__(self)
+        self.strip_binaries = kws.get('strip', False)
+        self.upx_exclude = kws.get("upx_exclude", [])
+        self.console = True
+        self.target_arch = None
+        self.codesign_identity = None
+        self.entitlements_file = None
+
+        if CONF['hasUPX']:
+            self.upx_binaries = kws.get('upx', False)
+        else:
+            self.upx_binaries = False
+
+        self.name = kws.get('name')
+        # Old .spec format included in 'name' the path where to collect files for the created app. app. New format
+        # includes only directory name.
+        #
+        # The 'name' directory is created in DISTPATH and necessary files are then collected to this directory.
+        self.name = os.path.join(CONF['distpath'], os.path.basename(self.name))
+
+        self.toc = TOC()
+        for arg in args:
+            if isinstance(arg, TOC):
+                self.toc.extend(arg)
+            elif isinstance(arg, Target):
+                self.toc.append((os.path.basename(arg.name), arg.name, arg.typ))
+                if isinstance(arg, EXE):
+                    self.console = arg.console
+                    self.target_arch = arg.target_arch
+                    self.codesign_identity = arg.codesign_identity
+                    self.entitlements_file = arg.entitlements_file
+                    for tocnm, fnm, typ in arg.toc:
+                        if tocnm == os.path.basename(arg.name) + ".manifest":
+                            self.toc.append((tocnm, fnm, typ))
+                    if not arg.append_pkg:
+                        self.toc.append((os.path.basename(arg.pkgname), arg.pkgname, 'PKG'))
+                self.toc.extend(arg.dependencies)
+            else:
+                self.toc.extend(arg)
+        self.__postinit__()
+
+    _GUTS = (
+        # COLLECT always builds, just want the toc to be written out
+        ('toc', None),
+    )
+
+    def _check_guts(self, data, last_build):
+        # COLLECT always needs to be executed, since it will clean the output directory anyway to make sure there is no
+        # existing cruft accumulating
+        return 1
+
+    def assemble(self):
+        _make_clean_directory(self.name)
+        logger.info("Building COLLECT %s", self.tocbasename)
+        for inm, fnm, typ in self.toc:
+            # Adjust name for extensions, if applicable
+            inm, fnm, typ = add_suffix_to_extension(inm, fnm, typ)
+            if not os.path.exists(fnm) or not os.path.isfile(fnm) and is_path_to_egg(fnm):
+                # File is contained within python egg; it is added with the egg.
+                continue
+            if os.pardir in os.path.normpath(inm).split(os.sep) or os.path.isabs(inm):
+                raise SystemExit('Security-Alert: try to store file outside of dist-directory. Aborting. %r' % inm)
+            tofnm = os.path.join(self.name, inm)
+            todir = os.path.dirname(tofnm)
+            if not os.path.exists(todir):
+                os.makedirs(todir)
+            elif not os.path.isdir(todir):
+                raise SystemExit(
+                    "Pyinstaller needs to make a directory at %r, but there already exists a file at that path!" % todir
+                )
+            if typ in ('EXTENSION', 'BINARY'):
+                fnm = checkCache(
+                    fnm,
+                    strip=self.strip_binaries,
+                    upx=self.upx_binaries,
+                    upx_exclude=self.upx_exclude,
+                    dist_nm=inm,
+                    target_arch=self.target_arch,
+                    codesign_identity=self.codesign_identity,
+                    entitlements_file=self.entitlements_file,
+                    strict_arch_validation=(typ == 'EXTENSION'),
+                )
+            if typ != 'DEPENDENCY':
+                if os.path.isdir(fnm):
+                    # Because shutil.copy2() is the default copy function for shutil.copytree, this will also copy file
+                    # metadata.
+                    shutil.copytree(fnm, tofnm)
+                else:
+                    shutil.copy(fnm, tofnm)
+                try:
+                    shutil.copystat(fnm, tofnm)
+                except OSError:
+                    logger.warning("failed to copy flags of %s", fnm)
+            if typ in ('EXTENSION', 'BINARY'):
+                os.chmod(tofnm, 0o755)
+        logger.info("Building COLLECT %s completed successfully.", self.tocbasename)
+
+
+class MERGE:
+    """
+    Merge repeated dependencies from other executables into the first executable. Data and binary files are then
+    present only once and some disk space is thus reduced.
+    """
+    def __init__(self, *args):
+        """
+        Repeated dependencies are then present only once in the first executable in the 'args' list. Other
+        executables depend on the first one. Other executables have to extract necessary files from the first
+        executable.
+
+        args  dependencies in a list of (Analysis, id, filename) tuples.
+              Replace id with the correct filename.
+        """
+        # The first Analysis object with all dependencies.
+        # Any item from the first executable cannot be removed.
+        self._main = None
+
+        self._dependencies = {}
+
+        self._id_to_path = {}
+        for _, i, p in args:
+            self._id_to_path[os.path.normcase(i)] = p
+
+        # Get the longest common path
+        common_prefix = os.path.commonprefix([os.path.normcase(os.path.abspath(a.scripts[-1][1])) for a, _, _ in args])
+        self._common_prefix = os.path.dirname(common_prefix)
+        if self._common_prefix[-1] != os.sep:
+            self._common_prefix += os.sep
+        logger.info("Common prefix: %s", self._common_prefix)
+
+        self._merge_dependencies(args)
+
+    def _merge_dependencies(self, args):
+        """
+        Filter shared dependencies to be only in first executable.
+        """
+        for analysis, _, _ in args:
+            path = os.path.normcase(os.path.abspath(analysis.scripts[-1][1]))
+            path = path.replace(self._common_prefix, "", 1)
+            path = os.path.splitext(path)[0]
+            if os.path.normcase(path) in self._id_to_path:
+                path = self._id_to_path[os.path.normcase(path)]
+            self._set_dependencies(analysis, path)
+
+    def _set_dependencies(self, analysis, path):
+        """
+        Synchronize the Analysis result with the needed dependencies.
+        """
+        for toc in (analysis.binaries, analysis.datas):
+            for i, tpl in enumerate(toc):
+                if not tpl[1] in self._dependencies:
+                    logger.debug("Adding dependency %s located in %s", tpl[1], path)
+                    self._dependencies[tpl[1]] = path
+                else:
+                    dep_path = self._get_relative_path(path, self._dependencies[tpl[1]])
+                    # Ignore references that point to the origin package. This can happen if the same resource is listed
+                    # multiple times in TOCs (e.g., once as binary and once as data).
+                    if dep_path.endswith(path):
+                        logger.debug(
+                            "Ignoring self-reference of %s for %s, located in %s - duplicated TOC entry?", tpl[1], path,
+                            dep_path
+                        )
+                        # Clear the entry as it is a duplicate.
+                        toc[i] = (None, None, None)
+                        continue
+                    logger.debug("Referencing %s to be a dependency for %s, located in %s", tpl[1], path, dep_path)
+                    # Determine the path relative to dep_path (i.e, within the target directory) from the 'name'
+                    # component of the TOC tuple. If entry is EXTENSION, then the relative path needs to be
+                    # reconstructed from the name components.
+                    if tpl[2] == 'EXTENSION':
+                        # Split on os.path.sep first, to handle additional path prefix (e.g., lib-dynload)
+                        ext_components = tpl[0].split(os.path.sep)
+                        ext_components = ext_components[:-1] + ext_components[-1].split('.')[:-1]
+                        if ext_components:
+                            rel_path = os.path.join(*ext_components)
+                        else:
+                            rel_path = ''
+                    else:
+                        rel_path = os.path.dirname(tpl[0])
+                    # Take filename from 'path' (second component of TOC tuple); this way, we don't need to worry about
+                    # suffix of extensions.
+                    filename = os.path.basename(tpl[1])
+                    # Construct the full file path relative to dep_path...
+                    filename = os.path.join(rel_path, filename)
+                    # ...and use it in new DEPENDENCY entry
+                    analysis.dependencies.append((":".join((dep_path, filename)), tpl[1], "DEPENDENCY"))
+                    toc[i] = (None, None, None)
+            # Clean the list
+            toc[:] = [tpl for tpl in toc if tpl != (None, None, None)]
+
+    # TODO: use pathlib.Path.relative_to() instead.
+    def _get_relative_path(self, startpath, topath):
+        start = startpath.split(os.sep)[:-1]
+        start = ['..'] * len(start)
+        if start:
+            start.append(topath)
+            return os.sep.join(start)
+        else:
+            return topath
+
+
+UNCOMPRESSED = 0
+COMPRESSED = 1
+
+_MISSING_BOOTLOADER_ERRORMSG = """Fatal error: PyInstaller does not include a pre-compiled bootloader for your
+platform. For more details and instructions how to build the bootloader see
+<https://pyinstaller.readthedocs.io/en/stable/bootloader-building.html>"""

+ 842 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/build_main.py

@@ -0,0 +1,842 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Build packages using spec files.
+
+NOTE: All global variables, classes and imported modules create API for .spec files.
+"""
+
+import glob
+import os
+import pprint
+import shutil
+
+import sys
+
+from PyInstaller import DEFAULT_DISTPATH, DEFAULT_WORKPATH, HOMEPATH, compat
+from PyInstaller import log as logging
+from PyInstaller.archive import pyz_crypto
+from PyInstaller.building.api import COLLECT, EXE, MERGE, PYZ
+from PyInstaller.building.datastruct import TOC, Target, Tree, _check_guts_eq
+from PyInstaller.building.osx import BUNDLE
+from PyInstaller.building.splash import Splash
+from PyInstaller.building.toc_conversion import DependencyProcessor
+from PyInstaller.building.utils import (_check_guts_toc_mtime, _should_include_system_binary, format_binaries_and_datas)
+from PyInstaller.compat import PYDYLIB_NAMES, is_win
+from PyInstaller.depend import bindepend
+from PyInstaller.depend.analysis import initialize_modgraph
+from PyInstaller.depend.utils import (create_py3_base_library, scan_code_for_ctypes)
+from PyInstaller import isolated
+from PyInstaller.utils.misc import (
+    absnormpath, compile_py_files, get_path_to_toplevel_modules, get_unicode_modules, mtime
+)
+
+if is_win:
+    from PyInstaller.utils.win32 import winmanifest
+
+logger = logging.getLogger(__name__)
+
+STRINGTYPE = type('')
+TUPLETYPE = type((None,))
+
+rthooks = {}
+
+# Place where the loader modules and initialization scripts live.
+_init_code_path = os.path.join(HOMEPATH, 'PyInstaller', 'loader')
+
+IMPORT_TYPES = [
+    'top-level', 'conditional', 'delayed', 'delayed, conditional', 'optional', 'conditional, optional',
+    'delayed, optional', 'delayed, conditional, optional'
+]
+
+WARNFILE_HEADER = """\
+
+This file lists modules PyInstaller was not able to find. This does not
+necessarily mean this module is required for running your program. Python and
+Python 3rd-party packages include a lot of conditional or optional modules. For
+example the module 'ntpath' only exists on Windows, whereas the module
+'posixpath' only exists on Posix systems.
+
+Types if import:
+* top-level: imported at the top-level - look at these first
+* conditional: imported within an if-statement
+* delayed: imported within a function
+* optional: imported within a try-except-statement
+
+IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
+            tracking down the missing module yourself. Thanks!
+
+"""
+
+
+# TODO find better place for function.
+def setupUPXFlags():
+    f = compat.getenv("UPX", "")
+    if is_win:
+        # Binaries built with Visual Studio 7.1 require --strip-loadconf or they will not compress. Configure.py makes
+        # sure that UPX is new enough to support --strip-loadconf.
+        f = "--strip-loadconf " + f
+    # Do not compress any icon, so that additional icons in the executable can still be externally bound.
+    f = "--compress-icons=0 " + f
+    f = "--best " + f
+    compat.setenv("UPX", f)
+
+
[email protected]
+def discover_hook_directories():
+    """
+    Discover hook directories via pkg_resources and pyinstaller40 entry points. Perform the discovery in a subprocess
+    to avoid importing the package(s) in the main process.
+
+    :return: list of discovered hook directories.
+    """
+
+    import sys  # noqa: F401
+    from traceback import format_exception_only
+    import pkg_resources
+    from PyInstaller.log import logger
+
+    entry_points = pkg_resources.iter_entry_points('pyinstaller40', 'hook-dirs')
+
+    hook_directories = []
+    for entry_point in entry_points:
+        try:
+            hook_directories.extend(entry_point.load()())
+        except Exception as e:
+            msg = "".join(format_exception_only(type(e), e)).strip()
+            logger.warning("discover_hook_directories: Failed to process hook entry point '%s': %s", entry_point, msg)
+
+    logger.debug("discover_hook_directories: Hook directories: %s", hook_directories)
+
+    return hook_directories
+
+
+# NOTE: this helper is called via isolated.call() in Analysis.assemble(). We cannot use @isolated.decorate here, because
+# one of the tests (test_regression::test_issue_5131) needs to be able to monkey-patch it, in order to override the
+# bindepend.getImports() in the isolated subprocess (!) with its own implementation...
+def find_binary_dependencies(binaries, binding_redirects, import_packages):
+    """
+    Find dynamic dependencies (linked shared libraries) for the provided list of binaries.
+
+    Before scanning the binaries, the function imports the packages from provided list of packages to import, to ensure
+    that library search paths are properly set up (i.e., if a package sets up search paths when imported). Therefore,
+    this function *must* always be called in an isolated subprocess to avoid import leaks!
+
+    binaries
+            List of binaries to scan for dynamic dependencies.
+    binding_redirects
+            List of assembly binding redirects.
+    import_packages
+            List of packages to import prior to scanning binaries.
+
+    :return: expanded list of binaries and then dependencies.
+    """
+    from PyInstaller.depend import bindepend
+    from PyInstaller import compat
+
+    # In the case of MS App Store python, add compat.base_prefix to extra library search paths. In addition to
+    # python38.dll (that we manage to resolve by other means, if necessary), this directory also contains
+    # python3.dll that might be required by some 3rd-party extension modules, and would otherwise end up missing
+    # during the dependency analysis.
+    extra_libdirs = []
+    if compat.is_ms_app_store:
+        extra_libdirs.append(compat.base_prefix)
+
+    # Import collected packages to set up environment
+    for package in import_packages:
+        try:
+            __import__(package)
+        except Exception:
+            pass
+
+    # Search for dependencies of the given binaries
+    return bindepend.Dependencies(binaries, redirects=binding_redirects, xtrapath=extra_libdirs)
+
+
+class Analysis(Target):
+    """
+    Class that performs analysis of the user's main Python scripts.
+
+    An Analysis has five outputs, all TOCs (Table of Contents) accessed as attributes of the analysis.
+
+    scripts
+            The scripts you gave Analysis as input, with any runtime hook scripts prepended.
+    pure
+            The pure Python modules.
+    binaries
+            The extensionmodules and their dependencies. The secondary dependencies are filtered. On Windows files from
+            C:\\Windows are excluded by default. On Linux/Unix only system libraries from /lib or /usr/lib are excluded.
+    datas
+            Data-file dependencies. These are data-file that are found to be needed by modules. They can be anything:
+            plugins, font files, images, translations, etc.
+    zipfiles
+            The zipfiles dependencies (usually .egg files).
+    """
+    _old_scripts = {
+        absnormpath(os.path.join(HOMEPATH, "support", "_mountzlib.py")),
+        absnormpath(os.path.join(HOMEPATH, "support", "useUnicode.py")),
+        absnormpath(os.path.join(HOMEPATH, "support", "useTK.py")),
+        absnormpath(os.path.join(HOMEPATH, "support", "unpackTK.py")),
+        absnormpath(os.path.join(HOMEPATH, "support", "removeTK.py"))
+    }
+
+    def __init__(
+        self,
+        scripts,
+        pathex=None,
+        binaries=None,
+        datas=None,
+        hiddenimports=None,
+        hookspath=None,
+        hooksconfig=None,
+        excludes=None,
+        runtime_hooks=None,
+        cipher=None,
+        win_no_prefer_redirects=False,
+        win_private_assemblies=False,
+        noarchive=False
+    ):
+        """
+        scripts
+                A list of scripts specified as file names.
+        pathex
+                An optional list of paths to be searched before sys.path.
+        binaries
+                An optional list of additional binaries (dlls, etc.) to include.
+        datas
+                An optional list of additional data files to include.
+        hiddenimport
+                An optional list of additional (hidden) modules to include.
+        hookspath
+                An optional list of additional paths to search for hooks. (hook-modules).
+        hooksconfig
+                An optional dict of config settings for hooks. (hook-modules).
+        excludes
+                An optional list of module or package names (their Python names, not path names) that will be
+                ignored (as though they were not found).
+        runtime_hooks
+                An optional list of scripts to use as users' runtime hooks. Specified as file names.
+        cipher
+                Add optional instance of the pyz_crypto.PyiBlockCipher class (with a provided key).
+        win_no_prefer_redirects
+                If True, prefer not to follow version redirects when searching for Windows SxS Assemblies.
+        win_private_assemblies
+                If True, change all bundled Windows SxS Assemblies into Private Assemblies to enforce assembly versions.
+        noarchive
+                If True, do not place source files in a archive, but keep them as individual files.
+        """
+        super().__init__()
+        from PyInstaller.config import CONF
+
+        self.inputs = []
+        spec_dir = os.path.dirname(CONF['spec'])
+        for script in scripts:
+            # If path is relative, it is relative to the location of .spec file.
+            if not os.path.isabs(script):
+                script = os.path.join(spec_dir, script)
+            if absnormpath(script) in self._old_scripts:
+                logger.warning('Ignoring obsolete auto-added script %s', script)
+                continue
+            # Normalize script path.
+            script = os.path.normpath(script)
+            if not os.path.exists(script):
+                raise SystemExit("script '%s' not found" % script)
+            self.inputs.append(script)
+
+        # Django hook requires this variable to find the script manage.py.
+        CONF['main_script'] = self.inputs[0]
+
+        self.pathex = self._extend_pathex(pathex, self.inputs)
+        # Set global config variable 'pathex' to make it available for PyInstaller.utils.hooks and import hooks. Path
+        # extensions for module search.
+        CONF['pathex'] = self.pathex
+        # Extend sys.path so PyInstaller could find all necessary modules.
+        logger.info('Extending PYTHONPATH with paths\n' + pprint.pformat(self.pathex))
+        sys.path.extend(self.pathex)
+
+        # If pkg_resources has already been imported, force update of its working set to account for changes made to
+        # sys.path. Otherwise, distribution data in the added path(s) may not be discovered.
+        if 'pkg_resources' in sys.modules:
+            # See https://github.com/pypa/setuptools/issues/373
+            import pkg_resources
+            if hasattr(pkg_resources, '_initialize_master_working_set'):
+                pkg_resources._initialize_master_working_set()
+
+        # Set global variable to hold assembly binding redirects
+        CONF['binding_redirects'] = []
+
+        self.hiddenimports = hiddenimports or []
+        # Include modules detected when parsing options, like 'codecs' and encodings.
+        self.hiddenimports.extend(CONF['hiddenimports'])
+
+        self.hookspath = []
+        # Append directories in `hookspath` (`--additional-hooks-dir`) to take precedence over those from the entry
+        # points.
+        if hookspath:
+            self.hookspath.extend(hookspath)
+
+        # Add hook directories from PyInstaller entry points.
+        self.hookspath += discover_hook_directories()
+
+        self.hooksconfig = {}
+        if hooksconfig:
+            self.hooksconfig.update(hooksconfig)
+
+        # Custom runtime hook files that should be included and started before any existing PyInstaller runtime hooks.
+        self.custom_runtime_hooks = runtime_hooks or []
+
+        if cipher:
+            logger.info('Will encrypt Python bytecode with provided cipher key')
+            # Create a Python module which contains the decryption key which will be used at runtime by
+            # pyi_crypto.PyiBlockCipher.
+            pyi_crypto_key_path = os.path.join(CONF['workpath'], 'pyimod00_crypto_key.py')
+            with open(pyi_crypto_key_path, 'w', encoding='utf-8') as f:
+                f.write('# -*- coding: utf-8 -*-\nkey = %r\n' % cipher.key)
+            self.hiddenimports.append('tinyaes')
+
+        self.excludes = excludes or []
+        self.scripts = TOC()
+        self.pure = TOC()
+        self.binaries = TOC()
+        self.zipfiles = TOC()
+        self.zipped_data = TOC()
+        self.datas = TOC()
+        self.dependencies = TOC()
+        self.binding_redirects = CONF['binding_redirects'] = []
+        self.win_no_prefer_redirects = win_no_prefer_redirects
+        self.win_private_assemblies = win_private_assemblies
+        self._python_version = sys.version
+        self.noarchive = noarchive
+
+        self.__postinit__()
+
+        # TODO: create a function to convert datas/binaries from 'hook format' to TOC.
+        # Initialise 'binaries' and 'datas' with lists specified in .spec file.
+        if binaries:
+            logger.info("Appending 'binaries' from .spec")
+            for name, pth in format_binaries_and_datas(binaries, workingdir=spec_dir):
+                self.binaries.append((name, pth, 'BINARY'))
+        if datas:
+            logger.info("Appending 'datas' from .spec")
+            for name, pth in format_binaries_and_datas(datas, workingdir=spec_dir):
+                self.datas.append((name, pth, 'DATA'))
+
+    _GUTS = (  # input parameters
+        ('inputs', _check_guts_eq),  # parameter `scripts`
+        ('pathex', _check_guts_eq),
+        ('hiddenimports', _check_guts_eq),
+        ('hookspath', _check_guts_eq),
+        ('hooksconfig', _check_guts_eq),
+        ('excludes', _check_guts_eq),
+        ('custom_runtime_hooks', _check_guts_eq),
+        ('win_no_prefer_redirects', _check_guts_eq),
+        ('win_private_assemblies', _check_guts_eq),
+        ('noarchive', _check_guts_eq),
+
+        # 'cipher': no need to check as it is implied by an additional hidden import
+
+        # calculated/analysed values
+        ('_python_version', _check_guts_eq),
+        ('scripts', _check_guts_toc_mtime),
+        ('pure', lambda *args: _check_guts_toc_mtime(*args, **{'pyc': 1})),
+        ('binaries', _check_guts_toc_mtime),
+        ('zipfiles', _check_guts_toc_mtime),
+        ('zipped_data', None),  # TODO check this, too
+        ('datas', _check_guts_toc_mtime),
+        # TODO: Need to add "dependencies"?
+
+        # cached binding redirects - loaded into CONF for PYZ/COLLECT to find.
+        ('binding_redirects', None),
+    )
+
+    def _extend_pathex(self, spec_pathex, scripts):
+        """
+        Normalize additional paths where PyInstaller will look for modules and add paths with scripts to the list of
+        paths.
+
+        :param spec_pathex: Additional paths defined defined in .spec file.
+        :param scripts: Scripts to create executable from.
+        :return: list of updated paths
+        """
+        # Based on main supplied script - add top-level modules directory to PYTHONPATH.
+        # Sometimes the main app script is not top-level module but submodule like 'mymodule.mainscript.py'.
+        # In that case PyInstaller will not be able find modules in the directory containing 'mymodule'.
+        # Add this directory to PYTHONPATH so PyInstaller could find it.
+        pathex = []
+        # Add scripts paths first.
+        for script in scripts:
+            logger.debug('script: %s' % script)
+            script_toplevel_dir = get_path_to_toplevel_modules(script)
+            if script_toplevel_dir:
+                pathex.append(script_toplevel_dir)
+        # Append paths from .spec.
+        if spec_pathex is not None:
+            pathex.extend(spec_pathex)
+        # Normalize paths in pathex and make them absolute.
+        return [absnormpath(p) for p in pathex]
+
+    def _check_guts(self, data, last_build):
+        if Target._check_guts(self, data, last_build):
+            return True
+        for fnm in self.inputs:
+            if mtime(fnm) > last_build:
+                logger.info("Building because %s changed", fnm)
+                return True
+        # Now we know that none of the input parameters and none of the input files has changed. So take the values
+        # calculated resp. analysed in the last run and store them in `self`.
+        self.scripts = TOC(data['scripts'])
+        self.pure = TOC(data['pure'])
+        self.binaries = TOC(data['binaries'])
+        self.zipfiles = TOC(data['zipfiles'])
+        self.zipped_data = TOC(data['zipped_data'])
+        self.datas = TOC(data['datas'])
+
+        # Store previously found binding redirects in CONF for later use by PKG/COLLECT
+        from PyInstaller.config import CONF
+        self.binding_redirects = CONF['binding_redirects'] = data['binding_redirects']
+
+        return False
+
+    def assemble(self):
+        """
+        This method is the MAIN method for finding all necessary files to be bundled.
+        """
+        from PyInstaller.config import CONF
+
+        for m in self.excludes:
+            logger.debug("Excluding module '%s'" % m)
+        self.graph = initialize_modgraph(excludes=self.excludes, user_hook_dirs=self.hookspath)
+
+        # TODO: find a better place where to put 'base_library.zip' and when to created it.
+        # For Python 3 it is necessary to create file 'base_library.zip' containing core Python modules. In Python 3
+        # some built-in modules are written in pure Python. base_library.zip is a way how to have those modules as
+        # "built-in".
+        libzip_filename = os.path.join(CONF['workpath'], 'base_library.zip')
+        create_py3_base_library(libzip_filename, graph=self.graph)
+        # Bundle base_library.zip as data file.
+        # Data format of TOC item:   ('relative_path_in_dist_dir', 'absolute_path_on_disk', 'DATA')
+        self.datas.append((os.path.basename(libzip_filename), libzip_filename, 'DATA'))
+
+        # Expand sys.path of module graph. The attribute is the set of paths to use for imports: sys.path, plus our
+        # loader, plus other paths from e.g. --path option).
+        self.graph.path = self.pathex + self.graph.path
+        self.graph.set_setuptools_nspackages()
+
+        logger.info("running Analysis %s", self.tocbasename)
+        # Get paths to Python and, in Windows, the manifest.
+        python = compat.python_executable
+        if not is_win:
+            # Linux/MacOS: get a real, non-link path to the running Python executable.
+            while os.path.islink(python):
+                python = os.path.join(os.path.dirname(python), os.readlink(python))
+            depmanifest = None
+        else:
+            # Windows: Create a manifest to embed into built .exe, containing the same dependencies as python.exe.
+            depmanifest = winmanifest.Manifest(
+                type_="win32",
+                name=CONF['specnm'],
+                processorArchitecture=winmanifest.processor_architecture(),
+                version=(1, 0, 0, 0)
+            )
+            depmanifest.filename = os.path.join(CONF['workpath'], CONF['specnm'] + ".exe.manifest")
+
+        # We record "binaries" separately from the modulegraph, as there is no way to record those dependencies in the
+        # graph. These include the python executable and any binaries added by hooks later. "binaries" are not the same
+        # as "extensions" which are .so or .dylib that are found and recorded as extension nodes in the graph. Reset
+        # seen variable before running bindepend. We use bindepend only for the python executable.
+        bindepend.seen.clear()
+
+        # Add binary and assembly dependencies of Python.exe. This also ensures that its assembly dependencies under
+        # Windows get added to the built .exe's manifest. Python 2.7 extension modules have no assembly dependencies,
+        # and rely on the app-global dependencies set by the .exe.
+        self.binaries.extend(
+            bindepend.Dependencies([('', python, '')], manifest=depmanifest, redirects=self.binding_redirects)[1:]
+        )
+        if is_win:
+            depmanifest.writeprettyxml()
+
+        # -- Module graph. --
+        #
+        # Construct the module graph of import relationships between modules required by this user's application. For
+        # each entry point (top-level user-defined Python script), all imports originating from this entry point are
+        # recursively parsed into a subgraph of the module graph. This subgraph is then connected to this graph's root
+        # node, ensuring imported module nodes will be reachable from the root node -- which is is (arbitrarily) chosen
+        # to be the first entry point's node.
+
+        # List to hold graph nodes of scripts and runtime hooks in use order.
+        priority_scripts = []
+
+        # Assume that if the script does not exist, Modulegraph will raise error. Save the graph nodes of each in
+        # sequence.
+        for script in self.inputs:
+            logger.info("Analyzing %s", script)
+            priority_scripts.append(self.graph.add_script(script))
+
+        # Analyze the script's hidden imports (named on the command line)
+        self.graph.add_hiddenimports(self.hiddenimports)
+
+        # -- Post-graph hooks. --
+        self.graph.process_post_graph_hooks(self)
+
+        # Update 'binaries' TOC and 'datas' TOC.
+        deps_proc = DependencyProcessor(self.graph, self.graph._additional_files_cache)
+        self.binaries.extend(deps_proc.make_binaries_toc())
+        self.datas.extend(deps_proc.make_datas_toc())
+        self.zipped_data.extend(deps_proc.make_zipped_data_toc())
+        # Note: zipped eggs are collected below
+
+        # -- Look for dlls that are imported by Python 'ctypes' module. --
+        # First get code objects of all modules that import 'ctypes'.
+        logger.info('Looking for ctypes DLLs')
+        # dict like: {'module1': code_obj, 'module2': code_obj}
+        ctypes_code_objs = self.graph.get_code_using("ctypes")
+
+        for name, co in ctypes_code_objs.items():
+            # Get dlls that might be needed by ctypes.
+            logger.debug('Scanning %s for shared libraries or dlls', name)
+            try:
+                ctypes_binaries = scan_code_for_ctypes(co)
+                self.binaries.extend(set(ctypes_binaries))
+            except Exception as ex:
+                raise RuntimeError(f"Failed to scan the module '{name}'. " f"This is a bug. Please report it.") from ex
+
+        self.datas.extend((dest, source, "DATA")
+                          for (dest, source) in format_binaries_and_datas(self.graph.metadata_required()))
+
+        # Analyze run-time hooks. Run-time hooks has to be executed before user scripts. Add them to the beginning of
+        # 'priority_scripts'.
+        priority_scripts = self.graph.analyze_runtime_hooks(self.custom_runtime_hooks) + priority_scripts
+
+        # 'priority_scripts' is now a list of the graph nodes of custom runtime hooks, then regular runtime hooks, then
+        # the PyI loader scripts. Further on, we will make sure they end up at the front of self.scripts
+
+        # -- Extract the nodes of the graph as TOCs for further processing. --
+
+        # Initialize the scripts list with priority scripts in the proper order.
+        self.scripts = self.graph.nodes_to_toc(priority_scripts)
+
+        # Extend the binaries list with all the Extensions modulegraph has found.
+        self.binaries = self.graph.make_binaries_toc(self.binaries)
+        # Fill the "pure" list with pure Python modules.
+        assert len(self.pure) == 0
+        self.pure = self.graph.make_pure_toc()
+        # And get references to module code objects constructed by ModuleGraph to avoid writing .pyc/pyo files to hdd.
+        self.pure._code_cache = self.graph.get_code_objects()
+
+        # Add remaining binary dependencies - analyze Python C-extensions and what DLLs they depend on.
+        #
+        # Up until this point, we did very best not to import the packages into the main process. However, a package
+        # may set up additional library search paths during its import (e.g., by modifying PATH or calling the
+        # add_dll_directory() function on Windows, or modifying LD_LIBRARY_PATH on Linux). In order to reliably
+        # discover dynamic libraries, we therefore require an environment with all packages imported. We achieve that
+        # by gathering list of all collected packages, and spawn an isolated process, in which we first import all
+        # the packages from the list, and then perform search for dynamic libraries.
+        logger.info('Looking for dynamic libraries')
+
+        collected_packages = self.graph.get_collected_packages()
+        self.binaries.extend(
+            isolated.call(find_binary_dependencies, list(self.binaries), self.binding_redirects, collected_packages)
+        )
+
+        # Include zipped Python eggs.
+        logger.info('Looking for eggs')
+        self.zipfiles.extend(deps_proc.make_zipfiles_toc())
+
+        # Verify that Python dynamic library can be found. Without dynamic Python library PyInstaller cannot continue.
+        self._check_python_library(self.binaries)
+
+        if is_win:
+            # Remove duplicate redirects
+            self.binding_redirects[:] = list(set(self.binding_redirects))
+            logger.info("Found binding redirects: \n%s", self.binding_redirects)
+
+        # Filter binaries to adjust path of extensions that come from python's lib-dynload directory. Prefix them with
+        # lib-dynload so that we will collect them into subdirectory instead of directly into _MEIPASS
+        for idx, tpl in enumerate(self.binaries):
+            name, path, typecode = tpl
+            if (
+                typecode == 'EXTENSION' and not os.path.dirname(os.path.normpath(name))
+                and os.path.basename(os.path.dirname(path)) == 'lib-dynload'
+            ):
+                name = os.path.join('lib-dynload', name)
+                self.binaries[idx] = (name, path, typecode)
+
+        # Place Python source in data files for the noarchive case.
+        if self.noarchive:
+            # Create a new TOC of ``(dest path for .pyc, source for .py, type)``.
+            new_toc = TOC()
+            for name, path, typecode in self.pure:
+                assert typecode == 'PYMODULE'
+                # Transform a python module name into a file name.
+                name = name.replace('.', os.sep)
+                # Special case: modules have an implied filename to add.
+                if os.path.splitext(os.path.basename(path))[0] == '__init__':
+                    name += os.sep + '__init__'
+                # Append the extension for the compiled result. In python 3.5 (PEP-488) .pyo files were replaced by
+                # .opt-1.pyc and .opt-2.pyc. However, it seems that for bytecode-only module distribution, we always
+                # need to use the .pyc extension.
+                name += '.pyc'
+                new_toc.append((name, path, typecode))
+            # Put the result of byte-compiling this TOC in datas. Mark all entries as data.
+            for name, path, typecode in compile_py_files(new_toc, CONF['workpath']):
+                self.datas.append((name, path, 'DATA'))
+            # Store no source in the archive.
+            self.pure = TOC()
+
+        # Write warnings about missing modules.
+        self._write_warnings()
+        # Write debug information about the graph
+        self._write_graph_debug()
+
+    def _write_warnings(self):
+        """
+        Write warnings about missing modules. Get them from the graph and use the graph to figure out who tried to
+        import them.
+        """
+        def dependency_description(name, dep_info):
+            if not dep_info or dep_info == 'direct':
+                imptype = 0
+            else:
+                imptype = (dep_info.conditional + 2 * dep_info.function + 4 * dep_info.tryexcept)
+            return '%s (%s)' % (name, IMPORT_TYPES[imptype])
+
+        from PyInstaller.config import CONF
+        miss_toc = self.graph.make_missing_toc()
+        with open(CONF['warnfile'], 'w', encoding='utf-8') as wf:
+            wf.write(WARNFILE_HEADER)
+            for (n, p, status) in miss_toc:
+                importers = self.graph.get_importers(n)
+                print(
+                    status,
+                    'module named',
+                    n,
+                    '- imported by',
+                    ', '.join(dependency_description(name, data) for name, data in importers),
+                    file=wf
+                )
+        logger.info("Warnings written to %s", CONF['warnfile'])
+
+    def _write_graph_debug(self):
+        """
+        Write a xref (in html) and with `--log-level DEBUG` a dot-drawing of the graph.
+        """
+        from PyInstaller.config import CONF
+        with open(CONF['xref-file'], 'w', encoding='utf-8') as fh:
+            self.graph.create_xref(fh)
+            logger.info("Graph cross-reference written to %s", CONF['xref-file'])
+        if logger.getEffectiveLevel() > logging.DEBUG:
+            return
+        # The `DOT language's <https://www.graphviz.org/doc/info/lang.html>`_ default character encoding (see the end
+        # of the linked page) is UTF-8.
+        with open(CONF['dot-file'], 'w', encoding='utf-8') as fh:
+            self.graph.graphreport(fh)
+            logger.info("Graph drawing written to %s", CONF['dot-file'])
+
+    def _check_python_library(self, binaries):
+        """
+        Verify presence of the Python dynamic library in the binary dependencies. Python library is an essential
+        piece that has to be always included.
+        """
+        # First check that libpython is in resolved binary dependencies.
+        for (nm, filename, typ) in binaries:
+            if typ == 'BINARY' and nm in PYDYLIB_NAMES:
+                # Just print its filename and return.
+                logger.info('Using Python library %s', filename)
+                # Checking was successful - end of function.
+                return
+
+        # Python lib not in dependencies - try to find it.
+        logger.info('Python library not in binary dependencies. Doing additional searching...')
+        python_lib = bindepend.get_python_library_path()
+        logger.debug('Adding Python library to binary dependencies')
+        binaries.append((os.path.basename(python_lib), python_lib, 'BINARY'))
+        logger.info('Using Python library %s', python_lib)
+
+    def exclude_system_libraries(self, list_of_exceptions=None):
+        """
+        This method may be optionally called from the spec file to exclude any system libraries from the list of
+        binaries other than those containing the shell-style wildcards in list_of_exceptions. Those that match
+        '*python*' or are stored under 'lib-dynload' are always treated as exceptions and not excluded.
+        """
+
+        self.binaries = [i for i in self.binaries if _should_include_system_binary(i, list_of_exceptions or [])]
+
+
+class ExecutableBuilder:
+    """
+    Class that constructs the executable.
+    """
+    # TODO wrap the 'main' and 'build' function into this class.
+
+
+def build(spec, distpath, workpath, clean_build):
+    """
+    Build the executable according to the created SPEC file.
+    """
+    from PyInstaller.config import CONF
+
+    # Ensure starting tilde and environment variables get expanded in distpath / workpath.
+    # '~/path/abc', '${env_var_name}/path/abc/def'
+    distpath = os.path.abspath(compat.expand_path(distpath))
+    workpath = os.path.abspath(compat.expand_path(workpath))
+    CONF['spec'] = os.path.abspath(compat.expand_path(spec))
+
+    CONF['specpath'], CONF['specnm'] = os.path.split(CONF['spec'])
+    CONF['specnm'] = os.path.splitext(CONF['specnm'])[0]
+
+    # Add 'specname' to workpath and distpath if they point to PyInstaller homepath.
+    if os.path.dirname(distpath) == HOMEPATH:
+        distpath = os.path.join(HOMEPATH, CONF['specnm'], os.path.basename(distpath))
+    CONF['distpath'] = distpath
+    if os.path.dirname(workpath) == HOMEPATH:
+        workpath = os.path.join(HOMEPATH, CONF['specnm'], os.path.basename(workpath), CONF['specnm'])
+    else:
+        workpath = os.path.join(workpath, CONF['specnm'])
+    CONF['workpath'] = workpath
+
+    CONF['warnfile'] = os.path.join(workpath, 'warn-%s.txt' % CONF['specnm'])
+    CONF['dot-file'] = os.path.join(workpath, 'graph-%s.dot' % CONF['specnm'])
+    CONF['xref-file'] = os.path.join(workpath, 'xref-%s.html' % CONF['specnm'])
+
+    # Clean PyInstaller cache (CONF['cachedir']) and temporary files (workpath) to be able start a clean build.
+    if clean_build:
+        logger.info('Removing temporary files and cleaning cache in %s', CONF['cachedir'])
+        for pth in (CONF['cachedir'], workpath):
+            if os.path.exists(pth):
+                # Remove all files in 'pth'.
+                for f in glob.glob(pth + '/*'):
+                    # Remove dirs recursively.
+                    if os.path.isdir(f):
+                        shutil.rmtree(f)
+                    else:
+                        os.remove(f)
+
+    # Create DISTPATH and workpath if they does not exist.
+    for pth in (CONF['distpath'], CONF['workpath']):
+        os.makedirs(pth, exist_ok=True)
+
+    # Construct NAMESPACE for running the Python code from .SPEC file.
+    # NOTE: Passing NAMESPACE allows to avoid having global variables in this module and makes isolated environment for
+    #       running tests.
+    # NOTE: Defining NAMESPACE allows to map any class to a apecific name for .SPEC.
+    # FIXME: Some symbols might be missing. Add them if there are some failures.
+    # TODO: What from this .spec API is deprecated and could be removed?
+    spec_namespace = {
+        # Set of global variables that can be used while processing .spec file. Some of them act as configuration
+        # options.
+        'DISTPATH': CONF['distpath'],
+        'HOMEPATH': HOMEPATH,
+        'SPEC': CONF['spec'],
+        'specnm': CONF['specnm'],
+        'SPECPATH': CONF['specpath'],
+        'WARNFILE': CONF['warnfile'],
+        'workpath': CONF['workpath'],
+        # PyInstaller classes for .spec.
+        'TOC': TOC,
+        'Analysis': Analysis,
+        'BUNDLE': BUNDLE,
+        'COLLECT': COLLECT,
+        'EXE': EXE,
+        'MERGE': MERGE,
+        'PYZ': PYZ,
+        'Tree': Tree,
+        'Splash': Splash,
+        # Python modules available for .spec.
+        'os': os,
+        'pyi_crypto': pyz_crypto,
+    }
+
+    # Execute the specfile. Read it as a binary file...
+    try:
+        with open(spec, 'rb') as f:
+            # ... then let Python determine the encoding, since ``compile`` accepts byte strings.
+            code = compile(f.read(), spec, 'exec')
+    except FileNotFoundError:
+        raise SystemExit(f'Spec file "{spec}" not found!')
+    exec(code, spec_namespace)
+
+
+def __add_options(parser):
+    parser.add_argument(
+        "--distpath",
+        metavar="DIR",
+        default=DEFAULT_DISTPATH,
+        help="Where to put the bundled app (default: ./dist)",
+    )
+    parser.add_argument(
+        '--workpath',
+        default=DEFAULT_WORKPATH,
+        help="Where to put all the temporary work files, .log, .pyz and etc. (default: ./build)",
+    )
+    parser.add_argument(
+        '-y',
+        '--noconfirm',
+        action="store_true",
+        default=False,
+        help="Replace output directory (default: %s) without asking for confirmation" %
+        os.path.join('SPECPATH', 'dist', 'SPECNAME'),
+    )
+    parser.add_argument(
+        '--upx-dir',
+        default=None,
+        help="Path to UPX utility (default: search the execution path)",
+    )
+    parser.add_argument(
+        "-a",
+        "--ascii",
+        action="store_true",
+        help="Do not include unicode encoding support (default: included if available)",
+    )
+    parser.add_argument(
+        '--clean',
+        dest='clean_build',
+        action='store_true',
+        default=False,
+        help="Clean PyInstaller cache and remove temporary files before building.",
+    )
+
+
+def main(
+    pyi_config,
+    specfile,
+    noconfirm=False,
+    ascii=False,
+    distpath=DEFAULT_DISTPATH,
+    workpath=DEFAULT_WORKPATH,
+    upx_dir=None,
+    clean_build=False,
+    **kw
+):
+    from PyInstaller.config import CONF
+    CONF['noconfirm'] = noconfirm
+
+    # Some modules are included if they are detected at build-time or if a command-line argument is specified
+    # (e.g., --ascii).
+    if CONF.get('hiddenimports') is None:
+        CONF['hiddenimports'] = []
+    # Test unicode support.
+    if not ascii:
+        CONF['hiddenimports'].extend(get_unicode_modules())
+
+    # If configuration dict is supplied - skip configuration step.
+    if pyi_config is None:
+        import PyInstaller.configure as configure
+        CONF.update(configure.get_config(upx_dir))
+    else:
+        CONF.update(pyi_config)
+
+    if CONF['hasUPX']:
+        setupUPXFlags()
+
+    CONF['ui_admin'] = kw.get('ui_admin', False)
+    CONF['ui_access'] = kw.get('ui_uiaccess', False)
+
+    build(specfile, distpath, workpath, clean_build)

+ 295 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/datastruct.py

@@ -0,0 +1,295 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+import os
+
+from PyInstaller import log as logging
+from PyInstaller.building.utils import _check_guts_eq
+from PyInstaller.utils import misc
+
+logger = logging.getLogger(__name__)
+
+
+def unique_name(entry):
+    """
+    Return the filename used to enforce uniqueness for the given TOC entry.
+
+    Parameters
+    ----------
+    entry : tuple
+
+    Returns
+    -------
+    unique_name: str
+    """
+    name, path, typecode = entry
+    if typecode in ('BINARY', 'DATA'):
+        name = os.path.normcase(name)
+
+    return name
+
+
+class TOC(list):
+    # TODO: simplify the representation and use directly Modulegraph objects.
+    """
+    TOC (Table of Contents) class is a list of tuples of the form (name, path, typecode).
+
+    typecode    name                   path                        description
+    --------------------------------------------------------------------------------------
+    EXTENSION   Python internal name.  Full path name in build.    Extension module.
+    PYSOURCE    Python internal name.  Full path name in build.    Script.
+    PYMODULE    Python internal name.  Full path name in build.    Pure Python module (including __init__ modules).
+    PYZ         Runtime name.          Full path name in build.    A .pyz archive (ZlibArchive data structure).
+    PKG         Runtime name.          Full path name in build.    A .pkg archive (Carchive data structure).
+    BINARY      Runtime name.          Full path name in build.    Shared library.
+    DATA        Runtime name.          Full path name in build.    Arbitrary files.
+    OPTION      The option.            Unused.                     Python runtime option (frozen into executable).
+
+    A TOC contains various types of files. A TOC contains no duplicates and preserves order.
+    PyInstaller uses TOC data type to collect necessary files bundle them into an executable.
+    """
+    def __init__(self, initlist=None):
+        super().__init__()
+        self.filenames = set()
+        if initlist:
+            for entry in initlist:
+                self.append(entry)
+
+    def append(self, entry):
+        if not isinstance(entry, tuple):
+            logger.info("TOC found a %s, not a tuple", entry)
+            raise TypeError("Expected tuple, not %s." % type(entry).__name__)
+
+        unique = unique_name(entry)
+
+        if unique not in self.filenames:
+            self.filenames.add(unique)
+            super().append(entry)
+
+    def insert(self, pos, entry):
+        if not isinstance(entry, tuple):
+            logger.info("TOC found a %s, not a tuple", entry)
+            raise TypeError("Expected tuple, not %s." % type(entry).__name__)
+        unique = unique_name(entry)
+
+        if unique not in self.filenames:
+            self.filenames.add(unique)
+            super().insert(pos, entry)
+
+    def __add__(self, other):
+        result = TOC(self)
+        result.extend(other)
+        return result
+
+    def __radd__(self, other):
+        result = TOC(other)
+        result.extend(self)
+        return result
+
+    def __iadd__(self, other):
+        for entry in other:
+            self.append(entry)
+        return self
+
+    def extend(self, other):
+        # TODO: look if this can be done more efficient with out the loop, e.g. by not using a list as base at all.
+        for entry in other:
+            self.append(entry)
+
+    def __sub__(self, other):
+        # Construct new TOC with entries not contained in the other TOC
+        other = TOC(other)
+        return TOC([entry for entry in self if unique_name(entry) not in other.filenames])
+
+    def __rsub__(self, other):
+        result = TOC(other)
+        return result.__sub__(self)
+
+    def __setitem__(self, key, value):
+        if isinstance(key, slice):
+            if key == slice(None, None, None):
+                # special case: set the entire list
+                self.filenames = set()
+                self.clear()
+                self.extend(value)
+                return
+            else:
+                raise KeyError("TOC.__setitem__ doesn't handle slices")
+
+        else:
+            old_value = self[key]
+            old_name = unique_name(old_value)
+            self.filenames.remove(old_name)
+
+            new_name = unique_name(value)
+            if new_name not in self.filenames:
+                self.filenames.add(new_name)
+                super(TOC, self).__setitem__(key, value)
+
+
+class Target:
+    invcnum = 0
+
+    def __init__(self):
+        from PyInstaller.config import CONF
+
+        # Get a (per class) unique number to avoid conflicts between toc objects
+        self.invcnum = self.__class__.invcnum
+        self.__class__.invcnum += 1
+        self.tocfilename = os.path.join(CONF['workpath'], '%s-%02d.toc' % (self.__class__.__name__, self.invcnum))
+        self.tocbasename = os.path.basename(self.tocfilename)
+        self.dependencies = TOC()
+
+    def __postinit__(self):
+        """
+        Check if the target need to be rebuild and if so, re-assemble.
+
+        `__postinit__` is to be called at the end of `__init__` of every subclass of Target. `__init__` is meant to
+        setup the parameters and `__postinit__` is checking if rebuild is required and in case calls `assemble()`
+        """
+        logger.info("checking %s", self.__class__.__name__)
+        data = None
+        last_build = misc.mtime(self.tocfilename)
+        if last_build == 0:
+            logger.info("Building %s because %s is non existent", self.__class__.__name__, self.tocbasename)
+        else:
+            try:
+                data = misc.load_py_data_struct(self.tocfilename)
+            except Exception:
+                logger.info("Building because %s is bad", self.tocbasename)
+            else:
+                # create a dict for easier access
+                data = dict(zip((g[0] for g in self._GUTS), data))
+        # assemble if previous data was not found or is outdated
+        if not data or self._check_guts(data, last_build):
+            self.assemble()
+            self._save_guts()
+
+    _GUTS = []
+
+    def _check_guts(self, data, last_build):
+        """
+        Returns True if rebuild/assemble is required.
+        """
+        if len(data) != len(self._GUTS):
+            logger.info("Building because %s is bad", self.tocbasename)
+            return True
+        for attr, func in self._GUTS:
+            if func is None:
+                # no check for this value
+                continue
+            if func(attr, data[attr], getattr(self, attr), last_build):
+                return True
+        return False
+
+    def _save_guts(self):
+        """
+        Save the input parameters and the work-product of this run to maybe avoid regenerating it later.
+        """
+        data = tuple(getattr(self, g[0]) for g in self._GUTS)
+        misc.save_py_data_struct(self.tocfilename, data)
+
+
+class Tree(Target, TOC):
+    """
+    This class is a way of creating a TOC (Table of Contents) that describes some or all of the files within a
+    directory.
+    """
+    def __init__(self, root=None, prefix=None, excludes=None, typecode='DATA'):
+        """
+        root
+                The root of the tree (on the build system).
+        prefix
+                Optional prefix to the names of the target system.
+        excludes
+                A list of names to exclude. Two forms are allowed:
+
+                    name
+                        Files with this basename will be excluded (do not include the path).
+                    *.ext
+                        Any file with the given extension will be excluded.
+        typecode
+                The typecode to be used for all files found in this tree. See the TOC class for for information about
+                the typcodes.
+        """
+        Target.__init__(self)
+        TOC.__init__(self)
+        self.root = root
+        self.prefix = prefix
+        self.excludes = excludes
+        self.typecode = typecode
+        if excludes is None:
+            self.excludes = []
+        self.__postinit__()
+
+    _GUTS = (  # input parameters
+        ('root', _check_guts_eq),
+        ('prefix', _check_guts_eq),
+        ('excludes', _check_guts_eq),
+        ('typecode', _check_guts_eq),
+        ('data', None),  # tested below
+        # no calculated/analysed values
+    )
+
+    def _check_guts(self, data, last_build):
+        if Target._check_guts(self, data, last_build):
+            return True
+        # Walk the collected directories as check if they have been changed - which means files have been added or
+        # removed. There is no need to check for the files, since `Tree` is only about the directory contents (which is
+        # the list of files).
+        stack = [data['root']]
+        while stack:
+            d = stack.pop()
+            if misc.mtime(d) > last_build:
+                logger.info("Building %s because directory %s changed", self.tocbasename, d)
+                return True
+            for nm in os.listdir(d):
+                path = os.path.join(d, nm)
+                if os.path.isdir(path):
+                    stack.append(path)
+        self[:] = data['data']  # collected files
+        return False
+
+    def _save_guts(self):
+        # Use the attribute `data` to save the list
+        self.data = self
+        super()._save_guts()
+        del self.data
+
+    def assemble(self):
+        logger.info("Building Tree %s", self.tocbasename)
+        stack = [(self.root, self.prefix)]
+        excludes = set()
+        xexcludes = set()
+        for name in self.excludes:
+            if name.startswith('*'):
+                xexcludes.add(name[1:])
+            else:
+                excludes.add(name)
+        result = []
+        while stack:
+            dir, prefix = stack.pop()
+            for filename in os.listdir(dir):
+                if filename in excludes:
+                    continue
+                ext = os.path.splitext(filename)[1]
+                if ext in xexcludes:
+                    continue
+                fullfilename = os.path.join(dir, filename)
+                if prefix:
+                    resfilename = os.path.join(prefix, filename)
+                else:
+                    resfilename = filename
+                if os.path.isdir(fullfilename):
+                    stack.append((fullfilename, resfilename))
+                else:
+                    result.append((resfilename, fullfilename, self.typecode))
+        self[:] = result

+ 70 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/icon.py

@@ -0,0 +1,70 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+from typing import Tuple
+
+import os
+import hashlib
+
+
+def normalize_icon_type(icon_path: str, allowed_types: Tuple[str], convert_type: str, workpath: str) -> str:
+    """
+    Returns a valid icon path or raises an Exception on error.
+    Ensures that the icon exists, and, if necessary, attempts to convert it to correct OS-specific format using Pillow.
+
+    Takes:
+    icon_path - the icon given by the user
+    allowed_types - a tuple of icon formats that should be allowed through
+        EX: ("ico", "exe")
+    convert_type - the type to attempt conversion too if necessary
+        EX: "icns"
+    workpath - the temp directory to save any newly generated image files
+    """
+
+    # explicitly error if file not found
+    if not os.path.exists(icon_path):
+        raise FileNotFoundError(f"Icon input file {icon_path} not found")
+
+    _, extension = os.path.splitext(icon_path)
+    extension = extension[1:]  # get rid of the "." in ".whatever"
+
+    # if the file is already in the right format, pass it back unchanged
+    if extension in allowed_types:
+        return icon_path
+
+    # The icon type is wrong! Let's try and import PIL
+    try:
+        from PIL import Image as PILImage
+        import PIL
+
+    except ImportError:
+        raise ValueError(
+            f"Received icon image '{icon_path}' which exists but is not in the correct format. On this platform, "
+            f"only {allowed_types} images may be used as icons. If Pillow is installed, automatic conversion will "
+            f"be attempted. Please install Pillow or convert your '{extension}' file to one of {allowed_types} "
+            f"and try again."
+        )
+
+    # Let's try to use PIL to convert the icon file type
+    try:
+        _generated_name = f"generated-{hashlib.sha256(icon_path.encode()).hexdigest()}.{convert_type}"
+        generated_icon = os.path.join(workpath, _generated_name)
+        with PILImage.open(icon_path) as im:
+            im.save(generated_icon)
+        icon_path = generated_icon
+    except PIL.UnidentifiedImageError:
+        raise ValueError(
+            f"Something went wrong converting icon image '{icon_path}' to '.{convert_type}' with Pillow, "
+            f"perhaps the image format is unsupported. Try again with a different file or use a file that can "
+            f"be used without conversion on this platform: {allowed_types}"
+        )
+
+    return icon_path

+ 822 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/makespec.py

@@ -0,0 +1,822 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Automatically build spec files containing a description of the project.
+"""
+
+import argparse
+import os
+import sys
+
+from PyInstaller import DEFAULT_SPECPATH, HOMEPATH
+from PyInstaller import log as logging
+from PyInstaller.building.templates import (
+    bundleexetmplt, bundletmplt, cipher_absent_template, cipher_init_template, onedirtmplt, onefiletmplt, splashtmpl
+)
+from PyInstaller.compat import expand_path, is_darwin, is_win
+
+logger = logging.getLogger(__name__)
+add_command_sep = os.pathsep
+
+# This list gives valid choices for the ``--debug`` command-line option, except for the ``all`` choice.
+DEBUG_ARGUMENT_CHOICES = ['imports', 'bootloader', 'noarchive']
+# This is the ``all`` choice.
+DEBUG_ALL_CHOICE = ['all']
+
+
+def escape_win_filepath(path):
+    # escape all \ with another \ after using normpath to clean up the path
+    return os.path.normpath(path).replace('\\', '\\\\')
+
+
+def make_path_spec_relative(filename, spec_dir):
+    """
+    Make the filename relative to the directory containing .spec file if filename is relative and not absolute.
+    Otherwise keep filename untouched.
+    """
+    if os.path.isabs(filename):
+        return filename
+    else:
+        filename = os.path.abspath(filename)
+        # Make it relative.
+        filename = os.path.relpath(filename, start=spec_dir)
+        return filename
+
+
+# Support for trying to avoid hard-coded paths in the .spec files. Eg, all files rooted in the Installer directory tree
+# will be written using "HOMEPATH", thus allowing this spec file to be used with any Installer installation. Same thing
+# could be done for other paths too.
+path_conversions = ((HOMEPATH, "HOMEPATH"),)
+
+
+def add_data_or_binary(string):
+    try:
+        src, dest = string.split(add_command_sep)
+    except ValueError as e:
+        # Split into SRC and DEST failed, wrong syntax
+        raise argparse.ArgumentError("Wrong syntax, should be SRC{}DEST".format(add_command_sep)) from e
+    if not src or not dest:
+        # Syntax was correct, but one or both of SRC and DEST was not given
+        raise argparse.ArgumentError("You have to specify both SRC and DEST")
+    # Return tuple containing SRC and SRC
+    return src, dest
+
+
+def make_variable_path(filename, conversions=path_conversions):
+    if not os.path.isabs(filename):
+        # os.path.commonpath can not compare relative and absolute paths, and if filename is not absolute, none of the
+        # paths in conversions will match anyway.
+        return None, filename
+    for (from_path, to_name) in conversions:
+        assert os.path.abspath(from_path) == from_path, ("path '%s' should already be absolute" % from_path)
+        try:
+            common_path = os.path.commonpath([filename, from_path])
+        except ValueError:
+            # Per https://docs.python.org/3/library/os.path.html#os.path.commonpath, this raises ValueError in several
+            # cases which prevent computing a common path.
+            common_path = None
+        if common_path == from_path:
+            rest = filename[len(from_path):]
+            if rest.startswith(('\\', '/')):
+                rest = rest[1:]
+            return to_name, rest
+    return None, filename
+
+
+# An object used in place of a "path string", which knows how to repr() itself using variable names instead of
+# hard-coded paths.
+class Path:
+    def __init__(self, *parts):
+        self.path = os.path.join(*parts)
+        self.variable_prefix = self.filename_suffix = None
+
+    def __repr__(self):
+        if self.filename_suffix is None:
+            self.variable_prefix, self.filename_suffix = make_variable_path(self.path)
+        if self.variable_prefix is None:
+            return repr(self.path)
+        return "os.path.join(" + self.variable_prefix + "," + repr(self.filename_suffix) + ")"
+
+
+# An object used to construct extra preamble for the spec file, in order to accommodate extra collect_*() calls from the
+# command-line
+class Preamble:
+    def __init__(
+        self, datas, binaries, hiddenimports, collect_data, collect_binaries, collect_submodules, collect_all,
+        copy_metadata, recursive_copy_metadata
+    ):
+        # Initialize with literal values - will be switched to preamble variable name later, if necessary
+        self.binaries = binaries or []
+        self.hiddenimports = hiddenimports or []
+        self.datas = datas or []
+        # Preamble content
+        self.content = []
+
+        # Import statements
+        if collect_data:
+            self._add_hookutil_import('collect_data_files')
+        if collect_binaries:
+            self._add_hookutil_import('collect_dynamic_libs')
+        if collect_submodules:
+            self._add_hookutil_import('collect_submodules')
+        if collect_all:
+            self._add_hookutil_import('collect_all')
+        if copy_metadata or recursive_copy_metadata:
+            self._add_hookutil_import('copy_metadata')
+        if self.content:
+            self.content += ['']  # empty line to separate the section
+        # Variables
+        if collect_data or copy_metadata or collect_all or recursive_copy_metadata:
+            self._add_var('datas', self.datas)
+            self.datas = 'datas'  # switch to variable
+        if collect_binaries or collect_all:
+            self._add_var('binaries', self.binaries)
+            self.binaries = 'binaries'  # switch to variable
+        if collect_submodules or collect_all:
+            self._add_var('hiddenimports', self.hiddenimports)
+            self.hiddenimports = 'hiddenimports'  # switch to variable
+        # Content - collect_data_files
+        for entry in collect_data:
+            self._add_collect_data(entry)
+        # Content - copy_metadata
+        for entry in copy_metadata:
+            self._add_copy_metadata(entry)
+        # Content - copy_metadata(..., recursive=True)
+        for entry in recursive_copy_metadata:
+            self._add_recursive_copy_metadata(entry)
+        # Content - collect_binaries
+        for entry in collect_binaries:
+            self._add_collect_binaries(entry)
+        # Content - collect_submodules
+        for entry in collect_submodules:
+            self._add_collect_submodules(entry)
+        # Content - collect_all
+        for entry in collect_all:
+            self._add_collect_all(entry)
+        # Merge
+        if self.content and self.content[-1] != '':
+            self.content += ['']  # empty line
+        self.content = '\n'.join(self.content)
+
+    def _add_hookutil_import(self, name):
+        self.content += ['from PyInstaller.utils.hooks import {0}'.format(name)]
+
+    def _add_var(self, name, initial_value):
+        self.content += ['{0} = {1}'.format(name, initial_value)]
+
+    def _add_collect_data(self, name):
+        self.content += ['datas += collect_data_files(\'{0}\')'.format(name)]
+
+    def _add_copy_metadata(self, name):
+        self.content += ['datas += copy_metadata(\'{0}\')'.format(name)]
+
+    def _add_recursive_copy_metadata(self, name):
+        self.content += ['datas += copy_metadata(\'{0}\', recursive=True)'.format(name)]
+
+    def _add_collect_binaries(self, name):
+        self.content += ['binaries += collect_dynamic_libs(\'{0}\')'.format(name)]
+
+    def _add_collect_submodules(self, name):
+        self.content += ['hiddenimports += collect_submodules(\'{0}\')'.format(name)]
+
+    def _add_collect_all(self, name):
+        self.content += [
+            'tmp_ret = collect_all(\'{0}\')'.format(name),
+            'datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2]'
+        ]
+
+
+def __add_options(parser):
+    """
+    Add the `Makespec` options to a option-parser instance or a option group.
+    """
+    g = parser.add_argument_group('What to generate')
+    g.add_argument(
+        "-D",
+        "--onedir",
+        dest="onefile",
+        action="store_false",
+        default=None,
+        help="Create a one-folder bundle containing an executable (default)",
+    )
+    g.add_argument(
+        "-F",
+        "--onefile",
+        dest="onefile",
+        action="store_true",
+        default=None,
+        help="Create a one-file bundled executable.",
+    )
+    g.add_argument(
+        "--specpath",
+        metavar="DIR",
+        help="Folder to store the generated spec file (default: current directory)",
+    )
+    g.add_argument(
+        "-n",
+        "--name",
+        help="Name to assign to the bundled app and spec file (default: first script's basename)",
+    )
+
+    g = parser.add_argument_group('What to bundle, where to search')
+    g.add_argument(
+        '--add-data',
+        action='append',
+        default=[],
+        type=add_data_or_binary,
+        metavar='<SRC;DEST or SRC:DEST>',
+        dest='datas',
+        help='Additional non-binary files or folders to be added to the executable. The path separator  is platform '
+        'specific, ``os.pathsep`` (which is ``;`` on Windows and ``:`` on most unix systems) is used. This option '
+        'can be used multiple times.',
+    )
+    g.add_argument(
+        '--add-binary',
+        action='append',
+        default=[],
+        type=add_data_or_binary,
+        metavar='<SRC;DEST or SRC:DEST>',
+        dest="binaries",
+        help='Additional binary files to be added to the executable. See the ``--add-data`` option for more details. '
+        'This option can be used multiple times.',
+    )
+    g.add_argument(
+        "-p",
+        "--paths",
+        dest="pathex",
+        metavar="DIR",
+        action="append",
+        default=[],
+        help="A path to search for imports (like using PYTHONPATH). Multiple paths are allowed, separated by ``%s``, "
+        "or use this option multiple times. Equivalent to supplying the ``pathex`` argument in the spec file." %
+        repr(os.pathsep),
+    )
+    g.add_argument(
+        '--hidden-import',
+        '--hiddenimport',
+        action='append',
+        default=[],
+        metavar="MODULENAME",
+        dest='hiddenimports',
+        help='Name an import not visible in the code of the script(s). This option can be used multiple times.',
+    )
+    g.add_argument(
+        '--collect-submodules',
+        action="append",
+        default=[],
+        metavar="MODULENAME",
+        dest='collect_submodules',
+        help='Collect all submodules from the specified package or module. This option can be used multiple times.',
+    )
+    g.add_argument(
+        '--collect-data',
+        '--collect-datas',
+        action="append",
+        default=[],
+        metavar="MODULENAME",
+        dest='collect_data',
+        help='Collect all data from the specified package or module. This option can be used multiple times.',
+    )
+    g.add_argument(
+        '--collect-binaries',
+        action="append",
+        default=[],
+        metavar="MODULENAME",
+        dest='collect_binaries',
+        help='Collect all binaries from the specified package or module. This option can be used multiple times.',
+    )
+    g.add_argument(
+        '--collect-all',
+        action="append",
+        default=[],
+        metavar="MODULENAME",
+        dest='collect_all',
+        help='Collect all submodules, data files, and binaries from the specified package or module. This option can '
+        'be used multiple times.',
+    )
+    g.add_argument(
+        '--copy-metadata',
+        action="append",
+        default=[],
+        metavar="PACKAGENAME",
+        dest='copy_metadata',
+        help='Copy metadata for the specified package. This option can be used multiple times.',
+    )
+    g.add_argument(
+        '--recursive-copy-metadata',
+        action="append",
+        default=[],
+        metavar="PACKAGENAME",
+        dest='recursive_copy_metadata',
+        help='Copy metadata for the specified package and all its dependencies. This option can be used multiple '
+        'times.',
+    )
+    g.add_argument(
+        "--additional-hooks-dir",
+        action="append",
+        dest="hookspath",
+        default=[],
+        help="An additional path to search for hooks. This option can be used multiple times.",
+    )
+    g.add_argument(
+        '--runtime-hook',
+        action='append',
+        dest='runtime_hooks',
+        default=[],
+        help='Path to a custom runtime hook file. A runtime hook is code that is bundled with the executable and is '
+        'executed before any other code or module to set up special features of the runtime environment. This option '
+        'can be used multiple times.',
+    )
+    g.add_argument(
+        '--exclude-module',
+        dest='excludes',
+        action='append',
+        default=[],
+        help='Optional module or package (the Python name, not the path name) that will be ignored (as though it was '
+        'not found). This option can be used multiple times.',
+    )
+    g.add_argument(
+        '--key',
+        dest='key',
+        help='The key used to encrypt Python bytecode.',
+    )
+    g.add_argument(
+        '--splash',
+        dest='splash',
+        metavar="IMAGE_FILE",
+        help="(EXPERIMENTAL) Add an splash screen with the image IMAGE_FILE to the application. The splash screen can "
+        "display progress updates while unpacking.",
+    )
+
+    g = parser.add_argument_group('How to generate')
+    g.add_argument(
+        "-d",
+        "--debug",
+        # If this option is not specified, then its default value is an empty list (no debug options selected).
+        default=[],
+        # Note that ``nargs`` is omitted. This produces a single item not stored in a list, as opposed to a list
+        # containing one item, as per `nargs <https://docs.python.org/3/library/argparse.html#nargs>`_.
+        nargs=None,
+        # The options specified must come from this list.
+        choices=DEBUG_ALL_CHOICE + DEBUG_ARGUMENT_CHOICES,
+        # Append choice, rather than storing them (which would overwrite any previous selections).
+        action='append',
+        # Allow newlines in the help text; see the ``_SmartFormatter`` in ``__main__.py``.
+        help=(
+            "R|Provide assistance with debugging a frozen\n"
+            "application. This argument may be provided multiple\n"
+            "times to select several of the following options.\n"
+            "\n"
+            "- all: All three of the following options.\n"
+            "\n"
+            "- imports: specify the -v option to the underlying\n"
+            "  Python interpreter, causing it to print a message\n"
+            "  each time a module is initialized, showing the\n"
+            "  place (filename or built-in module) from which it\n"
+            "  is loaded. See\n"
+            "  https://docs.python.org/3/using/cmdline.html#id4.\n"
+            "\n"
+            "- bootloader: tell the bootloader to issue progress\n"
+            "  messages while initializing and starting the\n"
+            "  bundled app. Used to diagnose problems with\n"
+            "  missing imports.\n"
+            "\n"
+            "- noarchive: instead of storing all frozen Python\n"
+            "  source files as an archive inside the resulting\n"
+            "  executable, store them as files in the resulting\n"
+            "  output directory.\n"
+            "\n"
+        ),
+    )
+    g.add_argument(
+        '--python-option',
+        dest='python_options',
+        metavar='PYTHON_OPTION',
+        action='append',
+        default=[],
+        help='Specify a command-line option to pass to the Python interpreter at runtime. Currently supports '
+        '"v" (equivalent to "--debug imports"), "u", and "W <warning control>".',
+    )
+    g.add_argument(
+        "-s",
+        "--strip",
+        action="store_true",
+        help="Apply a symbol-table strip to the executable and shared libs (not recommended for Windows)",
+    )
+    g.add_argument(
+        "--noupx",
+        action="store_true",
+        default=False,
+        help="Do not use UPX even if it is available (works differently between Windows and *nix)",
+    )
+    g.add_argument(
+        "--upx-exclude",
+        dest="upx_exclude",
+        metavar="FILE",
+        action="append",
+        help="Prevent a binary from being compressed when using upx. This is typically used if upx corrupts certain "
+        "binaries during compression. FILE is the filename of the binary without path. This option can be used "
+        "multiple times.",
+    )
+
+    g = parser.add_argument_group('Windows and Mac OS X specific options')
+    g.add_argument(
+        "-c",
+        "--console",
+        "--nowindowed",
+        dest="console",
+        action="store_true",
+        default=None,
+        help="Open a console window for standard i/o (default). On Windows this option has no effect if the first "
+        "script is a '.pyw' file.",
+    )
+    g.add_argument(
+        "-w",
+        "--windowed",
+        "--noconsole",
+        dest="console",
+        action="store_false",
+        default=None,
+        help="Windows and Mac OS X: do not provide a console window for standard i/o. On Mac OS this also triggers "
+        "building a Mac OS .app bundle. On Windows this option is automatically set if the first script is a '.pyw' "
+        "file. This option is ignored on *NIX systems.",
+    )
+    g.add_argument(
+        "-i",
+        "--icon",
+        dest="icon_file",
+        metavar='<FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">',
+        help="FILE.ico: apply the icon to a Windows executable. FILE.exe,ID: extract the icon with ID from an exe. "
+        "FILE.icns: apply the icon to the .app bundle on Mac OS. If an image file is entered that isn't in the "
+        "platform format (ico on Windows, icns on Mac), PyInstaller tries to use Pillow to translate the icon into "
+        "the correct format (if Pillow is installed). Use \"NONE\" to not apply any icon, thereby making the OS show "
+        "some default (default: apply PyInstaller's icon)",
+    )
+    g.add_argument(
+        "--disable-windowed-traceback",
+        dest="disable_windowed_traceback",
+        action="store_true",
+        default=False,
+        help="Disable traceback dump of unhandled exception in windowed (noconsole) mode (Windows and macOS only), "
+        "and instead display a message that this feature is disabled.",
+    )
+
+    g = parser.add_argument_group('Windows specific options')
+    g.add_argument(
+        "--version-file",
+        dest="version_file",
+        metavar="FILE",
+        help="Add a version resource from FILE to the exe.",
+    )
+    g.add_argument(
+        "-m",
+        "--manifest",
+        metavar="<FILE or XML>",
+        help="Add manifest FILE or XML to the exe.",
+    )
+    g.add_argument(
+        "--no-embed-manifest",
+        dest="embed_manifest",
+        action="store_false",
+        help="Generate an external .exe.manifest file instead of embedding the manifest into the exe. Applicable only "
+        "to onedir mode; in onefile mode, the manifest is always embedded, regardless of this option.",
+    )
+    g.add_argument(
+        "-r",
+        "--resource",
+        dest="resources",
+        metavar="RESOURCE",
+        action="append",
+        default=[],
+        help="Add or update a resource to a Windows executable. The RESOURCE is one to four items, "
+        "FILE[,TYPE[,NAME[,LANGUAGE]]]. FILE can be a data file or an exe/dll. For data files, at least TYPE and NAME "
+        "must be specified. LANGUAGE defaults to 0 or may be specified as wildcard * to update all resources of the "
+        "given TYPE and NAME. For exe/dll files, all resources from FILE will be added/updated to the final executable "
+        "if TYPE, NAME and LANGUAGE are omitted or specified as wildcard *. This option can be used multiple times.",
+    )
+    g.add_argument(
+        '--uac-admin',
+        dest='uac_admin',
+        action="store_true",
+        default=False,
+        help="Using this option creates a Manifest that will request elevation upon application start.",
+    )
+    g.add_argument(
+        '--uac-uiaccess',
+        dest='uac_uiaccess',
+        action="store_true",
+        default=False,
+        help="Using this option allows an elevated application to work with Remote Desktop.",
+    )
+
+    g = parser.add_argument_group('Windows Side-by-side Assembly searching options (advanced)')
+    g.add_argument(
+        "--win-private-assemblies",
+        dest="win_private_assemblies",
+        action="store_true",
+        help="Any Shared Assemblies bundled into the application will be changed into Private Assemblies. This means "
+        "the exact versions of these assemblies will always be used, and any newer versions installed on user machines "
+        "at the system level will be ignored.",
+    )
+    g.add_argument(
+        "--win-no-prefer-redirects",
+        dest="win_no_prefer_redirects",
+        action="store_true",
+        help="While searching for Shared or Private Assemblies to bundle into the application, PyInstaller will "
+        "prefer not to follow policies that redirect to newer versions, and will try to bundle the exact versions of "
+        "the assembly.",
+    )
+
+    g = parser.add_argument_group('Mac OS specific options')
+    g.add_argument(
+        "--argv-emulation",
+        dest="argv_emulation",
+        action="store_true",
+        default=False,
+        help="Enable argv emulation for macOS app bundles. If enabled, the initial open document/URL event is "
+        "processed by the bootloader and the passed file paths or URLs are appended to sys.argv.",
+    )
+
+    g.add_argument(
+        '--osx-bundle-identifier',
+        dest='bundle_identifier',
+        help="Mac OS .app bundle identifier is used as the default unique program name for code signing purposes. "
+        "The usual form is a hierarchical name in reverse DNS notation. For example: com.mycompany.department.appname "
+        "(default: first script's basename)",
+    )
+
+    g.add_argument(
+        '--target-architecture',
+        '--target-arch',
+        dest='target_arch',
+        metavar='ARCH',
+        default=None,
+        help="Target architecture (macOS only; valid values: x86_64, arm64, universal2). Enables switching between "
+        "universal2 and single-arch version of frozen application (provided python installation supports the target "
+        "architecture). If not target architecture is not specified, the current running architecture is targeted.",
+    )
+
+    g.add_argument(
+        '--codesign-identity',
+        dest='codesign_identity',
+        metavar='IDENTITY',
+        default=None,
+        help="Code signing identity (macOS only). Use the provided identity to sign collected binaries and generated "
+        "executable. If signing identity is not provided, ad-hoc signing is performed instead.",
+    )
+
+    g.add_argument(
+        '--osx-entitlements-file',
+        dest='entitlements_file',
+        metavar='FILENAME',
+        default=None,
+        help="Entitlements file to use when code-signing the collected binaries (macOS only).",
+    )
+
+    g = parser.add_argument_group('Rarely used special options')
+    g.add_argument(
+        "--runtime-tmpdir",
+        dest="runtime_tmpdir",
+        metavar="PATH",
+        help="Where to extract libraries and support files in `onefile`-mode. If this option is given, the bootloader "
+        "will ignore any temp-folder location defined by the run-time OS. The ``_MEIxxxxxx``-folder will be created "
+        "here. Please use this option only if you know what you are doing.",
+    )
+    g.add_argument(
+        "--bootloader-ignore-signals",
+        action="store_true",
+        default=False,
+        help="Tell the bootloader to ignore signals rather than forwarding them to the child process. Useful in "
+        "situations where for example a supervisor process signals both the bootloader and the child (e.g., via a "
+        "process group) to avoid signalling the child twice.",
+    )
+
+
+def main(
+    scripts,
+    name=None,
+    onefile=False,
+    console=True,
+    debug=[],
+    python_options=[],
+    strip=False,
+    noupx=False,
+    upx_exclude=None,
+    runtime_tmpdir=None,
+    pathex=[],
+    version_file=None,
+    specpath=None,
+    bootloader_ignore_signals=False,
+    disable_windowed_traceback=False,
+    datas=[],
+    binaries=[],
+    icon_file=None,
+    manifest=None,
+    embed_manifest=True,
+    resources=[],
+    bundle_identifier=None,
+    hiddenimports=[],
+    hookspath=[],
+    key=None,
+    runtime_hooks=[],
+    excludes=[],
+    uac_admin=False,
+    uac_uiaccess=False,
+    win_no_prefer_redirects=False,
+    win_private_assemblies=False,
+    collect_submodules=[],
+    collect_binaries=[],
+    collect_data=[],
+    collect_all=[],
+    copy_metadata=[],
+    splash=None,
+    recursive_copy_metadata=[],
+    target_arch=None,
+    codesign_identity=None,
+    entitlements_file=None,
+    argv_emulation=False,
+    **_kwargs
+):
+    # Default values for onefile and console when not explicitly specified on command-line (indicated by None)
+    if onefile is None:
+        onefile = False
+
+    if console is None:
+        console = True
+
+    # If appname is not specified - use the basename of the main script as name.
+    if name is None:
+        name = os.path.splitext(os.path.basename(scripts[0]))[0]
+
+    # If specpath not specified - use default value - current working directory.
+    if specpath is None:
+        specpath = DEFAULT_SPECPATH
+    else:
+        # Expand tilde to user's home directory.
+        specpath = expand_path(specpath)
+    # If cwd is the root directory of PyInstaller, generate the .spec file in ./appname/ subdirectory.
+    if specpath == HOMEPATH:
+        specpath = os.path.join(HOMEPATH, name)
+    # Create directory tree if missing.
+    if not os.path.exists(specpath):
+        os.makedirs(specpath)
+
+    # Handle additional EXE options.
+    exe_options = ''
+    if version_file:
+        exe_options += "\n    version='%s'," % escape_win_filepath(version_file)
+    if uac_admin:
+        exe_options += "\n    uac_admin=True,"
+    if uac_uiaccess:
+        exe_options += "\n    uac_uiaccess=True,"
+    if icon_file:
+        # Icon file for Windows.
+        # On Windows, the default icon is embedded in the bootloader executable.
+        exe_options += "\n    icon='%s'," % escape_win_filepath(icon_file)
+        # Icon file for Mac OS.
+        # We need to encapsulate it into apostrofes.
+        icon_file = "'%s'" % icon_file
+    else:
+        # On Mac OS, the default icon has to be copied into the .app bundle.
+        # The the text value 'None' means - use default icon.
+        icon_file = 'None'
+
+    if bundle_identifier:
+        # We need to encapsulate it into apostrofes.
+        bundle_identifier = "'%s'" % bundle_identifier
+
+    if manifest:
+        if "<" in manifest:
+            # Assume XML string
+            exe_options += "\n    manifest='%s'," % manifest.replace("'", "\\'")
+        else:
+            # Assume filename
+            exe_options += "\n    manifest='%s'," % escape_win_filepath(manifest)
+    if not embed_manifest:
+        exe_options += "\n    embed_manifest=False,"
+    if resources:
+        resources = list(map(escape_win_filepath, resources))
+        exe_options += "\n    resources=%s," % repr(resources)
+
+    hiddenimports = hiddenimports or []
+    upx_exclude = upx_exclude or []
+
+    # If file extension of the first script is '.pyw', force --windowed option.
+    if is_win and os.path.splitext(scripts[0])[-1] == '.pyw':
+        console = False
+
+    # If script paths are relative, make them relative to the directory containing .spec file.
+    scripts = [make_path_spec_relative(x, specpath) for x in scripts]
+    # With absolute paths replace prefix with variable HOMEPATH.
+    scripts = list(map(Path, scripts))
+
+    if key:
+        # Try to import tinyaes as we need it for bytecode obfuscation.
+        try:
+            import tinyaes  # noqa: F401 (test import)
+        except ImportError:
+            logger.error(
+                'We need tinyaes to use byte-code obfuscation but we could not find it. You can install it '
+                'with pip by running:\n  pip install tinyaes'
+            )
+            sys.exit(1)
+        cipher_init = cipher_init_template % {'key': key}
+    else:
+        cipher_init = cipher_absent_template
+
+    # Translate the default of ``debug=None`` to an empty list.
+    if debug is None:
+        debug = []
+    # Translate the ``all`` option.
+    if DEBUG_ALL_CHOICE[0] in debug:
+        debug = DEBUG_ARGUMENT_CHOICES
+
+    # Create preamble (for collect_*() calls)
+    preamble = Preamble(
+        datas, binaries, hiddenimports, collect_data, collect_binaries, collect_submodules, collect_all, copy_metadata,
+        recursive_copy_metadata
+    )
+
+    if splash:
+        splash_init = splashtmpl % {'splash_image': splash}
+        splash_binaries = "\n    splash.binaries,"
+        splash_target = "\n    splash,"
+    else:
+        splash_init = splash_binaries = splash_target = ""
+
+    # Create OPTIONs array
+    if 'imports' in debug and 'v' not in python_options:
+        python_options.append('v')
+    python_options_array = [(opt, None, 'OPTION') for opt in python_options]
+
+    d = {
+        'scripts': scripts,
+        'pathex': pathex or [],
+        'binaries': preamble.binaries,
+        'datas': preamble.datas,
+        'hiddenimports': preamble.hiddenimports,
+        'preamble': preamble.content,
+        'name': name,
+        'noarchive': 'noarchive' in debug,
+        'options': python_options_array,
+        'debug_bootloader': 'bootloader' in debug,
+        'bootloader_ignore_signals': bootloader_ignore_signals,
+        'strip': strip,
+        'upx': not noupx,
+        'upx_exclude': upx_exclude,
+        'runtime_tmpdir': runtime_tmpdir,
+        'exe_options': exe_options,
+        'cipher_init': cipher_init,
+        # Directory with additional custom import hooks.
+        'hookspath': hookspath,
+        # List with custom runtime hook files.
+        'runtime_hooks': runtime_hooks or [],
+        # List of modules/packages to ignore.
+        'excludes': excludes or [],
+        # only Windows and Mac OS distinguish windowed and console apps
+        'console': console,
+        'disable_windowed_traceback': disable_windowed_traceback,
+        # Icon filename. Only Mac OS uses this item.
+        'icon': icon_file,
+        # .app bundle identifier. Only OSX uses this item.
+        'bundle_identifier': bundle_identifier,
+        # argv emulation (macOS only)
+        'argv_emulation': argv_emulation,
+        # Target architecture (macOS only)
+        'target_arch': target_arch,
+        # Code signing identity (macOS only)
+        'codesign_identity': codesign_identity,
+        # Entitlements file (macOS only)
+        'entitlements_file': entitlements_file,
+        # Windows assembly searching options
+        'win_no_prefer_redirects': win_no_prefer_redirects,
+        'win_private_assemblies': win_private_assemblies,
+        # splash screen
+        'splash_init': splash_init,
+        'splash_target': splash_target,
+        'splash_binaries': splash_binaries,
+    }
+
+    # Write down .spec file to filesystem.
+    specfnm = os.path.join(specpath, name + '.spec')
+    with open(specfnm, 'w', encoding='utf-8') as specfile:
+        if onefile:
+            specfile.write(onefiletmplt % d)
+            # For Mac OS create .app bundle.
+            if is_darwin and not console:
+                specfile.write(bundleexetmplt % d)
+        else:
+            specfile.write(onedirtmplt % d)
+            # For Mac OS create .app bundle.
+            if is_darwin and not console:
+                specfile.write(bundletmplt % d)
+
+    return specfnm

+ 264 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/osx.py

@@ -0,0 +1,264 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+import os
+import plistlib
+import shutil
+
+from PyInstaller.building.api import COLLECT, EXE
+from PyInstaller.building.datastruct import TOC, Target, logger
+from PyInstaller.building.utils import (_check_path_overlap, _rmtree, add_suffix_to_extension, checkCache)
+from PyInstaller.compat import is_darwin
+from PyInstaller.building.icon import normalize_icon_type
+
+if is_darwin:
+    import PyInstaller.utils.osx as osxutils
+
+
+class BUNDLE(Target):
+    def __init__(self, *args, **kws):
+        from PyInstaller.config import CONF
+
+        # BUNDLE only has a sense under Mac OS, it's a noop on other platforms
+        if not is_darwin:
+            return
+
+        # Get a path to a .icns icon for the app bundle.
+        self.icon = kws.get('icon')
+        if not self.icon:
+            # --icon not specified; use the default in the pyinstaller folder
+            self.icon = os.path.join(
+                os.path.dirname(os.path.dirname(__file__)), 'bootloader', 'images', 'icon-windowed.icns'
+            )
+        else:
+            # User gave an --icon=path. If it is relative, make it relative to the spec file location.
+            if not os.path.isabs(self.icon):
+                self.icon = os.path.join(CONF['specpath'], self.icon)
+
+        Target.__init__(self)
+
+        # .app bundle is created in DISTPATH.
+        self.name = kws.get('name', None)
+        base_name = os.path.basename(self.name)
+        self.name = os.path.join(CONF['distpath'], base_name)
+
+        self.appname = os.path.splitext(base_name)[0]
+        self.version = kws.get("version", "0.0.0")
+        self.toc = TOC()
+        self.strip = False
+        self.upx = False
+        self.console = True
+        self.target_arch = None
+        self.codesign_identity = None
+        self.entitlements_file = None
+
+        # .app bundle identifier for Code Signing
+        self.bundle_identifier = kws.get('bundle_identifier')
+        if not self.bundle_identifier:
+            # Fallback to appname.
+            self.bundle_identifier = self.appname
+
+        self.info_plist = kws.get('info_plist', None)
+
+        for arg in args:
+            if isinstance(arg, EXE):
+                self.toc.append((os.path.basename(arg.name), arg.name, arg.typ))
+                self.toc.extend(arg.dependencies)
+                self.strip = arg.strip
+                self.upx = arg.upx
+                self.upx_exclude = arg.upx_exclude
+                self.console = arg.console
+                self.target_arch = arg.target_arch
+                self.codesign_identity = arg.codesign_identity
+                self.entitlements_file = arg.entitlements_file
+            elif isinstance(arg, TOC):
+                self.toc.extend(arg)
+                # TOC doesn't have a strip or upx attribute, so there is no way for us to tell which cache we should
+                # draw from.
+            elif isinstance(arg, COLLECT):
+                self.toc.extend(arg.toc)
+                self.strip = arg.strip_binaries
+                self.upx = arg.upx_binaries
+                self.upx_exclude = arg.upx_exclude
+                self.console = arg.console
+                self.target_arch = arg.target_arch
+                self.codesign_identity = arg.codesign_identity
+                self.entitlements_file = arg.entitlements_file
+            else:
+                logger.info("unsupported entry %s", arg.__class__.__name__)
+        # Now, find values for app filepath (name), app name (appname), and name of the actual executable (exename) from
+        # the first EXECUTABLE item in toc, which might have come from a COLLECT too (not from an EXE).
+        for inm, name, typ in self.toc:
+            if typ == "EXECUTABLE":
+                self.exename = name
+                break
+        self.__postinit__()
+
+    _GUTS = (
+        # BUNDLE always builds, just want the toc to be written out
+        ('toc', None),
+    )
+
+    def _check_guts(self, data, last_build):
+        # BUNDLE always needs to be executed, since it will clean the output directory anyway to make sure there is no
+        # existing cruft accumulating.
+        return 1
+
+    def assemble(self):
+        from PyInstaller.config import CONF
+
+        if _check_path_overlap(self.name) and os.path.isdir(self.name):
+            _rmtree(self.name)
+        logger.info("Building BUNDLE %s", self.tocbasename)
+
+        # Create a minimal Mac bundle structure.
+        os.makedirs(os.path.join(self.name, "Contents", "MacOS"))
+        os.makedirs(os.path.join(self.name, "Contents", "Resources"))
+        os.makedirs(os.path.join(self.name, "Contents", "Frameworks"))
+
+        # Makes sure the icon exists and attempts to convert to the proper format if applicable
+        self.icon = normalize_icon_type(self.icon, ("icns",), "icns", CONF["workpath"])
+
+        # Ensure icon path is absolute
+        self.icon = os.path.abspath(self.icon)
+
+        # Copy icns icon to Resources directory.
+        shutil.copy(self.icon, os.path.join(self.name, 'Contents', 'Resources'))
+
+        # Key/values for a minimal Info.plist file
+        info_plist_dict = {
+            "CFBundleDisplayName": self.appname,
+            "CFBundleName": self.appname,
+
+            # Required by 'codesign' utility.
+            # The value for CFBundleIdentifier is used as the default unique name of your program for Code Signing
+            # purposes. It even identifies the APP for access to restricted OS X areas like Keychain.
+            #
+            # The identifier used for signing must be globally unique. The usual form for this identifier is a
+            # hierarchical name in reverse DNS notation, starting with the toplevel domain, followed by the company
+            # name, followed by the department within the company, and ending with the product name. Usually in the
+            # form: com.mycompany.department.appname
+            # CLI option --osx-bundle-identifier sets this value.
+            "CFBundleIdentifier": self.bundle_identifier,
+            "CFBundleExecutable": os.path.basename(self.exename),
+            "CFBundleIconFile": os.path.basename(self.icon),
+            "CFBundleInfoDictionaryVersion": "6.0",
+            "CFBundlePackageType": "APPL",
+            "CFBundleShortVersionString": self.version,
+        }
+
+        # Set some default values. But they still can be overwritten by the user.
+        if self.console:
+            # Setting EXE console=True implies LSBackgroundOnly=True.
+            info_plist_dict['LSBackgroundOnly'] = True
+        else:
+            # Let's use high resolution by default.
+            info_plist_dict['NSHighResolutionCapable'] = True
+
+        # Merge info_plist settings from spec file
+        if isinstance(self.info_plist, dict) and self.info_plist:
+            info_plist_dict.update(self.info_plist)
+
+        plist_filename = os.path.join(self.name, "Contents", "Info.plist")
+        with open(plist_filename, "wb") as plist_fh:
+            plistlib.dump(info_plist_dict, plist_fh)
+
+        links = []
+        _QT_BASE_PATH = {'PySide2', 'PySide6', 'PyQt5', 'PySide6'}
+        for inm, fnm, typ in self.toc:
+            # Adjust name for extensions, if applicable
+            inm, fnm, typ = add_suffix_to_extension(inm, fnm, typ)
+            # Copy files from cache. This ensures that are used files with relative paths to dynamic library
+            # dependencies (@executable_path)
+            base_path = inm.split('/', 1)[0]
+            if typ in ('EXTENSION', 'BINARY'):
+                fnm = checkCache(
+                    fnm,
+                    strip=self.strip,
+                    upx=self.upx,
+                    upx_exclude=self.upx_exclude,
+                    dist_nm=inm,
+                    target_arch=self.target_arch,
+                    codesign_identity=self.codesign_identity,
+                    entitlements_file=self.entitlements_file,
+                    strict_arch_validation=(typ == 'EXTENSION'),
+                )
+            # Add most data files to a list for symlinking later.
+            if typ == 'DATA' and base_path not in _QT_BASE_PATH:
+                links.append((inm, fnm))
+            else:
+                tofnm = os.path.join(self.name, "Contents", "MacOS", inm)
+                todir = os.path.dirname(tofnm)
+                if not os.path.exists(todir):
+                    os.makedirs(todir)
+                if os.path.isdir(fnm):
+                    # Because shutil.copy2() is the default copy function for shutil.copytree, this will also copy file
+                    # metadata.
+                    shutil.copytree(fnm, tofnm)
+                else:
+                    shutil.copy(fnm, tofnm)
+
+        logger.info('Moving BUNDLE data files to Resource directory')
+
+        # Mac OS Code Signing does not work when .app bundle contains data files in dir ./Contents/MacOS.
+        # Put all data files in ./Resources and create symlinks in ./MacOS.
+        bin_dir = os.path.join(self.name, 'Contents', 'MacOS')
+        res_dir = os.path.join(self.name, 'Contents', 'Resources')
+        for inm, fnm in links:
+            tofnm = os.path.join(res_dir, inm)
+            todir = os.path.dirname(tofnm)
+            if not os.path.exists(todir):
+                os.makedirs(todir)
+            if os.path.isdir(fnm):
+                # Because shutil.copy2() is the default copy function for shutil.copytree, this will also copy file
+                # metadata.
+                shutil.copytree(fnm, tofnm)
+            else:
+                shutil.copy(fnm, tofnm)
+            base_path = os.path.split(inm)[0]
+            if base_path:
+                if not os.path.exists(os.path.join(bin_dir, inm)):
+                    path = ''
+                    for part in iter(base_path.split(os.path.sep)):
+                        # Build path from previous path and the next part of the base path
+                        path = os.path.join(path, part)
+                        try:
+                            relative_source_path = os.path.relpath(
+                                os.path.join(res_dir, path),
+                                os.path.split(os.path.join(bin_dir, path))[0]
+                            )
+                            dest_path = os.path.join(bin_dir, path)
+                            os.symlink(relative_source_path, dest_path)
+                            break
+                        except FileExistsError:
+                            pass
+                    if not os.path.exists(os.path.join(bin_dir, inm)):
+                        relative_source_path = os.path.relpath(
+                            os.path.join(res_dir, inm),
+                            os.path.split(os.path.join(bin_dir, inm))[0]
+                        )
+                        dest_path = os.path.join(bin_dir, inm)
+                        os.symlink(relative_source_path, dest_path)
+            else:  # If path is empty, e.g., a top-level file, try to just symlink the file.
+                os.symlink(
+                    os.path.relpath(os.path.join(res_dir, inm),
+                                    os.path.split(os.path.join(bin_dir, inm))[0]), os.path.join(bin_dir, inm)
+                )
+
+        # Sign the bundle
+        logger.info('Signing the BUNDLE...')
+        try:
+            osxutils.sign_binary(self.name, self.codesign_identity, self.entitlements_file, deep=True)
+        except Exception as e:
+            logger.warning("Error while signing the bundle: %s", e)
+            logger.warning("You will need to sign the bundle manually!")
+
+        logger.info("Building BUNDLE %s completed successfully.", self.tocbasename)

+ 486 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/splash.py

@@ -0,0 +1,486 @@
+# -----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+# -----------------------------------------------------------------------------
+import io
+import os
+import re
+import struct
+
+from PyInstaller import log as logging
+from PyInstaller.archive.writers import SplashWriter
+from PyInstaller.building import splash_templates
+from PyInstaller.building.datastruct import TOC, Target
+from PyInstaller.building.utils import _check_guts_eq, _check_guts_toc, misc
+from PyInstaller.compat import is_darwin, is_win, is_cygwin
+from PyInstaller.utils.hooks import exec_statement
+from PyInstaller.utils.hooks.tcl_tk import (TK_ROOTNAME, collect_tcl_tk_files, find_tcl_tk_shared_libs)
+
+try:
+    from PIL import Image as PILImage
+except ImportError:
+    PILImage = None
+
+logger = logging.getLogger(__name__)
+
+# These requirement files are checked against the current splash screen script. If you wish to modify the splash screen
+# and run into tcl errors/bad behavior, this is a good place to start and add components your implementation of the
+# splash screen might use.
+splash_requirements = [
+    # prepended tcl/tk binaries
+    os.path.join(TK_ROOTNAME, "license.terms"),
+    os.path.join(TK_ROOTNAME, "text.tcl"),
+    os.path.join(TK_ROOTNAME, "tk.tcl"),
+    # Used for customizable font
+    os.path.join(TK_ROOTNAME, "ttk", "ttk.tcl"),
+    os.path.join(TK_ROOTNAME, "ttk", "fonts.tcl"),
+    os.path.join(TK_ROOTNAME, "ttk", "cursors.tcl"),
+    os.path.join(TK_ROOTNAME, "ttk", "utils.tcl"),
+]
+
+
+class Splash(Target):
+    """
+    Bundles the required resources for the splash screen into a file, which will be included in the CArchive.
+
+    A Splash has two outputs, one is itself and one is sored in splash.binaries. Both need to be passed to other
+    build targets in order to enable the splash screen.
+    """
+    typ = 'SPLASH'
+
+    def __init__(self, image_file, binaries, datas, **kwargs):
+        """
+        :param str image_file:
+            A path-like object to the image to be used. Only the PNG file format is supported.
+
+            .. note:: If a different file format is supplied and PIL (Pillow) is installed, the file will be converted
+                automatically.
+
+            .. note:: *Windows*: Due to the implementation, the color Magenta/ RGB(255, 0, 255) must not be used in the
+                image or text.
+
+            .. note:: If PIL (Pillow) is installed and the image is bigger than max_img_size, the image will be resized
+                to fit into the specified area.
+        :param TOC binaries:
+            The TOC of binaries the Analysis build target found. This TOC includes all extensionmodules and their
+            dependencies. This is required to figure out, if the users program uses tkinter.
+        :param TOC datas:
+            The TOC of data the Analysis build target found. This TOC includes all data-file dependencies of the
+            modules. This is required to check if all splash screen requirements can be bundled.
+
+        :keyword text_pos:
+            An optional 2x integer tuple that represents the origin of the text on the splash screen image. The
+            origin of the text is its lower left corner. A unit in the respective coordinate system is a pixel of the
+            image, its origin lies in the top left corner of the image. This parameter also acts like a switch for
+            the text feature. If omitted, no text will be displayed on the splash screen. This text will be used to
+            show textual progress in onefile mode.
+        :type text_pos: Tuple[int, int]
+        :keyword text_size:
+            The desired size of the font. If the size argument is a positive number, it is interpreted as a size in
+            points. If size is a negative number, its absolute value is interpreted as a size in pixels. Default: ``12``
+        :type text_size: int
+        :keyword text_font:
+            An optional name of a font for the text. This font must be installed on the user system, otherwise the
+            system default font is used. If this parameter is omitted, the default font is also used.
+        :keyword text_color:
+            An optional color for the text. Either RGB HTML notation or color names are supported. Default: black
+            (Windows: Due to a implementation issue the color magenta/ rgb(255, 0, 255) is forbidden)
+        :type text_color: str
+        :keyword text_default:
+            The default text which will be displayed before the extraction starts. Default: "Initializing"
+        :type text_default: str
+        :keyword full_tk:
+            By default Splash bundles only the necessary files for the splash screen (some tk components). This
+            options enables adding full tk and making it a requirement, meaning all tk files will be unpacked before
+            the splash screen can be started. This is useful during development of the splash screen script.
+            Default: ``False``
+        :type full_tk: bool
+        :keyword minify_script:
+            The splash screen is created by executing an Tcl/Tk script. This option enables minimizing the script,
+            meaning removing all non essential parts from the script. Default: True
+        :keyword rundir:
+            The folder name in which tcl/tk will be extracted at runtime. There should be no matching folder in your
+            application to avoid conflicts. Default:  ``__splash``
+        :type rundir: str
+        :keyword name:
+            An optional alternative filename for the .res file. If not specified, a name is generated.
+        :type name: str
+        :keyword script_name:
+            An optional alternative filename for the Tcl script, that will be generated. If not specified, a name is
+            generated.
+        :type script_name: str
+        :keyword max_img_size:
+            Maximum size of the splash screen image as a tuple. If the supplied image exceeds this limit, it will be
+            resized to fit the maximum width (to keep the original aspect ratio). This option can be disabled by
+            setting it to None. Default: (760, 480)
+        :type max_img_size: Tuple[int, int]
+        :keyword always_on_top:
+            Force the splashscreen to be always on top of other windows. If disabled, other windows (e.g., from other
+            applications) can cover the splash screen by user bringing them to front. This might be useful for
+            frozen applications with long startup times. Default: True
+        :type always_on_top: bool
+        """
+        from ..config import CONF
+        Target.__init__(self)
+
+        # Splash screen is not supported on macOS. It operates in a secondary thread and macOS disallows UI operations
+        # in any thread other than main.
+        if is_darwin:
+            raise SystemExit("Splash screen is not supported on macOS.")
+
+        # Make image path relative to .spec file
+        if not os.path.isabs(image_file):
+            image_file = os.path.join(CONF['specpath'], image_file)
+        image_file = os.path.normpath(image_file)
+        if not os.path.exists(image_file):
+            raise ValueError("Image file '%s' not found" % image_file)
+
+        # Copy all arguments
+        self.image_file = image_file
+        self.full_tk = kwargs.get("full_tk", False)
+        self.name = kwargs.get("name", None)
+        self.script_name = kwargs.get("script_name", None)
+        self.minify_script = kwargs.get("minify_script", True)
+        self.rundir = kwargs.get("rundir", None)
+        self.max_img_size = kwargs.get("max_img_size", (760, 480))
+
+        # text options
+        self.text_pos = kwargs.get("text_pos", None)
+        self.text_size = kwargs.get("text_size", 12)
+        self.text_font = kwargs.get("text_font", "TkDefaultFont")
+        self.text_color = kwargs.get("text_color", "black")
+        self.text_default = kwargs.get("text_default", "Initializing")
+
+        # always-on-top behavior
+        self.always_on_top = kwargs.get("always_on_top", True)
+
+        # Save the generated file separately so that it is not necessary to generate the data again and again
+        root = os.path.splitext(self.tocfilename)[0]
+        if self.name is None:
+            self.name = root + '.res'
+        if self.script_name is None:
+            self.script_name = root + '_script.tcl'
+
+        if self.rundir is None:
+            self.rundir = self._find_rundir(binaries + datas)
+
+        # Internal variables
+        try:
+            # Do not import _tkinter at the toplevel, because on some systems _tkinter will fail to load, since it is
+            # not installed. This would cause a runtime error in PyInstaller, since this module is imported from
+            # build_main.py, instead we just want to inform the user that the splash screen feature is not supported on
+            # his platform
+            import _tkinter
+            self._tkinter_module = _tkinter
+            self._tkinter_file = self._tkinter_module.__file__
+        except ModuleNotFoundError:
+            raise SystemExit(
+                "You platform does not support the splash screen feature, since tkinter is not installed. Please "
+                "install tkinter and try again."
+            )
+
+        # Calculated / analysed values
+        self.uses_tkinter = self._uses_tkinter(binaries)
+        self.script = self.generate_script()
+        self.tcl_lib, self.tk_lib = find_tcl_tk_shared_libs(self._tkinter_file)
+        if is_darwin:
+            # Outdated Tcl/Tk 8.5 system framework is not supported. Depending on macOS version, the library path will
+            # come up empty (hidden system libraries on Big Sur), or will be
+            # [/System]/Library/Frameworks/Tcl.framework/Tcl
+            if self.tcl_lib[1] is None or 'Library/Frameworks/Tcl.framework' in self.tcl_lib[1]:
+                raise SystemExit("The splash screen feature does not support macOS system framework version of Tcl/Tk.")
+        # Check if tcl/tk was found
+        assert all(self.tcl_lib)
+        assert all(self.tk_lib)
+        logger.debug("Use Tcl Library from %s and Tk From %s" % (self.tcl_lib, self.tk_lib))
+        self.splash_requirements = set([self.tcl_lib[0], self.tk_lib[0]] + splash_requirements)
+
+        logger.info("Collect tcl/tk binaries for the splash screen")
+        tcltk_tree = collect_tcl_tk_files(self._tkinter_file)
+        if self.full_tk:
+            # The user wants a full copy of tk, so make all tk files a requirement.
+            self.splash_requirements.update(toc[0] for toc in tcltk_tree)
+
+        self.binaries = TOC()
+        if not self.uses_tkinter:
+            # The user's script does not use tkinter, so we need to provide a TOC of all necessary files add the shared
+            # libraries to the binaries.
+            self.binaries.append((self.tcl_lib[0], self.tcl_lib[1], 'BINARY'))
+            self.binaries.append((self.tk_lib[0], self.tk_lib[1], 'BINARY'))
+
+            # Only add the intersection of the required and the collected resources, or add all entries if full_tk is
+            # true.
+            self.binaries.extend(toc for toc in tcltk_tree if toc[0] in self.splash_requirements)
+
+        # Handle extra requirements of Tcl/Tk shared libraries (e.g., vcruntime140.dll on Windows - see issue #6284).
+        # These need to be added to splash requirements, so they are extracted into the initial runtime directory in
+        # order to make onefile builds work.
+        #
+        # The really proper way to implement this would be to perform full dependency analysis on self.tcl_lib[0] and
+        # self.tk_lib[0], and ensure that those dependencies are collected and added to splash requirements. This
+        # would, for example, ensure that on Linux, dependent X libraries are collected, just as if the frozen app
+        # itself was using tkinter. On the other hand, collecting all the extra shared libraries on Linux is currently
+        # futile anyway, because the bootloader's parent process would need to set LD_LIBRARY_PATH to the initial
+        # runtime directory to actually have them loaded (and that requires process to be restarted to take effect).
+        #
+        # So for now, we only deal with this on Windows, in a quick'n'dirty work-around way, by assuming that
+        # vcruntime140.dll is already collected as dependency of some other shared library (e.g., the python shared
+        # library).
+        if is_win or is_cygwin:
+            EXTRA_REQUIREMENTS = {'vcruntime140.dll'}
+            self.splash_requirements.update([name for name, *_ in binaries if name.lower() in EXTRA_REQUIREMENTS])
+
+        # Check if all requirements were found.
+        fnames = [toc[0] for toc in (binaries + datas + self.binaries)]
+
+        def _filter(_item):
+            if _item not in fnames:
+                # Item is not bundled, so warn the user about it. This actually may happen on some tkinter installations
+                # that are missing the license.terms file.
+                logger.warning(
+                    "The local Tcl/Tk installation is missing the file %s. The behavior of the splash screen is "
+                    "therefore undefined and may be unsupported." % _item
+                )
+                return False
+            return True
+
+        # Remove all files which were not found.
+        self.splash_requirements = set(filter(_filter, self.splash_requirements))
+
+        # Test if the tcl/tk version is supported by the bootloader.
+        self.test_tk_version()
+
+        logger.debug("Splash Requirements: %s" % self.splash_requirements)
+
+        self.__postinit__()
+
+    _GUTS = (
+        # input parameters
+        ('image_file', _check_guts_eq),
+        ('name', _check_guts_eq),
+        ('script_name', _check_guts_eq),
+        ('text_pos', _check_guts_eq),
+        ('text_size', _check_guts_eq),
+        ('text_font', _check_guts_eq),
+        ('text_color', _check_guts_eq),
+        ('text_default', _check_guts_eq),
+        ('always_on_top', _check_guts_eq),
+        ('full_tk', _check_guts_eq),
+        ('minify_script', _check_guts_eq),
+        ('rundir', _check_guts_eq),
+        ('max_img_size', _check_guts_eq),
+        # calculated/analysed values
+        ('uses_tkinter', _check_guts_eq),
+        ('script', _check_guts_eq),
+        ('tcl_lib', _check_guts_eq),
+        ('tk_lib', _check_guts_eq),
+        ('splash_requirements', _check_guts_eq),
+        ('binaries', _check_guts_toc),
+        # internal value
+        # Check if the tkinter installation changed. This is theoretically possible if someone uses two different python
+        # installations of the same version.
+        ('_tkinter_file', _check_guts_eq),
+    )
+
+    def _check_guts(self, data, last_build):
+        if Target._check_guts(self, data, last_build):
+            return True
+
+        # Check if the image has been modified.
+        if misc.mtime(self.image_file) > last_build:
+            logger.info("Building %s because file %s changed", self.tocbasename, self.image_file)
+            return True
+
+        return False
+
+    def assemble(self):
+        logger.info("Building Splash %s" % self.name)
+
+        # Function to resize a given image to fit into the area defined by max_img_size.
+        def _resize_image(_image, _orig_size):
+            if PILImage:
+                _w, _h = _orig_size
+                _ratio_w = self.max_img_size[0] / _w
+                if _ratio_w < 1:
+                    # Image width exceeds limit
+                    _h = int(_h * _ratio_w)
+                    _w = self.max_img_size[0]
+
+                _ratio_h = self.max_img_size[1] / _h
+                if _ratio_h < 1:
+                    # Image height exceeds limit
+                    _w = int(_w * _ratio_h)
+                    _h = self.max_img_size[1]
+
+                # If a file is given it will be open
+                if isinstance(_image, PILImage.Image):
+                    _img = _image
+                else:
+                    _img = PILImage.open(_image)
+                _img_resized = _img.resize((_w, _h))
+
+                # Save image into a stream
+                _image_stream = io.BytesIO()
+                _img_resized.save(_image_stream, format='PNG')
+                _img.close()
+                _img_resized.close()
+                _image_data = _image_stream.getvalue()
+                logger.info(
+                    "Resized image %s from dimensions %s to (%d, %d)" % (self.image_file, str(_orig_size), _w, _h)
+                )
+                return _image_data
+            else:
+                raise ValueError(
+                    "The splash image dimensions (w: %d, h: %d) exceed max_img_size (w: %d, h:%d), but the image "
+                    "cannot be resized due to missing PIL.Image! Either install the Pillow package, adjust the "
+                    "max_img_size, or use an image of compatible dimensions." %
+                    (_orig_size[0], _orig_size[1], self.max_img_size[0], self.max_img_size[1])
+                )
+
+        # Open image file
+        image_file = open(self.image_file, 'rb')
+
+        # Check header of the file to identify it
+        if image_file.read(8) == b'\x89PNG\r\n\x1a\n':
+            # self.image_file is a PNG file
+            image_file.seek(16)
+            img_size = (struct.unpack("!I", image_file.read(4))[0], struct.unpack("!I", image_file.read(4))[0])
+
+            if img_size > self.max_img_size:
+                # The image exceeds the maximum image size, so resize it
+                image = _resize_image(self.image_file, img_size)
+            else:
+                image = os.path.abspath(self.image_file)
+        elif PILImage:
+            # Pillow is installed, meaning the image can be converted automatically
+            img = PILImage.open(self.image_file, mode='r')
+
+            if img.size > self.max_img_size:
+                image = _resize_image(img, img.size)
+            else:
+                image_data = io.BytesIO()
+                img.save(image_data, format='PNG')
+                img.close()
+                image = image_data.getvalue()
+            logger.info("Converted image %s to PNG format" % self.image_file)
+        else:
+            raise ValueError(
+                "The image %s needs to be converted to a PNG file, but PIL.Image is not available! Either install the "
+                "Pillow package, or use a PNG image for you splash screen." % self.image_file
+            )
+
+        image_file.close()
+
+        SplashWriter(
+            self.name,
+            self.splash_requirements,
+            self.tcl_lib[0],  # tcl86t.dll
+            self.tk_lib[0],  # tk86t.dll
+            TK_ROOTNAME,
+            self.rundir,
+            image,
+            self.script
+        )
+
+    def test_tk_version(self):
+        tcl_version = float(self._tkinter_module.TCL_VERSION)
+        tk_version = float(self._tkinter_module.TK_VERSION)
+
+        # Test if tcl/tk version is supported
+        if tcl_version < 8.6 or tk_version < 8.6:
+            logger.warning(
+                "The installed Tcl/Tk (%s/%s) version might not work with the splash screen feature of the bootloader. "
+                "The bootloader is tested against Tcl/Tk 8.6" %
+                (self._tkinter_module.TCL_VERSION, self._tkinter_module.TK_VERSION)
+            )
+
+        # This should be impossible, since tcl/tk is released together with the same version number, but just in case
+        if tcl_version != tk_version:
+            logger.warning(
+                "The installed version of Tcl (%s) and Tk (%s) do not match. PyInstaller is tested against matching "
+                "versions" % (self._tkinter_module.TCL_VERSION, self._tkinter_module.TK_VERSION)
+            )
+
+        # Test if tcl is threaded.
+        # If the variable tcl_platform(threaded) exist, the tcl interpreter was compiled with thread support.
+        threaded = bool(exec_statement(
+            """
+            from tkinter import Tcl, TclError
+            try:
+                print(Tcl().getvar('tcl_platform(threaded)'))
+            except TclError:
+                pass
+            """
+        ))  # yapf: disable
+
+        if not threaded:
+            # This is a feature breaking problem, so exit.
+            raise SystemExit(
+                "The installed tcl version is not threaded. PyInstaller only supports the splash screen "
+                "using threaded tcl."
+            )
+
+    def generate_script(self):
+        """
+        Generate the script for the splash screen.
+
+        If minify_script is True, all unnecessary parts will be removed.
+        """
+        d = {}
+        if self.text_pos is not None:
+            logger.debug("Add text support to splash screen")
+            d.update({
+                'pad_x': self.text_pos[0],
+                'pad_y': self.text_pos[1],
+                'color': self.text_color,
+                'font': self.text_font,
+                'font_size': self.text_size,
+                'default_text': self.text_default,
+            })
+        script = splash_templates.build_script(text_options=d, always_on_top=self.always_on_top)
+
+        if self.minify_script:
+            # Remove any documentation, empty lines and unnecessary spaces
+            script = '\n'.join(
+                line for line in map(lambda l: l.strip(), script.splitlines())
+                if not line.startswith('#')  # documentation
+                and line  # empty lines
+            )
+            # Remove unnecessary spaces
+            script = re.sub(' +', ' ', script)
+
+        # Write script to disk, so that it is transparent to the user what script is executed.
+        with open(self.script_name, "w") as script_file:
+            script_file.write(script)
+        return script
+
+    @staticmethod
+    def _uses_tkinter(binaries):
+        # Test for _tkinter instead of tkinter, because a user might use a different wrapping library for tk.
+        return '_tkinter' in binaries.filenames
+
+    @staticmethod
+    def _find_rundir(structure):
+        # First try a name the user could understand, if one would find the directory.
+        rundir = '__splash%s'
+        candidate = rundir % ""
+        counter = 0
+
+        # Run this loop as long as a folder exist named like rundir. In most cases __splash will be sufficient and this
+        # loop won't enter.
+        while any(e[0].startswith(candidate + os.sep) for e in structure):
+            # just append to rundir a counter
+            candidate = rundir % str(counter)
+            counter += 1
+
+            # The SPLASH_DATA_HEADER structure limits the name to be 16 bytes at maximum. So if we exceed the limit
+            # raise an error. This will never happen, since there are 10^8 different possibilities, but just in case.
+            assert len(candidate) <= 16
+
+        return candidate

+ 229 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/splash_templates.py

@@ -0,0 +1,229 @@
+# -----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+# -----------------------------------------------------------------------------
+"""
+Templates for the splash screen tcl script.
+"""
+from PyInstaller.compat import is_cygwin, is_darwin, is_win
+
+ipc_script = r"""
+proc _ipc_server {channel clientaddr clientport} {
+    # This function is called if a new client connects to
+    # the server. This creates a channel, which calls
+    # _ipc_caller if data was send through the connection
+    set client_name [format <%s:%d> $clientaddr $clientport]
+
+    chan configure $channel \
+        -buffering none \
+        -encoding utf-8 \
+        -eofchar \x04 \
+        -translation cr
+    chan event $channel readable [list _ipc_caller $channel $client_name]
+}
+
+proc _ipc_caller {channel client_name} {
+    # This function is called if a command was sent through
+    # the tcp connection. The current implementation supports
+    # two commands: update_text and exit, although exit
+    # is implemented to be called if the connection gets
+    # closed (from python) or the character 0x04 was received
+    chan gets $channel cmd
+
+    if {[chan eof $channel]} {
+        # This is entered if either the connection was closed
+        # or the char 0x04 was send
+        chan close $channel
+        exit
+
+    } elseif {![chan blocked $channel]} {
+        # RPC methods
+
+        # update_text command
+        if {[string match "update_text*" $cmd]} {
+            global status_text
+            set first [expr {[string first "(" $cmd] + 1}]
+            set last [expr {[string last ")" $cmd] - 1}]
+
+            set status_text [string range $cmd $first $last]
+        }
+        # Implement other procedures here
+    }
+}
+
+# By setting the port to 0 the os will assign a free port
+set server_socket [socket -server _ipc_server -myaddr localhost 0]
+set server_port [fconfigure $server_socket -sockname]
+
+# This environment variable is shared between the python and the tcl
+# interpreter and publishes the port the tcp server socket is available
+set env(_PYIBoot_SPLASH) [lindex $server_port 2]
+"""
+
+image_script = r"""
+# The variable $_image_data, which holds the data for the splash
+# image is created by the bootloader.
+image create photo splash_image
+splash_image put $_image_data
+# delete the variable, because the image now holds the data
+unset _image_data
+
+proc canvas_text_update {canvas tag _var - -}  {
+    # This function is rigged to be called if the a variable
+    # status_text gets changed. This updates the text on
+    # the canvas
+    upvar $_var var
+    $canvas itemconfigure $tag -text $var
+}
+"""
+
+splash_canvas_setup = r"""
+package require Tk
+
+set image_width [image width splash_image]
+set image_height [image height splash_image]
+set display_width [winfo screenwidth .]
+set display_height [winfo screenheight .]
+
+set x_position [expr {int(0.5*($display_width - $image_width))}]
+set y_position [expr {int(0.5*($display_height - $image_height))}]
+
+# Toplevel frame in which all widgets should be positioned
+frame .root
+
+# Configure the canvas on which the splash
+# screen will be drawn
+canvas .root.canvas \
+    -width $image_width \
+    -height $image_height \
+    -borderwidth 0 \
+    -highlightthickness 0
+
+# Draw the image into the canvas, filling it.
+.root.canvas create image \
+    [expr {$image_width / 2}] \
+    [expr {$image_height / 2}] \
+    -image splash_image
+"""
+
+splash_canvas_text = r"""
+# Create a text on the canvas, which tracks the local
+# variable status_text. status_text is changed via C to
+# update the progress on the splash screen.
+# We cannot use the default label, because it has a
+# default background, which cannot be turned transparent
+.root.canvas create text \
+        %(pad_x)d \
+        %(pad_y)d \
+        -fill %(color)s \
+        -justify center \
+        -font myFont \
+        -tag vartext \
+        -anchor sw
+trace variable status_text w \
+    [list canvas_text_update .root.canvas vartext]
+set status_text "%(default_text)s"
+"""
+
+splash_canvas_default_font = r"""
+font create myFont {*}[font actual TkDefaultFont]
+font configure myFont -size %(font_size)d
+"""
+
+splash_canvas_custom_font = r"""
+font create myFont -family %(font)s -size %(font_size)d
+"""
+
+if is_win or is_cygwin:
+    transparent_setup = r"""
+# If the image is transparent, the background will be filled
+# with magenta. The magenta background is later replaced with transparency.
+# Here is the limitation of this implementation, that only
+# sharp transparent image corners are possible
+wm attributes . -transparentcolor magenta
+.root.canvas configure -background magenta
+"""
+
+elif is_darwin:
+    # This is untested, but should work following: https://stackoverflow.com/a/44296157/5869139
+    transparent_setup = r"""
+wm attributes . -transparent 1
+. configure -background systemTransparent
+.root.canvas configure -background systemTransparent
+"""
+
+else:
+    # For Linux there is no common way to create a transparent window
+    transparent_setup = r""
+
+pack_widgets = r"""
+# Position all widgets in the window
+pack .root
+grid .root.canvas   -column 0 -row 0 -columnspan 1 -rowspan 2
+"""
+
+# Enable always-on-top behavior, by setting overrideredirect and the topmost attribute.
+position_window_on_top = r"""
+# Set position and mode of the window - always-on-top behavior
+wm overrideredirect . 1
+wm geometry         . +${x_position}+${y_position}
+wm attributes       . -topmost 1
+"""
+
+# Disable always-on-top behavior
+if is_win or is_cygwin or is_darwin:
+    # On Windows, we disable the always-on-top behavior while still setting overrideredirect
+    # (to disable window decorations), but set topmost attribute to 0.
+    position_window = r"""
+# Set position and mode of the window
+wm overrideredirect . 1
+wm geometry         . +${x_position}+${y_position}
+wm attributes       . -topmost 0
+"""
+else:
+    # On Linux, we must not use overrideredirect; instead, we set X11-specific type attribute to splash,
+    # which lets the window manager to properly handle the splash screen (without window decorations
+    # but allowing other windows to be brought to front).
+    position_window = r"""
+# Set position and mode of the window
+wm geometry         . +${x_position}+${y_position}
+wm attributes       . -type splash
+"""
+
+raise_window = r"""
+raise .
+"""
+
+
+def build_script(text_options=None, always_on_top=False):
+    """
+    This function builds the tcl script for the splash screen.
+    """
+    # Order is important!
+    script = [
+        ipc_script,
+        image_script,
+        splash_canvas_setup,
+    ]
+
+    if text_options:
+        # If the default font is used we need a different syntax
+        if text_options['font'] == "TkDefaultFont":
+            script.append(splash_canvas_default_font % text_options)
+        else:
+            script.append(splash_canvas_custom_font % text_options)
+        script.append(splash_canvas_text % text_options)
+
+    script.append(transparent_setup)
+
+    script.append(pack_widgets)
+    script.append(position_window_on_top if always_on_top else position_window)
+    script.append(raise_window)
+
+    return '\n'.join(script)

+ 142 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/templates.py

@@ -0,0 +1,142 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Templates to generate .spec files.
+"""
+
+onefiletmplt = """# -*- mode: python ; coding: utf-8 -*-
+%(preamble)s
+%(cipher_init)s
+
+a = Analysis(
+    %(scripts)s,
+    pathex=%(pathex)s,
+    binaries=%(binaries)s,
+    datas=%(datas)s,
+    hiddenimports=%(hiddenimports)s,
+    hookspath=%(hookspath)r,
+    hooksconfig={},
+    runtime_hooks=%(runtime_hooks)r,
+    excludes=%(excludes)s,
+    win_no_prefer_redirects=%(win_no_prefer_redirects)s,
+    win_private_assemblies=%(win_private_assemblies)s,
+    cipher=block_cipher,
+    noarchive=%(noarchive)s,
+)
+pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
+%(splash_init)s
+exe = EXE(
+    pyz,
+    a.scripts,
+    a.binaries,
+    a.zipfiles,
+    a.datas,%(splash_target)s%(splash_binaries)s
+    %(options)s,
+    name='%(name)s',
+    debug=%(debug_bootloader)s,
+    bootloader_ignore_signals=%(bootloader_ignore_signals)s,
+    strip=%(strip)s,
+    upx=%(upx)s,
+    upx_exclude=%(upx_exclude)s,
+    runtime_tmpdir=%(runtime_tmpdir)r,
+    console=%(console)s,
+    disable_windowed_traceback=%(disable_windowed_traceback)s,
+    argv_emulation=%(argv_emulation)r,
+    target_arch=%(target_arch)r,
+    codesign_identity=%(codesign_identity)r,
+    entitlements_file=%(entitlements_file)r,%(exe_options)s
+)
+"""
+
+onedirtmplt = """# -*- mode: python ; coding: utf-8 -*-
+%(preamble)s
+%(cipher_init)s
+
+a = Analysis(
+    %(scripts)s,
+    pathex=%(pathex)s,
+    binaries=%(binaries)s,
+    datas=%(datas)s,
+    hiddenimports=%(hiddenimports)s,
+    hookspath=%(hookspath)r,
+    hooksconfig={},
+    runtime_hooks=%(runtime_hooks)r,
+    excludes=%(excludes)s,
+    win_no_prefer_redirects=%(win_no_prefer_redirects)s,
+    win_private_assemblies=%(win_private_assemblies)s,
+    cipher=block_cipher,
+    noarchive=%(noarchive)s,
+)
+pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
+%(splash_init)s
+exe = EXE(
+    pyz,
+    a.scripts,%(splash_target)s
+    %(options)s,
+    exclude_binaries=True,
+    name='%(name)s',
+    debug=%(debug_bootloader)s,
+    bootloader_ignore_signals=%(bootloader_ignore_signals)s,
+    strip=%(strip)s,
+    upx=%(upx)s,
+    console=%(console)s,
+    disable_windowed_traceback=%(disable_windowed_traceback)s,
+    argv_emulation=%(argv_emulation)r,
+    target_arch=%(target_arch)r,
+    codesign_identity=%(codesign_identity)r,
+    entitlements_file=%(entitlements_file)r,%(exe_options)s
+)
+coll = COLLECT(
+    exe,
+    a.binaries,
+    a.zipfiles,
+    a.datas,%(splash_binaries)s
+    strip=%(strip)s,
+    upx=%(upx)s,
+    upx_exclude=%(upx_exclude)s,
+    name='%(name)s',
+)
+"""
+
+cipher_absent_template = """
+block_cipher = None
+"""
+
+cipher_init_template = """
+block_cipher = pyi_crypto.PyiBlockCipher(key=%(key)r)
+"""
+
+bundleexetmplt = """app = BUNDLE(
+    exe,
+    name='%(name)s.app',
+    icon=%(icon)s,
+    bundle_identifier=%(bundle_identifier)s,
+)
+"""
+
+bundletmplt = """app = BUNDLE(
+    coll,
+    name='%(name)s.app',
+    icon=%(icon)s,
+    bundle_identifier=%(bundle_identifier)s,
+)
+"""
+
+splashtmpl = """splash = Splash(
+    %(splash_image)r,
+    binaries=a.binaries,
+    datas=a.datas,
+    text_pos=None,
+    text_size=12,
+    minify_script=True,
+    always_on_top=True,
+)
+"""

+ 165 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/toc_conversion.py

@@ -0,0 +1,165 @@
+# -----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+# -----------------------------------------------------------------------------
+
+import os
+import zipfile
+
+import pkg_resources
+
+from PyInstaller import log as logging
+from PyInstaller.building.datastruct import TOC, Tree
+from PyInstaller.compat import ALL_SUFFIXES
+from PyInstaller.depend.utils import get_path_to_egg
+
+logger = logging.getLogger(__name__)
+
+# create a list of excludes suitable for Tree.
+PY_IGNORE_EXTENSIONS = {
+    *('*' + x for x in ALL_SUFFIXES),
+    # Exclude EGG-INFO, too, as long as we do not have a way to hold several in one archive.
+    'EGG-INFO',
+}
+
+
+class DependencyProcessor:
+    """
+    Class to convert final module dependency graph into TOC data structures.
+    TOC data structures are suitable for creating the final executable.
+    """
+    def __init__(self, graph, additional_files):
+        self._binaries = set()
+        self._datas = set()
+        self._distributions = set()
+        self.__seen_distribution_paths = set()
+        # Include files that were found by hooks. graph.iter_graph() should include only those modules that are
+        # reachable from the top-level script.
+        for node in graph.iter_graph(start=graph._top_script_node):
+            # Update 'binaries', 'datas'
+            name = node.identifier
+            if name in additional_files:
+                self._binaries.update(additional_files.binaries(name))
+                self._datas.update(additional_files.datas(name))
+            # Any module can belong to a single distribution
+            self._distributions.update(self._get_distribution_for_node(node))
+
+    def _get_distribution_for_node(self, node):
+        """
+        Get the distribution a module belongs to.
+
+        Bug: This currently only handles packages in eggs.
+        """
+        # TODO: Modulegraph could flag a module as residing in a zip file
+        # TODO add support for single modules in eggs (e.g. mock-1.0.1)
+        # TODO add support for egg-info:
+        # TODO add support for wheels (dist-info)
+        #
+        # TODO add support for unpacked eggs and for new .whl packages.
+        # Wheels:
+        #  .../site-packages/pip/  # It seams this has to be a package
+        #  .../site-packages/pip-6.1.1.dist-info
+        # Unzipped Eggs:
+        #  .../site-packages/mock.py   # this may be a single module, too!
+        #  .../site-packages/mock-1.0.1-py2.7.egg-info
+        # Unzipped Eggs (I assume: multiple-versions externally managed):
+        #  .../site-packages/pyPdf-1.13-py2.6.egg/pyPdf/
+        #  .../site-packages/pyPdf-1.13-py2.6.egg/EGG_INFO
+        # Zipped Egg:
+        #  .../site-packages/zipped.egg/zipped_egg/
+        #  .../site-packages/zipped.egg/EGG_INFO
+        modpath = node.filename
+        if not modpath:
+            # e.g. namespace-package
+            return []
+        # TODO: add other ways to get a distribution path
+        distpath = get_path_to_egg(modpath)
+        if not distpath or distpath in self.__seen_distribution_paths:
+            # no egg or already handled
+            return []
+        self.__seen_distribution_paths.add(distpath)
+        dists = list(pkg_resources.find_distributions(distpath))
+        assert len(dists) == 1
+        dist = dists[0]
+        dist._pyinstaller_info = {
+            'zipped': zipfile.is_zipfile(dist.location),
+            'egg': True,  # TODO when supporting other types
+            'zip-safe': dist.has_metadata('zip-safe'),
+        }
+        return dists
+
+    # Public methods.
+
+    def make_binaries_toc(self):
+        # TODO create a real TOC when handling of more files is added.
+        return [(x, y, 'BINARY') for x, y in self._binaries]
+
+    def make_datas_toc(self):
+        toc = TOC((x, y, 'DATA') for x, y in self._datas)
+        for dist in self._distributions:
+            if (
+                dist._pyinstaller_info['egg'] and not dist._pyinstaller_info['zipped']
+                and not dist._pyinstaller_info['zip-safe']
+            ):
+                # this is a un-zipped, not-zip-safe egg
+                toplevel = dist.get_metadata('top_level.txt').strip()
+                basedir = dist.location
+                if toplevel:
+                    os.path.join(basedir, toplevel)
+                tree = Tree(dist.location, excludes=PY_IGNORE_EXTENSIONS)
+                toc.extend(tree)
+        return toc
+
+    def make_zipfiles_toc(self):
+        # TODO create a real TOC when handling of more files is added.
+        toc = []
+        for dist in self._distributions:
+            if dist._pyinstaller_info['zipped'] and not dist._pyinstaller_info['egg']:
+                # Hmm, this should never happen as normal zip-files are not associated with a distribution, are they?
+                toc.append(("eggs/" + os.path.basename(dist.location), dist.location, 'ZIPFILE'))
+        return toc
+
+    @staticmethod
+    def __collect_data_files_from_zip(zipfilename):
+        # 'PyInstaller.config' cannot be imported as other top-level modules.
+        from PyInstaller.config import CONF
+        workpath = os.path.join(CONF['workpath'], os.path.basename(zipfilename))
+        try:
+            os.makedirs(workpath)
+        except OSError as e:
+            import errno
+            if e.errno != errno.EEXIST:
+                raise
+        # TODO: extract only those file which would then be included
+        with zipfile.ZipFile(zipfilename) as zfh:
+            zfh.extractall(workpath)
+        return Tree(workpath, excludes=PY_IGNORE_EXTENSIONS)
+
+    def make_zipped_data_toc(self):
+        toc = TOC()
+        logger.debug('Looking for egg data files...')
+        for dist in self._distributions:
+            if dist._pyinstaller_info['egg']:
+                # TODO: check in docs if top_level.txt always exists
+                toplevel = dist.get_metadata('top_level.txt').strip()
+                if dist._pyinstaller_info['zipped']:
+                    # this is a zipped egg
+                    tree = self.__collect_data_files_from_zip(dist.location)
+                    toc.extend(tree)
+                elif dist._pyinstaller_info['zip-safe']:
+                    # this is an un-zipped, zip-safe egg
+                    basedir = dist.location
+                    if toplevel:
+                        os.path.join(basedir, toplevel)
+                    tree = Tree(dist.location, excludes=PY_IGNORE_EXTENSIONS)
+                    toc.extend(tree)
+                else:
+                    # this is an un-zipped, not-zip-safe egg, handled in make_datas_toc()
+                    pass
+        return toc

+ 698 - 0
ffmpegpy/Lib/site-packages/PyInstaller/building/utils.py

@@ -0,0 +1,698 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+# --- functions for checking guts ---
+# NOTE: by GUTS it is meant intermediate files and data structures that PyInstaller creates for bundling files and
+# creating final executable.
+import fnmatch
+import glob
+import hashlib
+import os
+import pathlib
+import platform
+import shutil
+import struct
+import subprocess
+import sys
+
+from PyInstaller import compat
+from PyInstaller import log as logging
+from PyInstaller.compat import (EXTENSION_SUFFIXES, is_cygwin, is_darwin, is_win)
+from PyInstaller.config import CONF
+from PyInstaller.depend import dylib
+from PyInstaller.depend.bindepend import match_binding_redirect
+from PyInstaller.utils import misc
+
+if is_win or is_cygwin:
+    from PyInstaller.utils.win32 import versioninfo, winmanifest, winresource
+
+if is_darwin:
+    import PyInstaller.utils.osx as osxutils
+
+logger = logging.getLogger(__name__)
+
+# -- Helpers for checking guts.
+#
+# NOTE: by _GUTS it is meant intermediate files and data structures that PyInstaller creates for bundling files and
+# creating final executable.
+
+
+def _check_guts_eq(attr, old, new, _last_build):
+    """
+    Rebuild is required if values differ.
+    """
+    if old != new:
+        logger.info("Building because %s changed", attr)
+        return True
+    return False
+
+
+def _check_guts_toc_mtime(_attr, old, _toc, last_build, pyc=0):
+    """
+    Rebuild is required if mtimes of files listed in old toc are newer than last_build.
+
+    If pyc=1, check for .py files as well.
+
+    Use this for calculated/analysed values read from cache.
+    """
+    for nm, fnm, typ in old:
+        if misc.mtime(fnm) > last_build:
+            logger.info("Building because %s changed", fnm)
+            return True
+        elif pyc and misc.mtime(fnm[:-1]) > last_build:
+            logger.info("Building because %s changed", fnm[:-1])
+            return True
+    return False
+
+
+def _check_guts_toc(attr, old, toc, last_build, pyc=0):
+    """
+    Rebuild is required if either toc content changed or mtimes of files listed in old toc are newer than last_build.
+
+    If pyc=1, check for .py files as well.
+
+    Use this for input parameters.
+    """
+    return _check_guts_eq(attr, old, toc, last_build) or _check_guts_toc_mtime(attr, old, toc, last_build, pyc=pyc)
+
+
+def add_suffix_to_extension(inm, fnm, typ):
+    """
+    Take a TOC entry (inm, fnm, typ) and adjust the inm for EXTENSION or DEPENDENCY to include the full library suffix.
+    """
+    if typ == 'EXTENSION':
+        if fnm.endswith(inm):
+            # If inm completely fits into end of the fnm, it has already been processed.
+            return inm, fnm, typ
+        # Change the dotted name into a relative path. This places C extensions in the Python-standard location.
+        inm = inm.replace('.', os.sep)
+        # In some rare cases extension might already contain a suffix. Skip it in this case.
+        if os.path.splitext(inm)[1] not in EXTENSION_SUFFIXES:
+            # Determine the base name of the file.
+            base_name = os.path.basename(inm)
+            assert '.' not in base_name
+            # Use this file's existing extension. For extensions such as ``libzmq.cp36-win_amd64.pyd``, we cannot use
+            # ``os.path.splitext``, which would give only the ```.pyd`` part of the extension.
+            inm = inm + os.path.basename(fnm)[len(base_name):]
+
+    elif typ == 'DEPENDENCY':
+        # Use the suffix from the filename.
+        # TODO: verify what extensions are by DEPENDENCIES.
+        binext = os.path.splitext(fnm)[1]
+        if not os.path.splitext(inm)[1] == binext:
+            inm = inm + binext
+
+    return inm, fnm, typ
+
+
+def applyRedirects(manifest, redirects):
+    """
+    Apply the binding redirects specified by 'redirects' to the dependent assemblies of 'manifest'.
+
+    :param manifest:
+    :type manifest:
+    :param redirects:
+    :type redirects:
+    :return:
+    :rtype:
+    """
+    redirecting = False
+    for binding in redirects:
+        for dep in manifest.dependentAssemblies:
+            if match_binding_redirect(dep, binding):
+                logger.info("Redirecting %s version %s -> %s", binding.name, dep.version, binding.newVersion)
+                dep.version = binding.newVersion
+                redirecting = True
+    return redirecting
+
+
+def checkCache(
+    fnm,
+    strip=False,
+    upx=False,
+    upx_exclude=None,
+    dist_nm=None,
+    target_arch=None,
+    codesign_identity=None,
+    entitlements_file=None,
+    strict_arch_validation=False
+):
+    """
+    Cache prevents preprocessing binary files again and again.
+
+    'dist_nm'  Filename relative to dist directory. We need it on Mac to determine level of paths for @loader_path like
+               '@loader_path/../../' for qt4 plugins.
+    """
+    from PyInstaller.config import CONF
+
+    # On Mac OS, a cache is required anyway to keep the libraries with relative install names.
+    # Caching on Mac OS does not work since we need to modify binary headers to use relative paths to dll dependencies
+    # and starting with '@loader_path'.
+    if not strip and not upx and not is_darwin and not is_win:
+        return fnm
+
+    if dist_nm is not None and ":" in dist_nm:
+        # A file embedded in another PyInstaller build via multipackage.
+        # No actual file exists to process.
+        return fnm
+
+    if strip:
+        strip = True
+    else:
+        strip = False
+
+    # Disable UPX on non-Windows. Using UPX (3.96) on modern Linux shared libraries (for example, the python3.x.so
+    # shared library) seems to result in segmentation fault when they are dlopen'd. This happens in recent versions
+    # of Fedora and Ubuntu linux, as well as in Alpine containers. On Mac OS, UPX (3.96) fails with
+    # UnknownExecutableFormatException on most .dylibs (and interferes with code signature on other occasions). And
+    # even when it would succeed, compressed libraries cannot be (re)signed due to failed strict validation.
+    upx = upx and (is_win or is_cygwin)
+
+    # Match against provided UPX exclude patterns.
+    upx_exclude = upx_exclude or []
+    if upx:
+        fnm_path = pathlib.PurePath(fnm)
+        for upx_exclude_entry in upx_exclude:
+            # pathlib.PurePath.match() matches from right to left, and supports * wildcard, but does not support the
+            # "**" syntax for directory recursion. Case sensitivity follows the OS default.
+            if fnm_path.match(upx_exclude_entry):
+                logger.info("Disabling UPX for %s due to match in exclude pattern: %s", fnm, upx_exclude_entry)
+                upx = False
+                break
+
+    # Load cache index.
+    # Make cachedir per Python major/minor version.
+    # This allows parallel building of executables with different Python versions as one user.
+    pyver = 'py%d%s' % (sys.version_info[0], sys.version_info[1])
+    arch = platform.architecture()[0]
+    cachedir = os.path.join(CONF['cachedir'], 'bincache%d%d_%s_%s' % (strip, upx, pyver, arch))
+    if target_arch:
+        cachedir = os.path.join(cachedir, target_arch)
+    if is_darwin:
+        # Separate by codesign identity
+        if codesign_identity:
+            # Compute hex digest of codesign identity string to prevent issues with invalid characters.
+            csi_hash = hashlib.sha256(codesign_identity.encode('utf-8'))
+            cachedir = os.path.join(cachedir, csi_hash.hexdigest())
+        else:
+            cachedir = os.path.join(cachedir, 'adhoc')  # ad-hoc signing
+        # Separate by entitlements
+        if entitlements_file:
+            # Compute hex digest of entitlements file contents
+            with open(entitlements_file, 'rb') as fp:
+                ef_hash = hashlib.sha256(fp.read())
+            cachedir = os.path.join(cachedir, ef_hash.hexdigest())
+        else:
+            cachedir = os.path.join(cachedir, 'no-entitlements')
+    if not os.path.exists(cachedir):
+        os.makedirs(cachedir)
+    cacheindexfn = os.path.join(cachedir, "index.dat")
+    if os.path.exists(cacheindexfn):
+        try:
+            cache_index = misc.load_py_data_struct(cacheindexfn)
+        except Exception:
+            # Tell the user they may want to fix their cache... However, do not delete it for them; if it keeps getting
+            # corrupted, we will never find out.
+            logger.warning("PyInstaller bincache may be corrupted; use pyinstaller --clean to fix it.")
+            raise
+    else:
+        cache_index = {}
+
+    # Verify that the file we are looking for is present in the cache. Use the dist_mn if given to avoid different
+    # extension modules sharing the same basename get corrupted.
+    if dist_nm:
+        basenm = os.path.normcase(dist_nm)
+    else:
+        basenm = os.path.normcase(os.path.basename(fnm))
+
+    # Binding redirects should be taken into account to see if the file needs to be reprocessed. The redirects may
+    # change if the versions of dependent manifests change due to system updates.
+    redirects = CONF.get('binding_redirects', [])
+    digest = cacheDigest(fnm, redirects)
+    cachedfile = os.path.join(cachedir, basenm)
+    cmd = None
+    if basenm in cache_index:
+        if digest != cache_index[basenm]:
+            os.remove(cachedfile)
+        else:
+            return cachedfile
+
+    # Optionally change manifest and its dependencies to private assemblies.
+    if fnm.lower().endswith(".manifest") and (is_win or is_cygwin):
+        manifest = winmanifest.Manifest()
+        manifest.filename = fnm
+        with open(fnm, "rb") as f:
+            manifest.parse_string(f.read())
+        if CONF.get('win_private_assemblies', False):
+            if manifest.publicKeyToken:
+                logger.info("Changing %s into private assembly", os.path.basename(fnm))
+            manifest.publicKeyToken = None
+            for dep in manifest.dependentAssemblies:
+                # Exclude common-controls which is not bundled
+                if dep.name != "Microsoft.Windows.Common-Controls":
+                    dep.publicKeyToken = None
+
+        applyRedirects(manifest, redirects)
+
+        manifest.writeprettyxml(cachedfile)
+        return cachedfile
+
+    if upx:
+        if strip:
+            fnm = checkCache(
+                fnm,
+                strip=True,
+                upx=False,
+                dist_nm=dist_nm,
+                target_arch=target_arch,
+                codesign_identity=codesign_identity,
+                entitlements_file=entitlements_file,
+                strict_arch_validation=strict_arch_validation,
+            )
+        # We need to avoid using UPX with Windows DLLs that have Control Flow Guard enabled, as it breaks them.
+        if (is_win or is_cygwin) and versioninfo.pefile_check_control_flow_guard(fnm):
+            logger.info('Disabling UPX for %s due to CFG!', fnm)
+        elif misc.is_file_qt_plugin(fnm):
+            logger.info('Disabling UPX for %s due to it being a Qt plugin!', fnm)
+        else:
+            bestopt = "--best"
+            # FIXME: Linux builds of UPX do not seem to contain LZMA (they assert out).
+            # A better configure-time check is due.
+            if CONF["hasUPX"] >= (3,) and os.name == "nt":
+                bestopt = "--lzma"
+
+            upx_executable = "upx"
+            if CONF.get('upx_dir'):
+                upx_executable = os.path.join(CONF['upx_dir'], upx_executable)
+            cmd = [upx_executable, bestopt, "-q", cachedfile]
+    else:
+        if strip:
+            strip_options = []
+            if is_darwin:
+                # The default strip behavior breaks some shared libraries under Mac OS.
+                strip_options = ["-S"]  # -S = strip only debug symbols.
+            cmd = ["strip"] + strip_options + [cachedfile]
+
+    if not os.path.exists(os.path.dirname(cachedfile)):
+        os.makedirs(os.path.dirname(cachedfile))
+    # There are known some issues with 'shutil.copy2' on Mac OS 10.11 with copying st_flags. Issue #1650.
+    # 'shutil.copy' copies also permission bits and it should be sufficient for PyInstaller's purposes.
+    shutil.copy(fnm, cachedfile)
+    # TODO: find out if this is still necessary when no longer using shutil.copy2()
+    if hasattr(os, 'chflags'):
+        # Some libraries on FreeBSD have immunable flag (libthr.so.3, for example). If this flag is preserved,
+        # os.chmod() fails with: OSError: [Errno 1] Operation not permitted.
+        try:
+            os.chflags(cachedfile, 0)
+        except OSError:
+            pass
+    os.chmod(cachedfile, 0o755)
+
+    if os.path.splitext(fnm.lower())[1] in (".pyd", ".dll") and (is_win or is_cygwin):
+        # When shared assemblies are bundled into the app, they may optionally be changed into private assemblies.
+        try:
+            res = winmanifest.GetManifestResources(os.path.abspath(cachedfile))
+        except winresource.pywintypes.error as e:
+            if e.args[0] == winresource.ERROR_BAD_EXE_FORMAT:
+                # Not a win32 PE file
+                pass
+            else:
+                logger.error(os.path.abspath(cachedfile))
+                raise
+        else:
+            if winmanifest.RT_MANIFEST in res and len(res[winmanifest.RT_MANIFEST]):
+                for name in res[winmanifest.RT_MANIFEST]:
+                    for language in res[winmanifest.RT_MANIFEST][name]:
+                        try:
+                            manifest = winmanifest.Manifest()
+                            manifest.filename = ":".join([
+                                cachedfile, str(winmanifest.RT_MANIFEST),
+                                str(name), str(language)
+                            ])
+                            manifest.parse_string(res[winmanifest.RT_MANIFEST][name][language], False)
+                        except Exception:
+                            logger.error("Cannot parse manifest resource %s, =%s", name, language)
+                            logger.error("From file %s", cachedfile, exc_info=1)
+                        else:
+                            # optionally change manifest to private assembly
+                            private = CONF.get('win_private_assemblies', False)
+                            if private:
+                                if manifest.publicKeyToken:
+                                    logger.info("Changing %s into a private assembly", os.path.basename(fnm))
+                                manifest.publicKeyToken = None
+
+                                # Change dep to private assembly
+                                for dep in manifest.dependentAssemblies:
+                                    # Exclude common-controls which is not bundled
+                                    if dep.name != "Microsoft.Windows.Common-Controls":
+                                        dep.publicKeyToken = None
+                            redirecting = applyRedirects(manifest, redirects)
+                            if redirecting or private:
+                                try:
+                                    manifest.update_resources(os.path.abspath(cachedfile), [name], [language])
+                                except Exception:
+                                    logger.error(os.path.abspath(cachedfile))
+                                    raise
+
+    if cmd:
+        logger.info("Executing - " + "".join(cmd))
+        subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+
+    # update cache index
+    cache_index[basenm] = digest
+    misc.save_py_data_struct(cacheindexfn, cache_index)
+
+    # On Mac OS we need relative paths to dll dependencies starting with @executable_path. While modifying
+    # the headers invalidates existing signatures, we avoid removing them in order to speed things up (and
+    # to avoid potential bugs in the codesign utility, like the one reported on Mac OS 10.13 in #6167).
+    # The forced re-signing at the end should take care of the invalidated signatures.
+    if is_darwin:
+        try:
+            osxutils.binary_to_target_arch(cachedfile, target_arch, display_name=fnm)
+            #osxutils.remove_signature_from_binary(cachedfile)  # Disabled as per comment above.
+            dylib.mac_set_relative_dylib_deps(cachedfile, dist_nm)
+            osxutils.sign_binary(cachedfile, codesign_identity, entitlements_file)
+        except osxutils.InvalidBinaryError:
+            # Raised by osxutils.binary_to_target_arch when the given file is not a valid macOS binary (for example,
+            # a linux .so file; see issue #6327). The error prevents any further processing, so just ignore it.
+            pass
+        except osxutils.IncompatibleBinaryArchError:
+            # Raised by osxutils.binary_to_target_arch when the given file does not contain (all) required arch slices.
+            # Depending on the strict validation mode, re-raise or swallow the error.
+            #
+            # Strict validation should be enabled only for binaries where the architecture *must* match the target one,
+            # i.e., the extension modules. Everything else is pretty much a gray area, for example:
+            #  * a universal2 extension may have its x86_64 and arm64 slices linked against distinct single-arch/thin
+            #    shared libraries
+            #  * a collected executable that is launched by python code via a subprocess can be x86_64-only, even though
+            #    the actual python code is running on M1 in native arm64 mode.
+            if strict_arch_validation:
+                raise
+            logger.debug("File %s failed optional architecture validation - collecting as-is!", fnm)
+
+    return cachedfile
+
+
+def cacheDigest(fnm, redirects):
+    hasher = hashlib.md5()
+    with open(fnm, "rb") as f:
+        for chunk in iter(lambda: f.read(16 * 1024), b""):
+            hasher.update(chunk)
+    if redirects:
+        redirects = str(redirects).encode('utf-8')
+        hasher.update(redirects)
+    digest = bytearray(hasher.digest())
+    return digest
+
+
+def _check_path_overlap(path):
+    """
+    Check that path does not overlap with WORKPATH or SPECPATH (i.e., WORKPATH and SPECPATH may not start with path,
+    which could be caused by a faulty hand-edited specfile).
+
+    Raise SystemExit if there is overlap, return True otherwise
+    """
+    from PyInstaller.config import CONF
+    specerr = 0
+    if CONF['workpath'].startswith(path):
+        logger.error('Specfile error: The output path "%s" contains WORKPATH (%s)', path, CONF['workpath'])
+        specerr += 1
+    if CONF['specpath'].startswith(path):
+        logger.error('Specfile error: The output path "%s" contains SPECPATH (%s)', path, CONF['specpath'])
+        specerr += 1
+    if specerr:
+        raise SystemExit(
+            'Error: Please edit/recreate the specfile (%s) and set a different output name (e.g. "dist").' %
+            CONF['spec']
+        )
+    return True
+
+
+def _make_clean_directory(path):
+    """
+    Create a clean directory from the given directory name.
+    """
+    if _check_path_overlap(path):
+        if os.path.isdir(path) or os.path.isfile(path):
+            try:
+                os.remove(path)
+            except OSError:
+                _rmtree(path)
+
+        os.makedirs(path, exist_ok=True)
+
+
+def _rmtree(path):
+    """
+    Remove directory and all its contents, but only after user confirmation, or if the -y option is set.
+    """
+    from PyInstaller.config import CONF
+    if CONF['noconfirm']:
+        choice = 'y'
+    elif sys.stdout.isatty():
+        choice = compat.stdin_input(
+            'WARNING: The output directory "%s" and ALL ITS CONTENTS will be REMOVED! Continue? (y/N)' % path
+        )
+    else:
+        raise SystemExit(
+            'Error: The output directory "%s" is not empty. Please remove all its contents or use the -y option (remove'
+            ' output directory without confirmation).' % path
+        )
+    if choice.strip().lower() == 'y':
+        if not CONF['noconfirm']:
+            print("On your own risk, you can use the option `--noconfirm` to get rid of this question.")
+        logger.info('Removing dir %s', path)
+        shutil.rmtree(path)
+    else:
+        raise SystemExit('User aborted')
+
+
+# TODO Refactor to prohibit empty target directories. As the docstring below documents, this function currently permits
+# the second item of each 2-tuple in "hook.datas" to be the empty string, in which case the target directory defaults to
+# the source directory's basename. However, this functionality is very fragile and hence bad. Instead:
+#
+# * An exception should be raised if such item is empty.
+# * All hooks currently passing the empty string for such item (e.g.,
+#   "hooks/hook-babel.py", "hooks/hook-matplotlib.py") should be refactored
+#   to instead pass such basename.
+def format_binaries_and_datas(binaries_or_datas, workingdir=None):
+    """
+    Convert the passed list of hook-style 2-tuples into a returned set of `TOC`-style 2-tuples.
+
+    Elements of the passed list are 2-tuples `(source_dir_or_glob, target_dir)`.
+    Elements of the returned set are 2-tuples `(target_file, source_file)`.
+    For backwards compatibility, the order of elements in the former tuples are the reverse of the order of elements in
+    the latter tuples!
+
+    Parameters
+    ----------
+    binaries_or_datas : list
+        List of hook-style 2-tuples (e.g., the top-level `binaries` and `datas` attributes defined by hooks) whose:
+        * The first element is either:
+          * A glob matching only the absolute or relative paths of source non-Python data files.
+          * The absolute or relative path of a source directory containing only source non-Python data files.
+        * The second element is the relative path of the target directory into which these source files will be
+          recursively copied.
+
+        If the optional `workingdir` parameter is passed, source paths may be either absolute or relative; else, source
+        paths _must_ be absolute.
+    workingdir : str
+        Optional absolute path of the directory to which all relative source paths in the `binaries_or_datas`
+        parameter will be prepended by (and hence converted into absolute paths) _or_ `None` if these paths are to be
+        preserved as relative. Defaults to `None`.
+
+    Returns
+    ----------
+    set
+        Set of `TOC`-style 2-tuples whose:
+        * First element is the absolute or relative path of a target file.
+        * Second element is the absolute or relative path of the corresponding source file to be copied to this target
+          file.
+    """
+    toc_datas = set()
+
+    for src_root_path_or_glob, trg_root_dir in binaries_or_datas:
+        if not trg_root_dir:
+            raise SystemExit(
+                "Empty DEST not allowed when adding binary and data files. Maybe you want to used %r.\nCaused by %r." %
+                (os.curdir, src_root_path_or_glob)
+            )
+        # Convert relative to absolute paths if required.
+        if workingdir and not os.path.isabs(src_root_path_or_glob):
+            src_root_path_or_glob = os.path.join(workingdir, src_root_path_or_glob)
+
+        # Normalize paths.
+        src_root_path_or_glob = os.path.normpath(src_root_path_or_glob)
+        if os.path.isfile(src_root_path_or_glob):
+            src_root_paths = [src_root_path_or_glob]
+        else:
+            # List of the absolute paths of all source paths matching the current glob.
+            src_root_paths = glob.glob(src_root_path_or_glob)
+
+        if not src_root_paths:
+            msg = 'Unable to find "%s" when adding binary and data files.' % src_root_path_or_glob
+            # on Debian/Ubuntu, missing pyconfig.h files can be fixed with installing python-dev
+            if src_root_path_or_glob.endswith("pyconfig.h"):
+                msg += """This means your Python installation does not come with proper shared library files.
+This usually happens due to missing development package, or unsuitable build parameters of the Python installation.
+
+* On Debian/Ubuntu, you need to install Python development packages:
+  * apt-get install python3-dev
+  * apt-get install python-dev
+* If you are building Python by yourself, rebuild with `--enable-shared` (or, `--enable-framework` on macOS).
+"""
+            raise SystemExit(msg)
+
+        for src_root_path in src_root_paths:
+            if os.path.isfile(src_root_path):
+                # Normalizing the result to remove redundant relative paths (e.g., removing "./" from "trg/./file").
+                toc_datas.add((
+                    os.path.normpath(os.path.join(trg_root_dir, os.path.basename(src_root_path))),
+                    os.path.normpath(src_root_path),
+                ))
+            elif os.path.isdir(src_root_path):
+                for src_dir, src_subdir_basenames, src_file_basenames in os.walk(src_root_path):
+                    # Ensure the current source directory is a subdirectory of the passed top-level source directory.
+                    # Since os.walk() does *NOT* follow symlinks by default, this should be the case. (But let's make
+                    # sure.)
+                    assert src_dir.startswith(src_root_path)
+
+                    # Relative path of the current target directory, obtained by:
+                    #
+                    # * Stripping the top-level source directory from the current source directory (e.g., removing
+                    #   "/top" from "/top/dir").
+                    # * Normalizing the result to remove redundant relative paths (e.g., removing "./" from
+                    #   "trg/./file").
+                    trg_dir = os.path.normpath(os.path.join(trg_root_dir, os.path.relpath(src_dir, src_root_path)))
+
+                    for src_file_basename in src_file_basenames:
+                        src_file = os.path.join(src_dir, src_file_basename)
+                        if os.path.isfile(src_file):
+                            # Normalize the result to remove redundant relative paths (e.g., removing "./" from
+                            # "trg/./file").
+                            toc_datas.add((
+                                os.path.normpath(os.path.join(trg_dir, src_file_basename)), os.path.normpath(src_file)
+                            ))
+
+    return toc_datas
+
+
+def get_code_object(modname, filename):
+    """
+    Get the code-object for a module.
+
+    This is a simplifed non-performant version which circumvents __pycache__.
+    """
+
+    try:
+        if filename in ('-', None):
+            # This is a NamespacePackage, modulegraph marks them by using the filename '-'. (But wants to use None, so
+            # check for None, too, to be forward-compatible.)
+            logger.debug('Compiling namespace package %s', modname)
+            txt = '#\n'
+            return compile(txt, filename, 'exec')
+        else:
+            logger.debug('Compiling %s', filename)
+            with open(filename, 'rb') as f:
+                source = f.read()
+            return compile(source, filename, 'exec')
+    except SyntaxError as e:
+        print("Syntax error in ", filename)
+        print(e.args)
+        raise
+
+
+def strip_paths_in_code(co, new_filename=None):
+    # Paths to remove from filenames embedded in code objects
+    replace_paths = sys.path + CONF['pathex']
+    # Make sure paths end with os.sep and the longest paths are first
+    replace_paths = sorted((os.path.join(f, '') for f in replace_paths), key=len, reverse=True)
+
+    if new_filename is None:
+        original_filename = os.path.normpath(co.co_filename)
+        for f in replace_paths:
+            if original_filename.startswith(f):
+                new_filename = original_filename[len(f):]
+                break
+
+        else:
+            return co
+
+    code_func = type(co)
+
+    consts = tuple(
+        strip_paths_in_code(const_co, new_filename) if isinstance(const_co, code_func) else const_co
+        for const_co in co.co_consts
+    )
+
+    if hasattr(co, 'replace'):  # is_py38
+        return co.replace(co_consts=consts, co_filename=new_filename)
+    elif hasattr(co, 'co_kwonlyargcount'):
+        # co_kwonlyargcount was added in some version of Python 3
+        return code_func(
+            co.co_argcount, co.co_kwonlyargcount, co.co_nlocals, co.co_stacksize, co.co_flags, co.co_code, consts,
+            co.co_names, co.co_varnames, new_filename, co.co_name, co.co_firstlineno, co.co_lnotab, co.co_freevars,
+            co.co_cellvars
+        )
+    else:
+        return code_func(
+            co.co_argcount, co.co_nlocals, co.co_stacksize, co.co_flags, co.co_code, consts, co.co_names,
+            co.co_varnames, new_filename, co.co_name, co.co_firstlineno, co.co_lnotab, co.co_freevars, co.co_cellvars
+        )
+
+
+def fake_pyc_timestamp(buf):
+    """
+    Reset the timestamp from a .pyc-file header to a fixed value.
+
+    This enables deterministic builds without having to set pyinstaller source metadata (mtime) since that changes the
+    pyc-file contents.
+
+    _buf_ must at least contain the full pyc-file header.
+    """
+    assert buf[:4] == compat.BYTECODE_MAGIC, \
+        "Expected pyc magic {}, got {}".format(compat.BYTECODE_MAGIC, buf[:4])
+    start, end = 4, 8
+    # See https://www.python.org/dev/peps/pep-0552/
+    (flags,) = struct.unpack_from(">I", buf, 4)
+    if flags & 1:
+        # We are in the future and hash-based pyc-files are used, so
+        # clear "check_source" flag, since there is no source.
+        buf[4:8] = struct.pack(">I", flags ^ 2)
+        return buf
+    else:
+        # No hash-based pyc-file, timestamp is the next field.
+        start, end = 8, 12
+
+    ts = b'pyi0'  # So people know where this comes from
+    return buf[:start] + ts + buf[end:]
+
+
+def _should_include_system_binary(binary_tuple, exceptions):
+    """
+    Return True if the given binary_tuple describes a system binary that should be included.
+
+    Exclude all system library binaries other than those with "lib-dynload" in the destination or "python" in the
+    source, except for those matching the patterns in the exceptions list. Intended to be used from the Analysis
+    exclude_system_libraries method.
+    """
+    dest = binary_tuple[0]
+    if dest.startswith('lib-dynload'):
+        return True
+    src = binary_tuple[1]
+    if fnmatch.fnmatch(src, '*python*'):
+        return True
+    if not src.startswith('/lib') and not src.startswith('/usr/lib'):
+        return True
+    for exception in exceptions:
+        if fnmatch.fnmatch(dest, exception):
+            return True
+    return False

+ 769 - 0
ffmpegpy/Lib/site-packages/PyInstaller/compat.py

@@ -0,0 +1,769 @@
+# ----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+# ----------------------------------------------------------------------------
+"""
+Various classes and functions to provide some backwards-compatibility with previous versions of Python onward.
+"""
+
+import errno
+
+import importlib.machinery
+import importlib.util
+import os
+import platform
+import site
+import subprocess
+import sys
+import shutil
+
+from PyInstaller._shared_with_waf import _pyi_machine
+from PyInstaller.exceptions import ExecCommandFailed
+
+# Copied from https://docs.python.org/3/library/platform.html#cross-platform.
+is_64bits = sys.maxsize > 2**32
+
+# Distinguish specific code for various Python versions. Variables 'is_pyXY' mean that Python X.Y and up is supported.
+# Keep even unsupported versions here to keep 3rd-party hooks working.
+is_py35 = sys.version_info >= (3, 5)
+is_py36 = sys.version_info >= (3, 6)
+is_py37 = sys.version_info >= (3, 7)
+is_py38 = sys.version_info >= (3, 8)
+is_py39 = sys.version_info >= (3, 9)
+is_py310 = sys.version_info >= (3, 10)
+
+is_win = sys.platform.startswith('win')
+is_win_10 = is_win and (platform.win32_ver()[0] == '10')
+is_win_wine = False  # Running under Wine; determined later on.
+is_cygwin = sys.platform == 'cygwin'
+is_darwin = sys.platform == 'darwin'  # Mac OS X
+
+# Unix platforms
+is_linux = sys.platform.startswith('linux')
+is_solar = sys.platform.startswith('sun')  # Solaris
+is_aix = sys.platform.startswith('aix')
+is_freebsd = sys.platform.startswith('freebsd')
+is_openbsd = sys.platform.startswith('openbsd')
+is_hpux = sys.platform.startswith('hp-ux')
+
+# Some code parts are similar to several unix platforms (e.g. Linux, Solaris, AIX).
+# Mac OS is not considered as unix since there are many platform-specific details for Mac in PyInstaller.
+is_unix = is_linux or is_solar or is_aix or is_freebsd or is_hpux or is_openbsd
+
+# Linux distributions such as Alpine or OpenWRT use musl as their libc implementation and resultantly need specially
+# compiled bootloaders. On musl systems, ldd with no arguments prints 'musl' and its version.
+is_musl = is_linux and "musl" in subprocess.getoutput(["ldd"])
+
+# macOS version
+_macos_ver = tuple(int(x) for x in platform.mac_ver()[0].split('.')) if is_darwin else None
+
+# macOS 11 (Big Sur): if python is not compiled with Big Sur support, it ends up in compatibility mode by default, which
+# is indicated by platform.mac_ver() returning '10.16'. The lack of proper Big Sur support breaks find_library()
+# function from ctypes.util module, as starting with Big Sur, shared libraries are not visible on disk anymore. Support
+# for the new library search mechanism was added in python 3.9 when compiled with Big Sur support. In such cases,
+# platform.mac_ver() reports version as '11.x'. The behavior can be further modified via SYSTEM_VERSION_COMPAT
+# environment variable; which allows explicitly enabling or disabling the compatibility mode. However, note that
+# disabling the compatibility mode and using python that does not properly support Big Sur still leaves find_library()
+# broken (which is a scenario that we ignore at the moment).
+# The same logic applies to macOS 12 (Monterey).
+is_macos_11_compat = _macos_ver and _macos_ver[0:2] == (10, 16)  # Big Sur or newer in compat mode
+is_macos_11_native = _macos_ver and _macos_ver[0:2] >= (11, 0)  # Big Sur or newer in native mode
+is_macos_11 = is_macos_11_compat or is_macos_11_native  # Big Sur or newer
+
+# On different platforms is different file for dynamic python library.
+# TODO: When removing support for is_py37, the "m" variants can be
+# removed, see <https://docs.python.org/3/whatsnew/3.8.html#build-and-c-api-changes>
+_pyver = sys.version_info[:2]
+if is_win or is_cygwin:
+    PYDYLIB_NAMES = {
+        'python%d%d.dll' % _pyver,
+        'libpython%d%d.dll' % _pyver,
+        'libpython%d%dm.dll' % _pyver,
+        'libpython%d.%d.dll' % _pyver,
+        'libpython%d.%dm.dll' % _pyver
+    }  # For MSYS2 environment
+elif is_darwin:
+    # libpython%d.%dm.dylib for Conda virtual environment installations
+    PYDYLIB_NAMES = {
+        'Python', '.Python',
+        'Python%d' % _pyver[0],
+        'libpython%d.%d.dylib' % _pyver,
+        'libpython%d.%dm.dylib' % _pyver
+    }
+elif is_aix:
+    # Shared libs on AIX may be archives with shared object members, hence the ".a" suffix. However, starting with
+    # python 2.7.11 libpython?.?.so and Python3 libpython?.?m.so files are produced.
+    PYDYLIB_NAMES = {
+        'libpython%d.%d.a' % _pyver,
+        'libpython%d.%dm.a' % _pyver,
+        'libpython%d.%d.so' % _pyver,
+        'libpython%d.%dm.so' % _pyver
+    }
+elif is_freebsd:
+    PYDYLIB_NAMES = {
+        'libpython%d.%d.so.1' % _pyver,
+        'libpython%d.%dm.so.1' % _pyver,
+        'libpython%d.%d.so.1.0' % _pyver,
+        'libpython%d.%dm.so.1.0' % _pyver
+    }
+elif is_openbsd:
+    PYDYLIB_NAMES = {'libpython%d.%d.so.0.0' % _pyver, 'libpython%d.%dm.so.0.0' % _pyver}
+elif is_hpux:
+    PYDYLIB_NAMES = {'libpython%d.%d.so' % _pyver}
+elif is_unix:
+    # Other *nix platforms.
+    # Python 2 .so library on Linux is: libpython2.7.so.1.0
+    # Python 3 .so library on Linux is: libpython3.2mu.so.1.0, libpython3.3m.so.1.0
+    PYDYLIB_NAMES = {
+        'libpython%d.%d.so.1.0' % _pyver,
+        'libpython%d.%dm.so.1.0' % _pyver,
+        'libpython%d.%dmu.so.1.0' % _pyver,
+        'libpython%d.%dm.so' % _pyver,
+        'libpython%d.%d.so' % _pyver
+    }
+else:
+    raise SystemExit('Your platform is not yet supported. Please define constant PYDYLIB_NAMES for your platform.')
+
+# Function with which to open files.
+open_file = open
+text_read_mode = 'r'
+
+# In Python 3 built-in function raw_input() was renamed to just 'input()'.
+stdin_input = input
+
+# Safe repr that always outputs ascii
+safe_repr = ascii
+
+# String types to replace `isinstance(foo, str)`. Obsolete since dropping support for Python 2.x.
+string_types = str
+
+# Correct extension ending: 'c' or 'o'
+
+PYCO = 'c'
+
+# In a virtual environment created by virtualenv (github.com/pypa/virtualenv) there exists sys.real_prefix with the path
+# to the base Python installation from which the virtual environment was created. This is true regardless of the version
+# of Python used to execute the virtualenv command.
+#
+# In a virtual environment created by the venv module available in the Python standard lib, there exists sys.base_prefix
+# with the path to the base implementation. This does not exist in a virtual environment created by virtualenv.
+#
+# The following code creates compat.is_venv and is.virtualenv that are True when running a virtual environment, and also
+# compat.base_prefix with the path to the base Python installation.
+
+base_prefix = os.path.abspath(getattr(sys, 'real_prefix', getattr(sys, 'base_prefix', sys.prefix)))
+# Ensure `base_prefix` is not containing any relative parts.
+is_venv = is_virtualenv = base_prefix != os.path.abspath(sys.prefix)
+
+# Conda environments sometimes have different paths or apply patches to packages that can affect how a hook or package
+# should access resources. Method for determining conda taken from https://stackoverflow.com/questions/47610844#47610844
+is_conda = os.path.isdir(os.path.join(base_prefix, 'conda-meta'))
+
+# Similar to ``is_conda`` but is ``False`` using another ``venv``-like manager on top. In this case, no packages
+# encountered will be conda packages meaning that the default non-conda behaviour is generally desired from PyInstaller.
+is_pure_conda = os.path.isdir(os.path.join(sys.prefix, 'conda-meta'))
+
+# Full path to python interpreter.
+python_executable = getattr(sys, '_base_executable', sys.executable)
+
+# Is this Python from Microsoft App Store (Windows only)? Python from Microsoft App Store has executable pointing at
+# empty shims.
+is_ms_app_store = is_win and os.path.getsize(python_executable) == 0
+
+if is_ms_app_store:
+    # Locate the actual executable inside base_prefix.
+    python_executable = os.path.join(base_prefix, os.path.basename(python_executable))
+    if not os.path.exists(python_executable):
+        raise SystemExit(
+            'PyInstaller cannot locate real python executable belonging to Python from Microsoft App Store!'
+        )
+
+# Bytecode magic value
+BYTECODE_MAGIC = importlib.util.MAGIC_NUMBER
+
+# List of suffixes for Python C extension modules.
+EXTENSION_SUFFIXES = importlib.machinery.EXTENSION_SUFFIXES
+ALL_SUFFIXES = importlib.machinery.all_suffixes()
+
+# On Windows we require pywin32-ctypes.
+# -> all pyinstaller modules should use win32api from PyInstaller.compat to
+#    ensure that it can work on MSYS2 (which requires pywin32-ctypes)
+if is_win:
+    try:
+        from win32ctypes.pywin32 import pywintypes  # noqa: F401, E402
+        from win32ctypes.pywin32 import win32api  # noqa: F401, E402
+    except ImportError:
+        # This environment variable is set by setup.py
+        # - It's not an error for pywin32 to not be installed at that point
+        if not os.environ.get('PYINSTALLER_NO_PYWIN32_FAILURE'):
+            raise SystemExit(
+                'PyInstaller cannot check for assembly dependencies.\n'
+                'Please install pywin32-ctypes.\n\n'
+                'pip install pywin32-ctypes\n'
+            )
+    except Exception:
+        if sys.flags.optimize == 2:
+            raise SystemExit(
+                "pycparser, a Windows only indirect dependency of PyInstaller, is incompatible with "
+                "Python's \"discard docstrings\" (-OO) flag mode. For more information see:\n"
+                "    https://github.com/pyinstaller/pyinstaller/issues/6345"
+            )
+        raise
+
+# macOS's platform.architecture() can be buggy, so we do this manually here. Based off the python documentation:
+# https://docs.python.org/3/library/platform.html#platform.architecture
+if is_darwin:
+    architecture = '64bit' if sys.maxsize > 2**32 else '32bit'
+else:
+    architecture = platform.architecture()[0]
+
+# Cygwin needs special handling, because platform.system() contains identifiers such as MSYS_NT-10.0-19042 and
+# CYGWIN_NT-10.0-19042 that do not fit PyInstaller's OS naming scheme. Explicitly set `system` to 'Cygwin'.
+system = 'Cygwin' if is_cygwin else platform.system()
+
+# Machine suffix for bootloader.
+machine = _pyi_machine(platform.machine(), platform.system())
+
+
+# Wine detection and support
+def is_wine_dll(filename):
+    """
+    Check if the given PE file is a Wine DLL (PE-converted built-in, or fake/placeholder one).
+
+    Returns True if the given file is a Wine DLL, False if not (or if file cannot be analyzed or does not exist).
+    """
+    _WINE_SIGNATURES = (
+        b'Wine builtin DLL',  # PE-converted Wine DLL
+        b'Wine placeholder DLL',  # Fake/placeholder Wine DLL
+    )
+    _MAX_LEN = max([len(sig) for sig in _WINE_SIGNATURES])
+
+    # Wine places their DLL signature in the padding area between the IMAGE_DOS_HEADER and IMAGE_NT_HEADERS. So we need
+    # to compare the bytes that come right after IMAGE_DOS_HEADER, i.e., after initial 64 bytes. We can read the file
+    # directly and avoid using the pefile library to avoid performance penalty associated with full header parsing.
+    try:
+        with open(filename, 'rb') as fp:
+            fp.seek(64)
+            signature = fp.read(_MAX_LEN)
+        return signature.startswith(_WINE_SIGNATURES)
+    except Exception:
+        pass
+    return False
+
+
+if is_win:
+    try:
+        import ctypes.util  # noqa: E402
+        is_win_wine = is_wine_dll(ctypes.util.find_library('kernel32'))
+    except Exception:
+        pass
+
+# Set and get environment variables does not handle unicode strings correctly on Windows.
+
+# Acting on os.environ instead of using getenv()/setenv()/unsetenv(), as suggested in
+# <http://docs.python.org/library/os.html#os.environ>: "Calling putenv() directly does not change os.environ, so it is
+# better to modify os.environ." (Same for unsetenv.)
+
+
+def getenv(name, default=None) -> str:
+    """
+    Returns unicode string containing value of environment variable 'name'.
+    """
+    return os.environ.get(name, default)
+
+
+def setenv(name, value):
+    """
+    Accepts unicode string and set it as environment variable 'name' containing value 'value'.
+    """
+    os.environ[name] = value
+
+
+def unsetenv(name):
+    """
+    Delete the environment variable 'name'.
+    """
+    # Some platforms (e.g., AIX) do not support `os.unsetenv()` and thus `del os.environ[name]` has no effect on the
+    # real environment. For this case, we set the value to the empty string.
+    os.environ[name] = ""
+    del os.environ[name]
+
+
+# Exec commands in subprocesses.
+
+
+def exec_command(*cmdargs: str, encoding: str = None, raise_enoent: bool = None, **kwargs):
+    """
+    Run the command specified by the passed positional arguments, optionally configured by the passed keyword arguments.
+
+    .. DANGER::
+       **Ignore this function's return value** -- unless this command's standard output contains _only_ pathnames, in
+       which case this function returns the correct filesystem-encoded string expected by PyInstaller. In all other
+       cases, this function's return value is _not_ safely usable. Consider calling the general-purpose
+       `exec_command_stdout()` function instead.
+
+       For backward compatibility, this function's return value non-portably depends on the current Python version and
+       passed keyword arguments:
+
+       * Under Python 2.7, this value is an **encoded `str` string** rather than a decoded `unicode` string. This value
+         _cannot_ be safely used for any purpose (e.g., string manipulation or parsing), except to be passed directly to
+         another non-Python command.
+       * Under Python 3.x, this value is a **decoded `str` string**. However, even this value is _not_ necessarily
+         safely usable:
+         * If the `encoding` parameter is passed, this value is guaranteed to be safely usable.
+         * Else, this value _cannot_ be safely used for any purpose (e.g., string manipulation or parsing), except to be
+           passed directly to another non-Python command. Why? Because this value has been decoded with the encoding
+           specified by `sys.getfilesystemencoding()`, the encoding used by `os.fsencode()` and `os.fsdecode()` to
+           convert from platform-agnostic to platform-specific pathnames. This is _not_ necessarily the encoding with
+           which this command's standard output was encoded. Cue edge-case decoding exceptions.
+
+    Parameters
+    ----------
+    cmdargs :
+        Variadic list whose:
+        1. Mandatory first element is the absolute path, relative path, or basename in the current `${PATH}` of the
+           command to run.
+        2. Optional remaining elements are arguments to pass to this command.
+    encoding : str, optional
+        Optional keyword argument specifying the encoding with which to decode this command's standard output under
+        Python 3. As this function's return value should be ignored, this argument should _never_ be passed.
+    raise_enoent : boolean, optional
+        Optional keyword argument to simply raise the exception if the executing the command fails since to the command
+        is not found. This is useful to checking id a command exists.
+
+    All remaining keyword arguments are passed as is to the `subprocess.Popen()` constructor.
+
+    Returns
+    ----------
+    str
+        Ignore this value. See discussion above.
+    """
+
+    proc = subprocess.Popen(cmdargs, stdout=subprocess.PIPE, **kwargs)
+    try:
+        out = proc.communicate(timeout=60)[0]
+    except OSError as e:
+        if raise_enoent and e.errno == errno.ENOENT:
+            raise
+        print('--' * 20, file=sys.stderr)
+        print("Error running '%s':" % " ".join(cmdargs), file=sys.stderr)
+        print(e, file=sys.stderr)
+        print('--' * 20, file=sys.stderr)
+        raise ExecCommandFailed("Error: Executing command failed!") from e
+    except subprocess.TimeoutExpired:
+        proc.kill()
+        raise
+
+    # stdout/stderr are returned as a byte array NOT as string, so we need to convert that to proper encoding.
+    try:
+        if encoding:
+            out = out.decode(encoding)
+        else:
+            # If no encoding is given, assume we are reading filenames from stdout only because it is the common case.
+            out = os.fsdecode(out)
+    except UnicodeDecodeError as e:
+        # The sub-process used a different encoding; provide more information to ease debugging.
+        print('--' * 20, file=sys.stderr)
+        print(str(e), file=sys.stderr)
+        print('These are the bytes around the offending byte:', file=sys.stderr)
+        print('--' * 20, file=sys.stderr)
+        raise
+    return out
+
+
+def exec_command_rc(*cmdargs: str, **kwargs) -> int:
+    """
+    Return the exit code of the command specified by the passed positional arguments, optionally configured by the
+    passed keyword arguments.
+
+    Parameters
+    ----------
+    cmdargs : list
+        Variadic list whose:
+        1. Mandatory first element is the absolute path, relative path, or basename in the current `${PATH}` of the
+           command to run.
+        2. Optional remaining elements are arguments to pass to this command.
+
+    All keyword arguments are passed as is to the `subprocess.call()` function.
+
+    Returns
+    ----------
+    int
+        This command's exit code as an unsigned byte in the range `[0, 255]`, where 0 signifies success and all other
+        values signal a failure.
+    """
+
+    # 'encoding' keyword is not supported for 'subprocess.call'; remove it from kwargs.
+    if 'encoding' in kwargs:
+        kwargs.pop('encoding')
+    return subprocess.call(cmdargs, **kwargs)
+
+
+def exec_command_stdout(*command_args: str, encoding: str = None, **kwargs) -> str:
+    """
+    Capture and return the standard output of the command specified by the passed positional arguments, optionally
+    configured by the passed keyword arguments.
+
+    Unlike the legacy `exec_command()` and `exec_command_all()` functions, this modern function is explicitly designed
+    for cross-platform portability. The return value may be safely used for any purpose, including string manipulation
+    and parsing.
+
+    .. NOTE::
+       If this command's standard output contains _only_ pathnames, this function does _not_ return the correct
+       filesystem-encoded string expected by PyInstaller. If this is the case, consider calling the filesystem-specific
+       `exec_command()` function instead.
+
+    Parameters
+    ----------
+    command_args : list[str]
+        Variadic list whose:
+        1. Mandatory first element is the absolute path, relative path, or basename in the current `${PATH}` of the
+           command to run.
+        2. Optional remaining elements are arguments to pass to this command.
+    encoding : str, optional
+        Optional name of the encoding with which to decode this command's standard output (e.g., `utf8`), passed as a
+        keyword argument. If unpassed , this output will be decoded in a portable manner specific to to the current
+        platform, shell environment, and system settings with Python's built-in `universal_newlines` functionality.
+
+    All remaining keyword arguments are passed as is to the `subprocess.check_output()` function.
+
+    Returns
+    ----------
+    str
+        Unicode string of this command's standard output decoded according to the "encoding" keyword argument.
+    """
+
+    # If no encoding was specified, the current locale is defaulted to. Else, an encoding was specified. To ensure this
+    # encoding is respected, the "universal_newlines" option is disabled if also passed. Nice, eh?
+    kwargs['universal_newlines'] = encoding is None
+
+    # Standard output captured from this command as a decoded Unicode string if "universal_newlines" is enabled or an
+    # encoded byte array otherwise.
+    stdout = subprocess.check_output(command_args, **kwargs)
+
+    # Return a Unicode string, decoded from this encoded byte array if needed.
+    return stdout if encoding is None else stdout.decode(encoding)
+
+
+def exec_command_all(*cmdargs: str, encoding: str = None, **kwargs):
+    """
+    Run the command specified by the passed positional arguments, optionally configured by the passed keyword arguments.
+
+    .. DANGER::
+       **Ignore this function's return value.** If this command's standard output consists solely of pathnames, consider
+       calling `exec_command()`; otherwise, consider calling `exec_command_stdout()`.
+
+    Parameters
+    ----------
+    cmdargs : str
+        Variadic list whose:
+        1. Mandatory first element is the absolute path, relative path, or basename in the current `${PATH}` of the
+           command to run.
+        2. Optional remaining elements are arguments to pass to this command.
+    encoding : str, optional
+        Optional keyword argument specifying the encoding with which to decode this command's standard output. As this
+        function's return value should be ignored, this argument should _never_ be passed.
+
+    All remaining keyword arguments are passed as is to the `subprocess.Popen()` constructor.
+
+    Returns
+    ----------
+    (int, str, str)
+        Ignore this 3-element tuple `(exit_code, stdout, stderr)`. See the `exec_command()` function for discussion.
+    """
+    proc = subprocess.Popen(
+        cmdargs,
+        bufsize=-1,  # Default OS buffer size.
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        **kwargs
+    )
+    # Waits for subprocess to complete.
+    try:
+        out, err = proc.communicate(timeout=60)
+    except subprocess.TimeoutExpired:
+        proc.kill()
+        raise
+    # stdout/stderr are returned as a byte array NOT as string. Thus we need to convert that to proper encoding.
+    try:
+        if encoding:
+            out = out.decode(encoding)
+            err = err.decode(encoding)
+        else:
+            # If no encoding is given, assume we're reading filenames from stdout only because it's the common case.
+            out = os.fsdecode(out)
+            err = os.fsdecode(err)
+    except UnicodeDecodeError as e:
+        # The sub-process used a different encoding, provide more information to ease debugging.
+        print('--' * 20, file=sys.stderr)
+        print(str(e), file=sys.stderr)
+        print('These are the bytes around the offending byte:', file=sys.stderr)
+        print('--' * 20, file=sys.stderr)
+        raise
+
+    return proc.returncode, out, err
+
+
+def __wrap_python(args, kwargs):
+    cmdargs = [sys.executable]
+
+    # Mac OS X supports universal binaries (binary for multiple architectures. We need to ensure that subprocess
+    # binaries are running for the same architecture as python executable. It is necessary to run binaries with 'arch'
+    # command.
+    if is_darwin:
+        if architecture == '64bit':
+            if platform.machine() == 'arm64':
+                py_prefix = ['arch', '-arm64']  # Apple M1
+            else:
+                py_prefix = ['arch', '-x86_64']  # Intel
+        elif architecture == '32bit':
+            py_prefix = ['arch', '-i386']
+        else:
+            py_prefix = []
+        # Since Mac OS 10.11, the environment variable DYLD_LIBRARY_PATH is no more inherited by child processes, so we
+        # proactively propagate the current value using the `-e` option of the `arch` command.
+        if 'DYLD_LIBRARY_PATH' in os.environ:
+            path = os.environ['DYLD_LIBRARY_PATH']
+            py_prefix += ['-e', 'DYLD_LIBRARY_PATH=%s' % path]
+        cmdargs = py_prefix + cmdargs
+
+    if not __debug__:
+        cmdargs.append('-O')
+
+    cmdargs.extend(args)
+
+    env = kwargs.get('env')
+    if env is None:
+        env = dict(**os.environ)
+
+    # Ensure python 3 subprocess writes 'str' as utf-8
+    env['PYTHONIOENCODING'] = 'UTF-8'
+    # ... and ensure we read output as utf-8
+    kwargs['encoding'] = 'UTF-8'
+
+    return cmdargs, kwargs
+
+
+def exec_python(*args, **kwargs):
+    """
+    Wrap running python script in a subprocess.
+
+    Return stdout of the invoked command.
+    """
+    cmdargs, kwargs = __wrap_python(args, kwargs)
+    return exec_command(*cmdargs, **kwargs)
+
+
+def exec_python_rc(*args, **kwargs):
+    """
+    Wrap running python script in a subprocess.
+
+    Return exit code of the invoked command.
+    """
+    cmdargs, kwargs = __wrap_python(args, kwargs)
+    return exec_command_rc(*cmdargs, **kwargs)
+
+
+# Path handling.
+
+
+def expand_path(path):
+    """
+    Replace initial tilde '~' in path with user's home directory, and also expand environment variables
+    (i.e., ${VARNAME} on Unix, %VARNAME% on Windows).
+    """
+    return os.path.expandvars(os.path.expanduser(path))
+
+
+# Site-packages functions - use native function if available.
+def getsitepackages(prefixes=None):
+    """
+    Returns a list containing all global site-packages directories.
+
+    For each directory present in ``prefixes`` (or the global ``PREFIXES``), this function finds its `site-packages`
+    subdirectory depending on the system environment, and returns a list of full paths.
+    """
+    # This implementation was copied from the ``site`` module, python 3.7.3.
+    sitepackages = []
+    seen = set()
+
+    if prefixes is None:
+        prefixes = [sys.prefix, sys.exec_prefix]
+
+    for prefix in prefixes:
+        if not prefix or prefix in seen:
+            continue
+        seen.add(prefix)
+
+        if os.sep == '/':
+            sitepackages.append(os.path.join(prefix, "lib", "python%d.%d" % sys.version_info[:2], "site-packages"))
+        else:
+            sitepackages.append(prefix)
+            sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
+    return sitepackages
+
+
+# Backported for virtualenv. Module 'site' in virtualenv might not have this attribute.
+getsitepackages = getattr(site, 'getsitepackages', getsitepackages)
+
+
+# Wrapper to load a module from a Python source file. This function loads import hooks when processing them.
+def importlib_load_source(name, pathname):
+    # Import module from a file.
+    mod_loader = importlib.machinery.SourceFileLoader(name, pathname)
+    return mod_loader.load_module()
+
+
+# Patterns of module names that should be bundled into the base_library.zip.
+
+PY3_BASE_MODULES = {
+    # These modules are direct or indirect dependencies of encodings.* modules. encodings modules must be recursively
+    # included to set the I/O encoding during python startup.
+    '_collections_abc',
+    '_weakrefset',
+    'abc',
+    'codecs',
+    'collections',
+    'copyreg',
+    'encodings',
+    'enum',
+    'functools',
+    'io',
+    'heapq',
+    'keyword',
+    'linecache',
+    'locale',
+    'operator',
+    're',
+    'reprlib',
+    'sre_compile',
+    'sre_constants',
+    'sre_parse',
+    'tokenize',  # used by loader/pymod03_importers.py
+    'traceback',  # for startup errors
+    'types',
+    'weakref',
+    'warnings',
+}
+
+if not is_py310:
+    PY3_BASE_MODULES.add('_bootlocale')
+
+# Object types of Pure Python modules in modulegraph dependency graph.
+# Pure Python modules have code object (attribute co_code).
+PURE_PYTHON_MODULE_TYPES = {
+    'SourceModule',
+    'CompiledModule',
+    'Package',
+    'NamespacePackage',
+    # Deprecated.
+    # TODO Could these module types be removed?
+    'FlatPackage',
+    'ArchiveModule',
+}
+# Object types of special Python modules (built-in, run-time, namespace package) in modulegraph dependency graph that do
+# not have code object.
+SPECIAL_MODULE_TYPES = {
+    'AliasNode',
+    'BuiltinModule',
+    'RuntimeModule',
+    'RuntimePackage',
+
+    # PyInstaller handles scripts differently and not as standard Python modules.
+    'Script',
+}
+# Object types of Binary Python modules (extensions, etc) in modulegraph dependency graph.
+BINARY_MODULE_TYPES = {
+    'Extension',
+    'ExtensionPackage',
+}
+# Object types of valid Python modules in modulegraph dependency graph.
+VALID_MODULE_TYPES = PURE_PYTHON_MODULE_TYPES | SPECIAL_MODULE_TYPES | BINARY_MODULE_TYPES
+# Object types of bad/missing/invalid Python modules in modulegraph dependency graph.
+# TODO: should be 'Invalid' module types also in the 'MISSING' set?
+BAD_MODULE_TYPES = {
+    'BadModule',
+    'ExcludedModule',
+    'InvalidSourceModule',
+    'InvalidCompiledModule',
+    'MissingModule',
+
+    # Runtime modules and packages are technically valid rather than bad, but exist only in-memory rather than on-disk
+    # (typically due to pre_safe_import_module() hooks), and hence cannot be physically frozen. For simplicity, these
+    # nodes are categorized as bad rather than valid.
+    'RuntimeModule',
+    'RuntimePackage',
+}
+ALL_MODULE_TYPES = VALID_MODULE_TYPES | BAD_MODULE_TYPES
+# TODO: review this mapping to TOC, remove useless entries.
+# Dictionary to map ModuleGraph node types to TOC typecodes.
+MODULE_TYPES_TO_TOC_DICT = {
+    # Pure modules.
+    'AliasNode': 'PYMODULE',
+    'Script': 'PYSOURCE',
+    'SourceModule': 'PYMODULE',
+    'CompiledModule': 'PYMODULE',
+    'Package': 'PYMODULE',
+    'FlatPackage': 'PYMODULE',
+    'ArchiveModule': 'PYMODULE',
+    # Binary modules.
+    'Extension': 'EXTENSION',
+    'ExtensionPackage': 'EXTENSION',
+    # Special valid modules.
+    'BuiltinModule': 'BUILTIN',
+    'NamespacePackage': 'PYMODULE',
+    # Bad modules.
+    'BadModule': 'bad',
+    'ExcludedModule': 'excluded',
+    'InvalidSourceModule': 'invalid',
+    'InvalidCompiledModule': 'invalid',
+    'MissingModule': 'missing',
+    'RuntimeModule': 'runtime',
+    'RuntimePackage': 'runtime',
+    # Other.
+    'does not occur': 'BINARY',
+}
+
+
+def check_requirements():
+    """
+    Verify that all requirements to run PyInstaller are met.
+
+    Fail hard if any requirement is not met.
+    """
+    # Fail hard if Python does not have minimum required version
+    if sys.version_info < (3, 7):
+        raise EnvironmentError('PyInstaller requires at Python 3.7 or newer.')
+
+    # There are some old packages which used to be backports of libraries which are now part of the standard library.
+    # These backports are now unmaintained and contain only an older subset of features leading to obscure errors like
+    # "enum has not attribute IntFlag" if installed.
+    if is_py38:
+        from importlib.metadata import distribution, PackageNotFoundError
+    else:
+        from importlib_metadata import distribution, PackageNotFoundError
+
+    for name in ["enum34", "typing"]:
+        try:
+            distribution(name)
+        except PackageNotFoundError:
+            pass
+        else:
+            raise SystemExit(
+                f"The '{name}' package is an obsolete backport of a standard library package and is "
+                f"incompatible with PyInstaller. Please "
+                f"`{'conda remove' if is_conda else 'pip uninstall'} {name}` then try again."
+            )
+
+    # Bail out if binutils is not installed.
+    if is_linux and shutil.which("objdump") is None:
+        raise SystemExit(
+            "On Linux, objdump is required. It is typically provided by the 'binutils' package "
+            "installable via your Linux distribution's package manager."
+        )

+ 54 - 0
ffmpegpy/Lib/site-packages/PyInstaller/config.py

@@ -0,0 +1,54 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+This module holds run-time PyInstaller configuration.
+
+Variable CONF is a dict() with all configuration options that are necessary for the build phase. Build phase is done by
+passing .spec file to exec() function. CONF variable is the only way how to pass arguments to exec() and how to avoid
+using 'global' variables.
+
+NOTE: Having 'global' variables does not play well with the test suite because it does not provide isolated environments
+for tests. Some tests might fail in this case.
+
+NOTE: The 'CONF' dict() is cleaned after building phase to not interfere with any other possible test.
+
+To pass any arguments to build phase, just do:
+
+    from PyInstaller.config import CONF
+    CONF['my_var_name'] = my_value
+
+And to use this variable in the build phase:
+
+    from PyInstaller.config import CONF
+    foo = CONF['my_var_name']
+
+
+This is the list of known variables. (Please update it if necessary.)
+
+cachedir
+hasUPX
+hiddenimports
+noconfirm
+pathex
+ui_admin
+ui_access
+upx_dir
+workpath
+
+tests_modgraph  - cached PyiModuleGraph object to speed up tests
+"""
+
+# NOTE: Do not import other PyInstaller modules here. Just define constants here.
+
+CONF = {
+    # Unit tests require this key to exist.
+    'pathex': [],
+}

+ 95 - 0
ffmpegpy/Lib/site-packages/PyInstaller/configure.py

@@ -0,0 +1,95 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Configure PyInstaller for the current Python installation.
+"""
+
+import os
+
+from PyInstaller import compat
+from PyInstaller import log as logging
+from PyInstaller.compat import is_darwin, is_win
+
+logger = logging.getLogger(__name__)
+
+
+def test_UPX(config, upx_dir):
+    logger.debug('Testing for UPX ...')
+    cmd = "upx"
+    if upx_dir:
+        cmd = os.path.normpath(os.path.join(upx_dir, cmd))
+
+    hasUPX = 0
+    try:
+        vers = compat.exec_command(cmd, '-V', raise_enoent=True).strip().splitlines()
+        if vers:
+            v = vers[0].split()[1]
+            try:
+                # v = "3.96-git-d7ba31cab8ce"
+                v = v.split("-")[0]
+            except Exception:
+                pass
+            hasUPX = tuple(map(int, v.split(".")))
+            if is_win and hasUPX < (1, 92):
+                logger.error('UPX is too old! Python 2.4 under Windows requires UPX 1.92+.')
+                hasUPX = 0
+    except Exception as e:
+        if isinstance(e, OSError) and e.errno == 2:
+            # No such file or directory
+            pass
+        else:
+            logger.info('An exception occurred when testing for UPX:')
+            logger.info('  %r', e)
+    if hasUPX:
+        is_available = 'available'
+    else:
+        is_available = 'not available'
+    logger.info('UPX is %s.', is_available)
+    config['hasUPX'] = hasUPX
+    config['upx_dir'] = upx_dir
+
+
+def _get_pyinst_cache_dir():
+    old_cache_dir = None
+    if compat.getenv('PYINSTALLER_CONFIG_DIR'):
+        cache_dir = compat.getenv('PYINSTALLER_CONFIG_DIR')
+    elif is_win:
+        cache_dir = compat.getenv('LOCALAPPDATA')
+        if not cache_dir:
+            cache_dir = os.path.expanduser('~\\Application Data')
+    elif is_darwin:
+        cache_dir = os.path.expanduser('~/Library/Application Support')
+    else:
+        # According to XDG specification: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+        old_cache_dir = compat.getenv('XDG_DATA_HOME')
+        if not old_cache_dir:
+            old_cache_dir = os.path.expanduser('~/.local/share')
+        cache_dir = compat.getenv('XDG_CACHE_HOME')
+        if not cache_dir:
+            cache_dir = os.path.expanduser('~/.cache')
+    cache_dir = os.path.join(cache_dir, 'pyinstaller')
+    # Move old cache-dir, if any, to new location.
+    if old_cache_dir and not os.path.exists(cache_dir):
+        old_cache_dir = os.path.join(old_cache_dir, 'pyinstaller')
+        if os.path.exists(old_cache_dir):
+            parent_dir = os.path.dirname(cache_dir)
+            if not os.path.exists(parent_dir):
+                os.makedirs(parent_dir)
+            os.rename(old_cache_dir, cache_dir)
+    return cache_dir
+
+
+def get_config(upx_dir, **kw):
+    config = {}
+    test_UPX(config, upx_dir)
+    config['cachedir'] = _get_pyinst_cache_dir()
+
+    return config

+ 1 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/__init__.py

@@ -0,0 +1 @@
+#

BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/__init__.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/analysis.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/bindepend.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/bytecode.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/dylib.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/imphook.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/imphookapi.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/depend/__pycache__/utils.cpython-37.pyc


+ 847 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/analysis.py

@@ -0,0 +1,847 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Define a modified ModuleGraph that can return its contents as a TOC and in other ways act like the old ImpTracker.
+TODO: This class, along with TOC and Tree, should be in a separate module.
+
+For reference, the ModuleGraph node types and their contents:
+
+ nodetype         identifier        filename
+
+ Script           full path to .py  full path to .py
+ SourceModule     basename          full path to .py
+ BuiltinModule    basename          None
+ CompiledModule   basename          full path to .pyc
+ Extension        basename          full path to .so
+ MissingModule    basename          None
+ Package          basename          full path to __init__.py
+        packagepath is ['path to package']
+        globalnames is set of global names __init__.py defines
+ ExtensionPackage basename          full path to __init__.{so,dll}
+        packagepath is ['path to package']
+
+The main extension here over ModuleGraph is a method to extract nodes from the flattened graph and return them as a
+TOC, or added to a TOC. Other added methods look up nodes by identifier and return facts about them, replacing what
+the old ImpTracker list could do.
+"""
+
+import ast
+import os
+import re
+import sys
+import traceback
+from collections import defaultdict
+from copy import deepcopy
+
+from PyInstaller import HOMEPATH, PACKAGEPATH, compat
+from PyInstaller import log as logging
+from PyInstaller.building.datastruct import TOC
+from PyInstaller.compat import (
+    BAD_MODULE_TYPES, BINARY_MODULE_TYPES, MODULE_TYPES_TO_TOC_DICT, PURE_PYTHON_MODULE_TYPES, PY3_BASE_MODULES,
+    VALID_MODULE_TYPES, importlib_load_source
+)
+from PyInstaller.depend import bytecode
+from PyInstaller.depend.imphook import AdditionalFilesCache, ModuleHookCache
+from PyInstaller.depend.imphookapi import (PreFindModulePathAPI, PreSafeImportModuleAPI)
+from PyInstaller.lib.modulegraph.find_modules import get_implies
+from PyInstaller.lib.modulegraph.modulegraph import ModuleGraph
+from PyInstaller.log import DEBUG, INFO, TRACE
+from PyInstaller.utils.hooks import collect_submodules, is_package
+
+logger = logging.getLogger(__name__)
+
+
+class PyiModuleGraph(ModuleGraph):
+    """
+    Directed graph whose nodes represent modules and edges represent dependencies between these modules.
+
+    This high-level subclass wraps the lower-level `ModuleGraph` class with support for graph and runtime hooks.
+    While each instance of `ModuleGraph` represents a set of disconnected trees, each instance of this class *only*
+    represents a single connected tree whose root node is the Python script originally passed by the user on the
+    command line. For that reason, while there may (and typically do) exist more than one `ModuleGraph` instance,
+    there typically exists only a singleton instance of this class.
+
+    Attributes
+    ----------
+    _hooks : ModuleHookCache
+        Dictionary mapping the fully-qualified names of all modules with normal (post-graph) hooks to the absolute paths
+        of such hooks. See the the `_find_module_path()` method for details.
+    _hooks_pre_find_module_path : ModuleHookCache
+        Dictionary mapping the fully-qualified names of all modules with pre-find module path hooks to the absolute
+        paths of such hooks. See the the `_find_module_path()` method for details.
+    _hooks_pre_safe_import_module : ModuleHookCache
+        Dictionary mapping the fully-qualified names of all modules with pre-safe import module hooks to the absolute
+        paths of such hooks. See the `_safe_import_module()` method for details.
+    _user_hook_dirs : list
+        List of the absolute paths of all directories containing user-defined hooks for the current application.
+    _excludes : list
+        List of module names to be excluded when searching for dependencies.
+    _additional_files_cache : AdditionalFilesCache
+        Cache of all external dependencies (e.g., binaries, datas) listed in hook scripts for imported modules.
+    _base_modules: list
+        Dependencies for `base_library.zip` (which remain the same for every executable).
+    """
+
+    # Note: these levels are completely arbitrary and may be adjusted if needed.
+    LOG_LEVEL_MAPPING = {0: INFO, 1: DEBUG, 2: TRACE, 3: TRACE, 4: TRACE}
+
+    def __init__(self, pyi_homepath, user_hook_dirs=(), excludes=(), **kwargs):
+        super().__init__(excludes=excludes, **kwargs)
+        # Homepath to the place where is PyInstaller located.
+        self._homepath = pyi_homepath
+        # modulegraph Node for the main python script that is analyzed by PyInstaller.
+        self._top_script_node = None
+
+        # Absolute paths of all user-defined hook directories.
+        self._excludes = excludes
+        self._reset(user_hook_dirs)
+        self._analyze_base_modules()
+
+    def _reset(self, user_hook_dirs):
+        """
+        Reset for another set of scripts. This is primary required for running the test-suite.
+        """
+        self._top_script_node = None
+        self._additional_files_cache = AdditionalFilesCache()
+        # Command line, Entry Point, and then builtin hook dirs.
+        self._user_hook_dirs = [*user_hook_dirs, os.path.join(PACKAGEPATH, 'hooks')]
+        # Hook-specific lookup tables. These need to reset when reusing cached PyiModuleGraph to avoid hooks to refer to
+        # files or data from another test-case.
+        logger.info('Caching module graph hooks...')
+        self._hooks = self._cache_hooks("")
+        self._hooks_pre_safe_import_module = self._cache_hooks('pre_safe_import_module')
+        self._hooks_pre_find_module_path = self._cache_hooks('pre_find_module_path')
+
+        # Search for run-time hooks in all hook directories.
+        self._available_rthooks = defaultdict(list)
+        for uhd in self._user_hook_dirs:
+            uhd_path = os.path.abspath(os.path.join(uhd, 'rthooks.dat'))
+            try:
+                with open(uhd_path, 'r', encoding='utf-8') as f:
+                    rthooks = ast.literal_eval(f.read())
+            except FileNotFoundError:
+                # Ignore if this hook path doesn't have run-time hooks.
+                continue
+            except Exception as e:
+                logger.error('Unable to read run-time hooks from %r: %s' % (uhd_path, e))
+                continue
+
+            self._merge_rthooks(rthooks, uhd, uhd_path)
+
+        # Convert back to a standard dict.
+        self._available_rthooks = dict(self._available_rthooks)
+
+    def _merge_rthooks(self, rthooks, uhd, uhd_path):
+        """
+        The expected data structure for a run-time hook file is a Python dictionary of type ``Dict[str, List[str]]``,
+        where the dictionary keys are module names and the sequence strings are Python file names.
+
+        Check then merge this data structure, updating the file names to be absolute.
+        """
+        # Check that the root element is a dict.
+        assert isinstance(rthooks, dict), 'The root element in %s must be a dict.' % uhd_path
+        for module_name, python_file_name_list in rthooks.items():
+            # Ensure the key is a string.
+            assert isinstance(module_name, compat.string_types), \
+                '%s must be a dict whose keys are strings; %s is not a string.' % (uhd_path, module_name)
+            # Ensure the value is a list.
+            assert isinstance(python_file_name_list, list), \
+                'The value of %s key %s must be a list.' % (uhd_path, module_name)
+            if module_name in self._available_rthooks:
+                logger.warning(
+                    'Runtime hooks for %s have already been defined. Skipping the runtime hooks for %s that are '
+                    'defined in %s.', module_name, module_name, os.path.join(uhd, 'rthooks')
+                )
+                # Skip this module
+                continue
+            # Merge this with existing run-time hooks.
+            for python_file_name in python_file_name_list:
+                # Ensure each item in the list is a string.
+                assert isinstance(python_file_name, compat.string_types), \
+                    '%s key %s, item %r must be a string.' % (uhd_path, module_name, python_file_name)
+                # Transform it into an absolute path.
+                abs_path = os.path.join(uhd, 'rthooks', python_file_name)
+                # Make sure this file exists.
+                assert os.path.exists(abs_path), \
+                    'In %s, key %s, the file %r expected to be located at %r does not exist.' % \
+                    (uhd_path, module_name, python_file_name, abs_path)
+                # Merge it.
+                self._available_rthooks[module_name].append(abs_path)
+
+    @staticmethod
+    def _findCaller(*args, **kwargs):
+        # Used to add an additional stack-frame above logger.findCaller. findCaller expects the caller to be three
+        # stack-frames above itself.
+        return logger.findCaller(*args, **kwargs)
+
+    def msg(self, level, s, *args):
+        """
+        Print a debug message with the given level.
+
+        1. Map the msg log level to a logger log level.
+        2. Generate the message format (the same format as ModuleGraph)
+        3. Find the caller, which findCaller expects three stack-frames above itself:
+            [3] caller -> [2] msg (here) -> [1] _findCaller -> [0] logger.findCaller
+        4. Create a logRecord with the caller's information.
+        5. Handle the logRecord.
+        """
+        try:
+            level = self.LOG_LEVEL_MAPPING[level]
+        except KeyError:
+            return
+        if not logger.isEnabledFor(level):
+            return
+
+        msg = "%s %s" % (s, ' '.join(map(repr, args)))
+
+        try:
+            fn, lno, func, sinfo = self._findCaller()
+        except ValueError:  # pragma: no cover
+            fn, lno, func, sinfo = "(unknown file)", 0, "(unknown function)", None
+        record = logger.makeRecord(logger.name, level, fn, lno, msg, [], None, func, None, sinfo)
+
+        logger.handle(record)
+
+    # Set logging methods so that the stack is correctly detected.
+    msgin = msg
+    msgout = msg
+
+    def _cache_hooks(self, hook_type):
+        """
+        Get a cache of all hooks of the passed type.
+
+        The cache will include all official hooks defined by the PyInstaller codebase _and_ all unofficial hooks
+        defined for the current application.
+
+        Parameters
+        ----------
+        hook_type : str
+            Type of hooks to be cached, equivalent to the basename of the subpackage of the `PyInstaller.hooks`
+            package containing such hooks (e.g., `post_create_package` for post-create package hooks).
+        """
+        # Cache of this type of hooks.
+        hook_dirs = []
+        for user_hook_dir in self._user_hook_dirs:
+            # Absolute path of the user-defined subdirectory of this hook type. If this directory exists, add it to the
+            # list to be cached.
+            user_hook_type_dir = os.path.join(user_hook_dir, hook_type)
+            if os.path.isdir(user_hook_type_dir):
+                hook_dirs.append(user_hook_type_dir)
+
+        return ModuleHookCache(self, hook_dirs)
+
+    def _analyze_base_modules(self):
+        """
+        Analyze dependencies of the the modules in base_library.zip.
+        """
+        logger.info('Analyzing base_library.zip ...')
+        required_mods = []
+        # Collect submodules from required modules in base_library.zip.
+        for m in PY3_BASE_MODULES:
+            if is_package(m):
+                required_mods += collect_submodules(m)
+            else:
+                required_mods.append(m)
+        # Initialize ModuleGraph.
+        self._base_modules = [mod for req in required_mods for mod in self.import_hook(req)]
+
+    def add_script(self, pathname, caller=None):
+        """
+        Wrap the parent's 'run_script' method and create graph from the first script in the analysis, and save its
+        node to use as the "caller" node for all others. This gives a connected graph rather than a collection of
+        unrelated trees.
+        """
+        if self._top_script_node is None:
+            # Remember the node for the first script.
+            try:
+                self._top_script_node = super().add_script(pathname)
+            except SyntaxError:
+                print("\nSyntax error in", pathname, file=sys.stderr)
+                formatted_lines = traceback.format_exc().splitlines(True)
+                print(*formatted_lines[-4:], file=sys.stderr)
+                sys.exit(1)
+            # Create references from the top script to the base_modules in graph.
+            for node in self._base_modules:
+                self.add_edge(self._top_script_node, node)
+            # Return top-level script node.
+            return self._top_script_node
+        else:
+            if not caller:
+                # Defaults to as any additional script is called from the top-level script.
+                caller = self._top_script_node
+            return super().add_script(pathname, caller=caller)
+
+    def process_post_graph_hooks(self, analysis):
+        """
+        For each imported module, run this module's post-graph hooks if any.
+
+        Parameters
+        ----------
+        analysis: build_main.Analysis
+            The Analysis that calls the hooks
+
+        """
+        # For each iteration of the infinite "while" loop below:
+        #
+        # 1. All hook() functions defined in cached hooks for imported modules are called. This may result in new
+        #    modules being imported (e.g., as hidden imports) that were ignored earlier in the current iteration: if
+        #    this is the case, all hook() functions defined in cached hooks for these modules will be called by the next
+        #    iteration.
+        # 2. All cached hooks whose hook() functions were called are removed from this cache. If this cache is empty, no
+        #    hook() functions will be called by the next iteration and this loop will be terminated.
+        # 3. If no hook() functions were called, this loop is terminated.
+        logger.info('Processing module hooks...')
+        while True:
+            # Set of the names of all imported modules whose post-graph hooks are run by this iteration, preventing the
+            # next iteration from re- running these hooks. If still empty at the end of this iteration, no post-graph
+            # hooks were run; thus, this loop will be terminated.
+            hooked_module_names = set()
+
+            # For each remaining hookable module and corresponding hooks...
+            for module_name, module_hooks in self._hooks.items():
+                # Graph node for this module if imported or "None" otherwise.
+                module_node = self.find_node(module_name, create_nspkg=False)
+
+                # If this module has not been imported, temporarily ignore it. This module is retained in the cache, as
+                # a subsequently run post-graph hook could import this module as a hidden import.
+                if module_node is None:
+                    continue
+
+                # If this module is unimportable, permanently ignore it.
+                if type(module_node).__name__ not in VALID_MODULE_TYPES:
+                    hooked_module_names.add(module_name)
+                    continue
+
+                # For each hook script for this module...
+                for module_hook in module_hooks:
+                    # Run this script's post-graph hook.
+                    module_hook.post_graph(analysis)
+
+                    # Cache all external dependencies listed by this script after running this hook, which could add
+                    # dependencies.
+                    self._additional_files_cache.add(module_name, module_hook.binaries, module_hook.datas)
+
+                # Prevent this module's hooks from being run again.
+                hooked_module_names.add(module_name)
+
+            # Prevent all post-graph hooks run above from being run again by the next iteration.
+            self._hooks.remove_modules(*hooked_module_names)
+
+            # If no post-graph hooks were run, terminate iteration.
+            if not hooked_module_names:
+                break
+
+    def _safe_import_module(self, module_basename, module_name, parent_package):
+        """
+        Create a new graph node for the module with the passed name under the parent package signified by the passed
+        graph node.
+
+        This method wraps the superclass method with support for pre-import module hooks. If such a hook exists for
+        this module (e.g., a script `PyInstaller.hooks.hook-{module_name}` containing a function
+        `pre_safe_import_module()`), that hook will be run _before_ the superclass method is called.
+
+        Pre-Safe-Import-Hooks are performed just *prior* to importing the module. When running the hook, the modules
+        parent package has already been imported and ti's `__path__` is set up. But the module is just about to be
+        imported.
+
+        See the superclass method for description of parameters and return value.
+        """
+        # If this module has pre-safe import module hooks, run these first.
+        if module_name in self._hooks_pre_safe_import_module:
+            # For the absolute path of each such hook...
+            for hook in self._hooks_pre_safe_import_module[module_name]:
+                # Dynamically import this hook as a fabricated module.
+                logger.info('Processing pre-safe import module hook %s from %r.', module_name, hook.hook_filename)
+                hook_module_name = 'PyInstaller_hooks_pre_safe_import_module_' + module_name.replace('.', '_')
+                hook_module = importlib_load_source(hook_module_name, hook.hook_filename)
+
+                # Object communicating changes made by this hook back to us.
+                hook_api = PreSafeImportModuleAPI(
+                    module_graph=self,
+                    module_basename=module_basename,
+                    module_name=module_name,
+                    parent_package=parent_package,
+                )
+
+                # Run this hook, passed this object.
+                if not hasattr(hook_module, 'pre_safe_import_module'):
+                    raise NameError('pre_safe_import_module() function not defined by hook %r.' % hook_module)
+                hook_module.pre_safe_import_module(hook_api)
+
+                # Respect method call changes requested by this hook.
+                module_basename = hook_api.module_basename
+                module_name = hook_api.module_name
+
+            # Prevent subsequent calls from rerunning these hooks.
+            del self._hooks_pre_safe_import_module[module_name]
+
+        # Call the superclass method.
+        return super()._safe_import_module(module_basename, module_name, parent_package)
+
+    def _find_module_path(self, fullname, module_name, search_dirs):
+        """
+        Get a 3-tuple detailing the physical location of the module with the passed name if that module exists _or_
+        raise `ImportError` otherwise.
+
+        This method wraps the superclass method with support for pre-find module path hooks. If such a hook exists
+        for this module (e.g., a script `PyInstaller.hooks.hook-{module_name}` containing a function
+        `pre_find_module_path()`), that hook will be run _before_ the superclass method is called.
+
+        See superclass method for parameter and return value descriptions.
+        """
+        # If this module has pre-find module path hooks, run these first.
+        if fullname in self._hooks_pre_find_module_path:
+            # For the absolute path of each such hook...
+            for hook in self._hooks_pre_find_module_path[fullname]:
+                # Dynamically import this hook as a fabricated module.
+                logger.info('Processing pre-find module path hook %s from %r.', fullname, hook.hook_filename)
+                hook_fullname = 'PyInstaller_hooks_pre_find_module_path_' + fullname.replace('.', '_')
+                hook_module = importlib_load_source(hook_fullname, hook.hook_filename)
+
+                # Object communicating changes made by this hook back to us.
+                hook_api = PreFindModulePathAPI(
+                    module_graph=self,
+                    module_name=fullname,
+                    search_dirs=search_dirs,
+                )
+
+                # Run this hook, passed this object.
+                if not hasattr(hook_module, 'pre_find_module_path'):
+                    raise NameError('pre_find_module_path() function not defined by hook %r.' % hook_module)
+                hook_module.pre_find_module_path(hook_api)
+
+                # Respect method call changes requested by this hook.
+                search_dirs = hook_api.search_dirs
+
+            # Prevent subsequent calls from rerunning these hooks.
+            del self._hooks_pre_find_module_path[fullname]
+
+        # Call the superclass method.
+        return super()._find_module_path(fullname, module_name, search_dirs)
+
+    def get_code_objects(self):
+        """
+        Get code objects from ModuleGraph for pure Python modules. This allows to avoid writing .pyc/pyo files to hdd
+        at later stage.
+
+        :return: Dict with module name and code object.
+        """
+        code_dict = {}
+        mod_types = PURE_PYTHON_MODULE_TYPES
+        for node in self.iter_graph(start=self._top_script_node):
+            # TODO This is terrible. To allow subclassing, types should never be directly compared. Use isinstance()
+            # instead, which is safer, simpler, and accepts sets. Most other calls to type() in the codebase should also
+            # be refactored to call isinstance() instead.
+
+            # get node type e.g. Script
+            mg_type = type(node).__name__
+            if mg_type in mod_types:
+                if node.code:
+                    code_dict[node.identifier] = node.code
+        return code_dict
+
+    def _make_toc(self, typecode=None, existing_TOC=None):
+        """
+        Return the name, path and type of selected nodes as a TOC, or appended to a TOC. The selection is via a list
+        of PyInstaller TOC typecodes. If that list is empty we return the complete flattened graph as a TOC with the
+        ModuleGraph note types in place of typecodes -- meant for debugging only. Normally we return ModuleGraph
+        nodes whose types map to the requested PyInstaller typecode(s) as indicated in the MODULE_TYPES_TO_TOC_DICT.
+
+        We use the ModuleGraph (really, ObjectGraph) flatten() method to scan all the nodes. This is patterned after
+        ModuleGraph.report().
+        """
+        # Construct regular expression for matching modules that should be excluded because they are bundled in
+        # base_library.zip.
+        #
+        # This expression matches the base module name, optionally followed by a period and then any number of
+        # characters. This matches the module name and the fully qualified names of any of its submodules.
+        regex_str = '(' + '|'.join(PY3_BASE_MODULES) + r')(\.|$)'
+        module_filter = re.compile(regex_str)
+
+        result = existing_TOC or TOC()
+        for node in self.iter_graph(start=self._top_script_node):
+            # Skip modules that are in base_library.zip.
+            if module_filter.match(node.identifier):
+                continue
+            entry = self._node_to_toc(node, typecode)
+            if entry is not None:
+                # TOC.append the data. This checks for a pre-existing name and skips it if it exists.
+                result.append(entry)
+        return result
+
+    def make_pure_toc(self):
+        """
+        Return all pure Python modules formatted as TOC.
+        """
+        # PyInstaller should handle special module types without code object.
+        return self._make_toc(PURE_PYTHON_MODULE_TYPES)
+
+    def make_binaries_toc(self, existing_toc):
+        """
+        Return all binary Python modules formatted as TOC.
+        """
+        return self._make_toc(BINARY_MODULE_TYPES, existing_toc)
+
+    def make_missing_toc(self):
+        """
+        Return all MISSING Python modules formatted as TOC.
+        """
+        return self._make_toc(BAD_MODULE_TYPES)
+
+    @staticmethod
+    def _node_to_toc(node, typecode=None):
+        # TODO This is terrible. Everything in Python has a type. It is nonsensical to even speak of "nodes [that] are
+        # not typed." How would that even occur? After all, even "None" has a type! (It is "NoneType", for the curious.)
+        # Remove this, please.
+
+        # Get node type, e.g., Script
+        mg_type = type(node).__name__
+        assert mg_type is not None
+
+        if typecode and not (mg_type in typecode):
+            # Type is not a to be selected one, skip this one
+            return None
+        # Extract the identifier and a path if any.
+        if mg_type == 'Script':
+            # for Script nodes only, identifier is a whole path
+            (name, ext) = os.path.splitext(node.filename)
+            name = os.path.basename(name)
+        elif mg_type == 'ExtensionPackage':
+            # Package with __init__ module being an extension module. This needs to end up as e.g. 'mypkg/__init__.so'.
+            # Convert the packages name ('mypkg') into the module name ('mypkg.__init__') *here* to keep special cases
+            # away elsewhere (where the module name is converted to a filename).
+            name = node.identifier + ".__init__"
+        else:
+            name = node.identifier
+        path = node.filename if node.filename is not None else ''
+        # Ensure name is really 'str'. Module graph might return object type 'modulegraph.Alias' which inherits fromm
+        # 'str'. But 'marshal.dumps()' function is able to marshal only 'str'. Otherwise on Windows PyInstaller might
+        # fail with message like:
+        #   ValueError: unmarshallable object
+        name = str(name)
+        # Translate to the corresponding TOC typecode.
+        toc_type = MODULE_TYPES_TO_TOC_DICT[mg_type]
+        return name, path, toc_type
+
+    def nodes_to_toc(self, node_list, existing_TOC=None):
+        """
+        Given a list of nodes, create a TOC representing those nodes. This is mainly used to initialize a TOC of
+        scripts with the ones that are runtime hooks. The process is almost the same as _make_toc(), but the caller
+        guarantees the nodes are valid, so minimal checking.
+        """
+        result = existing_TOC or TOC()
+        for node in node_list:
+            result.append(self._node_to_toc(node))
+        return result
+
+    # Return true if the named item is in the graph as a BuiltinModule node. The passed name is a basename.
+    def is_a_builtin(self, name):
+        node = self.find_node(name)
+        if node is None:
+            return False
+        return type(node).__name__ == 'BuiltinModule'
+
+    def get_importers(self, name):
+        """
+        List all modules importing the module with the passed name.
+
+        Returns a list of (identifier, DependencyIinfo)-tuples. If the names module has not yet been imported, this
+        method returns an empty list.
+
+        Parameters
+        ----------
+        name : str
+            Fully-qualified name of the module to be examined.
+
+        Returns
+        ----------
+        list
+            List of (fully-qualified names, DependencyIinfo)-tuples of all modules importing the module with the passed
+            fully-qualified name.
+
+        """
+        def get_importer_edge_data(importer):
+            edge = self.graph.edge_by_node(importer, name)
+            # edge might be None in case an AliasModule was added.
+            if edge is not None:
+                return self.graph.edge_data(edge)
+
+        node = self.find_node(name)
+        if node is None:
+            return []
+        _, importers = self.get_edges(node)
+        importers = (importer.identifier for importer in importers if importer is not None)
+        return [(importer, get_importer_edge_data(importer)) for importer in importers]
+
+    # TODO: create a class from this function.
+    def analyze_runtime_hooks(self, custom_runhooks):
+        """
+        Analyze custom run-time hooks and run-time hooks implied by found modules.
+
+        :return : list of Graph nodes.
+        """
+        rthooks_nodes = []
+        logger.info('Analyzing run-time hooks ...')
+        # Process custom runtime hooks (from --runtime-hook options). The runtime hooks are order dependent. First hooks
+        # in the list are executed first. Put their graph nodes at the head of the priority_scripts list Pyinstaller
+        # defined rthooks and thus they are executed first.
+        if custom_runhooks:
+            for hook_file in custom_runhooks:
+                logger.info("Including custom run-time hook %r", hook_file)
+                hook_file = os.path.abspath(hook_file)
+                # Not using "try" here because the path is supposed to exist, if it does not, the raised error will
+                # explain.
+                rthooks_nodes.append(self.add_script(hook_file))
+
+        # Find runtime hooks that are implied by packages already imported. Get a temporary TOC listing all the scripts
+        # and packages graphed so far. Assuming that runtime hooks apply only to modules and packages.
+        temp_toc = self._make_toc(VALID_MODULE_TYPES)
+        for (mod_name, path, typecode) in temp_toc:
+            # Look if there is any run-time hook for given module.
+            if mod_name in self._available_rthooks:
+                # There could be several run-time hooks for a module.
+                for abs_path in self._available_rthooks[mod_name]:
+                    logger.info("Including run-time hook %r", abs_path)
+                    rthooks_nodes.append(self.add_script(abs_path))
+
+        return rthooks_nodes
+
+    def add_hiddenimports(self, module_list):
+        """
+        Add hidden imports that are either supplied as CLI option --hidden-import=MODULENAME or as dependencies from
+        some PyInstaller features when enabled (e.g., crypto feature).
+        """
+        assert self._top_script_node is not None
+        # Analyze the script's hidden imports (named on the command line).
+        for modnm in module_list:
+            node = self.find_node(modnm)
+            if node is not None:
+                logger.debug('Hidden import %r already found', modnm)
+            else:
+                logger.info("Analyzing hidden import %r", modnm)
+                # ModuleGraph throws ImportError if import not found.
+                try:
+                    nodes = self.import_hook(modnm)
+                    assert len(nodes) == 1
+                    node = nodes[0]
+                except ImportError:
+                    logger.error("Hidden import %r not found", modnm)
+                    continue
+            # Create references from the top script to the hidden import, even if found otherwise. Do not waste time
+            # checking whether it is actually added by this (test-) script.
+            self.add_edge(self._top_script_node, node)
+
+    def get_code_using(self, module: str) -> dict:
+        """
+        Find modules that import a given **module**.
+        """
+        co_dict = {}
+        pure_python_module_types = PURE_PYTHON_MODULE_TYPES | {
+            'Script',
+        }
+        node = self.find_node(module)
+        if node:
+            referrers = self.incoming(node)
+            for r in referrers:
+                # Under python 3.7 and earlier, if `module` is added to hidden imports, one of referrers ends up being
+                # None, causing #3825. Work around it.
+                if r is None:
+                    continue
+                # Ensure that modulegraph objects have 'code' attribute.
+                if type(r).__name__ not in pure_python_module_types:
+                    continue
+                identifier = r.identifier
+                if identifier == module or identifier.startswith(module + '.'):
+                    # Skip self references or references from `modules`'s own submodules.
+                    continue
+                co_dict[r.identifier] = r.code
+        return co_dict
+
+    def metadata_required(self) -> set:
+        """
+        Collect metadata for all packages that appear to need it.
+        """
+
+        # List every function that we can think of which is known to require metadata.
+        out = set()
+
+        out |= self._metadata_from(
+            "pkg_resources",
+            ["get_distribution"],  # Requires metadata for one distribution.
+            ["require"],  # Requires metadata for all dependencies.
+        )
+
+        # importlib.metadata is often `import ... as`  aliased to importlib_metadata for compatibility with < py38.
+        # Assume both are valid.
+        for importlib_metadata in ["importlib.metadata", "importlib_metadata"]:
+            out |= self._metadata_from(
+                importlib_metadata,
+                ["metadata", "distribution", "version", "files", "requires"],
+                [],
+            )
+
+        return out
+
+    def _metadata_from(self, package, methods=(), recursive_methods=()) -> set:
+        """
+        Collect metadata whose requirements are implied by given function names.
+
+        Args:
+            package:
+                The module name that must be imported in a source file to trigger the search.
+            methods:
+                Function names from **package** which take a distribution name as an argument and imply that metadata
+                is required for that distribution.
+            recursive_methods:
+                Like **methods** but also implies that a distribution's dependencies' metadata must be collected too.
+        Returns:
+            Required metadata in hook data ``(source, dest)`` format as returned by
+            :func:`PyInstaller.utils.hooks.copy_metadata()`.
+
+        Scan all source code to be included for usage of particular *key* functions which imply that that code will
+        require metadata for some distribution (which may not be its own) at runtime. In the case of a match,
+        collect the required metadata.
+        """
+        from pkg_resources import DistributionNotFound
+
+        from PyInstaller.utils.hooks import copy_metadata
+
+        # Generate sets of possible function names to search for.
+        need_metadata = set()
+        need_recursive_metadata = set()
+        for method in methods:
+            need_metadata.update(bytecode.any_alias(package + "." + method))
+        for method in recursive_methods:
+            need_recursive_metadata.update(bytecode.any_alias(package + "." + method))
+
+        out = set()
+
+        for name, code in self.get_code_using(package).items():
+            for calls in bytecode.recursive_function_calls(code).values():
+                for function_name, args in calls:
+                    # Only consider function calls taking one argument.
+                    if len(args) != 1:
+                        continue
+                    package = args[0]
+                    try:
+                        if function_name in need_metadata:
+                            out.update(copy_metadata(package))
+                        elif function_name in need_recursive_metadata:
+                            out.update(copy_metadata(package, recursive=True))
+
+                    except DistributionNotFound:
+                        # Currently, we opt to silently skip over missing metadata.
+                        continue
+
+        return out
+
+    def get_collected_packages(self) -> list:
+        """
+        Return the list of collected python packages.
+        """
+        return [
+            node.identifier for node in self.iter_graph(start=self._top_script_node) if type(node).__name__ == 'Package'
+        ]
+
+
+_cached_module_graph_ = None
+
+
+def initialize_modgraph(excludes=(), user_hook_dirs=()):
+    """
+    Create the cached module graph.
+
+    This function might appear weird but is necessary for speeding up test runtime because it allows caching basic
+    ModuleGraph object that gets created for 'base_library.zip'.
+
+    Parameters
+    ----------
+    excludes : list
+        List of the fully-qualified names of all modules to be "excluded" and hence _not_ frozen into the executable.
+    user_hook_dirs : list
+        List of the absolute paths of all directories containing user-defined hooks for the current application or
+        `None` if no such directories were specified.
+
+    Returns
+    ----------
+    PyiModuleGraph
+        Module graph with core dependencies.
+    """
+    # Normalize parameters to ensure tuples and make comparison work.
+    user_hook_dirs = user_hook_dirs or ()
+    excludes = excludes or ()
+
+    # If there is a graph cached with the same excludes, reuse it. See ``PyiModulegraph._reset()`` for what is
+    # reset. This cache is used primarily to speed up the test-suite. Fixture `pyi_modgraph` calls this function with
+    # empty excludes, creating a graph suitable for the huge majority of tests.
+    global _cached_module_graph_
+    if _cached_module_graph_ and _cached_module_graph_._excludes == excludes:
+        logger.info('Reusing cached module dependency graph...')
+        graph = deepcopy(_cached_module_graph_)
+        graph._reset(user_hook_dirs)
+        return graph
+
+    logger.info('Initializing module dependency graph...')
+
+    # Construct the initial module graph by analyzing all import statements.
+    graph = PyiModuleGraph(
+        HOMEPATH,
+        excludes=excludes,
+        # get_implies() are hidden imports known by modulgraph.
+        implies=get_implies(),
+        user_hook_dirs=user_hook_dirs,
+    )
+
+    if not _cached_module_graph_:
+        # Only cache the first graph, see above for explanation.
+        logger.info('Caching module dependency graph...')
+        # cache a deep copy of the graph
+        _cached_module_graph_ = deepcopy(graph)
+        # Clear data which does not need to be copied from the cached graph since it will be reset by
+        # ``PyiModulegraph._reset()`` anyway.
+        _cached_module_graph_._hooks = None
+        _cached_module_graph_._hooks_pre_safe_import_module = None
+        _cached_module_graph_._hooks_pre_find_module_path = None
+
+    return graph
+
+
+def get_bootstrap_modules():
+    """
+    Get TOC with the bootstrapping modules and their dependencies.
+    :return: TOC with modules
+    """
+    # Import 'struct' modules to get real paths to module file names.
+    mod_struct = __import__('struct')
+    # Basic modules necessary for the bootstrap process.
+    loader_mods = TOC()
+    loaderpath = os.path.join(HOMEPATH, 'PyInstaller', 'loader')
+    # On some platforms (Windows, Debian/Ubuntu) '_struct' and zlib modules are built-in modules (linked statically)
+    # and thus does not have attribute __file__. 'struct' module is required for reading Python bytecode from
+    # executable. 'zlib' is required to decompress this bytecode.
+    for mod_name in ['_struct', 'zlib']:
+        mod = __import__(mod_name)  # C extension.
+        if hasattr(mod, '__file__'):
+            mod_file = os.path.abspath(mod.__file__)
+            if os.path.basename(os.path.dirname(mod_file)) == 'lib-dynload':
+                # Divert extensions originating from python's lib-dynload directory, to match behavior of #5604.
+                mod_name = os.path.join('lib-dynload', mod_name)
+            loader_mods.append((mod_name, mod_file, 'EXTENSION'))
+    # NOTE:These modules should be kept simple without any complicated dependencies.
+    loader_mods += [
+        ('struct', os.path.abspath(mod_struct.__file__), 'PYMODULE'),
+        ('pyimod01_os_path', os.path.join(loaderpath, 'pyimod01_os_path.pyc'), 'PYMODULE'),
+        ('pyimod02_archive', os.path.join(loaderpath, 'pyimod02_archive.pyc'), 'PYMODULE'),
+        ('pyimod03_importers', os.path.join(loaderpath, 'pyimod03_importers.pyc'), 'PYMODULE'),
+        ('pyimod04_ctypes', os.path.join(loaderpath, 'pyimod04_ctypes.pyc'), 'PYMODULE'),
+        ('pyiboot01_bootstrap', os.path.join(loaderpath, 'pyiboot01_bootstrap.py'), 'PYSOURCE'),
+    ]
+    return loader_mods

+ 947 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/bindepend.py

@@ -0,0 +1,947 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2013-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Find external dependencies of binary libraries.
+"""
+
+import collections
+import ctypes.util
+import os
+import re
+import sys
+# Required for extracting eggs.
+import zipfile
+import subprocess
+
+from PyInstaller import compat
+from PyInstaller import log as logging
+from PyInstaller.depend import dylib, utils
+from PyInstaller.utils.win32 import winutils
+
+logger = logging.getLogger(__name__)
+
+seen = set()
+
+# Import windows specific stuff.
+if compat.is_win:
+    from distutils.sysconfig import get_python_lib
+
+    import pefile
+
+    from PyInstaller.utils.win32 import winmanifest, winresource
+
+
+def getfullnameof(mod, xtrapath=None):
+    """
+    Return the full path name of MOD.
+
+    * MOD is the basename of a dll or pyd.
+    * XTRAPATH is a path or list of paths to search first.
+
+    Return the full path name of MOD. Will search the full Windows search path, as well as sys.path
+    """
+    pywin32_paths = []
+    if compat.is_win:
+        pywin32_paths = [os.path.join(get_python_lib(), 'pywin32_system32')]
+        if compat.is_venv:
+            pywin32_paths.append(os.path.join(compat.base_prefix, 'Lib', 'site-packages', 'pywin32_system32'))
+
+    epath = (
+        sys.path +  # Search sys.path first!
+        pywin32_paths + winutils.get_system_path() + compat.getenv('PATH', '').split(os.pathsep)
+    )
+    if xtrapath is not None:
+        if isinstance(xtrapath, str):
+            epath.insert(0, xtrapath)
+        else:
+            epath = xtrapath + epath
+    for p in epath:
+        npth = os.path.join(p, mod)
+        if os.path.exists(npth) and matchDLLArch(npth):
+            return npth
+    return ''
+
+
+def _getImports_pe(pth):
+    """
+    Find the binary dependencies of PTH.
+
+    This implementation walks through the PE header and uses library pefile for that and supports 32/64bit Windows
+    """
+    dlls = set()
+    # By default, pefile library parses all PE information. We are only interested in the list of dependent dlls.
+    # Performance is improved by reading only needed information. https://code.google.com/p/pefile/wiki/UsageExamples
+
+    pe = pefile.PE(pth, fast_load=True)
+    pe.parse_data_directories(
+        directories=[
+            pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT'],
+            pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_EXPORT'],
+        ],
+        forwarded_exports_only=True,
+        import_dllnames_only=True,
+    )
+
+    # Some libraries have no other binary dependencies. Use empty list in that case. Otherwise pefile would return None.
+    # e.g., C:\windows\system32\kernel32.dll on Wine
+    for entry in getattr(pe, 'DIRECTORY_ENTRY_IMPORT', []):
+        dll_str = winutils.convert_dll_name_to_str(entry.dll)
+        dlls.add(dll_str)
+
+    # We must also read the exports table to find forwarded symbols:
+    # http://blogs.msdn.com/b/oldnewthing/archive/2006/07/19/671238.aspx
+    exportSymbols = getattr(pe, 'DIRECTORY_ENTRY_EXPORT', None)
+    if exportSymbols:
+        for sym in exportSymbols.symbols:
+            if sym.forwarder is not None:
+                # sym.forwarder is a bytes object. Convert it to a string.
+                forwarder = winutils.convert_dll_name_to_str(sym.forwarder)
+                # sym.forwarder is for example 'KERNEL32.EnterCriticalSection'
+                dll = forwarder.split('.')[0]
+                dlls.add(dll + ".dll")
+
+    pe.close()
+    return dlls
+
+
+def _extract_from_egg(toc):
+    """
+    Ensure all binary modules in zipped eggs get extracted and included with the frozen executable.
+
+    return  modified table of content
+    """
+    new_toc = []
+    for item in toc:
+        # Item is a tuple
+        #  (mod_name, path, type)
+        modname, pth, typ = item
+        if not os.path.isfile(pth):
+            pth = check_extract_from_egg(pth)[0][0]
+
+        # Add value to new data structure.
+        new_toc.append((modname, pth, typ))
+    return new_toc
+
+
+BindingRedirect = collections.namedtuple('BindingRedirect', 'name language arch oldVersion newVersion publicKeyToken')
+
+
+def match_binding_redirect(manifest, redirect):
+    return all([
+        manifest.name == redirect.name,
+        manifest.version == redirect.oldVersion,
+        manifest.language == redirect.language,
+        manifest.processorArchitecture == redirect.arch,
+        manifest.publicKeyToken == redirect.publicKeyToken,
+    ])
+
+
+_exe_machine_type = None
+
+
+def matchDLLArch(filename):
+    """
+    Return True if the DLL given by filename matches the CPU type/architecture of the Python process running
+    PyInstaller.
+
+    Always returns True on non-Windows platforms.
+
+    :param filename:
+    :type filename:
+    :return:
+    :rtype:
+    """
+    # TODO: check machine type on other platforms?
+    if not compat.is_win:
+        return True
+
+    global _exe_machine_type
+    try:
+        if _exe_machine_type is None:
+            pefilename = compat.python_executable  # for exception handling
+            exe_pe = pefile.PE(pefilename, fast_load=True)
+            _exe_machine_type = exe_pe.FILE_HEADER.Machine
+            exe_pe.close()
+
+        pefilename = filename  # for exception handling
+        pe = pefile.PE(filename, fast_load=True)
+        match_arch = pe.FILE_HEADER.Machine == _exe_machine_type
+        pe.close()
+    except pefile.PEFormatError as exc:
+        raise SystemExit('Cannot get architecture from file: %s\n  Reason: %s' % (pefilename, exc))
+    return match_arch
+
+
+def Dependencies(lTOC, xtrapath=None, manifest=None, redirects=None):
+    """
+    Expand LTOC to include all the closure of binary dependencies.
+
+    `LTOC` is a logical table of contents, ie, a seq of tuples (name, path). Return LTOC expanded by all the binary
+    dependencies of the entries in LTOC, except those listed in the module global EXCLUDES
+
+    `manifest` may be a winmanifest.Manifest instance for a program manifest, so that all dependent assemblies of
+    python.exe can be added to the built exe.
+
+    `redirects` may be a list. Any assembly redirects found via policy files will be added to the list as
+    BindingRedirect objects so they can later be used to modify any manifests that reference the redirected assembly.
+    """
+    # Extract all necessary binary modules from Python eggs to be included directly with PyInstaller.
+    lTOC = _extract_from_egg(lTOC)
+
+    for nm, pth, typ in lTOC:
+        if nm.upper() in seen:
+            continue
+        logger.debug("Analyzing %s", pth)
+        seen.add(nm.upper())
+        if compat.is_win:
+            for ftocnm, fn in getAssemblyFiles(pth, manifest, redirects):
+                lTOC.append((ftocnm, fn, 'BINARY'))
+        for lib, npth in selectImports(pth, xtrapath):
+            if lib.upper() in seen or npth.upper() in seen:
+                continue
+            seen.add(npth.upper())
+            lTOC.append((lib, npth, 'BINARY'))
+
+    return lTOC
+
+
+def pkg_resources_get_default_cache():
+    """
+    Determine the default cache location
+
+    This returns the ``PYTHON_EGG_CACHE`` environment variable, if set. Otherwise, on Windows, it returns a
+    'Python-Eggs' subdirectory of the 'Application Data' directory.  On all other systems, it's '~/.python-eggs'.
+    """
+    # This function borrowed from setuptools/pkg_resources
+    egg_cache = compat.getenv('PYTHON_EGG_CACHE')
+    if egg_cache is not None:
+        return egg_cache
+
+    if os.name != 'nt':
+        return os.path.expanduser('~/.python-eggs')
+
+    app_data = 'Application Data'  # XXX this may be locale-specific!
+    app_homes = [
+        (('APPDATA',), None),  # best option, should be locale-safe
+        (('USERPROFILE',), app_data),
+        (('HOMEDRIVE', 'HOMEPATH'), app_data),
+        (('HOMEPATH',), app_data),
+        (('HOME',), None),
+        (('WINDIR',), app_data),  # 95/98/ME
+    ]
+
+    for keys, subdir in app_homes:
+        dirname = ''
+        for key in keys:
+            if key in os.environ:
+                dirname = os.path.join(dirname, compat.getenv(key))
+            else:
+                break
+        else:
+            if subdir:
+                dirname = os.path.join(dirname, subdir)
+            return os.path.join(dirname, 'Python-Eggs')
+    else:
+        raise RuntimeError("Please set the PYTHON_EGG_CACHE environment variable")
+
+
+def check_extract_from_egg(pth, todir=None):
+    r"""
+    Check if path points to a file inside a python egg file, extract the file from the egg to a cache directory (
+    following pkg_resources convention) and return [(extracted path, egg file path, relative path inside egg file)].
+
+    Otherwise, just return [(original path, None, None)]. If path points to an egg file directly, return a list with
+    all files from the egg formatted like above.
+
+    Example:
+    >>> check_extract_from_egg(r'C:\Python26\Lib\site-packages\my.egg\mymodule\my.pyd')
+    [(r'C:\Users\UserName\AppData\Roaming\Python-Eggs\my.egg-tmp\mymodule\my.pyd',
+    r'C:\Python26\Lib\site-packages\my.egg', r'mymodule/my.pyd')]
+    """
+    rv = []
+    if os.path.altsep:
+        pth = pth.replace(os.path.altsep, os.path.sep)
+    components = pth.split(os.path.sep)
+    for i, name in enumerate(components):
+        if name.lower().endswith(".egg"):
+            eggpth = os.path.sep.join(components[:i + 1])
+            if os.path.isfile(eggpth):
+                # eggs can also be directories!
+                try:
+                    egg = zipfile.ZipFile(eggpth)
+                except zipfile.BadZipfile as e:
+                    raise SystemExit("Error: %s %s" % (eggpth, e))
+                if todir is None:
+                    # Use the same directory as setuptools/pkg_resources. So, if the specific egg was accessed before
+                    # (not necessarily by pyinstaller), the extracted contents already exist (pkg_resources puts them
+                    # there) and can be used.
+                    todir = os.path.join(pkg_resources_get_default_cache(), name + "-tmp")
+                if components[i + 1:]:
+                    members = ["/".join(components[i + 1:])]
+                else:
+                    members = egg.namelist()
+                for member in members:
+                    pth = os.path.join(todir, member)
+                    if not os.path.isfile(pth):
+                        dirname = os.path.dirname(pth)
+                        if not os.path.isdir(dirname):
+                            os.makedirs(dirname)
+                        with open(pth, "wb") as f:
+                            f.write(egg.read(member))
+                    rv.append((pth, eggpth, member))
+                return rv
+    return [(pth, None, None)]
+
+
+def getAssemblies(pth):
+    """
+    On Windows return the dependent Side-by-Side (SxS) assemblies of a binary as a list of Manifest objects.
+
+    Dependent assemblies are required only by binaries compiled with MSVC 9.0. Python 2.7 and 3.2 are compiled with
+    MSVC 9.0 and thus depend on Microsoft Redistributable runtime libraries 9.0.
+
+    Python 3.3+ is compiled with version 10.0 and does not use SxS assemblies.
+
+    FIXME: Can this be removed since we now only support Python 3.5+?
+    FIXME: IS there some test-case covering this?
+    """
+    if pth.lower().endswith(".manifest"):
+        return []
+    # check for manifest file
+    manifestnm = pth + ".manifest"
+    if os.path.isfile(manifestnm):
+        with open(manifestnm, "rb") as fd:
+            res = {winmanifest.RT_MANIFEST: {1: {0: fd.read()}}}
+    else:
+        # check the binary for embedded manifest
+        try:
+            res = winmanifest.GetManifestResources(pth)
+        except winresource.pywintypes.error as exc:
+            if exc.args[0] == winresource.ERROR_BAD_EXE_FORMAT:
+                logger.info('Cannot get manifest resource from non-PE file %s', pth)
+                return []
+            raise
+    rv = []
+    if winmanifest.RT_MANIFEST in res and len(res[winmanifest.RT_MANIFEST]):
+        for name in res[winmanifest.RT_MANIFEST]:
+            for language in res[winmanifest.RT_MANIFEST][name]:
+                # check the manifest for dependent assemblies
+                try:
+                    manifest = winmanifest.Manifest()
+                    manifest.filename = ":".join([
+                        pth,
+                        str(winmanifest.RT_MANIFEST),
+                        str(name),
+                        str(language),
+                    ])
+                    manifest.parse_string(res[winmanifest.RT_MANIFEST][name][language], False)
+                except Exception:
+                    logger.error("Cannot parse manifest resource %s, %s from %s", name, language, pth, exc_info=1)
+                else:
+                    if manifest.dependentAssemblies:
+                        logger.debug("Dependent assemblies of %s:", pth)
+                        logger.debug(", ".join([assembly.getid() for assembly in manifest.dependentAssemblies]))
+                    rv.extend(manifest.dependentAssemblies)
+    return rv
+
+
+def getAssemblyFiles(pth, manifest=None, redirects=None):
+    """
+    Find all assemblies that are dependencies of the given binary and return the files that make up the assemblies as
+    (name, fullpath) tuples.
+
+    If a WinManifest object is passed as `manifest`, also updates that manifest to reference the returned assemblies.
+    This is done only to update the built app's .exe with the dependencies of python.exe
+
+    If a list is passed as `redirects`, and binding redirects in policy files are applied when searching for
+    assemblies, BindingRedirect objects are appended to this list.
+
+    Return a list of pairs (name, fullpath)
+    """
+    rv = []
+    if manifest:
+        _depNames = set(dep.name for dep in manifest.dependentAssemblies)
+    for assembly in getAssemblies(pth):
+        if assembly.getid().upper() in seen:
+            continue
+        if manifest and assembly.name not in _depNames:
+            # Add assembly as dependency to our final output exe's manifest
+            logger.info("Adding %s to dependent assemblies of final executable\n  required by %s", assembly.name, pth)
+            manifest.dependentAssemblies.append(assembly)
+            _depNames.add(assembly.name)
+        if not dylib.include_library(assembly.name):
+            logger.debug("Skipping assembly %s", assembly.getid())
+            continue
+        if assembly.optional:
+            logger.debug("Skipping optional assembly %s", assembly.getid())
+            continue
+
+        from PyInstaller.config import CONF
+        if CONF.get("win_no_prefer_redirects"):
+            files = assembly.find_files()
+        else:
+            files = []
+        if not len(files):
+            # If no files were found, it may be the case that the required version of the assembly is not installed, and
+            # the policy file is redirecting it to a newer version. So, we collect the newer version instead.
+            files = assembly.find_files(ignore_policies=False)
+            if len(files) and redirects is not None:
+                # New version was found, old version was not. Add a redirect in the app configuration.
+                old_version = assembly.version
+                new_version = assembly.get_policy_redirect()
+                logger.info("Adding redirect %s version %s -> %s", assembly.name, old_version, new_version)
+                redirects.append(
+                    BindingRedirect(
+                        name=assembly.name,
+                        language=assembly.language,
+                        arch=assembly.processorArchitecture,
+                        publicKeyToken=assembly.publicKeyToken,
+                        oldVersion=old_version,
+                        newVersion=new_version,
+                    )
+                )
+
+        if files:
+            seen.add(assembly.getid().upper())
+            for fn in files:
+                fname, fext = os.path.splitext(fn)
+                if fext.lower() == ".manifest":
+                    nm = assembly.name + fext
+                else:
+                    nm = os.path.basename(fn)
+                ftocnm = nm
+                if assembly.language not in (None, "", "*", "neutral"):
+                    ftocnm = os.path.join(assembly.getlanguage(), ftocnm)
+                nm, ftocnm, fn = [item.encode(sys.getfilesystemencoding()) for item in (nm, ftocnm, fn)]
+                if fn.upper() not in seen:
+                    logger.debug("Adding %s", ftocnm)
+                    seen.add(nm.upper())
+                    seen.add(fn.upper())
+                    rv.append((ftocnm, fn))
+                else:
+                    #logger.info("skipping %s part of assembly %s dependency of %s", ftocnm, assembly.name, pth)
+                    pass
+        else:
+            logger.error("Assembly %s not found", assembly.getid())
+
+    # Convert items in list from 'bytes' type to 'str' type.
+    # NOTE: with Python 3 we somehow get type 'bytes' and it then causes other issues and failures with PyInstaller.
+    new_rv = []
+    for item in rv:
+        a = item[0].decode('ascii')
+        b = item[1].decode('ascii')
+        new_rv.append((a, b))
+    rv = new_rv
+
+    return rv
+
+
+def selectImports(pth, xtrapath=None):
+    """
+    Return the dependencies of a binary that should be included.
+
+    Return a list of pairs (name, fullpath)
+    """
+    rv = []
+    if xtrapath is None:
+        xtrapath = [os.path.dirname(pth)]
+    else:
+        assert isinstance(xtrapath, list)
+        xtrapath = [os.path.dirname(pth)] + xtrapath  # make a copy
+    dlls = getImports(pth)
+    for lib in dlls:
+        if lib.upper() in seen:
+            continue
+        if not compat.is_win:
+            # all other platforms
+            npth = lib
+            lib = os.path.basename(lib)
+        else:
+            # plain win case
+            npth = getfullnameof(lib, xtrapath)
+
+        # Now npth is a candidate lib if found. Check again for excludes, but with regex. FIXME: split the list.
+        if npth:
+            candidatelib = npth
+        else:
+            candidatelib = lib
+
+        if not dylib.include_library(candidatelib):
+            if candidatelib.find('libpython') < 0 and candidatelib.find('Python.framework') < 0:
+                # skip libs not containing (libpython or Python.framework)
+                if npth.upper() not in seen:
+                    logger.debug("Skipping %s dependency of %s", lib, os.path.basename(pth))
+                continue
+            else:
+                pass
+
+        if npth:
+            if npth.upper() not in seen:
+                logger.debug("Adding %s dependency of %s from %s", lib, os.path.basename(pth), npth)
+                rv.append((lib, npth))
+        elif dylib.warn_missing_lib(lib):
+            logger.warning("lib not found: %s dependency of %s", lib, pth)
+
+    return rv
+
+
+def _getImports_ldd(pth):
+    """
+    Find the binary dependencies of PTH.
+
+    This implementation is for ldd platforms (mostly unix).
+    """
+    rslt = set()
+    if compat.is_aix:
+        # Match libs of the form
+        #   'archivelib.a(objectmember.so/.o)'
+        # or
+        #   'sharedlib.so'
+        # Will not match the fake lib '/unix'
+        lddPattern = re.compile(r"^\s*(((?P<libarchive>(.*\.a))(?P<objectmember>\(.*\)))|((?P<libshared>(.*\.so))))$")
+    elif compat.is_hpux:
+        # Match libs of the form
+        #   'sharedlib.so => full-path-to-lib
+        # e.g.
+        #   'libpython2.7.so =>      /usr/local/lib/hpux32/libpython2.7.so'
+        lddPattern = re.compile(r"^\s+(.*)\s+=>\s+(.*)$")
+    elif compat.is_solar:
+        # Match libs of the form
+        #   'sharedlib.so => full-path-to-lib
+        # e.g.
+        #   'libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0'
+        # Will not match the platform specific libs starting with '/platform'
+        lddPattern = re.compile(r"^\s+(.*)\s+=>\s+(.*)$")
+    else:
+        lddPattern = re.compile(r"\s*(.*?)\s+=>\s+(.*?)\s+\(.*\)")
+
+    p = subprocess.run(['ldd', pth], stderr=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True)
+
+    for line in p.stderr.splitlines():
+        if not line:
+            continue
+        # Python extensions (including stdlib ones) are not linked against python.so but rely on Python's symbols having
+        # already been loaded into symbol space at runtime. musl's ldd issues a series of harmless warnings to stderr
+        # telling us that those symbols are unfindable. These should be suppressed.
+        elif line.startswith("Error relocating ") and line.endswith(" symbol not found"):
+            continue
+        # Propagate any other warnings it might have.
+        print(line, file=sys.stderr)
+
+    for line in p.stdout.splitlines():
+        m = lddPattern.search(line)
+        if m:
+            if compat.is_aix:
+                libarchive = m.group('libarchive')
+                if libarchive:
+                    # We matched an archive lib with a request for a particular embedded shared object.
+                    #   'archivelib.a(objectmember.so/.o)'
+                    lib = libarchive
+                    name = os.path.basename(lib) + m.group('objectmember')
+                else:
+                    # We matched a stand-alone shared library.
+                    #   'sharedlib.so'
+                    lib = m.group('libshared')
+                    name = os.path.basename(lib)
+            elif compat.is_hpux:
+                name, lib = m.group(1), m.group(2)
+            else:
+                name, lib = m.group(1), m.group(2)
+            if name[:10] in ('linux-gate', 'linux-vdso'):
+                # linux-gate is a fake library which does not exist and should be ignored. See also:
+                # http://www.trilithium.com/johan/2005/08/linux-gate/
+                continue
+
+            if compat.is_cygwin:
+                # exclude Windows system library
+                if lib.lower().startswith('/cygdrive/c/windows/system'):
+                    continue
+
+            if os.path.exists(lib):
+                # Add lib if it is not already found.
+                if lib not in rslt:
+                    rslt.add(lib)
+            elif dylib.warn_missing_lib(name):
+                logger.warning('Cannot find %s in path %s (needed by %s)', name, lib, pth)
+        elif line.endswith("not found"):
+            # On glibc-based linux distributions, missing libraries are marked with name.so => not found
+            tokens = line.split('=>')
+            if len(tokens) != 2:
+                continue
+            name = tokens[0].strip()
+            if dylib.warn_missing_lib(name):
+                logger.warning('Cannot find %s (needed by %s)', name, pth)
+    return rslt
+
+
+def _getImports_macholib(pth):
+    """
+    Find the binary dependencies of PTH.
+
+    This implementation is for Mac OS X and uses library macholib.
+    """
+    from macholib.dyld import dyld_find
+    from macholib.mach_o import LC_RPATH
+    from macholib.MachO import MachO
+    from macholib.util import in_system_path
+    rslt = set()
+    seen = set()  # Libraries read from binary headers.
+
+    #- Walk through mach binary headers.
+
+    m = MachO(pth)
+    for header in m.headers:
+        for idx, name, lib in header.walkRelocatables():
+            # Sometimes libraries are present multiple times.
+            if lib not in seen:
+                seen.add(lib)
+
+    # Walk through mach binary headers and look for LC_RPATH. macholib can't handle @rpath. LC_RPATH has to be read from
+    # the MachO header.
+    # TODO Do we need to remove LC_RPATH from MachO load commands? Will it cause any harm to leave them untouched?
+    #      Removing LC_RPATH should be implemented when getting files from the bincache if it is necessary.
+    run_paths = set()
+    for header in m.headers:
+        for command in header.commands:
+            # A command is a tuple like:
+            #   (<macholib.mach_o.load_command object at 0x>,
+            #    <macholib.mach_o.rpath_command object at 0x>,
+            #    '../lib\x00\x00')
+            cmd_type = command[0].cmd
+            if cmd_type == LC_RPATH:
+                rpath = command[2].decode('utf-8')
+                # Remove trailing '\x00' characters. E.g., '../lib\x00\x00'
+                rpath = rpath.rstrip('\x00')
+                # Replace the @executable_path and @loader_path keywords with the actual path to the binary.
+                executable_path = os.path.dirname(pth)
+                rpath = re.sub('^@(executable_path|loader_path|rpath)(/|$)', executable_path + r'\2', rpath)
+                # Make rpath absolute. According to Apple doc LC_RPATH is always relative to the binary location.
+                rpath = os.path.normpath(os.path.join(executable_path, rpath))
+                run_paths.update([rpath])
+            else:
+                # Frameworks that have this structure Name.framework/Versions/N/Name need to search at the same level
+                # as the framework dir. This is specifically needed so that the QtWebEngine dependencies can be found.
+                if '.framework' in pth:
+                    run_paths.update(['../../../'])
+
+    # For distributions like Anaconda, all of the dylibs are stored in the lib directory of the Python distribution, not
+    # alongside of the .so's in each module's subdirectory.
+    run_paths.add(os.path.join(compat.base_prefix, 'lib'))
+
+    #- Try to find files in file system.
+
+    # In cases with @loader_path or @executable_path try to look in the same directory as the checked binary is. This
+    # seems to work in most cases.
+    exec_path = os.path.abspath(os.path.dirname(pth))
+
+    for lib in seen:
+        # Suppose that @rpath is not used for system libraries and using macholib can be avoided. macholib cannot handle
+        # @rpath.
+        if lib.startswith('@rpath'):
+            lib = lib.replace('@rpath', '.')  # Make path relative.
+            final_lib = None  # Absolute path to existing lib on disk.
+            # Try multiple locations.
+            for run_path in run_paths:
+                # @rpath may contain relative value. Use exec_path as base path.
+                if not os.path.isabs(run_path):
+                    run_path = os.path.join(exec_path, run_path)
+                # Stop looking for lib when found in first location.
+                if os.path.exists(os.path.join(run_path, lib)):
+                    final_lib = os.path.abspath(os.path.join(run_path, lib))
+                    rslt.add(final_lib)
+                    break
+            # Log warning if no existing file found.
+            if not final_lib and dylib.warn_missing_lib(lib):
+                logger.warning('Cannot find path %s (needed by %s)', lib, pth)
+
+        # Macholib has to be used to get absolute path to libraries.
+        else:
+            # macholib cannot handle @loader_path. It has to be handled the same way as @executable_path. It is also
+            # replaced by 'exec_path'.
+            if lib.startswith('@loader_path'):
+                lib = lib.replace('@loader_path', '@executable_path')
+            try:
+                lib = dyld_find(lib, executable_path=exec_path)
+                rslt.add(lib)
+            except ValueError:
+                # Starting with Big Sur, system libraries are hidden. And we do not collect system libraries on any
+                # macOS version anyway, so suppress the corresponding error messages.
+                if not in_system_path(lib) and dylib.warn_missing_lib(lib):
+                    logger.warning('Cannot find path %s (needed by %s)', lib, pth)
+
+    return rslt
+
+
+def getImports(pth):
+    """
+    Forwards to the correct getImports implementation for the platform.
+    """
+    if compat.is_win:
+        if pth.lower().endswith(".manifest"):
+            return []
+        try:
+            return _getImports_pe(pth)
+        except Exception as exception:
+            # Assemblies can pull in files which aren't necessarily PE, but are still needed by the assembly. Any
+            # additional binary dependencies should already have been handled by selectAssemblies in that case, so just
+            # warn, return an empty list and continue. For less specific errors also log the traceback.
+            logger.warning('Cannot get binary dependencies for file: %s', pth)
+            logger.warning('  Reason: %s', exception, exc_info=not isinstance(exception, pefile.PEFormatError))
+            return []
+    elif compat.is_darwin:
+        return _getImports_macholib(pth)
+    else:
+        return _getImports_ldd(pth)
+
+
+def findLibrary(name):
+    """
+    Look for a library in the system.
+
+    Emulate the algorithm used by dlopen. `name` must include the prefix, e.g., ``libpython2.4.so``.
+    """
+    assert compat.is_unix, "Current implementation for Unix only (Linux, Solaris, AIX, FreeBSD)"
+
+    # Look in the LD_LIBRARY_PATH according to platform.
+    if compat.is_aix:
+        lp = compat.getenv('LIBPATH', '')
+    elif compat.is_darwin:
+        lp = compat.getenv('DYLD_LIBRARY_PATH', '')
+    else:
+        lp = compat.getenv('LD_LIBRARY_PATH', '')
+    lib = _which_library(name, filter(None, lp.split(os.pathsep)))
+
+    # Look in /etc/ld.so.cache
+    # Solaris does not have /sbin/ldconfig. Just check if this file exists.
+    if lib is None:
+        utils.load_ldconfig_cache()
+        lib = utils.LDCONFIG_CACHE.get(name)
+        if lib:
+            assert os.path.isfile(lib)
+
+    # Look in the known safe paths.
+    if lib is None:
+        # Architecture independent locations.
+        paths = ['/lib', '/usr/lib']
+        # Architecture dependent locations.
+        if compat.architecture == '32bit':
+            paths.extend(['/lib32', '/usr/lib32'])
+        else:
+            paths.extend(['/lib64', '/usr/lib64'])
+        # Machine dependent locations.
+        if compat.machine == 'intel':
+            if compat.architecture == '32bit':
+                paths.extend(['/usr/lib/i386-linux-gnu'])
+            else:
+                paths.extend(['/usr/lib/x86_64-linux-gnu'])
+
+        # On Debian/Ubuntu /usr/bin/python is linked statically with libpython. Newer Debian/Ubuntu with multiarch
+        # support puts the libpythonX.Y.so in paths like /usr/lib/i386-linux-gnu/.
+        try:
+            # Module available only in Python 2.7+
+            import sysconfig
+
+            # 'multiarchsubdir' works on Debian/Ubuntu only in Python 2.7 and 3.3+.
+            arch_subdir = sysconfig.get_config_var('multiarchsubdir')
+            # Ignore if None is returned.
+            if arch_subdir:
+                arch_subdir = os.path.basename(arch_subdir)
+                paths.append(os.path.join('/usr/lib', arch_subdir))
+            else:
+                logger.debug('Multiarch directory not detected.')
+        except ImportError:
+            logger.debug('Multiarch directory not detected.')
+
+        # Termux (a Ubuntu like subsystem for Android) has an additional libraries directory.
+        if os.path.isdir('/data/data/com.termux/files/usr/lib'):
+            paths.append('/data/data/com.termux/files/usr/lib')
+
+        if compat.is_aix:
+            paths.append('/opt/freeware/lib')
+        elif compat.is_hpux:
+            if compat.architecture == '32bit':
+                paths.append('/usr/local/lib/hpux32')
+            else:
+                paths.append('/usr/local/lib/hpux64')
+        elif compat.is_freebsd or compat.is_openbsd:
+            paths.append('/usr/local/lib')
+        lib = _which_library(name, paths)
+
+    # Give up :(
+    if lib is None:
+        return None
+
+    # Resolve the file name into the soname
+    if compat.is_freebsd or compat.is_aix or compat.is_openbsd:
+        # On FreeBSD objdump does not show SONAME, and on AIX objdump does not exist, so we just return the lib we
+        # have found.
+        return lib
+    else:
+        dir = os.path.dirname(lib)
+        return os.path.join(dir, _get_so_name(lib))
+
+
+def _which_library(name, dirs):
+    """
+    Search for a shared library in a list of directories.
+
+    Args:
+        name:
+            The library name including the `lib` prefix but excluding any `.so` suffix.
+        dirs:
+            An iterable of folders to search in.
+    Returns:
+        The path to the library if found or None otherwise.
+
+    """
+    matcher = _library_matcher(name)
+    for path in filter(os.path.exists, dirs):
+        for _path in os.listdir(path):
+            if matcher(_path):
+                return os.path.join(path, _path)
+
+
+def _library_matcher(name):
+    """
+    Create a callable that matches libraries if **name** is a valid library prefix for input library full names.
+    """
+    return re.compile(name + r"[0-9]*\.").match
+
+
+def _get_so_name(filename):
+    """
+    Return the soname of a library.
+
+    Soname is useful when there are multiple symplinks to one library.
+    """
+    # TODO verify that objdump works on other unixes and not Linux only.
+    cmd = ["objdump", "-p", filename]
+    pattern = r'\s+SONAME\s+([^\s]+)'
+    if compat.is_solar:
+        cmd = ["elfdump", "-d", filename]
+        pattern = r'\s+SONAME\s+[^\s]+\s+([^\s]+)'
+    m = re.search(pattern, compat.exec_command(*cmd))
+    return m.group(1)
+
+
+def get_python_library_path():
+    """
+    Find dynamic Python library that will be bundled with frozen executable.
+
+    NOTE: This is a fallback option when the Python executable is likely statically linked with the Python library and
+          we need to search more for it. For example, this is the case on Debian/Ubuntu.
+
+    Return  full path to Python dynamic library or None when not found.
+
+    We need to know name of the Python dynamic library for the bootloader. Bootloader has to know what library to
+    load and not try to guess.
+
+    Some linux distributions (e.g. debian-based) statically link the Python executable to the libpython,
+    so bindepend does not include it in its output. In this situation let's try to find it.
+
+    Custom Mac OS builds could possibly also have non-framework style libraries, so this method also checks for that
+    variant as well.
+    """
+    def _find_lib_in_libdirs(*libdirs):
+        for libdir in libdirs:
+            for name in compat.PYDYLIB_NAMES:
+                full_path = os.path.join(libdir, name)
+                if os.path.exists(full_path):
+                    return full_path
+        return None
+
+    # If this is Microsoft App Store Python, check the compat.base_path first. While compat.python_executable resolves
+    # to actual python.exe file, the latter contains relative library reference that does not get properly resolved by
+    # getfullnameof().
+    if compat.is_ms_app_store:
+        python_libname = _find_lib_in_libdirs(compat.base_prefix)
+        if python_libname:
+            return python_libname
+
+    # Try to get Python library name from the Python executable. It assumes that Python library is not statically
+    # linked.
+    dlls = getImports(compat.python_executable)
+    for filename in dlls:
+        for name in compat.PYDYLIB_NAMES:
+            if os.path.basename(filename) == name:
+                # On Windows filename is just like 'python27.dll'. Convert it to absolute path.
+                if compat.is_win and not os.path.isabs(filename):
+                    filename = getfullnameof(filename)
+                # Python library found. Return absolute path to it.
+                return filename
+
+    # Python library NOT found. Resume searching using alternative methods.
+
+    # Work around for python venv having VERSION.dll rather than pythonXY.dll
+    if compat.is_win and 'VERSION.dll' in dlls:
+        pydll = 'python%d%d.dll' % sys.version_info[:2]
+        return getfullnameof(pydll)
+
+    # Applies only to non Windows platforms and conda.
+
+    if compat.is_conda:
+        # Conda needs to be the first here since it overrules the operating system specific paths.
+        python_libname = _find_lib_in_libdirs(os.path.join(compat.base_prefix, 'lib'))
+        if python_libname:
+            return python_libname
+
+    elif compat.is_unix:
+        for name in compat.PYDYLIB_NAMES:
+            python_libname = findLibrary(name)
+            if python_libname:
+                return python_libname
+
+    if compat.is_darwin or compat.is_linux:
+        # On MacPython, Analysis.assemble is able to find the libpython with no additional help, asking for
+        # sys.executable dependencies. However, this fails on system python, because the shared library is not listed as
+        # a dependency of the binary (most probably it is opened at runtime using some dlopen trickery). This happens on
+        # Mac OS when Python is compiled as Framework.
+        # Linux using pyenv is similarly linked so that sys.executable dependencies does not yield libpython.so.
+
+        # Python compiled as Framework contains same values in sys.prefix and exec_prefix. That is why we can use just
+        # sys.prefix. In virtualenv, PyInstaller is not able to find Python library. We need special care for this case.
+        python_libname = _find_lib_in_libdirs(
+            compat.base_prefix,
+            os.path.join(compat.base_prefix, 'lib'),
+        )
+        if python_libname:
+            return python_libname
+
+    # Python library NOT found. Provide helpful feedback.
+    msg = """Python library not found: %s
+    This means your Python installation does not come with proper shared library files.
+    This usually happens due to missing development package, or unsuitable build parameters of the Python installation.
+
+    * On Debian/Ubuntu, you need to install Python development packages:
+      * apt-get install python3-dev
+      * apt-get install python-dev
+    * If you are building Python by yourself, rebuild with `--enable-shared` (or, `--enable-framework` on macOS).
+    """ % (", ".join(compat.PYDYLIB_NAMES),)
+    raise IOError(msg)
+
+
+def findSystemLibrary(name):
+    """
+    Given a library name, try to resolve the path to that library.
+
+    If the path is already an absolute path, return it without searching.
+    """
+
+    if os.path.isabs(name):
+        return name
+
+    if compat.is_unix:
+        return findLibrary(name)
+    elif compat.is_win:
+        return getfullnameof(name)
+    else:
+        # This seems to work, and is similar to what we have above..
+        return ctypes.util.find_library(name)

+ 250 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/bytecode.py

@@ -0,0 +1,250 @@
+# -*- coding: utf-8 -*-
+"""
+Tools for searching bytecode for key statements that indicate the need for additional resources, such as data files
+and package metadata.
+
+By *bytecode* I mean the ``code`` object given by ``compile()``, accessible from the ``__code__`` attribute of any
+non-builtin function or, in PyInstallerLand, the ``PyiModuleGraph.node("some.module").code`` attribute. The best
+guide for bytecode format I have found is the disassembler reference: https://docs.python.org/3/library/dis.html
+
+This parser implementation aims to combine the flexibility and speed of regex with the clarity of the output of
+``dis.dis(code)``. It has not achieved the 2nd, but C'est la vie...
+
+The biggest clarity killer here is the ``EXTENDED_ARG`` opcode which can appear almost anywhere and therefore needs
+to be tiptoed around at every step. If this code needs to expand significantly, I would recommend an upgrade to a
+regex-based grammar parsing library such as Reparse. This way, little steps like unpacking ``EXTENDED_ARGS`` can be
+defined once then simply referenced forming a nice hierarchy rather than copied everywhere its needed.
+"""
+
+import dis
+import re
+from types import CodeType
+from typing import Pattern
+
+
+def _instruction_to_regex(x: str):
+    """
+    Get a regex-escaped opcode byte from its human readable name.
+    """
+    if x not in dis.opname:  # pragma: no cover
+        # These opcodes are available only in Python >=3.7. For our purposes, these aliases will do.
+        if x == "LOAD_METHOD":
+            x = "LOAD_ATTR"
+        elif x == "CALL_METHOD":
+            x = "CALL_FUNCTION"
+    return re.escape(bytes([dis.opmap[x]]))
+
+
+def bytecode_regex(pattern: bytes, flags=re.VERBOSE | re.DOTALL):
+    """
+    A regex-powered Python bytecode matcher.
+
+    ``bytecode_regex`` provides a very thin wrapper around :func:`re.compile`.
+
+      * Any opcode names wrapped in backticks are substituted for their corresponding opcode bytes.
+      * Patterns are compiled in VERBOSE mode by default so that whitespace and comments may be used.
+
+    This aims to mirror the output of :func:`dis.dis`, which is far more readable than looking at raw byte strings.
+    """
+    assert isinstance(pattern, bytes)
+
+    # Replace anything wrapped in backticks with regex-escaped opcodes.
+    pattern = re.sub(
+        rb"`(\w+)`",
+        lambda m: _instruction_to_regex(m[1].decode()),
+        pattern,
+    )
+    return re.compile(pattern, flags=flags)
+
+
+def finditer(pattern: Pattern, string):
+    """
+    Call ``pattern.finditer(string)``, but remove any matches beginning on an odd byte (i.e., matches where
+    match.start() is not a multiple of 2).
+
+    This should be used to avoid false positive matches where a bytecode pair's argument is mistaken for an opcode.
+    """
+    matches = pattern.finditer(string)
+    while True:
+        for match in matches:
+            if match.start() % 2 == 0:
+                # All is good. This match starts on an OPCODE.
+                yield match
+            else:
+                # This match has started on an odd byte, meaning that it is a false positive and should be skipped.
+                # There is a very slim chance that a genuine match overlaps this one and, because re.finditer() does not
+                # allow overlapping matches, it would be lost. To avoid that, restart the regex scan, starting at the
+                # next even byte.
+                matches = pattern.finditer(string, match.start() + 1)
+                break
+        else:
+            break
+
+
+# language=PythonVerboseRegExp
+_call_function_bytecode = bytecode_regex(
+    rb"""
+    # Matches `global_function('some', 'constant', 'arguments')`.
+
+    # Load the global function. In code with >256 of names, this may require extended name references.
+    ((?:`EXTENDED_ARG`.)*
+     (?:`LOAD_NAME`|`LOAD_GLOBAL`|`LOAD_FAST`).)
+
+    # For foo.bar.whizz(), the above is the 'foo', below is the 'bar.whizz'.
+    ((?:(?:`EXTENDED_ARG`.)*
+     (?:`LOAD_METHOD`|`LOAD_ATTR`).)*)
+
+    # Load however many arguments it takes. These (for now) must all be constants.
+    # Again, code with >256 constants may need extended enumeration.
+    ((?:(?:`EXTENDED_ARG`.)*
+     `LOAD_CONST`.)*)
+
+    # Call the function. The parameter is the argument count (which may also be >256) if CALL_FUNCTION or CALL_METHOD
+    # are used. For CALL_FUNCTION_EX, the parameter are flags.
+    ((?:`EXTENDED_ARG`.)*
+     (?:`CALL_FUNCTION`|`CALL_METHOD`|`CALL_FUNCTION_EX`).)
+"""
+)
+
+# language=PythonVerboseRegExp
+_extended_arg_bytecode = bytecode_regex(
+    rb"""(
+    # Arbitrary number of EXTENDED_ARG pairs.
+    (?:`EXTENDED_ARG`.)*
+
+    # Followed by some other instruction (usually a LOAD).
+    [^`EXTENDED_ARG`].
+)"""
+)
+
+
+def extended_arguments(extended_args: bytes):
+    """
+    Unpack the (extended) integer used to reference names or constants.
+
+    The input should be a bytecode snippet of the following form::
+
+        EXTENDED_ARG    ?      # Repeated 0-4 times.
+        LOAD_xxx        ?      # Any of LOAD_NAME/LOAD_CONST/LOAD_METHOD/...
+
+    Each ? byte combined together gives the number we want.
+    """
+    return int.from_bytes(extended_args[1::2], "big")
+
+
+def load(raw: bytes, code: CodeType) -> str:
+    """
+    Parse an (extended) LOAD_xxx instruction.
+    """
+    # Get the enumeration.
+    index = extended_arguments(raw)
+
+    # Work out what that enumeration was for (constant/local var/global var).
+
+    # If the last instruction byte is a LOAD_FAST:
+    if raw[-2] == dis.opmap["LOAD_FAST"]:
+        # Then this is a local variable.
+        return code.co_varnames[index]
+    # Or if it is a LOAD_CONST:
+    if raw[-2] == dis.opmap["LOAD_CONST"]:
+        # Then this is a literal.
+        return code.co_consts[index]
+    # Otherwise, it is a global name.
+    return code.co_names[index]
+
+
+def loads(raw: bytes, code: CodeType) -> list:
+    """
+    Parse multiple consecutive LOAD_xxx instructions. Or load() in a for loop.
+
+    May be used to unpack a function's parameters or nested attributes ``(foo.bar.pop.whack)``.
+    """
+    return [load(i, code) for i in _extended_arg_bytecode.findall(raw)]
+
+
+def function_calls(code: CodeType) -> list:
+    """
+    Scan a code object for all function calls on constant arguments.
+    """
+    match: re.Match
+    out = []
+
+    for match in finditer(_call_function_bytecode, code.co_code):
+        function_root, methods, args, function_call = match.groups()
+
+        # For foo():
+        #   `function_root` contains 'foo' and `methods` is empty.
+        # For foo.bar.whizz():
+        #   `function_root` contains 'foo' and `methods` contains the rest.
+        function_root = load(function_root, code)
+        methods = loads(methods, code)
+        function = ".".join([function_root] + methods)
+
+        args = loads(args, code)
+        if function_call[0] == dis.opmap['CALL_FUNCTION_EX']:
+            flags = extended_arguments(function_call)
+            if flags != 0:
+                # Keyword arguments present. Unhandled at the moment.
+                continue
+            # In calls with const arguments, args contains a single
+            # tuple with all values.
+            if len(args) != 1 or not isinstance(args[0], tuple):
+                continue
+            args = list(args[0])
+        else:
+            arg_count = extended_arguments(function_call)
+
+            if arg_count != len(args):
+                # This happens if there are variable or keyword arguments. Bail out in either case.
+                continue
+
+        out.append((function, args))
+
+    return out
+
+
+def search_recursively(search: callable, code: CodeType, _memo=None) -> dict:
+    """
+    Apply a search function to a code object, recursing into child code objects (function definitions).
+    """
+    if _memo is None:
+        _memo = {}
+    if code not in _memo:
+        _memo[code] = search(code)
+        for const in code.co_consts:
+            if isinstance(const, CodeType):
+                search_recursively(search, const, _memo)
+    return _memo
+
+
+def recursive_function_calls(code: CodeType) -> dict:
+    """
+    Scan a code object for function calls on constant arguments, recursing into function definitions and bodies of
+    comprehension loops.
+    """
+    return search_recursively(function_calls, code)
+
+
+def any_alias(full_name: str):
+    """List possible aliases of a fully qualified Python name.
+
+        >>> list(any_alias("foo.bar.wizz"))
+        ['foo.bar.wizz', 'bar.wizz', 'wizz']
+
+    This crudely allows us to capture uses of wizz() under any of
+    ::
+        import foo
+        foo.bar.wizz()
+    ::
+        from foo import bar
+        bar.wizz()
+    ::
+        from foo.bar import wizz
+        wizz()
+
+    However, it will fail for any form of aliases and quite likely find false matches.
+    """
+    parts = full_name.split('.')
+    while parts:
+        yield ".".join(parts)
+        parts = parts[1:]

+ 453 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/dylib.py

@@ -0,0 +1,453 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2013-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Manipulating with dynamic libraries.
+"""
+
+import os.path
+
+from PyInstaller.utils.win32 import winutils
+
+__all__ = ['exclude_list', 'include_list', 'include_library']
+
+import os
+import re
+
+import PyInstaller.log as logging
+from PyInstaller import compat
+
+logger = logging.getLogger(__name__)
+
+_BOOTLOADER_FNAMES = {'run', 'run_d', 'runw', 'runw_d'}
+
+# Ignoring some system libraries speeds up packaging process
+_excludes = {
+    # Ignore annoying warnings with Windows system DLLs.
+    #
+    # 'W: library kernel32.dll required via ctypes not found'
+    # 'W: library coredll.dll required via ctypes not found'
+    #
+    # These these dlls has to be ignored for all operating systems because they might be resolved when scanning code for
+    # ctypes dependencies.
+    r'advapi32\.dll',
+    r'ws2_32\.dll',
+    r'gdi32\.dll',
+    r'oleaut32\.dll',
+    r'shell32\.dll',
+    r'ole32\.dll',
+    r'coredll\.dll',
+    r'crypt32\.dll',
+    r'kernel32',
+    r'kernel32\.dll',
+    r'msvcrt\.dll',
+    r'rpcrt4\.dll',
+    r'user32\.dll',
+    # Some modules tries to import the Python library. e.g. pyreadline.console.console
+    r'python\%s\%s',
+}
+
+# Regex includes - overrides excludes. Include list is used only to override specific libraries from exclude list.
+_includes = set()
+
+_win_includes = {
+    # We need to allow collection of Visual Studio C++ (VC) runtime DLLs from system directories in order to avoid
+    # missing DLL errors when the frozen application is run on a system that does not have the corresponding VC
+    # runtime installed. The VC runtime DLLs may be dependencies of python shared library itself or of extension
+    # modules provided by 3rd party packages.
+
+    # Visual Studio 2010 (VC10) runtime
+    # http://msdn.microsoft.com/en-us/library/8kche8ah(v=vs.100).aspx
+    r'atl100\.dll',
+    r'msvcr100\.dll',
+    r'msvcp100\.dll',
+    r'mfc100\.dll',
+    r'mfc100u\.dll',
+    r'mfcmifc80\.dll',
+    r'mfcm100\.dll',
+    r'mfcm100u\.dll',
+
+    # Visual Studio 2012 (VC11) runtime
+    # https://docs.microsoft.com/en-us/visualstudio/releases/2013/2012-redistribution-vs
+    #
+    # VC110.ATL
+    r'atl110\.dll',
+    # VC110.CRT
+    r'msvcp110\.dll',
+    r'msvcr110\.dll',
+    r'vccorlib110\.dll',
+    # VC110.CXXAMP
+    r'vcamp110\.dll',
+    # VC110.MFC
+    r'mfc110\.dll',
+    r'mfc110u\.dll',
+    r'mfcm110\.dll',
+    r'mfcm110u\.dll',
+    # VC110.MFCLOC
+    r'mfc110chs\.dll',
+    r'mfc110cht\.dll',
+    r'mfc110enu\.dll',
+    r'mfc110esn\.dll',
+    r'mfc110deu\.dll',
+    r'mfc110fra\.dll',
+    r'mfc110ita\.dll',
+    r'mfc110jpn\.dll',
+    r'mfc110kor\.dll',
+    r'mfc110rus\.dll',
+    # VC110.OpenMP
+    r'vcomp110\.dll',
+    # DIA SDK
+    r'msdia110\.dll',
+
+    # Visual Studio 2013 (VC12) runtime
+    # https://docs.microsoft.com/en-us/visualstudio/releases/2013/2013-redistribution-vs
+    #
+    # VC120.CRT
+    r'msvcp120\.dll',
+    r'msvcr120\.dll',
+    r'vccorlib120\.dll',
+    # VC120.CXXAMP
+    r'vcamp120\.dll',
+    # VC120.MFC
+    r'mfc120\.dll',
+    r'mfc120u\.dll',
+    r'mfcm120\.dll',
+    r'mfcm120u\.dll',
+    # VC120.MFCLOC
+    r'mfc120chs\.dll',
+    r'mfc120cht\.dll',
+    r'mfc120deu\.dll',
+    r'mfc120enu\.dll',
+    r'mfc120esn\.dll',
+    r'mfc120fra\.dll',
+    r'mfc120ita\.dll',
+    r'mfc120jpn\.dll',
+    r'mfc120kor\.dll',
+    r'mfc120rus\.dll',
+    # VC120.OPENMP
+    r'vcomp120\.dll',
+    # DIA SDK
+    r'msdia120\.dll',
+    # Cpp REST Windows SDK
+    r'casablanca120.winrt\.dll',
+    # Mobile Services Cpp Client
+    r'zumosdk120.winrt\.dll',
+    # Cpp REST SDK
+    r'casablanca120\.dll',
+
+    # Universal C Runtime Library (since Visual Studio 2015)
+    #
+    # NOTE: these should be put under a switch, as they need not to be bundled if deployment target is Windows 10
+    # and later, as "UCRT is now a system component in Windows 10 and later, managed by Windows Update".
+    # (https://docs.microsoft.com/en-us/cpp/windows/determining-which-dlls-to-redistribute?view=msvc-170)
+    # And as discovered in #6326, Windows prefers system-installed version over the bundled one, anyway
+    # (see https://docs.microsoft.com/en-us/cpp/windows/universal-crt-deployment?view=msvc-170#local-deployment).
+    r'api-ms-win-core.*',
+    r'api-ms-win-crt.*',
+    r'ucrtbase\.dll',
+
+    # Visual Studio 2015/2017/2019/2022 (VC14) runtime
+    # https://docs.microsoft.com/en-us/visualstudio/releases/2022/redistribution
+    #
+    # VC141.CRT/VC142.CRT/VC143.CRT
+    r'concrt140\.dll',
+    r'msvcp140\.dll',
+    r'msvcp140_1\.dll',
+    r'msvcp140_2\.dll',
+    r'msvcp140_atomic_wait\.dll',
+    r'msvcp140_codecvt_ids\.dll',
+    r'vccorlib140\.dll',
+    r'vcruntime140\.dll',
+    r'vcruntime140_1\.dll',
+    # VC141.CXXAMP/VC142.CXXAMP/VC143.CXXAMP
+    r'vcamp140\.dll',
+    # VC141.OpenMP/VC142.OpenMP/VC143.OpenMP
+    r'vcomp140\.dll',
+    # DIA SDK
+    r'msdia140\.dll',
+
+    # Allow pythonNN.dll, pythoncomNN.dll, pywintypesNN.dll
+    r'py(?:thon(?:com(?:loader)?)?|wintypes)\d+\.dll',
+}
+
+_win_excludes = {
+    # On Windows, only .dll files can be loaded.
+    r'.*\.so',
+    r'.*\.dylib',
+
+    # MS assembly excludes
+    r'Microsoft\.Windows\.Common-Controls',
+}
+
+_unix_excludes = {
+    r'libc\.so(\..*)?',
+    r'libdl\.so(\..*)?',
+    r'libm\.so(\..*)?',
+    r'libpthread\.so(\..*)?',
+    r'librt\.so(\..*)?',
+    r'libthread_db\.so(\..*)?',
+    # glibc regex excludes.
+    r'ld-linux\.so(\..*)?',
+    r'libBrokenLocale\.so(\..*)?',
+    r'libanl\.so(\..*)?',
+    r'libcidn\.so(\..*)?',
+    r'libcrypt\.so(\..*)?',
+    r'libnsl\.so(\..*)?',
+    r'libnss_compat.*\.so(\..*)?',
+    r'libnss_dns.*\.so(\..*)?',
+    r'libnss_files.*\.so(\..*)?',
+    r'libnss_hesiod.*\.so(\..*)?',
+    r'libnss_nis.*\.so(\..*)?',
+    r'libnss_nisplus.*\.so(\..*)?',
+    r'libresolv\.so(\..*)?',
+    r'libutil\.so(\..*)?',
+    # graphical interface libraries come with graphical stack (see libglvnd)
+    r'libE?(Open)?GLX?(ESv1_CM|ESv2)?(dispatch)?\.so(\..*)?',
+    r'libdrm\.so(\..*)?',
+    # libxcb-dri changes ABI frequently (e.g.: between Ubuntu LTS releases) and is usually installed as dependency of
+    # the graphics stack anyway. No need to bundle it.
+    r'libxcb\.so(\..*)?',
+    r'libxcb-dri.*\.so(\..*)?',
+}
+
+_aix_excludes = {
+    r'libbz2\.a',
+    r'libc\.a',
+    r'libC\.a',
+    r'libcrypt\.a',
+    r'libdl\.a',
+    r'libintl\.a',
+    r'libpthreads\.a',
+    r'librt\\.a',
+    r'librtl\.a',
+    r'libz\.a',
+}
+
+if compat.is_win:
+    _includes |= _win_includes
+    _excludes |= _win_excludes
+elif compat.is_aix:
+    # The exclude list for AIX differs from other *nix platforms.
+    _excludes |= _aix_excludes
+elif compat.is_unix:
+    # Common excludes for *nix platforms -- except AIX.
+    _excludes |= _unix_excludes
+
+
+class ExcludeList:
+    def __init__(self):
+        self.regex = re.compile('|'.join(_excludes), re.I)
+
+    def search(self, libname):
+        # Running re.search() on '' regex never returns None.
+        if _excludes:
+            return self.regex.match(os.path.basename(libname))
+        else:
+            return False
+
+
+class IncludeList:
+    def __init__(self):
+        self.regex = re.compile('|'.join(_includes), re.I)
+
+    def search(self, libname):
+        # Running re.search() on '' regex never returns None.
+        if _includes:
+            return self.regex.match(os.path.basename(libname))
+        else:
+            return False
+
+
+exclude_list = ExcludeList()
+include_list = IncludeList()
+
+if compat.is_darwin:
+    # On Mac use macholib to decide if a binary is a system one.
+    from macholib import util
+
+    class MacExcludeList:
+        def __init__(self, global_exclude_list):
+            # Wraps the global 'exclude_list' before it is overridden by this class.
+            self._exclude_list = global_exclude_list
+
+        def search(self, libname):
+            # First try global exclude list. If it matches, return its result; otherwise continue with other check.
+            result = self._exclude_list.search(libname)
+            if result:
+                return result
+            else:
+                return util.in_system_path(libname)
+
+    exclude_list = MacExcludeList(exclude_list)
+
+elif compat.is_win:
+
+    class WinExcludeList:
+        def __init__(self, global_exclude_list):
+            self._exclude_list = global_exclude_list
+            # use normpath because msys2 uses / instead of \
+            self._windows_dir = os.path.normpath(winutils.get_windows_dir().lower())
+
+        def search(self, libname):
+            libname = libname.lower()
+            result = self._exclude_list.search(libname)
+            if result:
+                return result
+            else:
+                # Exclude everything from the Windows directory by default.
+                # .. sometimes realpath changes the case of libname, lower it
+                # .. use normpath because msys2 uses / instead of \
+                fn = os.path.normpath(os.path.realpath(libname).lower())
+                return fn.startswith(self._windows_dir)
+
+    exclude_list = WinExcludeList(exclude_list)
+
+_seen_wine_dlls = set()  # Used for warning tracking in include_library()
+
+
+def include_library(libname):
+    """
+    Check if the dynamic library should be included with application or not.
+    """
+    if exclude_list:
+        if exclude_list.search(libname) and not include_list.search(libname):
+            # Library is excluded and is not overridden by include list. It should be excluded.
+            return False
+
+    # If we are running under Wine and the library is a Wine built-in DLL, ensure that it is always excluded. Typically,
+    # excluding a DLL leads to an incomplete bundle and run-time errors when the said DLL is not installed on the target
+    # system. However, having Wine built-in DLLs collected is even more detrimental, as they usually provide Wine's
+    # implementation of low-level functionality, and therefore cannot be used on actual Windows (i.e., system libraries
+    # from the C:\Windows\system32 directory that might end up collected due to ``_win_includes`` list; a prominent
+    # example are VC runtime DLLs, for which Wine provides their own implementation, unless user explicitly installs
+    # Microsoft's VC redistributable package in their Wine environment). Therefore, excluding the Wine built-in DLLs
+    # actually improves the chances of the bundle running on Windows, or at least makes the issue easier to debug by
+    # turning it into the "standard" missing DLL problem. Exclusion should not affect the bundle's ability to run under
+    #  Wine itself, as the excluded DLLs are available there.
+    if compat.is_win_wine and compat.is_wine_dll(libname):
+        if libname not in _seen_wine_dlls:
+            logger.warning("Excluding Wine built-in DLL: %s", libname)  # displayed only if DLL would have been included
+            _seen_wine_dlls.add(libname)  # display only once for each DLL
+        return False
+
+    return True
+
+
+# Patterns for suppressing warnings about missing dynamically linked libraries
+_warning_suppressions = [
+    # We fail to discover shiboken2 (PySide2) and shiboken6 (PySide6) shared libraries due to the way the packages set
+    # up the search path to the library, which is located in a separate package. Suppress the harmless warnings to avoid
+    # confusion.
+    r'(lib)?shiboken.*',
+]
+
+# On some systems (e.g., openwrt), libc.so might point to ldd. Suppress warnings about it.
+if compat.is_linux:
+    _warning_suppressions.append(r'ldd')
+
+# Suppress false warnings on win 10 and UCRT (see issue #1566).
+if compat.is_win_10:
+    _warning_suppressions.append(r'api-ms-win-crt.*')
+    _warning_suppressions.append(r'api-ms-win-core.*')
+
+
+class MissingLibWarningSuppressionList:
+    def __init__(self):
+        self.regex = re.compile('|'.join(_warning_suppressions), re.I)
+
+    def search(self, libname):
+        # Running re.search() on '' regex never returns None.
+        if _warning_suppressions:
+            return self.regex.match(os.path.basename(libname))
+        else:
+            return False
+
+
+missing_lib_warning_suppression_list = MissingLibWarningSuppressionList()
+
+
+def warn_missing_lib(libname):
+    """
+    Check if a missing-library warning should be displayed for the given library name (or full path).
+    """
+    return not missing_lib_warning_suppression_list.search(libname)
+
+
+def mac_set_relative_dylib_deps(libname, distname):
+    """
+    On Mac OS set relative paths to dynamic library dependencies of `libname`.
+
+    Relative paths allow to avoid using environment variable DYLD_LIBRARY_PATH. There are known some issues with
+    DYLD_LIBRARY_PATH. Relative paths is more flexible mechanism.
+
+    Current location of dependent libraries is derived from the location of the library path (paths start with
+    '@loader_path').
+
+    'distname'  path of the library relative to dist directory of frozen executable. We need this to determine the level
+                of directory level for @loader_path of binaries not found in dist directory.
+
+                For example, Qt5 plugins are not in the same directory as Qt*.dylib files. Without using
+                '@loader_path/../..' for Qt plugins, Mac OS would not be able to resolve shared library dependencies,
+                and Qt plugins will not be loaded.
+    """
+
+    from macholib import util
+    from macholib.MachO import MachO
+
+    # Ignore bootloader; otherwise PyInstaller fails with exception like
+    # 'ValueError: total_size > low_offset (288 > 0)'
+    if os.path.basename(libname) in _BOOTLOADER_FNAMES:
+        return
+
+    # Determine how many directories up ('../') is the directory with shared dynamic libraries.
+    # E.g., ./qt4_plugins/images/ -> ./../../
+    parent_dir = ''
+    # Check if distname is not only base filename.
+    if os.path.dirname(distname):
+        parent_level = len(os.path.dirname(distname).split(os.sep))
+        parent_dir = parent_level * (os.pardir + os.sep)
+
+    def match_func(pth):
+        """
+        For system libraries is still used absolute path. It is unchanged.
+        """
+        # Leave system dynamic libraries unchanged.
+        if util.in_system_path(pth):
+            return None
+
+        # The older python.org builds that use system Tcl/Tk framework have their _tkinter.cpython-*-darwin.so
+        # library linked against /Library/Frameworks/Tcl.framework/Versions/8.5/Tcl and
+        # /Library/Frameworks/Tk.framework/Versions/8.5/Tk, although the actual frameworks are located in
+        # /System/Library/Frameworks. Therefore, they slip through the above in_system_path() check, and we need to
+        # exempt them manually.
+        _exemptions = [
+            '/Library/Frameworks/Tcl.framework/',
+            '/Library/Frameworks/Tk.framework/',
+        ]
+        if any([x in pth for x in _exemptions]):
+            return None
+
+        # Use relative path to dependent dynamic libraries based on the location of the executable.
+        return os.path.join('@loader_path', parent_dir, os.path.basename(pth))
+
+    # Rewrite mach headers with @loader_path.
+    dll = MachO(libname)
+    dll.rewriteLoadCommands(match_func)
+
+    # Write changes into file. Write code is based on macholib example.
+    try:
+        with open(dll.filename, 'rb+') as f:
+            for header in dll.headers:
+                f.seek(0)
+                dll.write(f)
+            f.seek(0, 2)
+            f.flush()
+    except Exception:
+        pass

+ 560 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/imphook.py

@@ -0,0 +1,560 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Code related to processing of import hooks.
+"""
+
+import glob
+import os.path
+import sys
+import weakref
+
+from PyInstaller import log as logging
+from PyInstaller.building.utils import format_binaries_and_datas
+from PyInstaller.compat import expand_path, importlib_load_source
+from PyInstaller.depend.imphookapi import PostGraphAPI
+from PyInstaller.exceptions import ImportErrorWhenRunningHook
+
+logger = logging.getLogger(__name__)
+
+# Safety check: Hook module names need to be unique. Duplicate names might occur if the cached PyuModuleGraph has an
+# issue.
+HOOKS_MODULE_NAMES = set()
+
+
+class ModuleHookCache(dict):
+    """
+    Cache of lazily loadable hook script objects.
+
+    This cache is implemented as a `dict` subclass mapping from the fully-qualified names of all modules with at
+    least one hook script to lists of `ModuleHook` instances encapsulating these scripts. As a `dict` subclass,
+    all cached module names and hook scripts are accessible via standard dictionary operations.
+
+    Attributes
+    ----------
+    module_graph : ModuleGraph
+        Current module graph.
+    _hook_module_name_prefix : str
+        String prefixing the names of all in-memory modules lazily loaded from cached hook scripts. See also the
+        `hook_module_name_prefix` parameter passed to the `ModuleHook.__init__()` method.
+    """
+
+    _cache_id_next = 0
+    """
+    0-based identifier unique to the next `ModuleHookCache` to be instantiated.
+
+    This identifier is incremented on each instantiation of a new `ModuleHookCache` to isolate in-memory modules of
+    lazily loaded hook scripts in that cache to the same cache-specific namespace, preventing edge-case collisions
+    with existing in-memory modules in other caches.
+
+    """
+    def __init__(self, module_graph, hook_dirs):
+        """
+        Cache all hook scripts in the passed directories.
+
+        **Order of caching is significant** with respect to hooks for the same module, as the values of this
+        dictionary are lists. Hooks for the same module will be run in the order in which they are cached. Previously
+        cached hooks are always preserved rather than overridden.
+
+        By default, official hooks are cached _before_ user-defined hooks. For modules with both official and
+        user-defined hooks, this implies that the former take priority over and hence will be loaded _before_ the
+        latter.
+
+        Parameters
+        ----------
+        module_graph : ModuleGraph
+            Current module graph.
+        hook_dirs : list
+            List of the absolute or relative paths of all directories containing **hook scripts** (i.e.,
+            Python scripts with filenames matching `hook-{module_name}.py`, where `{module_name}` is the module
+            hooked by that script) to be cached.
+        """
+        super().__init__()
+
+        # To avoid circular references and hence increased memory consumption, a weak rather than strong reference is
+        # stored to the passed graph. Since this graph is guaranteed to live longer than this cache,
+        # this is guaranteed to be safe.
+        self.module_graph = weakref.proxy(module_graph)
+
+        # String unique to this cache prefixing the names of all in-memory modules lazily loaded from cached hook
+        # scripts, privatized for safety.
+        self._hook_module_name_prefix = '__PyInstaller_hooks_{}_'.format(ModuleHookCache._cache_id_next)
+        ModuleHookCache._cache_id_next += 1
+
+        # Cache all hook scripts in the passed directories.
+        self._cache_hook_dirs(hook_dirs)
+
+    def _cache_hook_dirs(self, hook_dirs):
+        """
+        Cache all hook scripts in the passed directories.
+
+        Parameters
+        ----------
+        hook_dirs : list
+            List of the absolute or relative paths of all directories containing hook scripts to be cached.
+        """
+
+        for hook_dir in hook_dirs:
+            # Canonicalize this directory's path and validate its existence.
+            hook_dir = os.path.abspath(expand_path(hook_dir))
+            if not os.path.isdir(hook_dir):
+                raise FileNotFoundError('Hook directory "{}" not found.'.format(hook_dir))
+
+            # For each hook script in this directory...
+            hook_filenames = glob.glob(os.path.join(hook_dir, 'hook-*.py'))
+            for hook_filename in hook_filenames:
+                # Fully-qualified name of this hook's corresponding module, constructed by removing the "hook-" prefix
+                # and ".py" suffix.
+                module_name = os.path.basename(hook_filename)[5:-3]
+                if module_name in self:
+                    logger.warning(
+                        "Several hooks defined for module %r. Please take care they do not conflict.", module_name
+                    )
+
+                # Lazily loadable hook object.
+                module_hook = ModuleHook(
+                    module_graph=self.module_graph,
+                    module_name=module_name,
+                    hook_filename=hook_filename,
+                    hook_module_name_prefix=self._hook_module_name_prefix,
+                )
+
+                # Add this hook to this module's list of hooks.
+                module_hooks = self.setdefault(module_name, [])
+                module_hooks.append(module_hook)
+
+    def remove_modules(self, *module_names):
+        """
+        Remove the passed modules and all hook scripts cached for these modules from this cache.
+
+        Parameters
+        ----------
+        module_names : list
+            List of all fully-qualified module names to be removed.
+        """
+
+        for module_name in module_names:
+            # Unload this module's hook script modules from memory. Since these are top-level pure-Python modules cached
+            # only in the "sys.modules" dictionary, popping these modules from this dictionary suffices to garbage
+            # collect these modules.
+            module_hooks = self.get(module_name, [])
+            for module_hook in module_hooks:
+                sys.modules.pop(module_hook.hook_module_name, None)
+
+            # Remove this module and its hook script objects from this cache.
+            self.pop(module_name, None)
+
+
+# Dictionary mapping the names of magic attributes required by the "ModuleHook" class to 2-tuples "(default_type,
+# sanitizer_func)", where:
+#
+# * "default_type" is the type to which that attribute will be initialized when that hook is lazily loaded.
+# * "sanitizer_func" is the callable sanitizing the original value of that attribute defined by that hook into a
+#   safer value consumable by "ModuleHook" callers if any or "None" if the original value requires no sanitization.
+#
+# To avoid subtleties in the ModuleHook.__getattr__() method, this dictionary is declared as a module rather than a
+# class attribute. If declared as a class attribute and then undefined (...for whatever reason), attempting to access
+# this attribute from that method would produce infinite recursion.
+_MAGIC_MODULE_HOOK_ATTRS = {
+    # Collections in which order is insignificant. This includes:
+    #
+    # * "datas", sanitized from hook-style 2-tuple lists defined by hooks into TOC-style 2-tuple sets consumable by
+    #   "ModuleHook" callers.
+    # * "binaries", sanitized in the same way.
+    'datas': (set, format_binaries_and_datas),
+    'binaries': (set, format_binaries_and_datas),
+    'excludedimports': (set, None),
+
+    # Collections in which order is significant. This includes:
+    #
+    # * "hiddenimports", as order of importation is significant. On module importation, hook scripts are loaded and hook
+    #   functions declared by these scripts are called. As these scripts and functions can have side effects dependent
+    #   on module importation order, module importation itself can have side effects dependent on this order!
+    'hiddenimports': (list, None),
+}
+
+
+class ModuleHook:
+    """
+    Cached object encapsulating a lazy loadable hook script.
+
+    This object exposes public attributes (e.g., `datas`) of the underlying hook script as attributes of the same
+    name of this object. On the first access of any such attribute, this hook script is lazily loaded into an
+    in-memory private module reused on subsequent accesses. These dynamic attributes are referred to as "magic." All
+    other static attributes of this object (e.g., `hook_module_name`) are referred to as "non-magic."
+
+    Attributes (Magic)
+    ----------
+    datas : set
+        Set of `TOC`-style 2-tuples `(target_file, source_file)` for all external non-executable files required by
+        the module being hooked, converted from the `datas` list of hook-style 2-tuples `(source_dir_or_glob,
+        target_dir)` defined by this hook script.
+    binaries : set
+        Set of `TOC`-style 2-tuples `(target_file, source_file)` for all external executable files required by the
+        module being hooked, converted from the `binaries` list of hook-style 2-tuples `(source_dir_or_glob,
+        target_dir)` defined by this hook script.
+    excludedimports : set
+        Set of the fully-qualified names of all modules imported by the module being hooked to be ignored rather than
+        imported from that module, converted from the `excludedimports` list defined by this hook script. These
+        modules will only be "locally" rather than "globally" ignored. These modules will remain importable from all
+        modules other than the module being hooked.
+    hiddenimports : set
+        Set of the fully-qualified names of all modules imported by the module being hooked that are _not_
+        automatically detectable by PyInstaller (usually due to being dynamically imported in that module),
+        converted from the `hiddenimports` list defined by this hook script.
+
+    Attributes (Non-magic)
+    ----------
+    module_graph : ModuleGraph
+        Current module graph.
+    module_name : str
+        Name of the module hooked by this hook script.
+    hook_filename : str
+        Absolute or relative path of this hook script.
+    hook_module_name : str
+        Name of the in-memory module of this hook script's interpreted contents.
+    _hook_module : module
+        In-memory module of this hook script's interpreted contents, lazily loaded on the first call to the
+        `_load_hook_module()` method _or_ `None` if this method has yet to be accessed.
+    """
+
+    #-- Magic --
+
+    def __init__(self, module_graph, module_name, hook_filename, hook_module_name_prefix):
+        """
+        Initialize this metadata.
+
+        Parameters
+        ----------
+        module_graph : ModuleGraph
+            Current module graph.
+        module_name : str
+            Name of the module hooked by this hook script.
+        hook_filename : str
+            Absolute or relative path of this hook script.
+        hook_module_name_prefix : str
+            String prefixing the name of the in-memory module for this hook script. To avoid namespace clashes with
+            similar modules created by other `ModuleHook` objects in other `ModuleHookCache` containers, this string
+            _must_ be unique to the `ModuleHookCache` container containing this `ModuleHook` object. If this string
+            is non-unique, an existing in-memory module will be erroneously reused when lazily loading this hook
+            script, thus erroneously resanitizing previously sanitized hook script attributes (e.g., `datas`) with
+            the `format_binaries_and_datas()` helper.
+
+        """
+        # Note that the passed module graph is already a weak reference, avoiding circular reference issues. See
+        # ModuleHookCache.__init__(). TODO: Add a failure message
+        assert isinstance(module_graph, weakref.ProxyTypes)
+        self.module_graph = module_graph
+        self.module_name = module_name
+        self.hook_filename = hook_filename
+
+        # Name of the in-memory module fabricated to refer to this hook script.
+        self.hook_module_name = hook_module_name_prefix + self.module_name.replace('.', '_')
+
+        # Safety check, see above
+        global HOOKS_MODULE_NAMES
+        if self.hook_module_name in HOOKS_MODULE_NAMES:
+            # When self._shallow is true, this class never loads the hook and sets the attributes to empty values
+            self._shallow = True
+        else:
+            self._shallow = False
+            HOOKS_MODULE_NAMES.add(self.hook_module_name)
+
+        # Attributes subsequently defined by the _load_hook_module() method.
+        self._hook_module = None
+
+    def __getattr__(self, attr_name):
+        """
+        Get the magic attribute with the passed name (e.g., `datas`) from this lazily loaded hook script if any _or_
+        raise `AttributeError` otherwise.
+
+        This special method is called only for attributes _not_ already defined by this object. This includes
+        undefined attributes and the first attempt to access magic attributes.
+
+        This special method is _not_ called for subsequent attempts to access magic attributes. The first attempt to
+        access magic attributes defines corresponding instance variables accessible via the `self.__dict__` instance
+        dictionary (e.g., as `self.datas`) without calling this method. This approach also allows magic attributes to
+        be deleted from this object _without_ defining the `__delattr__()` special method.
+
+        See Also
+        ----------
+        Class docstring for supported magic attributes.
+        """
+
+        # If this is a magic attribute, initialize this attribute by lazy loading this hook script and then return
+        # this attribute. To avoid recursion, the superclass method rather than getattr() is called.
+        if attr_name in _MAGIC_MODULE_HOOK_ATTRS:
+            self._load_hook_module()
+            return super().__getattr__(attr_name)
+        # Else, this is an undefined attribute. Raise an exception.
+        else:
+            raise AttributeError(attr_name)
+
+    def __setattr__(self, attr_name, attr_value):
+        """
+        Set the attribute with the passed name to the passed value.
+
+        If this is a magic attribute, this hook script will be lazily loaded before setting this attribute. Unlike
+        `__getattr__()`, this special method is called to set _any_ attribute -- including magic, non-magic,
+        and undefined attributes.
+
+        See Also
+        ----------
+        Class docstring for supported magic attributes.
+        """
+
+        # If this is a magic attribute, initialize this attribute by lazy loading this hook script before overwriting
+        # this attribute.
+        if attr_name in _MAGIC_MODULE_HOOK_ATTRS:
+            self._load_hook_module()
+
+        # Set this attribute to the passed value. To avoid recursion, the superclass method rather than setattr() is
+        # called.
+        return super().__setattr__(attr_name, attr_value)
+
+    #-- Loading --
+
+    def _load_hook_module(self):
+        """
+        Lazily load this hook script into an in-memory private module.
+
+        This method (and, indeed, this class) preserves all attributes and functions defined by this hook script as
+        is, ensuring sane behaviour in hook functions _not_ expecting unplanned external modification. Instead,
+        this method copies public attributes defined by this hook script (e.g., `binaries`) into private attributes
+        of this object, which the special `__getattr__()` and `__setattr__()` methods safely expose to external
+        callers. For public attributes _not_ defined by this hook script, the corresponding private attributes will
+        be assigned sane defaults. For some public attributes defined by this hook script, the corresponding private
+        attributes will be transformed into objects more readily and safely consumed elsewhere by external callers.
+
+        See Also
+        ----------
+        Class docstring for supported attributes.
+        """
+
+        # If this hook script module has already been loaded, or we are _shallow, noop.
+        if self._hook_module is not None or self._shallow:
+            if self._shallow:
+                self._hook_module = True  # Not None
+                # Inform the user
+                logger.debug(
+                    'Skipping module hook %r from %r because a hook for %s has already been loaded.',
+                    *os.path.split(self.hook_filename)[::-1], self.module_name
+                )
+                # Set the default attributes to empty instances of the type.
+                for attr_name, (attr_type, _) in _MAGIC_MODULE_HOOK_ATTRS.items():
+                    super().__setattr__(attr_name, attr_type())
+            return
+
+        # Load and execute the hook script. Even if mechanisms from the import machinery are used, this does not import
+        # the hook as the module.
+        head, tail = os.path.split(self.hook_filename)
+        logger.info('Loading module hook %r from %r...', tail, head)
+        try:
+            self._hook_module = importlib_load_source(self.hook_module_name, self.hook_filename)
+        except ImportError:
+            logger.debug("Hook failed with:", exc_info=True)
+            raise ImportErrorWhenRunningHook(self.hook_module_name, self.hook_filename)
+
+        # Copy hook script attributes into magic attributes exposed as instance variables of the current "ModuleHook"
+        # instance.
+        for attr_name, (default_type, sanitizer_func) in _MAGIC_MODULE_HOOK_ATTRS.items():
+            # Unsanitized value of this attribute.
+            attr_value = getattr(self._hook_module, attr_name, None)
+
+            # If this attribute is undefined, expose a sane default instead.
+            if attr_value is None:
+                attr_value = default_type()
+            # Else if this attribute requires sanitization, do so.
+            elif sanitizer_func is not None:
+                attr_value = sanitizer_func(attr_value)
+            # Else, expose the unsanitized value of this attribute.
+
+            # Expose this attribute as an instance variable of the same name.
+            setattr(self, attr_name, attr_value)
+
+    #-- Hooks --
+
+    def post_graph(self, analysis):
+        """
+        Call the **post-graph hook** (i.e., `hook()` function) defined by this hook script, if any.
+
+        Parameters
+        ----------
+        analysis: build_main.Analysis
+            Analysis that calls the hook
+
+        This method is intended to be called _after_ the module graph for this application is constructed.
+        """
+
+        # Lazily load this hook script into an in-memory module.
+        self._load_hook_module()
+
+        # Call this hook script's hook() function, which modifies attributes accessed by subsequent methods and hence
+        # must be called first.
+        self._process_hook_func(analysis)
+
+        # Order is insignificant here.
+        self._process_hidden_imports()
+        self._process_excluded_imports()
+
+    def _process_hook_func(self, analysis):
+        """
+        Call this hook's `hook()` function if defined.
+
+        Parameters
+        ----------
+        analysis: build_main.Analysis
+            Analysis that calls the hook
+        """
+
+        # If this hook script defines no hook() function, noop.
+        if not hasattr(self._hook_module, 'hook'):
+            return
+
+        # Call this hook() function.
+        hook_api = PostGraphAPI(module_name=self.module_name, module_graph=self.module_graph, analysis=analysis)
+        try:
+            self._hook_module.hook(hook_api)
+        except ImportError:
+            logger.debug("Hook failed with:", exc_info=True)
+            raise ImportErrorWhenRunningHook(self.hook_module_name, self.hook_filename)
+
+        # Update all magic attributes modified by the prior call.
+        self.datas.update(set(hook_api._added_datas))
+        self.binaries.update(set(hook_api._added_binaries))
+        self.hiddenimports.extend(hook_api._added_imports)
+
+        # FIXME: Deleted imports should be appended to self.excludedimports rather than handled here. However, see the
+        #        _process_excluded_imports() FIXME below for a sensible alternative.
+        for deleted_module_name in hook_api._deleted_imports:
+            # Remove the graph link between the hooked module and item. This removes the 'item' node from the graph if
+            # no other links go to it (no other modules import it)
+            self.module_graph.removeReference(hook_api.node, deleted_module_name)
+
+    def _process_hidden_imports(self):
+        """
+        Add all imports listed in this hook script's `hiddenimports` attribute to the module graph as if directly
+        imported by this hooked module.
+
+        These imports are typically _not_ implicitly detectable by PyInstaller and hence must be explicitly defined
+        by hook scripts.
+        """
+
+        # For each hidden import required by the module being hooked...
+        for import_module_name in self.hiddenimports:
+            try:
+                # Graph node for this module. Do not implicitly create namespace packages for non-existent packages.
+                caller = self.module_graph.find_node(self.module_name, create_nspkg=False)
+
+                # Manually import this hidden import from this module.
+                self.module_graph.import_hook(import_module_name, caller)
+            # If this hidden import is unimportable, print a non-fatal warning. Hidden imports often become
+            # desynchronized from upstream packages and hence are only "soft" recommendations.
+            except ImportError:
+                logger.warning('Hidden import "%s" not found!', import_module_name)
+
+    # FIXME: This is pretty... intense. Attempting to cleanly "undo" prior module graph operations is a recipe for
+    #        subtle edge cases and difficult-to-debug issues. It would be both safer and simpler to prevent these
+    #        imports from being added to the graph in the first place. To do so:
+    #
+    # * Remove the _process_excluded_imports() method below.
+    # * Remove the PostGraphAPI.del_imports() method, which cannot reasonably be supported by the following solution,
+    #   appears to be currently broken, and (in any case) is not called anywhere in the PyInstaller codebase.
+    # * Override the ModuleGraph._safe_import_hook() superclass method with a new PyiModuleGraph._safe_import_hook()
+    #   subclass method resembling:
+    #
+    #      def _safe_import_hook(
+    #          self, target_module_name, source_module, fromlist,
+    #          level=DEFAULT_IMPORT_LEVEL, attr=None):
+    #
+    #          if source_module.identifier in self._module_hook_cache:
+    #              for module_hook in self._module_hook_cache[
+    #                  source_module.identifier]:
+    #                  if target_module_name in module_hook.excludedimports:
+    #                      return []
+    #
+    #          return super()._safe_import_hook(
+    #              target_module_name, source_module, fromlist,
+    #              level=level, attr=attr)
+    def _process_excluded_imports(self):
+        """
+        'excludedimports' is a list of Python module names that PyInstaller should not detect as dependency of this
+        module name.
+
+        So remove all import-edges from the current module (and it's submodules) to the given `excludedimports` (end
+        their submodules).
+        """
+        def find_all_package_nodes(name):
+            mods = [name]
+            name += '.'
+            for subnode in self.module_graph.nodes():
+                if subnode.identifier.startswith(name):
+                    mods.append(subnode.identifier)
+            return mods
+
+        # If this hook excludes no imports, noop.
+        if not self.excludedimports:
+            return
+
+        # Collect all submodules of this module.
+        hooked_mods = find_all_package_nodes(self.module_name)
+
+        # Collect all dependencies and their submodules
+        # TODO: Optimize this by using a pattern and walking the graph only once.
+        for item in set(self.excludedimports):
+            excluded_node = self.module_graph.find_node(item, create_nspkg=False)
+            if excluded_node is None:
+                logger.info("Import to be excluded not found: %r", item)
+                continue
+            imports_to_remove = set(find_all_package_nodes(item))
+
+            # Remove references between module nodes, as though they would not be imported from 'name'. Note: Doing this
+            # in a nested loop is less efficient than collecting all import to remove first, but log messages are easier
+            # to understand since related to the "Excluding ..." message above.
+            for src in hooked_mods:
+                # modules, this `src` does import
+                references = set(node.identifier for node in self.module_graph.outgoing(src))
+
+                # Remove all of these imports which are also in "imports_to_remove".
+                for dest in imports_to_remove & references:
+                    self.module_graph.removeReference(src, dest)
+                    logger.debug("Excluding import of %s from module %s", dest, src)
+
+
+class AdditionalFilesCache:
+    """
+    Cache for storing what binaries and datas were pushed by what modules when import hooks were processed.
+    """
+    def __init__(self):
+        self._binaries = {}
+        self._datas = {}
+
+    def add(self, modname, binaries, datas):
+
+        self._binaries.setdefault(modname, [])
+        self._binaries[modname].extend(binaries or [])
+        self._datas.setdefault(modname, [])
+        self._datas[modname].extend(datas or [])
+
+    def __contains__(self, name):
+        return name in self._binaries or name in self._datas
+
+    def binaries(self, modname):
+        """
+        Return list of binaries for given module name.
+        """
+        return self._binaries[modname]
+
+    def datas(self, modname):
+        """
+        Return list of datas for given module name.
+        """
+        return self._datas[modname]

+ 452 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/imphookapi.py

@@ -0,0 +1,452 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Classes facilitating communication between PyInstaller and import hooks.
+
+PyInstaller passes instances of classes defined by this module to corresponding functions defined by external import
+hooks, which commonly modify the contents of these instances before returning. PyInstaller then detects and converts
+these modifications into appropriate operations on the current `PyiModuleGraph` instance, thus modifying which
+modules will be frozen into the executable.
+"""
+
+from PyInstaller.building.datastruct import TOC
+from PyInstaller.building.utils import format_binaries_and_datas
+from PyInstaller.lib.modulegraph.modulegraph import (RuntimeModule, RuntimePackage)
+
+
+class PreSafeImportModuleAPI:
+    """
+    Metadata communicating changes made by the current **pre-safe import module hook** (i.e., hook run immediately
+    _before_ a call to `ModuleGraph._safe_import_module()` recursively adding the hooked module, package,
+    or C extension and all transitive imports thereof to the module graph) back to PyInstaller.
+
+    Pre-safe import module hooks _must_ define a `pre_safe_import_module()` function accepting an instance of this
+    class, whose attributes describe the subsequent `ModuleGraph._safe_import_module()` call creating the hooked
+    module's graph node.
+
+    Each pre-safe import module hook is run _only_ on the first attempt to create the hooked module's graph node and
+    then subsequently ignored. If this hook successfully creates that graph node, the subsequent
+    `ModuleGraph._safe_import_module()` call will observe this fact and silently return without attempting to
+    recreate that graph node.
+
+    Pre-safe import module hooks are typically used to create graph nodes for **runtime modules** (i.e.,
+    modules dynamically defined at runtime). Most modules are physically defined in external `.py`-suffixed scripts.
+    Some modules, however, are dynamically defined at runtime (e.g., `six.moves`, dynamically defined by the
+    physically defined `six.py` module). However, `ModuleGraph` only parses `import` statements residing in external
+    scripts. `ModuleGraph` is _not_ a full-fledged, Turing-complete Python interpreter and hence has no means of
+    parsing `import` statements performed by runtime modules existing only in-memory.
+
+    'With great power comes great responsibility.'
+
+
+    Attributes (Immutable)
+    ----------------------------
+    The following attributes are **immutable** (i.e., read-only). For safety, any attempts to change these attributes
+    _will_ result in a raised exception:
+
+    module_graph : PyiModuleGraph
+        Current module graph.
+    parent_package : Package
+        Graph node for the package providing this module _or_ `None` if this module is a top-level module.
+
+    Attributes (Mutable)
+    -----------------------------
+    The following attributes are editable.
+
+    module_basename : str
+        Unqualified name of the module to be imported (e.g., `text`).
+    module_name : str
+        Fully-qualified name of this module (e.g., `email.mime.text`).
+    """
+    def __init__(self, module_graph, module_basename, module_name, parent_package):
+        self._module_graph = module_graph
+        self.module_basename = module_basename
+        self.module_name = module_name
+        self._parent_package = parent_package
+
+    # Immutable properties. No corresponding setters are defined.
+    @property
+    def module_graph(self):
+        """
+        Current module graph.
+        """
+        return self._module_graph
+
+    @property
+    def parent_package(self):
+        """
+        Parent Package of this node.
+        """
+        return self._parent_package
+
+    def add_runtime_module(self, module_name):
+        """
+        Add a graph node representing a non-package Python module with the passed name dynamically defined at runtime.
+
+        Most modules are statically defined on-disk as standard Python files. Some modules, however, are dynamically
+        defined in-memory at runtime (e.g., `gi.repository.Gst`, dynamically defined by the statically defined
+        `gi.repository.__init__` module).
+
+        This method adds a graph node representing such a runtime module. Since this module is _not_ a package,
+        all attempts to import submodules from this module in `from`-style import statements (e.g., the `queue`
+        submodule in `from six.moves import queue`) will be silently ignored. To circumvent this, simply call
+        `add_runtime_package()` instead.
+
+        Parameters
+        ----------
+        module_name : str
+            Fully-qualified name of this module (e.g., `gi.repository.Gst`).
+
+        Examples
+        ----------
+        This method is typically called by `pre_safe_import_module()` hooks, e.g.:
+
+            def pre_safe_import_module(api):
+                api.add_runtime_module(api.module_name)
+        """
+
+        self._module_graph.add_module(RuntimeModule(module_name))
+
+    def add_runtime_package(self, package_name):
+        """
+        Add a graph node representing a non-namespace Python package with the passed name dynamically defined at
+        runtime.
+
+        Most packages are statically defined on-disk as standard subdirectories containing `__init__.py` files. Some
+        packages, however, are dynamically defined in-memory at runtime (e.g., `six.moves`, dynamically defined by
+        the statically defined `six` module).
+
+        This method adds a graph node representing such a runtime package. All attributes imported from this package
+        in `from`-style import statements that are submodules of this package (e.g., the `queue` submodule in `from
+        six.moves import queue`) will be imported rather than ignored.
+
+        Parameters
+        ----------
+        package_name : str
+            Fully-qualified name of this package (e.g., `six.moves`).
+
+        Examples
+        ----------
+        This method is typically called by `pre_safe_import_module()` hooks, e.g.:
+
+            def pre_safe_import_module(api):
+                api.add_runtime_package(api.module_name)
+        """
+
+        self._module_graph.add_module(RuntimePackage(package_name))
+
+    def add_alias_module(self, real_module_name, alias_module_name):
+        """
+        Alias the source module to the target module with the passed names.
+
+        This method ensures that the next call to findNode() given the target module name will resolve this alias.
+        This includes importing and adding a graph node for the source module if needed as well as adding a reference
+        from the target to the source module.
+
+        Parameters
+        ----------
+        real_module_name : str
+            Fully-qualified name of the **existing module** (i.e., the module being aliased).
+        alias_module_name : str
+            Fully-qualified name of the **non-existent module** (i.e., the alias to be created).
+        """
+
+        self._module_graph.alias_module(real_module_name, alias_module_name)
+
+    def append_package_path(self, directory):
+        """
+        Modulegraph does a good job at simulating Python's, but it cannot handle packagepath `__path__` modifications
+        packages make at runtime.
+
+        Therefore there is a mechanism whereby you can register extra paths in this map for a package, and it will be
+        honored.
+
+        Parameters
+        ----------
+        directory : str
+            Absolute or relative path of the directory to be appended to this package's `__path__` attribute.
+        """
+
+        self._module_graph.append_package_path(self.module_name, directory)
+
+
+class PreFindModulePathAPI:
+    """
+    Metadata communicating changes made by the current **pre-find module path hook** (i.e., hook run immediately
+    _before_ a call to `ModuleGraph._find_module_path()` finding the hooked module's absolute path) back to PyInstaller.
+
+    Pre-find module path hooks _must_ define a `pre_find_module_path()` function accepting an instance of this class,
+    whose attributes describe the subsequent `ModuleGraph._find_module_path()` call to be performed.
+
+    Pre-find module path hooks are typically used to change the absolute path from which a module will be
+    subsequently imported and thus frozen into the executable. To do so, hooks may overwrite the default
+    `search_dirs` list of the absolute paths of all directories to be searched for that module: e.g.,
+
+        def pre_find_module_path(api):
+            api.search_dirs = ['/the/one/true/package/providing/this/module']
+
+    Each pre-find module path hook is run _only_ on the first call to `ModuleGraph._find_module_path()` for the
+    corresponding module.
+
+    Attributes
+    ----------
+    The following attributes are **mutable** (i.e., modifiable). All changes to these attributes will be immediately
+    respected by PyInstaller:
+
+    search_dirs : list
+        List of the absolute paths of all directories to be searched for this module (in order). Searching will halt
+        at the first directory containing this module.
+
+    Attributes (Immutable)
+    ----------
+    The following attributes are **immutable** (i.e., read-only). For safety, any attempts to change these attributes
+    _will_ result in a raised exception:
+
+    module_name : str
+        Fully-qualified name of this module.
+    module_graph : PyiModuleGraph
+        Current module graph. For efficiency, this attribute is technically mutable. To preserve graph integrity,
+        this attribute should nonetheless _never_ be modified. While read-only `PyiModuleGraph` methods (e.g.,
+        `findNode()`) are safely callable from within pre-find module path hooks, methods modifying the graph are
+        _not_. If graph modifications are required, consider an alternative type of hook (e.g., pre-import module
+        hooks).
+    """
+    def __init__(
+        self,
+        module_graph,
+        module_name,
+        search_dirs,
+    ):
+        # Mutable attributes.
+        self.search_dirs = search_dirs
+
+        # Immutable attributes.
+        self._module_graph = module_graph
+        self._module_name = module_name
+
+    # Immutable properties. No corresponding setters are defined.
+    @property
+    def module_graph(self):
+        """
+        Current module graph.
+        """
+        return self._module_graph
+
+    @property
+    def module_name(self):
+        """
+        Fully-qualified name of this module.
+        """
+        return self._module_name
+
+
+class PostGraphAPI:
+    """
+    Metadata communicating changes made by the current **post-graph hook** (i.e., hook run for a specific module
+    transitively imported by the current application _after_ the module graph of all `import` statements performed by
+    this application has been constructed) back to PyInstaller.
+
+    Post-graph hooks may optionally define a `post_graph()` function accepting an instance of this class,
+    whose attributes describe the current state of the module graph and the hooked module's graph node.
+
+    Attributes (Mutable)
+    ----------
+    The following attributes are **mutable** (i.e., modifiable). All changes to these attributes will be immediately
+    respected by PyInstaller:
+
+    module_graph : PyiModuleGraph
+        Current module graph.
+    module : Node
+        Graph node for the currently hooked module.
+
+    'With great power comes great responsibility.'
+
+    Attributes (Immutable)
+    ----------
+    The following attributes are **immutable** (i.e., read-only). For safety, any attempts to change these attributes
+    _will_ result in a raised exception:
+
+    __name__ : str
+        Fully-qualified name of this module (e.g., `six.moves.tkinter`).
+    __file__ : str
+        Absolute path of this module. If this module is:
+        * A standard (rather than namespace) package, this is the absolute path of this package's directory.
+        * A namespace (rather than standard) package, this is the abstract placeholder `-`. (Don't ask. Don't tell.)
+        * A non-package module or C extension, this is the absolute path of the corresponding file.
+    __path__ : list
+        List of the absolute paths of all directories comprising this package if this module is a package _or_ `None`
+        otherwise. If this module is a standard (rather than namespace) package, this list contains only the absolute
+        path of this package's directory.
+    co : code
+        Code object compiled from the contents of `__file__` (e.g., via the `compile()` builtin).
+    analysis: build_main.Analysis
+        The Analysis that load the hook.
+
+    Attributes (Private)
+    ----------
+    The following attributes are technically mutable but private, and hence should _never_ be externally accessed or
+    modified by hooks. Call the corresponding public methods instead:
+
+    _added_datas : list
+        List of the `(name, path)` 2-tuples or TOC objects of all external data files required by the current hook,
+        defaulting to the empty list. This is equivalent to the global `datas` hook attribute.
+    _added_imports : list
+        List of the fully-qualified names of all modules imported by the current hook, defaulting to the empty list.
+        This is equivalent to the global `hiddenimports` hook attribute.
+    _added_binaries : list
+        List of the `(name, path)` 2-tuples or TOC objects of all external C extensions imported by the current hook,
+        defaulting to the empty list. This is equivalent to the global `binaries` hook attribute.
+    """
+    def __init__(self, module_name, module_graph, analysis):
+        # Mutable attributes.
+        self.module_graph = module_graph
+        self.module = module_graph.find_node(module_name)
+        assert self.module is not None  # should not occur
+
+        # Immutable attributes.
+        self.___name__ = module_name
+        self.___file__ = self.module.filename
+        self._co = self.module.code
+        self._analysis = analysis
+
+        # To enforce immutability, convert this module's package path if any into an immutable tuple.
+        self.___path__ = tuple(self.module.packagepath) \
+            if self.module.packagepath is not None else None
+
+        #FIXME: Refactor "_added_datas", "_added_binaries", and "_deleted_imports" into sets. Since order of
+        #import is important, "_added_imports" must remain a list.
+
+        # Private attributes.
+        self._added_binaries = []
+        self._added_datas = []
+        self._added_imports = []
+        self._deleted_imports = []
+
+    # Immutable properties. No corresponding setters are defined.
+    @property
+    def __file__(self):
+        """
+        Absolute path of this module's file.
+        """
+        return self.___file__
+
+    @property
+    def __path__(self):
+        """
+        List of the absolute paths of all directories comprising this package if this module is a package _or_ `None`
+        otherwise. If this module is a standard (rather than namespace) package, this list contains only the absolute
+        path of this package's directory.
+        """
+        return self.___path__
+
+    @property
+    def __name__(self):
+        """
+        Fully-qualified name of this module (e.g., `six.moves.tkinter`).
+        """
+        return self.___name__
+
+    @property
+    def co(self):
+        """
+        Code object compiled from the contents of `__file__` (e.g., via the `compile()` builtin).
+        """
+        return self._co
+
+    @property
+    def analysis(self):
+        """
+        build_main.Analysis that calls the hook.
+        """
+        return self._analysis
+
+    # Obsolete immutable properties provided to preserve backward compatibility.
+    @property
+    def name(self):
+        """
+        Fully-qualified name of this module (e.g., `six.moves.tkinter`).
+
+        **This property has been deprecated by the `__name__` property.**
+        """
+        return self.___name__
+
+    @property
+    def graph(self):
+        """
+        Current module graph.
+
+        **This property has been deprecated by the `module_graph` property.**
+        """
+        return self.module_graph
+
+    @property
+    def node(self):
+        """
+        Graph node for the currently hooked module.
+
+        **This property has been deprecated by the `module` property.**
+        """
+        return self.module
+
+    # TODO: This incorrectly returns the list of the graph nodes of all modules *TRANSITIVELY* (rather than directly)
+    #       imported by this module. Unfortunately, this implies that most uses of this property are currently broken
+    #       (e.g., "hook-PIL.SpiderImagePlugin.py"). We only require this for the aforementioned hook, so contemplate
+    #       alternative approaches.
+    @property
+    def imports(self):
+        """
+        List of the graph nodes of all modules directly imported by this module.
+        """
+        return self.module_graph.iter_graph(start=self.module)
+
+    def add_imports(self, *module_names):
+        """
+        Add all Python modules whose fully-qualified names are in the passed list as "hidden imports" upon which the
+        current module depends.
+
+        This is equivalent to appending such names to the hook-specific `hiddenimports` attribute.
+        """
+        # Append such names to the current list of all such names.
+        self._added_imports.extend(module_names)
+
+    def del_imports(self, *module_names):
+        """
+        Remove the named fully-qualified modules from the set of imports (either hidden or visible) upon which the
+        current module depends.
+
+        This is equivalent to appending such names to the hook-specific `excludedimports` attribute.
+
+        """
+        self._deleted_imports.extend(module_names)
+
+    def add_binaries(self, list_of_tuples):
+        """
+        Add all external dynamic libraries in the passed list of `(name, path)` 2-tuples as dependencies of the
+        current module. This is equivalent to adding to the global `binaries` hook attribute.
+
+        For convenience, the `list_of_tuples` may also be a single TOC or TREE instance.
+        """
+        if isinstance(list_of_tuples, TOC):
+            self._added_binaries.extend(i[:2] for i in list_of_tuples)
+        else:
+            self._added_binaries.extend(format_binaries_and_datas(list_of_tuples))
+
+    def add_datas(self, list_of_tuples):
+        """
+        Add all external data files in the passed list of `(name, path)` 2-tuples as dependencies of the current
+        module. This is equivalent to adding to the global `datas` hook attribute.
+
+        For convenience, the `list_of_tuples` may also be a single TOC or TREE instance.
+        """
+        if isinstance(list_of_tuples, TOC):
+            self._added_datas.extend(i[:2] for i in list_of_tuples)
+        else:
+            self._added_datas.extend(format_binaries_and_datas(list_of_tuples))

+ 416 - 0
ffmpegpy/Lib/site-packages/PyInstaller/depend/utils.py

@@ -0,0 +1,416 @@
+# -*- coding: utf-8 -*-
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+Utility functions related to analyzing/bundling dependencies.
+"""
+
+import ctypes.util
+import io
+import os
+import re
+import struct
+import zipfile
+from types import CodeType
+from importlib.util import source_hash as importlib_source_hash
+
+import marshal
+
+from PyInstaller import compat
+from PyInstaller import log as logging
+from PyInstaller.depend import bytecode
+from PyInstaller.depend.dylib import include_library
+from PyInstaller.exceptions import ExecCommandFailed
+from PyInstaller.lib.modulegraph import modulegraph
+
+logger = logging.getLogger(__name__)
+
+
+# TODO find out if modules from base_library.zip could be somehow bundled into the .exe file.
+def create_py3_base_library(libzip_filename, graph):
+    """
+    Package basic Python modules into .zip file. The .zip file with basic modules is necessary to have on PYTHONPATH
+    for initializing libpython3 in order to run the frozen executable with Python 3.
+    """
+    # Import strip_paths_in_code locally to avoid cyclic import between building.utils and depend.utils (this module);
+    # building.utils imports depend.bindepend, which in turn imports depend.utils.
+    from PyInstaller.building.utils import strip_paths_in_code
+
+    # Construct regular expression for matching modules that should be bundled into base_library.zip. Excluded are plain
+    # 'modules' or 'submodules.ANY_NAME'. The match has to be exact - start and end of string not substring.
+    regex_modules = '|'.join([rf'(^{x}$)' for x in compat.PY3_BASE_MODULES])
+    regex_submod = '|'.join([rf'(^{x}\..*$)' for x in compat.PY3_BASE_MODULES])
+    regex_str = regex_modules + '|' + regex_submod
+    module_filter = re.compile(regex_str)
+
+    try:
+        # Remove .zip from previous run.
+        if os.path.exists(libzip_filename):
+            os.remove(libzip_filename)
+        logger.debug('Adding python files to base_library.zip')
+        # Class zipfile.PyZipFile is not suitable for PyInstaller needs.
+        with zipfile.ZipFile(libzip_filename, mode='w') as zf:
+            zf.debug = 3
+            # Sort the graph nodes by identifier to ensure repeatable builds
+            graph_nodes = list(graph.iter_graph())
+            graph_nodes.sort(key=lambda item: item.identifier)
+            for mod in graph_nodes:
+                if type(mod) in (modulegraph.SourceModule, modulegraph.Package, modulegraph.CompiledModule):
+                    # Bundling just required modules.
+                    if module_filter.match(mod.identifier):
+                        # Name inside the archive. The ZIP format specification requires forward slashes as directory
+                        # separator.
+                        if type(mod) is modulegraph.Package:
+                            new_name = mod.identifier.replace('.', '/') + '/__init__.pyc'
+                        else:
+                            new_name = mod.identifier.replace('.', '/') + '.pyc'
+
+                        # Write code to a file. This code is similar to py_compile.compile().
+                        with io.BytesIO() as fc:
+                            # Prepare all data in byte stream file-like object.
+                            fc.write(compat.BYTECODE_MAGIC)
+
+                            # Additional bitfield according to PEP 552 0b01 means hash based but don't check the
+                            # hash
+                            fc.write(struct.pack('<I', 0b01))
+                            with open(mod.filename, 'rb') as fs:
+                                source_bytes = fs.read()
+                            source_hash = importlib_source_hash(source_bytes)
+                            fc.write(source_hash)
+
+                            code = strip_paths_in_code(mod.code)  # Strip paths
+                            marshal.dump(code, fc)
+                            # Use a ZipInfo to set timestamp for deterministic build.
+                            info = zipfile.ZipInfo(new_name)
+                            zf.writestr(info, fc.getvalue())
+
+    except Exception:
+        logger.error('base_library.zip could not be created!')
+        raise
+
+
+def scan_code_for_ctypes(co):
+    binaries = __recursively_scan_code_objects_for_ctypes(co)
+
+    # If any of the libraries has been requested with anything else than the basename, drop that entry and warn the
+    # user - PyInstaller would need to patch the compiled pyc file to make it work correctly!
+    binaries = set(binaries)
+    for binary in list(binaries):
+        # 'binary' might be in some cases None. Some Python modules (e.g., PyObjC.objc._bridgesupport) might contain
+        # code like this:
+        #     dll = ctypes.CDLL(None)
+        if not binary:
+            # None values have to be removed too.
+            binaries.remove(binary)
+        elif binary != os.path.basename(binary):
+            # TODO make these warnings show up somewhere.
+            try:
+                filename = co.co_filename
+            except Exception:
+                filename = 'UNKNOWN'
+            logger.warning(
+                "Ignoring %s imported from %s - only basenames are supported with ctypes imports!", binary, filename
+            )
+            binaries.remove(binary)
+
+    binaries = _resolveCtypesImports(binaries)
+    return binaries
+
+
+def __recursively_scan_code_objects_for_ctypes(code: CodeType):
+    """
+    Detects ctypes dependencies, using reasonable heuristics that should cover most common ctypes usages; returns a
+    list containing names of binaries detected as dependencies.
+    """
+    from PyInstaller.depend.bytecode import any_alias, search_recursively
+
+    binaries = []
+    ctypes_dll_names = {
+        *any_alias("ctypes.CDLL"),
+        *any_alias("ctypes.cdll.LoadLibrary"),
+        *any_alias("ctypes.WinDLL"),
+        *any_alias("ctypes.windll.LoadLibrary"),
+        *any_alias("ctypes.OleDLL"),
+        *any_alias("ctypes.oledll.LoadLibrary"),
+        *any_alias("ctypes.PyDLL"),
+        *any_alias("ctypes.pydll.LoadLibrary"),
+    }
+    find_library_names = {
+        *any_alias("ctypes.util.find_library"),
+    }
+
+    for calls in bytecode.recursive_function_calls(code).values():
+        for (name, args) in calls:
+            if not len(args) == 1 or not isinstance(args[0], str):
+                continue
+            if name in ctypes_dll_names:
+                # ctypes.*DLL() or ctypes.*dll.LoadLibrary()
+                binaries.append(*args)
+            elif name in find_library_names:
+                # ctypes.util.find_library() needs to be handled separately, because we need to resolve the library base
+                # name given as the argument (without prefix and suffix, e.g. 'gs') into corresponding full name (e.g.,
+                # 'libgs.so.9').
+                libname = args[0]
+                if libname:
+                    libname = ctypes.util.find_library(libname)
+                    if libname:
+                        # On Windows, `find_library` may return a full pathname. See issue #1934.
+                        libname = os.path.basename(libname)
+                        binaries.append(libname)
+
+    # The above handles any flavour of function/class call. We still need to capture the (albeit rarely used) case of
+    # loading libraries with ctypes.cdll's getattr.
+    for i in search_recursively(_scan_code_for_ctypes_getattr, code).values():
+        binaries.extend(i)
+
+    return binaries
+
+
+_ctypes_getattr_regex = bytecode.bytecode_regex(
+    rb"""
+    # Matches 'foo.bar' or 'foo.bar.whizz'.
+
+    # Load the 'foo'.
+    ((?:`EXTENDED_ARG`.)*
+     (?:`LOAD_NAME`|`LOAD_GLOBAL`|`LOAD_FAST`).)
+
+    # Load the 'bar.whizz'.
+    ((?:(?:`EXTENDED_ARG`.)*
+     (?:`LOAD_METHOD`|`LOAD_ATTR`).)+)
+"""
+)
+
+
+def _scan_code_for_ctypes_getattr(code: CodeType):
+    """
+    Detect uses of ``ctypes.cdll.library_name``, which implies that ``library_name.dll`` should be collected.
+    """
+
+    key_names = ("cdll", "oledll", "pydll", "windll")
+
+    for match in bytecode.finditer(_ctypes_getattr_regex, code.co_code):
+        name, attrs = match.groups()
+        name = bytecode.load(name, code)
+        attrs = bytecode.loads(attrs, code)
+
+        if attrs and attrs[-1] == "LoadLibrary":
+            continue
+
+        # Capture `from ctypes import ole; ole.dll_name`.
+        if len(attrs) == 1:
+            if name in key_names:
+                yield attrs[0] + ".dll"
+        # Capture `import ctypes; ctypes.ole.dll_name`.
+        if len(attrs) == 2:
+            if name == "ctypes" and attrs[0] in key_names:
+                yield attrs[1] + ".dll"
+
+
+# TODO: reuse this code with modulegraph implementation.
+def _resolveCtypesImports(cbinaries):
+    """
+    Completes ctypes BINARY entries for modules with their full path.
+
+    Input is a list of c-binary-names (as found by `scan_code_instruction_for_ctypes`). Output is a list of tuples
+    ready to be appended to the ``binaries`` of a modules.
+
+    This function temporarily extents PATH, LD_LIBRARY_PATH or DYLD_LIBRARY_PATH (depending on the platform) by
+    CONF['pathex'] so shared libs will be search there, too.
+
+    Example:
+    >>> _resolveCtypesImports(['libgs.so'])
+    [(libgs.so', ''/usr/lib/libgs.so', 'BINARY')]
+    """
+    from ctypes.util import find_library
+
+    from PyInstaller.config import CONF
+
+    if compat.is_unix:
+        envvar = "LD_LIBRARY_PATH"
+    elif compat.is_darwin:
+        envvar = "DYLD_LIBRARY_PATH"
+    else:
+        envvar = "PATH"
+
+    def _setPaths():
+        path = os.pathsep.join(CONF['pathex'])
+        old = compat.getenv(envvar)
+        if old is not None:
+            path = os.pathsep.join((path, old))
+        compat.setenv(envvar, path)
+        return old
+
+    def _restorePaths(old):
+        if old is None:
+            compat.unsetenv(envvar)
+        else:
+            compat.setenv(envvar, old)
+
+    ret = []
+
+    # Try to locate the shared library on the disk. This is done by calling ctypes.util.find_library with
+    # ImportTracker's local paths temporarily prepended to the library search paths (and restored after the call).
+    old = _setPaths()
+    for cbin in cbinaries:
+        try:
+            # There is an issue with find_library() where it can run into errors trying to locate the library. See
+            # #5734.
+            cpath = find_library(os.path.splitext(cbin)[0])
+        except FileNotFoundError:
+            # In these cases, find_library() should return None.
+            cpath = None
+        if compat.is_unix:
+            # CAVEAT: find_library() is not the correct function. ctype's documentation says that it is meant to resolve
+            # only the filename (as a *compiler* does) not the full path. Anyway, it works well enough on Windows and
+            # Mac OS. On Linux, we need to implement more code to find out the full path.
+            if cpath is None:
+                cpath = cbin
+            # "man ld.so" says that we should first search LD_LIBRARY_PATH and then the ldcache.
+            for d in compat.getenv(envvar, '').split(os.pathsep):
+                if os.path.isfile(os.path.join(d, cpath)):
+                    cpath = os.path.join(d, cpath)
+                    break
+            else:
+                if LDCONFIG_CACHE is None:
+                    load_ldconfig_cache()
+                if cpath in LDCONFIG_CACHE:
+                    cpath = LDCONFIG_CACHE[cpath]
+                    assert os.path.isfile(cpath)
+                else:
+                    cpath = None
+        if cpath is None:
+            # Skip warning message if cbin (basename of library) is ignored. This prevents messages like:
+            # 'W: library kernel32.dll required via ctypes not found'
+            if not include_library(cbin):
+                continue
+            logger.warning("Library %s required via ctypes not found", cbin)
+        else:
+            if not include_library(cpath):
+                continue
+            ret.append((cbin, cpath, "BINARY"))
+    _restorePaths(old)
+    return ret
+
+
+LDCONFIG_CACHE = None  # cache the output of `/sbin/ldconfig -p`
+
+
+def load_ldconfig_cache():
+    """
+    Create a cache of the `ldconfig`-output to call it only once.
+    It contains thousands of libraries and running it on every dylib is expensive.
+    """
+    global LDCONFIG_CACHE
+
+    if LDCONFIG_CACHE is not None:
+        return
+
+    if compat.is_musl:
+        # Musl deliberately doesn't use ldconfig. The ldconfig executable either doesn't exist or it's a functionless
+        # executable which, on calling with any arguments, simply tells you that those arguments are invalid.
+        LDCONFIG_CACHE = {}
+        return
+
+    from distutils.spawn import find_executable
+    ldconfig = find_executable('ldconfig')
+    if ldconfig is None:
+        # If `ldconfig` is not found in $PATH, search for it in some fixed directories. Simply use a second call instead
+        # of fiddling around with checks for empty env-vars and string-concat.
+        ldconfig = find_executable('ldconfig', '/usr/sbin:/sbin:/usr/bin:/usr/sbin')
+
+        # If we still could not find the 'ldconfig' command...
+        if ldconfig is None:
+            LDCONFIG_CACHE = {}
+            return
+
+    if compat.is_freebsd or compat.is_openbsd:
+        # This has a quite different format than other Unixes:
+        # [vagrant@freebsd-10 ~]$ ldconfig -r
+        # /var/run/ld-elf.so.hints:
+        #     search directories: /lib:/usr/lib:/usr/lib/compat:...
+        #     0:-lgeom.5 => /lib/libgeom.so.5
+        #   184:-lpython2.7.1 => /usr/local/lib/libpython2.7.so.1
+        ldconfig_arg = '-r'
+        splitlines_count = 2
+        pattern = re.compile(r'^\s+\d+:-l(\S+)(\s.*)? => (\S+)')
+    else:
+        # Skip first line of the library list because it is just an informative line and might contain localized
+        # characters. Example of first line with locale set to cs_CZ.UTF-8:
+        #$ /sbin/ldconfig -p
+        #V keši „/etc/ld.so.cache“ nalezeno knihoven: 2799
+        #      libzvbi.so.0 (libc6,x86-64) => /lib64/libzvbi.so.0
+        #      libzvbi-chains.so.0 (libc6,x86-64) => /lib64/libzvbi-chains.so.0
+        ldconfig_arg = '-p'
+        splitlines_count = 1
+        pattern = re.compile(r'^\s+(\S+)(\s.*)? => (\S+)')
+
+    try:
+        text = compat.exec_command(ldconfig, ldconfig_arg)
+    except ExecCommandFailed:
+        logger.warning("Failed to execute ldconfig. Disabling LD cache.")
+        LDCONFIG_CACHE = {}
+        return
+
+    text = text.strip().splitlines()[splitlines_count:]
+
+    LDCONFIG_CACHE = {}
+    for line in text:
+        # :fixme: this assumes library names do not contain whitespace
+        m = pattern.match(line)
+
+        # Sanitize away any abnormal lines of output.
+        if m is None:
+            # Warn about it then skip the rest of this iteration.
+            if re.search("Cache generated by:", line):
+                # See #5540. This particular line is harmless.
+                pass
+            else:
+                logger.warning("Unrecognised line of output %r from ldconfig", line)
+            continue
+
+        path = m.groups()[-1]
+        if compat.is_freebsd or compat.is_openbsd:
+            # Insert `.so` at the end of the lib's basename. soname and filename may have (different) trailing versions.
+            # We assume the `.so` in the filename to mark the end of the lib's basename.
+            bname = os.path.basename(path).split('.so', 1)[0]
+            name = 'lib' + m.group(1)
+            assert name.startswith(bname)
+            name = bname + '.so' + name[len(bname):]
+        else:
+            name = m.group(1)
+        # ldconfig may know about several versions of the same lib, e.g., different arch, different libc, etc.
+        # Use the first entry.
+        if name not in LDCONFIG_CACHE:
+            LDCONFIG_CACHE[name] = path
+
+
+def get_path_to_egg(path):
+    """
+    Return the path to the python egg file, if the given path points to a file inside (or directly to) an egg.
+    Return `None` otherwise.
+    """
+    # This assumes that eggs are not nested.
+    # TODO: add support for unpacked eggs and for new .whl packages.
+    lastpath = None  # marker to stop recursion
+    while path and path != lastpath:
+        if os.path.splitext(path)[1].lower() == ".egg":
+            if os.path.isfile(path) or os.path.isdir(path):
+                return path
+        lastpath = path
+        path = os.path.dirname(path)
+    return None
+
+
+def is_path_to_egg(path):
+    """
+    Check if the given path points to a file inside (or directly to) a python egg file.
+    """
+    return get_path_to_egg(path) is not None

+ 30 - 0
ffmpegpy/Lib/site-packages/PyInstaller/exceptions.py

@@ -0,0 +1,30 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+
+
+class ExecCommandFailed(SystemExit):
+    pass
+
+
+class HookError(Exception):
+    """
+    Base class for hook related errors.
+    """
+    pass
+
+
+class ImportErrorWhenRunningHook(HookError):
+    def __str__(self):
+        return (
+            "Failed to import module {0} required by hook for module {1}. Please check whether module {0} actually "
+            "exists and whether the hook is compatible with your version of {1}: You might want to read more about "
+            "hooks in the manual and provide a pull-request to improve PyInstaller.".format(self.args[0], self.args[1])
+        )

BIN
ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/__pycache__/pyi_splash.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/__pycache__/site.cpython-37.pyc


+ 223 - 0
ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/pyi_splash.py

@@ -0,0 +1,223 @@
+# -----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+# -----------------------------------------------------------------------------
+
+# This module is not a "fake module" in the classical sense, but a real module that can be imported. It acts as an RPC
+# interface for the functions of the bootloader.
+"""
+This module connects to the bootloader to send messages to the splash screen.
+
+It is intended to act as a RPC interface for the functions provided by the bootloader, such as displaying text or
+closing. This makes the users python program independent of how the communication with the bootloader is implemented,
+since a consistent API is provided.
+
+To connect to the bootloader, it connects to a local tcp socket whose port is passed through the environment variable
+'_PYIBoot_SPLASH'. The bootloader creates a server socket and accepts every connection request. Since the os-module,
+which is needed to request the environment variable, is not available at boot time, the module does not establish the
+connection until initialization.
+
+The protocol by which the Python interpreter communicates with the bootloader is implemented in this module.
+
+This module does not support reloads while the splash screen is displayed, i.e. it cannot be reloaded (such as by
+importlib.reload), because the splash screen closes automatically when the connection to this instance of the module
+is lost.
+"""
+
+import atexit
+import os
+
+# Import the _socket module instead of the socket module. All used functions to connect to the ipc system are
+# provided by the C module and the users program does not necessarily need to include the socket module and all
+# required modules it uses.
+import _socket
+
+__all__ = ["CLOSE_CONNECTION", "FLUSH_CHARACTER", "is_alive", "close", "update_text"]
+
+try:
+    # The user might have excluded logging from imports.
+    import logging as _logging
+except ImportError:
+    _logging = None
+
+try:
+    # The user might have excluded functools from imports.
+    from functools import update_wrapper
+except ImportError:
+    update_wrapper = None
+
+
+# Utility
+def _log(level, msg, *args, **kwargs):
+    """
+    Conditional wrapper around logging module. If the user excluded logging from the imports or it was not imported,
+    this function should handle it and avoid using the logger.
+    """
+    if _logging:
+        logger = _logging.getLogger(__name__)
+        logger.log(level, msg, *args, **kwargs)
+
+
+# These constants define single characters which are needed to send commands to the bootloader. Those constants are
+# also set in the tcl script.
+CLOSE_CONNECTION = b'\x04'  # ASCII End-of-Transmission character
+FLUSH_CHARACTER = b'\x0D'  # ASCII Carriage Return character
+
+# Module internal variables
+_initialized = False
+# Keep these variables always synchronized
+_ipc_socket_closed = True
+_ipc_socket = _socket.socket(_socket.AF_INET, _socket.SOCK_STREAM)
+
+
+def _initialize():
+    """
+    Initialize this module
+
+    :return:
+    """
+    global _initialized, _ipc_socket, _ipc_socket_closed
+    try:
+        _ipc_socket.connect(("localhost", _ipc_port))
+        _ipc_socket_closed = False
+
+        _initialized = True
+        _log(20, "A connection to the splash screen was successfully established.")  # log-level: info
+    except OSError as err:
+        raise ConnectionError("Unable to connect to the tcp server socket on port %d" % _ipc_port) from err
+
+
+# We expect a splash screen from the bootloader, but if _PYIBoot_SPLASH is not set, the module cannot connect to it.
+try:
+    _ipc_port = int(os.environ['_PYIBoot_SPLASH'])
+    del os.environ['_PYIBoot_SPLASH']
+    # Initialize the connection upon importing this module. This will establish a connection to the bootloader's TCP
+    # server socket.
+    _initialize()
+except (KeyError, ValueError) as _err:
+    # log-level: warning
+    _log(
+        30, "The environment does not allow connecting to the splash screen. Are the splash resources attached to the "
+        "bootloader or did an error occur?",
+        exc_info=_err
+    )
+except ConnectionError as _err:
+    # log-level: error
+    _log(40, "Cannot connect to the bootloaders ipc server socket", exc_info=_err)
+
+
+def _check_connection(func):
+    """
+    Utility decorator for checking whether the function should be executed.
+
+    The wrapped function may raise a ConnectionError if the module was not initialized correctly.
+    """
+    def wrapper(*args, **kwargs):
+        """
+        Executes the wrapped function if the environment allows it.
+
+        That is, if the connection to to bootloader has not been closed and the module is initialized.
+
+        :raises RuntimeError: if the module was not initialized correctly.
+        """
+        if _initialized and _ipc_socket_closed:
+            _log(
+                20, "The module has been disabled, so the use of the splash screen is no longer supported."
+            )  # log-level: info
+            return
+        elif not _initialized:
+            raise RuntimeError("This module is not initialized; did it fail to load?")
+
+        return func(*args, **kwargs)
+
+    if update_wrapper:
+        # For runtime introspection
+        update_wrapper(wrapper, func)
+
+    return wrapper
+
+
+@_check_connection
+def _send_command(cmd, args=None):
+    """
+    Send the command followed by args to the splash screen.
+
+    :param str cmd: The command to send. All command have to be defined as procedures in the tcl splash screen script.
+    :param list[str] args: All arguments to send to the receiving function
+    """
+    if args is None:
+        args = []
+
+    full_cmd = "%s(%s)" % (cmd, " ".join(args))
+    try:
+        _ipc_socket.sendall(full_cmd.encode("utf-8") + FLUSH_CHARACTER)
+    except OSError as err:
+        raise ConnectionError("Unable to send '%s' to the bootloader" % full_cmd) from err
+
+
+def is_alive():
+    """
+    Indicates whether the module can be used.
+
+    Returns False if the module is either not initialized or was disabled by closing the splash screen. Otherwise,
+    the module should be usable.
+    """
+    return _initialized and not _ipc_socket_closed
+
+
+@_check_connection
+def update_text(msg):
+    """
+    Updates the text on the splash screen window.
+
+    :param str msg: the text to be displayed
+    :raises ConnectionError: If the OS fails to write to the socket.
+    :raises RuntimeError: If the module is not initialized.
+    """
+    _send_command("update_text", [msg])
+
+
+def close():
+    """
+    Close the connection to the ipc tcp server socket.
+
+    This will close the splash screen and renders this module unusable. After this function is called, no connection
+    can be opened to the splash screen again and all functions in this module become unusable.
+    """
+    global _ipc_socket_closed
+    if _initialized and not _ipc_socket_closed:
+        _ipc_socket.sendall(CLOSE_CONNECTION)
+        _ipc_socket.close()
+        _ipc_socket_closed = True
+
+
[email protected]
+def _exit():
+    close()
+
+
+# Discarded idea:
+# Problem:
+# There was a race condition between the tcl (splash screen) and python interpreter. Initially the tcl was started as a
+# separate thread next to the bootloader thread, which starts python. Tcl sets the environment variable
+# '_PYIBoot_SPLASH' with a port to connect to. If the python interpreter is faster initialized than the tcl interpreter
+# (sometimes the case in onedir mode) the environment variable does not yet exist. Since python caches the environment
+# variables at startup, updating the environ from tcl does not update the python environ.
+#
+# Considered Solution:
+# Dont rely on python itself to look up the environment variables. We could implement via ctypes functions to look up
+# the latest environ. See https://stackoverflow.com/a/33642551/5869139 for a possible implementation.
+#
+# Discarded because:
+# This module would need to implement for every supported OS a dll hook to link to the environ variable, technically
+# reimplementing the C function 'convertenviron' from posixmodule.c_ in python. The implemented solution now waits for
+# the tcl interpreter to finish before starting python.
+#
+# .. _posixmodule.c:
+#  https://github.com/python/cpython/blob/3.7/Modules/posixmodule.c#L1315-L1393

+ 51 - 0
ffmpegpy/Lib/site-packages/PyInstaller/fake-modules/site.py

@@ -0,0 +1,51 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2013-2022, PyInstaller Development Team.
+#
+# Distributed under the terms of the GNU General Public License (version 2
+# or later) with exception for distributing the bootloader.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
+#-----------------------------------------------------------------------------
+"""
+This is a fake 'site' module available in default Python Library.
+
+The real 'site' does some magic to find paths to other possible Python modules. We do not want this behaviour for
+frozen applications.
+
+Fake 'site' makes PyInstaller to work with distutils and to work inside virtualenv environment.
+"""
+
+# Marker to be used in our test-suite.
+__pyinstaller__faked__site__module__ = True
+
+# TODO test the following code stub from real 'site' module.
+
+# Prefixes for site-packages; add additional prefixes like /usr/local here.
+PREFIXES = []
+
+# Enable per user site-packages directory. Set it to False to disable the feature or True to force the feature.
+ENABLE_USER_SITE = False
+
+# For distutils.commands.install. These values are initialized by the getuserbase() and getusersitepackages() functions,
+# through the main() function when Python starts.
+# Issue #1699: Freezing pip requires 'site.USER_SITE' to be a 'str' not None.
+USER_SITE = ''
+# Freezing Jupyter Notebook requires 'site.USER_BASE' to be a 'str' not None.
+USER_BASE = ''
+
+
+# Package IPython depends on the following functionality from real site.py. This code could be probably removed when the
+# following bug is fixed: https://github.com/ipython/ipython/issues/2606
+class _Helper:
+    """
+    Define the builtin 'help'. This is a wrapper around pydoc.help (with a twist).
+    """
+    def __repr__(self):
+        return "Type help() for interactive help, or help(object) for help about object."
+
+    def __call__(self, *args, **kwds):
+        # Do *not* use `import` here, otherwise pydoc will be included in *every* frozen app.
+        pydoc = __import__(''.join('pydoc'))
+        return pydoc.help(*args, **kwds)

+ 1 - 0
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__init__.py

@@ -0,0 +1 @@
+#

BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/__init__.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.Image.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.ImageFilter.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.SpiderImagePlugin.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtCore.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtGui.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtHelp.cpython-37.pyc


BIN
ffmpegpy/Lib/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtLocation.cpython-37.pyc


Some files were not shown because too many files changed in this diff