diff --git a/GUI_Main.fbp b/GUI_Main.fbp
index 5d4aa5d..a1d0a6b 100644
--- a/GUI_Main.fbp
+++ b/GUI_Main.fbp
@@ -58,73 +58,22 @@
wxTAB_TRAVERSAL1Close
+ MainOnEraseBackground
+ MainOnPaint
+
+ 1
+ wxID_ANY
+ Timer
+ 0
+ 10
+ protected
+ Time_Tick
diff --git a/GUI_Main.py b/GUI_Main.py
index a0438e7..484fd2e 100644
--- a/GUI_Main.py
+++ b/GUI_Main.py
@@ -9,7 +9,6 @@
import wx
import wx.xrc
-import wx.media
###########################################################################
## Class Main
@@ -25,19 +24,21 @@ def __init__( self, parent ):
bSizer2 = wx.BoxSizer( wx.VERTICAL )
- self.Vedio = wx.media.MediaCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 400,300 ))
- self.Vedio.SetPlaybackRate(1)
- self.Vedio.SetVolume(1)
- bSizer2.Add( self.Vedio, 1, wx.EXPAND, 5 )
-
self.SetSizer( bSizer2 )
self.Layout()
+ self.Timer = wx.Timer()
+ self.Timer.SetOwner( self, wx.ID_ANY )
+ self.Timer.Start( 10 )
+
self.Centre( wx.BOTH )
# Connect Events
self.Bind( wx.EVT_CLOSE, self.Close )
+ self.Bind( wx.EVT_ERASE_BACKGROUND, self.MainOnEraseBackground )
+ self.Bind( wx.EVT_PAINT, self.MainOnPaint )
+ self.Bind( wx.EVT_TIMER, self.Time_Tick, id=wx.ID_ANY )
def __del__( self ):
pass
@@ -47,4 +48,13 @@ def __del__( self ):
def Close( self, event ):
event.Skip()
+ def MainOnEraseBackground( self, event ):
+ event.Skip()
+
+ def MainOnPaint( self, event ):
+ event.Skip()
+
+ def Time_Tick( self, event ):
+ event.Skip()
+
diff --git a/GUI_Manager.fbp b/GUI_Manager.fbp
index bebb073..6b06e00 100644
--- a/GUI_Manager.fbp
+++ b/GUI_Manager.fbp
@@ -47,7 +47,7 @@
Main
- 600,350
+ 720,350wxDEFAULT_FRAME_STYLE; ; forward_declareRBS_WALP_Manager
@@ -518,7 +518,7 @@
01
- T_BestSize
+ T_Size1
@@ -570,7 +570,7 @@
00wxID_ANY
- Best size
+ 分辨率00
@@ -867,81 +867,11 @@
-
-
-
- 5
- wxEXPAND | wxALL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_staticline1
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
- wxLI_HORIZONTAL
- ; ; forward_declare
- 0
-
-
-
-
-
-
-
- 5
- wxEXPAND
- 1
-
- wxWRAPSIZER_DEFAULT_FLAGS
-
- wSizer3
- wxHORIZONTAL
- none5wxEXPAND1
-
+ bSizer32wxVERTICAL
@@ -1137,7 +1067,71 @@
5
- wxALL
+ wxALL|wxALIGN_CENTER_HORIZONTAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ Guage
+ 1
+
+
+ protected
+ 1
+
+ 100
+ Resizable
+ 1
+
+ wxGA_HORIZONTAL
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL01
@@ -1203,19 +1197,19 @@
5
- wxEXPAND
- 1
+ wxALIGN_CENTER_HORIZONTAL
+ 0wxWRAPSIZER_DEFAULT_FLAGSwSizer2wxHORIZONTALnone
-
+ 5wxALL0
-
+ 111
@@ -1284,11 +1278,11 @@
-
+ 5wxALL0
-
+ 111
@@ -1358,11 +1352,11 @@
Control_MOnButtonClick
-
+ 5wxALL0
-
+ 111
@@ -1435,13 +1429,13 @@
- 1
+ 0wxID_ANYTimer0
- 100
+ 10protected
- TimerOnTimer
+ Time_Tick
diff --git a/GUI_Manager.py b/GUI_Manager.py
index b3020a7..804f535 100644
--- a/GUI_Manager.py
+++ b/GUI_Manager.py
@@ -17,7 +17,7 @@
class Main ( wx.Frame ):
def __init__( self, parent ):
- wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"RBS_WALP_Manager", pos = wx.DefaultPosition, size = wx.Size( 600,350 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
+ wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"RBS_WALP_Manager", pos = wx.DefaultPosition, size = wx.Size( 720,350 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
self.SetBackgroundColour( wx.Colour( 255, 255, 255 ) )
@@ -62,12 +62,12 @@ def __init__( self, parent ):
bSizer4 = wx.BoxSizer( wx.VERTICAL )
- self.T_BestSize = wx.StaticText( self, wx.ID_ANY, u"000 X 000", wx.DefaultPosition, wx.Size( 80,40 ), wx.ALIGN_CENTER_HORIZONTAL )
- self.T_BestSize.Wrap( -1 )
+ self.T_Size = wx.StaticText( self, wx.ID_ANY, u"000 X 000", wx.DefaultPosition, wx.Size( 80,40 ), wx.ALIGN_CENTER_HORIZONTAL )
+ self.T_Size.Wrap( -1 )
- bSizer4.Add( self.T_BestSize, 0, wx.ALL, 5 )
+ bSizer4.Add( self.T_Size, 0, wx.ALL, 5 )
- self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, u"Best size", wx.DefaultPosition, wx.DefaultSize, 0 )
+ self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, u"分辨率", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText5.Wrap( -1 )
bSizer4.Add( self.m_staticText5, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
@@ -105,14 +105,6 @@ def __init__( self, parent ):
wSizer1.Add( bSizer411, 1, wx.EXPAND, 5 )
-
- bSizer2.Add( wSizer1, 0, 0, 5 )
-
- self.m_staticline1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
- bSizer2.Add( self.m_staticline1, 0, wx.EXPAND |wx.ALL, 5 )
-
- wSizer3 = wx.WrapSizer( wx.HORIZONTAL, wx.WRAPSIZER_DEFAULT_FLAGS )
-
bSizer32 = wx.BoxSizer( wx.VERTICAL )
self.S_Rate = wx.Slider( self, wx.ID_ANY, 100, 0, 200, wx.DefaultPosition, wx.Size( -1,40 ), wx.SL_HORIZONTAL|wx.SL_VALUE_LABEL )
@@ -124,16 +116,20 @@ def __init__( self, parent ):
bSizer32.Add( self.m_staticText21, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
- wSizer3.Add( bSizer32, 1, wx.EXPAND, 5 )
+ wSizer1.Add( bSizer32, 1, wx.EXPAND, 5 )
- bSizer2.Add( wSizer3, 1, wx.EXPAND, 5 )
+ bSizer2.Add( wSizer1, 0, 0, 5 )
self.m_staticline3 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
bSizer2.Add( self.m_staticline3, 0, wx.EXPAND |wx.ALL, 5 )
+ self.Guage = wx.Gauge( self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL )
+ self.Guage.SetValue( 0 )
+ bSizer2.Add( self.Guage, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
+
self.GUIDE = wx.Slider( self, wx.ID_ANY, 0, 0, 100, wx.DefaultPosition, wx.Size( 600,-1 ), wx.SL_AUTOTICKS|wx.SL_BOTH )
- bSizer2.Add( self.GUIDE, 0, wx.ALL, 5 )
+ bSizer2.Add( self.GUIDE, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
wSizer2 = wx.WrapSizer( wx.HORIZONTAL, wx.WRAPSIZER_DEFAULT_FLAGS )
@@ -147,15 +143,13 @@ def __init__( self, parent ):
wSizer2.Add( self.m_button3, 0, wx.ALL, 5 )
- bSizer2.Add( wSizer2, 1, wx.EXPAND, 5 )
+ bSizer2.Add( wSizer2, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.SetSizer( bSizer2 )
self.Layout()
self.Timer = wx.Timer()
self.Timer.SetOwner( self, wx.ID_ANY )
- self.Timer.Start( 100 )
-
self.Centre( wx.BOTH )
@@ -166,7 +160,7 @@ def __init__( self, parent ):
self.S_Rate.Bind( wx.EVT_SCROLL, self.Change_Rate )
self.GUIDE.Bind( wx.EVT_SCROLL, self.GUIDEOnScroll )
self.Control_M.Bind( wx.EVT_BUTTON, self.Control_MOnButtonClick )
- self.Bind( wx.EVT_TIMER, self.TimerOnTimer, id=wx.ID_ANY )
+ self.Bind( wx.EVT_TIMER, self.Time_Tick, id=wx.ID_ANY )
def __del__( self ):
pass
@@ -191,7 +185,7 @@ def GUIDEOnScroll( self, event ):
def Control_MOnButtonClick( self, event ):
event.Skip()
- def TimerOnTimer( self, event ):
+ def Time_Tick( self, event ):
event.Skip()
diff --git a/Main.py b/Main.py
index 1841b12..8fbf36d 100644
--- a/Main.py
+++ b/Main.py
@@ -1,7 +1,7 @@
##############################
# import
##############################
-import wx,wx.media
+import wx
import GUI_Main
import win32api,win32con
@@ -17,7 +17,6 @@ def __init__(self, parent):
# 定义主函数
GUI_Main.Main.__init__(self, parent)
- ##self.ShowFullScreen(True) # 全屏
self.SetDoubleBuffered(True) # 双缓冲
self.SetTitle('RBS_WALP') # 设置窗口标题
@@ -31,10 +30,14 @@ def __init__(self, parent):
self.SetSize(screen_Size_X, screen_Size_Y)
- ##self.Vedio.ShowPlayerControls() # 播放控件
+ self.i = 1
- #self.Vedio.Load("test_vedio.mp4" ) # 加载视频
-
+
+ def MainOnEraseBackground(self, event):
+ pass
+
+ def MainOnPaint(self, event):
+ pass
def Close(self, event):
self.Destroy()
diff --git a/Manager.py b/Manager.py
index ccd7b8f..470b538 100644
--- a/Manager.py
+++ b/Manager.py
@@ -1,14 +1,18 @@
##############################
# import
##############################
-import wx,wx.media
+import wx
+import win32gui
+import os
+import cv2
+import shutil
import GUI_Manager
import Main
import windows_API
-import win32gui
-import webview
+
+
##############################
# GUI的函数桥接
@@ -20,67 +24,86 @@ def __init__(self, parent):
# 定义主函数
GUI_Manager.Main.__init__(self, parent)
- self.T_BestSize.SetLabel(str(Frame_Main.Vedio.GetBestSize()))
-
- Frame_Main.Vedio.Bind(wx.media.EVT_MEDIA_FINISHED, self.Restart)
- Frame_Main.Vedio.Bind(wx.media.EVT_MEDIA_LOADED, self.Loaded)
- Frame_Main.Vedio.Bind(wx.media.EVT_MEDIA_STOP, self.stop)
+ self.i = 1
def Close(self, event):
self.Timer.Stop()
self.Destroy()
Frame_Main.Destroy()
- def Change_Volume(self, event):
- Frame_Main.Vedio.SetVolume(self.S_Volume.GetValue() / 100)
- print("Volume",self.S_Volume.GetValue(), '%')
-
def OnFileChanged(self, event):
- if '.html' in self.filePicker.GetPath():
- Frame_Main.Vedio.Stop()
- Frame_Main.Destroy()
- self.Timer.Stop()
- self.Hide()
-
- window = webview.create_window('RBS_WALP_HTML', self.filePicker.GetPath())
- webview.start(html_boost, window)
- else:
- Frame_Main.Vedio.Stop()
- Frame_Main.Vedio.Load(self.filePicker.GetPath())
- self.T_BestSize.SetLabel(str(Frame_Main.Vedio.GetBestSize()))
- self.T_Length.SetLabel(str(Frame_Main.Vedio.Length()))
-
- def TimerOnTimer(self, event):
- self.T_Length.SetLabel(str(Frame_Main.Vedio.Length() / 1000) + 's')
- self.T_Tell.SetLabel(str(Frame_Main.Vedio.Tell() / 1000) + 's')
- if Frame_Main.Vedio.Length() != 0:
- self.GUIDE.SetValue(int(Frame_Main.Vedio.Tell() / Frame_Main.Vedio.Length() * 100))
-
- def Control_MOnButtonClick(self, event):
- print(Frame_Main.Vedio.GetState())
- if Frame_Main.Vedio.GetState() == 2:
- self.Control_M.SetLabel('start')
- Frame_Main.Vedio.Pause()
- else:
- self.Control_M.SetLabel('pause')
- Frame_Main.Vedio.Play()
+ path = self.filePicker.GetPath()
+ imgPath = './Cache/'
+
+ if os.path.splitext(path)[-1] == '.mp4':
- def Change_Rate(self, event):
- rate = self.S_Rate.GetValue() / 100
- Frame_Main.Vedio.SetPlaybackRate(rate)
+ if not os.path.exists(imgPath):
+ os.mkdir(imgPath)
+ else:
+ shutil.rmtree(imgPath)
+ os.mkdir(imgPath)
- def Restart(self, event):
- Frame_Main.Vedio.Play()
- print('Replay')
+ self.Guage.Pulse()
+ self.Video2Pic(videoPath=path,imgPath=imgPath)
+ self.T_Size.SetLabel(str(self.x) + 'X' + str(self.y))
- def Loaded(self, event):
- print('loading complete')
- Frame_Main.Vedio.Play()
- def stop(self, event):
- print(1)
+ def Time_Tick(self, event):
+ path = './Cache/' + str(self.i).zfill(4) + '.jpg'
+ ##print(path)
+ if os.path.exists(path):
+ ##print(1)
+ dc = wx.ClientDC(Frame_Main)
+ dc.DrawBitmap(wx.Bitmap(path), 0, 0)
+ Frame_Main.Refresh()
+
+ self.i = self.i + 1
+
+ else:
+ print('到达播放终点-<')
+ self.i = 1
+ ##self.Timer.Stop()
+ #----------------------------------------------------------------
+
+ def Video2Pic(self,videoPath,imgPath):
+ ##videoPath = "youvideoPath" # 读取视频路径
+ ##imgPath = "youimgPath" # 保存图片路径
+
+ cap = cv2.VideoCapture(videoPath)
+
+ fps = cap.get(cv2.CAP_PROP_FPS) # 获取帧率
+ self.fps = fps
+
+ width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 获取宽度
+ self.x = width
+
+ height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 获取高度
+ self.y = height
+
+ print('视频帧率:',fps,'画幅:',width,height)
+
+ suc = cap.isOpened() # 是否成功打开
+ frame_count = 0
+ try:
+ while suc:
+ frame_count += 1
+ suc, frame = cap.read()
+ path = imgPath + str(frame_count).zfill(4) + '.jpg'
+ cv2.imwrite(path, frame)
+ cv2.waitKey(1)
+ print(path)
+ except:
+ cap.release()
+ self.Guage.SetValue(0)
+ self.Timer.Start(10)
+ print("视频转图片结束!--错误")
+ else:
+ cap.release()
+ self.Guage.SetValue(0)
+ self.Timer.Start(10)
+ print("视频转图片结束!")
##############################
# 主函数
@@ -98,15 +121,13 @@ def main():
Frame_Main.Show()
- # windows api creature
- windows_API.RUN(player_window_handel=win32gui.FindWindow(None, "RBS_WALP"))
+ windows_name = Frame_Main.GetTitle()
+ windows_API.RUN(player_window_handel=win32gui.FindWindow(None, windows_name))
app.MainLoop()
-
-def html_boost(window):
- window.toggle_fullscreen()
- windows_API.RUN(player_window_handel=win32gui.FindWindow(None, "RBS_WALP_HTML"))
-
+
+
+
if __name__ == "__main__":
main()
diff --git a/Manager.spec b/Manager.spec
index 09f2f14..66699cf 100644
--- a/Manager.spec
+++ b/Manager.spec
@@ -4,41 +4,47 @@
block_cipher = None
-a = Analysis(['Manager.py'],
- pathex=[],
- binaries=[],
- datas=[],
- hiddenimports=[],
- hookspath=[],
- hooksconfig={},
- runtime_hooks=[],
- excludes=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=block_cipher,
- noarchive=False)
-pyz = PYZ(a.pure, a.zipped_data,
- cipher=block_cipher)
+a = Analysis(
+ ['Manager.py'],
+ pathex=[],
+ binaries=[],
+ datas=[],
+ hiddenimports=[],
+ hookspath=[],
+ hooksconfig={},
+ runtime_hooks=[],
+ excludes=[],
+ win_no_prefer_redirects=False,
+ win_private_assemblies=False,
+ cipher=block_cipher,
+ noarchive=False,
+)
+pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
-exe = EXE(pyz,
- a.scripts,
- [],
- exclude_binaries=True,
- name='Manager',
- debug=False,
- bootloader_ignore_signals=False,
- strip=False,
- upx=True,
- console=False,
- disable_windowed_traceback=False,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None )
-coll = COLLECT(exe,
- a.binaries,
- a.zipfiles,
- a.datas,
- strip=False,
- upx=True,
- upx_exclude=[],
- name='Manager')
+exe = EXE(
+ pyz,
+ a.scripts,
+ [],
+ exclude_binaries=True,
+ name='Manager',
+ debug=False,
+ bootloader_ignore_signals=False,
+ strip=False,
+ upx=True,
+ console=False,
+ disable_windowed_traceback=False,
+ argv_emulation=False,
+ target_arch=None,
+ codesign_identity=None,
+ entitlements_file=None,
+)
+coll = COLLECT(
+ exe,
+ a.binaries,
+ a.zipfiles,
+ a.datas,
+ strip=False,
+ upx=True,
+ upx_exclude=[],
+ name='Manager',
+)
diff --git a/README.md b/README.md
index 5687d8c..572a806 100644
--- a/README.md
+++ b/README.md
@@ -4,23 +4,37 @@ Desktop wallpaper engine based on wxPython Library
基于wxpython库实现的桌面壁纸引擎
-# 功能计划 || Plan 2022/01/15
+# 技术细节
+
+wxpython有自带的视频播放器控件,但是它每次播放完视频后会自动黑屏。为了实现无缝循环播放,我基于wx.DC尝试构建自定义的视频播放器。由于算法的更改,以前实现的功能暂时不可用。
+
+# 环境要求
+
+windows10
+
+windows8/7(理论上)
+
+# 功能计划 || Plan 2022/05/11
* [X] 可循环播放
* [X] 控制面版
-* [X] 音量调节
-* [X] 播放速率调节
+* [ ] 音量调节
+* [ ] 播放速率调节
* [X] 自定义播放路径
-* [X] 支持.mov文件夹
-* [ ] 无缝循环播放
+* [ ] 支持.mov文件夹
+* [X] 无缝循环播放
* [ ] 列表式播放
-# 所需库:
+# 所需库
wxpython
pywin32api
+pyopencv2
+
# 版权
所有者:@PUICHING_Memory
+
+协议:GPLV3
diff --git a/UPX/BUGS b/UPX/BUGS
new file mode 100644
index 0000000..509df9b
--- /dev/null
+++ b/UPX/BUGS
@@ -0,0 +1,51 @@
+ ooooo ooo ooooooooo. ooooooo ooooo
+ `888' `8' `888 `Y88. `8888 d8'
+ 888 8 888 .d88' Y888..8P
+ 888 8 888ooo88P' `8888'
+ 888 8 888 .8PY888.
+ `88. .8' 888 d8' `888b
+ `YbodP' o888o o888o o88888o
+
+
+ The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
+ https://upx.github.io
+
+
+Limitations and other things which are not (yet) supported:
+===========================================================
+
+djgpp2/coff
+-----------
+ * all overlays (except Allegro pakfiles) are silently stripped
+
+dos/exe
+-------
+ * normal dos/exes with new exe headers
+ * max ~24000 relocation records (...should be enough for everyone ;-)
+ * exe + sys combined images
+
+watcom/le
+---------
+ * 16-bit selector alias fixups
+ * 16-bit offset relocation for objects larger than 4 KiB
+ * 16:16 fixups
+
+If you need any of the above (they're very rare), send us an URL of a
+test file.
+
+ * 16-bit objects are not loaded into DOS memory
+ * There is still a problem with the wdosx extender: if you compress a
+ watcom/le file which does NOT contain the wdosx extender, and after this
+ you bind the wdosx stub to the compressed file, then it will work.
+ Otherwise it won't.
+ * unpacked pmwlite compressed programs might not work when compressed
+ with UPX (this is a bug in pmwunlite)
+
+win32/pe
+--------
+ * writable shared sections (`--force' *may* work)
+ * certificates in the image
+ * compressing files which contain a big BSS requires lots of memory
+ during compression
+
diff --git a/UPX/COPYING b/UPX/COPYING
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/UPX/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/UPX/LICENSE b/UPX/LICENSE
new file mode 100644
index 0000000..444ded8
--- /dev/null
+++ b/UPX/LICENSE
@@ -0,0 +1,138 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+
+
+ ooooo ooo ooooooooo. ooooooo ooooo
+ `888' `8' `888 `Y88. `8888 d8'
+ 888 8 888 .d88' Y888..8P
+ 888 8 888ooo88P' `8888'
+ 888 8 888 .8PY888.
+ `88. .8' 888 d8' `888b
+ `YbodP' o888o o888o o88888o
+
+
+ The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2000 Markus Oberhumer & Laszlo Molnar
+ http://wildsau.idv.uni-linz.ac.at/mfx/upx.html
+ http://www.nexus.hu/upx
+ http://upx.tsx.org
+
+
+PLEASE CAREFULLY READ THIS LICENSE AGREEMENT, ESPECIALLY IF YOU PLAN
+TO MODIFY THE UPX SOURCE CODE OR USE A MODIFIED UPX VERSION.
+
+
+ABSTRACT
+========
+
+ UPX and UCL are copyrighted software distributed under the terms
+ of the GNU General Public License (hereinafter the "GPL").
+
+ The stub which is imbedded in each UPX compressed program is part
+ of UPX and UCL, and contains code that is under our copyright. The
+ terms of the GNU General Public License still apply as compressing
+ a program is a special form of linking with our stub.
+
+ As a special exception we grant the free usage of UPX for all
+ executables, including commercial programs.
+ See below for details and restrictions.
+
+
+COPYRIGHT
+=========
+
+ UPX and UCL are copyrighted software. All rights remain with the authors.
+
+ UPX is Copyright (C) 1996-2000 Markus Franz Xaver Johannes Oberhumer
+ UPX is Copyright (C) 1996-2000 Laszlo Molnar
+
+ UCL is Copyright (C) 1996-2000 Markus Franz Xaver Johannes Oberhumer
+
+
+GNU GENERAL PUBLIC LICENSE
+==========================
+
+ UPX and the UCL library are free software; you can redistribute them
+ and/or modify them under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ UPX and UCL are distributed in the hope that they will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING.
+
+
+SPECIAL EXCEPTION FOR COMPRESSED EXECUTABLES
+============================================
+
+ The stub which is imbedded in each UPX compressed program is part
+ of UPX and UCL, and contains code that is under our copyright. The
+ terms of the GNU General Public License still apply as compressing
+ a program is a special form of linking with our stub.
+
+ Hereby Markus F.X.J. Oberhumer and Laszlo Molnar grant you special
+ permission to freely use and distribute all UPX compressed programs
+ (including commercial ones), subject to the following restrictions:
+
+ 1. You must compress your program with a completely unmodified UPX
+ version; either with our precompiled version, or (at your option)
+ with a self compiled version of the unmodified UPX sources as
+ distributed by us.
+ 2. This also implies that the UPX stub must be completely unmodfied, i.e.
+ the stub imbedded in your compressed program must be byte-identical
+ to the stub that is produced by the official unmodified UPX version.
+ 3. The decompressor and any other code from the stub must exclusively get
+ used by the unmodified UPX stub for decompressing your program at
+ program startup. No portion of the stub may get read, copied,
+ called or otherwise get used or accessed by your program.
+
+
+ANNOTATIONS
+===========
+
+ - You can use a modified UPX version or modified UPX stub only for
+ programs that are compatible with the GNU General Public License.
+
+ - We grant you special permission to freely use and distribute all UPX
+ compressed programs. But any modification of the UPX stub (such as,
+ but not limited to, removing our copyright string or making your
+ program non-decompressible) will immediately revoke your right to
+ use and distribute a UPX compressed program.
+
+ - UPX is not a software protection tool; by requiring that you use
+ the unmodified UPX version for your proprietary programs we
+ make sure that any user can decompress your program. This protects
+ both you and your users as nobody can hide malicious code -
+ any program that cannot be decompressed is highly suspicious
+ by definition.
+
+ - You can integrate all or part of UPX and UCL into projects that
+ are compatible with the GNU GPL, but obviously you cannot grant
+ any special exceptions beyond the GPL for our code in your project.
+
+ - We want to actively support manufacturers of virus scanners and
+ similar security software. Please contact us if you would like to
+ incorporate parts of UPX or UCL into such a product.
+
+
+
+Markus F.X.J. Oberhumer Laszlo Molnar
+markus.oberhumer@jk.uni-linz.ac.at ml1050@cdata.tvnet.hu
+
+Linz, Austria, 25 Feb 2000
+
+
+
+-----BEGIN PGP SIGNATURE-----
+Version: 2.6.3ia
+Charset: noconv
+
+iQCVAwUBOLaLS210fyLu8beJAQFYVAP/ShzENWKLTvedLCjZbDcwaBEHfUVcrGMI
+wE7frMkbWT2zmkdv9hW90WmjMhOBu7yhUplvN8BKOtLiolEnZmLCYu8AGCwr5wBf
+dfLoClxnzfTtgQv5axF1awp4RwCUH3hf4cDrOVqmAsWXKPHtm4hx96jF6L4oHhjx
+OO03+ojZdO8=
+=CS52
+-----END PGP SIGNATURE-----
diff --git a/UPX/NEWS b/UPX/NEWS
new file mode 100644
index 0000000..21659d4
--- /dev/null
+++ b/UPX/NEWS
@@ -0,0 +1,522 @@
+==================================================================
+User visible changes for UPX
+==================================================================
+
+Changes in 3.96 (23 Jan 2020):
+ * bug fixes - see https://github.com/upx/upx/milestone/5
+
+Changes in 3.95 (26 Aug 2018):
+ * Flag --android-shlib to work around bad design in Android
+ * Flag --force-pie when ET_DYN main program is not marked as DF_1_PIE
+ * Better compatibility with varying layout of address space on Linux
+ * Support for 4 PT_LOAD layout in ELF generated by binutils-2.31
+ * bug fixes, particularly better diagnosis of malformed input
+ * bug fixes - see https://github.com/upx/upx/milestone/4
+
+Changes in 3.94 (12 May 2017):
+ * Add support for arm64-linux (aka "aarch64").
+ * Add support for --lzma compression on 64-bit PowerPC (Thierry Fauck).
+ * For Mach, "upx -d" will unpack a prefix of the file (and warn).
+ * Various improvements to the ELF formats.
+ * bug fixes - see https://github.com/upx/upx/milestone/3
+
+Changes in 3.93 (29 Jan 2017):
+ * Fixed some win32/pe and win64/pe regressions introduced in 3.92
+ * bug fixes - see https://github.com/upx/upx/milestone/2
+
+Changes in 3.92 (11 Dec 2016):
+ * INFO: UPX has moved to GitHub - the new home page is https://upx.github.io
+ * IMPORTANT: all PE formats: internal changes: reunited the diverged source
+ files - please report all regressions into the bug tracker and try UPX 3.91
+ in case of problems.
+ * Support Apple MacOS 10.12 "Sierra", including more-robust de-compression.
+ * Explicitly diagnose Go-language bad PT_LOAD; recommend hemfix.c.
+ https://sourceforge.net/p/upx/bugs/195/ https://github.com/pwaller/goupx
+ * Fix CERT-FI Case 829767 UPX command line tools segfaults.
+ Received by UPX Team on 2015-May-08; originally reported
+ by Codenomicon to NCSC-FI on 2015-01-08.
+ The vulnerabilities were discovered by Joonas Kuorilehto and
+ Antti Häyrynen from Codenomicon.
+ * bug fixes - see https://github.com/upx/upx/milestone/1
+
+Changes in 3.91 (30 Sep 2013):
+ * Added experimental support for Windows 64-bit PE files, based on
+ work by Stefan Widmann. Please use for testing only!
+ * bug fixes
+
+==================================================================
+
+Changes in 3.09 (18 Feb 2013):
+ * New option --preserve-build-id for GNU ELF.
+ * Allow for code signing and LC_UUID on Mac OS X executables.
+ * Allow non-contiguous LC_SEGMENTs and 0==.vmsize for Mach-O.
+ * Allow zero-filled final page in PackUnix::canUnpack().
+ * bug fixes
+
+Changes in 3.08 (12 Dec 2011):
+ * Fix allocation in runtime stub for darwin.macho-entry (i386 and amd64).
+ * Compress shared library on ELF i386 only [ld.so threatens even this case].
+ * Attempt to support ELF on QNX 6.3.0 for armel (experimental).
+ * Better diagnostic when ELF -fPIC is needed.
+ * PT_NOTE improvements for *BSD.
+ * Preserve more ELF .e_flags on ARM.
+ * Minor code improvements for ELF stubs.
+ * Defend against another flavor of corrupt PE header.
+ * bug fixes
+
+Changes in 3.07 (08 Sep 2010):
+ * win32/pe: fixed relocation handling for files with *no* TLS callbacks
+ [severe bug introduced in 3.06]
+
+Changes in 3.06 (04 Sep 2010):
+ * win32/pe: TLS callback support contributed by Stefan Widmann. Thanks!
+ * bug fixes
+
+Changes in 3.05 (27 Apr 2010):
+ * i386-linux and amd64-linux support shared libraries (DT_INIT must
+ exist, all info needed by runtime loader must be first in .text, etc.)
+ * Linux /proc/self/exe now is preserved by default, by leaving behind
+ one page. New compress-time option --unmap-all-pages is available.
+ * Withdraw support for shared libraries on Darwin (Apple Mac OS X)
+ because upx does not understand enough about .dylib.
+ * bug fixes
+
+Changes in 3.04 (27 Sep 2009):
+ * new format Mach/AMD64 supports 64-bit programs on Apple Macintosh.
+ * new formats Dylib/i386 and Dylib/ppc32 support shared libraries
+ [such as browser plugins] on Darwin (Apple Macintosh). An existing
+ -init function (LC_ROUTINES command) is required.
+ * new format vmlinuz/armel for Debian NSLU2 (etc.) linux kernel
+ * bvmlinuz boot protocol 2.08 for 386 Linux kernel
+ * Extended ABI version 4 for armel-eabi ARM Linux ELF
+ * bug fixes
+
+Changes in 3.03 (27 Apr 2008):
+ * implement cache flushing for PowerPC (esp. model 440)
+ * fix cache flushing on MIPS (>3 MiB compressed, or with holes)
+ * fix MIPS big-endian
+ * bug fixes
+
+Changes in 3.02 (16 Dec 2007):
+ * fix unmapping on arm-linux.elf
+ * fix error checking in mmap for i386-linux.elf [triggered by -fPIE]
+ * bug fixes
+
+Changes in 3.01 (31 Jul 2007):
+ * new options --no-mode, --no-owner and --no-time to disable preservation
+ of mode (file permissions), file ownership and timestamps.
+ * dos/exe: fixed an incorrect error message caused by a bug in
+ relocation handling
+ * new format linux/mipsel supports ELF on [32-bit] R3000
+ * fix argv[0] on PowerPC with --lzma
+ * bug fixes
+
+Changes in 3.00 (27 Apr 2007):
+ * watcom/le & tmt/adam: fixed a problem when using certain filters
+
+Changes in 2.93 beta (08 Mar 2007):
+ * new formats Mach/i386 and Mach/fat support Mac OS X i686 and
+ Universal binaries [i686 and PowerPC only]
+ * dos/exe: LZMA is now also supported for 16-bit dos/exe. Please note that
+ you have to explicitly use '--lzma' even for '--ultra-brute' here
+ because runtime decompression is about 30 times slower than NRV -
+ which is really noticeable on old machines.
+ * dos/exe: fixed a rarely occurring bug in relocation handling
+ * win32/pe & arm/pe: better icon compression handling
+
+Changes in 2.92 beta (23 Jan 2007):
+ * new option '--ultra-brute' which tries even more variants
+ * slightly improved compression ratio for some files when
+ using '--brute' or '--ultra-brute'
+ * bug fixes
+
+Changes in 2.91 beta (29 Nov 2006):
+ * assorted bug fixes
+ * arm/pe: fix "missing" icon & version info resource problem for wince 5
+ * win32/pe & arm/pe: added option --compress-icons=3 to compress all icons
+
+Changes in 2.90 beta (08 Oct 2006):
+ * LZMA algorithm support for most of the 32-bit and 64-bit file formats;
+ use new option '--lzma' to enable
+ * new format: BSD/elf386 supporting FreeBSD, NetBSD and OpenBSD
+ via auto-detection of PT_NOTE or EI_OSABI
+ * arm/pe: all the NRV compression methods are now supported
+ (only NRV2D is missing in thumb mode)
+ * linux/elf386, linux/ElfAMD: remember /proc/self/exe in environment
+ * major source code changes: the runtime decompression stubs are now
+ built from internal ELF objects
+
+==================================================================
+
+Changes in 2.03 (07 Nov 2006):
+ * bvmlinuz/386: fix for kernels not at 0x100000; also allow x86_64
+ * linux/elf386: work around Linux kernel bug (0-length .bss needs PF_W)
+
+Changes in 2.02 (13 Aug 2006):
+ * linux/386: work around Linux kernel bug (".bss" requires PF_W)
+ * linux/ppc32, mach/ppc32: compressed programs now work on a 405 CPU
+ * vmlinuz/386: fixed zlib uncompression problem on DOS
+
+Changes in 2.01 (06 Jun 2006):
+ * arm/pe: better DLL support
+ * dos/exe: device driver support added
+ * linux/386: Fix --force-execve for PaX, grSecurity, and strict SELinux.
+ /tmp must support execve(); therefore /tmp cannot be mounted 'noexec'.
+ * win32/pe & arm/pe: added new option '--keep-resource=' for
+ excluding selected resources from compression
+
+Changes in 2.00 (27 Apr 2006):
+ * linux/386: the stub now prints an error message if some strict
+ SELinux mode does prevent runtime decompression and execution
+ (for a fully SELinux-compatible but otherwise inferior compression
+ format you can use the '--force-execve' option)
+ * linux/386: worked around a problem where certain Linux kernels
+ clobber the %ebx register during a syscall
+ * win32/pe: disable filters for files with broken PE headers
+
+Changes in 1.96 beta (13 Apr 2006):
+ * arm/pe: added filter support
+ * win32/pe: removed an unnecessary check so that Delphi 2006 and
+ Digital Mars C++ programs finally are supported
+
+Changes in 1.95 beta (09 Apr 2006):
+ * arm/pe: added DLL support
+ * arm/pe: added thumb mode stub support
+ * arm/pe: added unpacking support
+ * win32/pe: really worked around R6002 runtime errors
+
+Changes in 1.94 beta (11 Mar 2006):
+ * new format: added support for arm/pe (ARM executables running on WinCE)
+ * new format: added support for linux elf/amd64
+ * new format: added support for linux elf/ppc32
+ * new format: added support for mach/ppc32 (Apple Mac OS X)
+ * win32/pe: hopefully working "load config" support
+ * win32/pe: R6002 runtime errors worked around
+ * win32/pe: the stub now clears the dirty stack
+
+Changes in 1.93 beta (07 Feb 2005):
+ * vmlinuz/386: fixes to support more kernels
+
+Changes in 1.92 beta (20 Jul 2004):
+ * win32/pe: added option '--strip-loadconf' to strip the SEH load
+ config section [NOTE: this option is obsolete since UPX 1.94]
+ * win32/pe: try to detect .NET (win32/net) files [not yet supported by UPX]
+ * vmlinux/386: new format that directly supports building Linux kernels
+ * source code: now compiles cleanly under Win64
+
+Changes in 1.91 beta (30 Jun 2004):
+ * djgpp2/coff: added support for recent binutils versions
+ * linux/elf386, linux/sh386: lots of improvements
+ * vmlinuz/386: added support for recent kernels
+ * watcom/le: don't crash on files without relocations
+ * win32/pe: stricter checks of some PE values
+ * option '--brute' now implies '--crp-ms=999999'.
+ * source code: much improved portability using ACC, the
+ Automatic Compiler Configuration
+ * source code: compile fixes for strict ISO C++ compilers
+ * source code: compile fixes for Win64
+ * re-synced with upx 1.25 branch
+
+Changes in 1.90 beta (11 Nov 2002):
+ * implemented several new options for finer compression control:
+ '--all-methods', '--all-filters' and '--brute'
+ * ps1/exe: new format - UPX now supports PlayStation One programs
+ * linux/386: added the option '--force-execve'
+ * vmlinuz/386: better kernel detection and sanity checks
+ * re-synced with upx 1.24 branch
+ * documentation updates
+
+Changes in 1.11 beta (20 Dec 2000):
+ * vmlinuz/386: new format - UPX now supports bootable linux kernels
+ * linux/elf386: added the new ELF direct-to-memory executable format - no
+ more temp files are needed for decompression!
+ * linux/sh386: added the new shell direct-to-memory executable format - no
+ more temp files are needed for decompression!
+ * reduced overall memory requirements during packing
+ * quite a number of internal source code rearrangements
+
+==================================================================
+
+Changes in 1.25 (29 Jun 2004)
+ * INFO: http://upx.sourceforge.net is the permanent UPX home page
+ * watcom/le: don't crash on files without relocations
+ * win32/pe: stricter checks of some PE values
+ * source code: much improved portability using ACC, the
+ Automatic Compiler Configuration
+ * source code: compile fixes for strict ISO C++ compilers
+ * source code: compile fixes for Win64
+
+Changes in 1.24 (07 Nov 2002)
+ * djgpp2/coff: stricter check of the COFF header to work around a
+ problem with certain binutils versions
+
+Changes in 1.23 (05 Sep 2002)
+ * atari/tos: fixed an unpacking problem where a buffer was too
+ small (introduced in 1.22)
+ * linux/386: don't give up too early if a single block turns out
+ to be incompressible
+ * documentation: added some quick tips how to achieve the best
+ compression ratio for the final release of your application
+ * fixed a rare situation where the exit code was not set correctly
+
+Changes in 1.22 (27 Jun 2002)
+ * atari/tos: the stub now flushes the CPU cache to avoid
+ problems on 68030+ machines
+ * source code: additional compiler support for Borland C++,
+ Digital Mars C++ and Watcom C++
+
+Changes in 1.21 (01 Jun 2002)
+ * New option '--crp-ms=' for slightly better compression at the cost
+ of higher memory requirements during compression.
+ Try 'upx --best --crp-ms=100000'. See the docs for more info.
+ * source code: portability fixes
+ * source code: compile fixes for g++ 3.0 and g++ 3.1
+
+Changes in 1.20 (23 May 2001)
+ * slightly faster compression
+ * work around a gcc problem in the latest djgpp2 distribution
+ * watcom/le: fixed detection of already compressed files
+ * win32/pe: do not compress RT_MANIFEST resource types
+ * win32/pe: improved the error message for empty resource sections
+ * [NOTE: the jump from 1.08 to 1.20 is to avoid confusion with
+ our unstable development releases 1.1x and 1.9x]
+
+Changes in 1.08 (30 Apr 2001)
+ * new native port to atari/tos
+ * win32/pe: shortened the identstring
+ * source code: portability fixes - UPX now builds cleanly under m68k CPUs
+
+Changes in 1.07 (20 Feb 2001)
+ * win32/pe: corrected the TLS callback check
+ * win32/pe: really fixed that rare bug in relocation handling
+ * win32/pe: experimental support for SizeOfHeaders > 0x1000
+ * win32/pe: check for superfluous data between sections
+ * win32/pe: compressing screensavers (.scr) should finally work
+
+Changes in 1.06 (27 Jan 2001)
+ * win32/pe: the check for TLS callbacks introduced in 1.05
+ was too strict - disabled for now
+ * dos/com: decreased the decompressor stack size a little bit
+
+Changes in 1.05 (24 Jan 2001)
+ * win32/pe: refuse to compress programs with TLS callbacks
+ * win32/pe: stub changes to avoid slowdowns with some virus monitors
+ * win32/pe: reverted the relocation handling changes in 1.04
+ * linux/386: dont try to compress Linux kernel images (have a look
+ at the unstable UPX 1.1x beta versions for that)
+
+Changes in 1.04 (19 Dec 2000)
+ * dos/exe: fixed an internal error when using '--no-reloc'
+ * win32/pe: fixed a rare bug in the relocation handling code
+ * some tunings for the default compression level
+
+Changes in 1.03 (30 Nov 2000)
+ * linked with a new version of the NRV compression library:
+ - improved compression ratio a little bit
+ - overall significantly faster compression
+ - much faster when using high compression levels like '-9' or '--best'
+ - much faster with large files
+ * atari/tos: added support for FreeMiNT
+ * the 32-bit DOS version now uses the new CWSDSTUB extender
+
+Changes in 1.02 (13 Sep 2000)
+ * watcom/le: fixed a problem with the Causeway extender
+ * win32/pe: don't automatically strip relocs if they seem needed
+ * support multiple backup generations when using '-k'
+ * updated the console screen driver
+
+Changes in 1.01 (09 Apr 2000)
+ * win32/pe: fixed an uncompression problem in DLLs with empty
+ fixup sections
+ * win32/pe: fixed another rare uncompression problem - a field in the
+ PE header was set incorrectly
+
+Changes in 1.00 (26 Mar 2000)
+ * documentation updates
+ * watcom/le: do not duplicate the non-resident name table
+ * win32/pe: fixed an import handling problem: sometimes too much data
+ could be deleted from a file -> the uncompressed file would not work
+ anymore
+
+Changes in 0.99.3 (07 Mar 2000)
+ * win32/pe: fixed a rare problem in the stub string handling part
+
+Changes in 0.99.2 (02 Mar 2000)
+ * dos/exe: fixed a typo causing an internal error (introduced in 0.99.1)
+
+Changes in 0.99.1 (29 Feb 2000)
+ * win32/pe: fixed some object alignments which were causing
+ problems when loading compressed DLLs under Windows NT/2000
+
+Changes in 0.99 (25 Feb 2000)
+ * FULL SOURCE CODE RELEASED UNDER THE TERMS OF THE GNU GPL
+ * win32/pe: changed default to '--strip-relocs=1'
+ * dos/com and dos/sys: fixed a bad decompressor problem
+ * linux/386: the counter for the progress indicator was off by one
+
+Changes in 0.94 (06 Dec 1999)
+ * win32/pe: the stub now calls ExitProcess in case of import errors
+ * under DOS and Windows, the environment variable UPX now accepts
+ a '#' as replacement for '=' because of a COMMAND.COM limitation
+
+Changes in 0.93 (22 Nov 1999)
+ * win32/pe: fixed --strip-relocs problem with uncompression
+ * win32/pe: fixed a bug which could produce a broken decompressor stub
+ * linux/386: yet another FreeBSD compatibility fix
+
+Changes in 0.92 (14 Nov 1999)
+ * win32/pe: really fixed that one line (see below)
+
+Changes in 0.91 (13 Nov 1999)
+ * win32/pe: an important one-line fix for the newly introduced problems
+ * dos/com and dos/sys: fixed an internal error
+ * dos/exe: correctly restore cs when uncompressing
+
+Changes in 0.90 (10 Nov 1999)
+ * all formats: '--overlay=copy' now is the default overlay mode
+ * improved compression ratio for most files
+ * win32/pe: uncompression is finally supported
+ * win32/pe: never compress REGISTRY resources
+ * win32/pe: headersize was not set in PE header
+ * win32/pe: resource handling is rewritten
+ * win32/pe: the last :-) TLS problem is fixed
+ * win32/pe: somewhat less memory is required during compression
+ * linux/386: fixed compression of scripts which was broken since 0.71
+ * linux/386: more FreeBSD compatibility issues
+ * changed option: '-i' now prints some more details during compression
+ (not finished yet)
+
+Changes in 0.84 (04 Oct 1999)
+ * dos/exe: fixed a rare problem where the decompressor could crash
+ * some other minor fixes
+
+Changes in 0.83 (17 Sep 1999)
+ * dos/exe: fixed minimal memory requirement problem for some files
+ * win32/pe: fixed a bug which caused a crash in some compressed files
+ * linux/386: various improvements in the stub; also, for the sake
+ of FreeBSD users, the stub is now branded as Linux/ELF
+
+Changes in 0.82 (16 Aug 1999)
+ * dos/exe: fixed a decompressor bug which could cause crash on some files
+ * linux/386: section headers are now stripped from the stub so that
+ 'strip' won't ruin a compressed file any longer
+ * wc/le: support for stack not in the last object disabled again
+ * win32/pe: removed some unneeded data
+
+Changes in 0.81 (04 Aug 1999)
+ * win32/pe: fixed an important bug in import handling
+ * dos/com: fixed an internal error that could happen with very small files
+
+Changes in 0.80 (03 Aug 1999)
+ * you can set some default options in the environment var 'UPX'
+ * dos/com: the decompressor stub now checks for enough free memory
+ * dos/exe: decompressor rewritten, some bugs are fixed
+ * dos/exe: new option '--no-reloc': no relocation data is put into
+ the DOS header
+ * tmt/adam: added support for more stubs, detect already packed files
+ * tmt/adam: new option '--copy-overlay'
+ * wc/le: reduced memory requirement during uncompression
+ * wc/le: support files which do not contain their stack in the last object
+ * wc/le: fixed a bug which could cause a crash, improved relocation
+ handling
+ * wc/le: new option '--copy-overlay'
+ * win32/pe: '--compress-icons=2' is now the default
+ * win32/pe: even better TLS support
+ * win32/pe: versioninfo works on NT
+ * win32/pe: import by ordinal from kernel32.dll works
+ * win32/pe: other import improvements: importing a nonexistent DLL
+ results in a usual Windows message, importing a nonexistent function
+ results in program exit (instead of crash ;-)
+ * win32/pe: new option: '--compress-resources=0'
+ * win32/pe: reduced memory requirement during uncompression, some
+ files might even require LESS memory when they're compressed
+ * win32/pe: TYPELIBs should work now
+ * win32/pe: improved relocation handling, 16-bit relocations should work
+ * win32/pe: new option '--strip-relocs' (only if you know what you are doing)
+ * win32/pe: new option '--copy-overlay'
+ * important internal changes: now the stubs are built at runtime
+
+Changes in 0.72 (12 May 1999)
+ * tmt/adam: fixed a serious problem in the decompressor stub; all
+ compressed tmt files should be recompressed
+ * win32/pe: fixed the 'shared sections not supported' warning:
+ read-only shared sections are fine
+ * win32/pe: never compress TYPELIB resources
+ * win32/pe: compressed files are hopefully less suspicious to heuristic
+ virus scanners now
+ * linux/386: minor decompressor stub updates, nicer progress bar
+
+Changes in 0.71 (19 Apr 1999)
+ * dos/exe: added option '--no-overlay'
+ * linux/386: various improvements in the stub, most notably the
+ overhead for an extra cleanup process has been removed
+ * win32/pe: added support for export forwarders
+ * win32/pe: added support for DLLs without entry point or imports
+ * win32/pe: yet another .bss fix
+ * win32/pe: new option '--compress-icons=2': compress all icons
+ which are not in the first icon directory
+ * win32/pe: rearranged stub to avoid false alerts from some virus scanners
+
+Changes in 0.70 (30 Mar 1999)
+ * added support for linux/386 executables
+ * improved compression ratio quite a bit
+ * added new compression level '--best' to squeeze out even some more bytes
+ * win32/pe: TLS support is much better now
+ * win32/pe: --compress-icons=0 should now work as well
+ * the usual minor fixes for win32/pe
+
+Changes in 0.62 (16 Mar 1999)
+ * win32/pe: --compress-icons and --compress-exports are on now by default
+ * win32/pe: --compress-icons should really work now
+ * win32/pe: fixed a problem with embedded .bss sections
+
+Changes in 0.61 (08 Mar 1999)
+ * atari/tos: fixed a problem where the bss segment could become too small
+
+Changes in 0.60 (06 Mar 1999)
+ * win32/pe: fixed file corruption when the size of the export data is invalid
+ * win32/pe: fixed a problem with empty resource data
+ * win32/pe: compressed file alignment set to minimum value
+ * win32/pe: made all compressed sections writable
+ * fixed some other win32/pe bugs
+ * fixed an address optimization problem for some not Watcom LE files
+ * fixed a bug which could make UPX hang when an exe header contained
+ an illegal value
+ * added some compression flags for the win32/pe format
+ * added support for Atari ST/TT executables (atari/tos)
+ * improved compression ratio
+ * improved compression speed
+
+Changes in 0.51 (14 Jan 1999)
+ * fixed a small bug in the PE header that would prevent some compressed
+ win32/pe executables from running under Windows NT and WINE
+
+Changes in 0.50 (03 Jan 1999)
+ * added support for PE format executables (win32/pe & rtm32/pe)
+ * added support for TMT executables (tmt/adam)
+ * fixed a dos/sys bug that affected OpenDOS
+
+Changes in 0.40 (05 Oct 1998)
+ * improved compression ratio
+ * fixed a small but fatal bug in dos/sys introduced in 0.30
+ * fixed a rare bug in dos/exe
+ * worked around a bug in djgpp's strip 2.8
+ * djgpp/coff: Allegro packfile support should work now
+ * added dos/exeh compression method (works on 386+)
+
+Changes in 0.30 (27 Jul 1998)
+ * fixed a serious bug in the 32-bit compressors - please don't use
+ djgpp/coff and watcom/le compressed files from previous versions,
+ some of them are possibly damaged !
+ * the 16-bit uncompressors are a little bit shorter & faster
+ * fixed progress indicator for VESA and SVGA text modes
+
+Changes in 0.20 (05 Jul 1998)
+ * second public beta release
+ * too many changes to list here
+
+Changes in 0.05 (26 May 1998)
+ * first public beta release
+
+
+# vim:set syntax=off tw=0 ts=4 sw=4 et: -*- coding: utf-8 -*-
diff --git a/UPX/README b/UPX/README
new file mode 100644
index 0000000..8ade4f5
--- /dev/null
+++ b/UPX/README
@@ -0,0 +1,139 @@
+ ooooo ooo ooooooooo. ooooooo ooooo
+ `888' `8' `888 `Y88. `8888 d8'
+ 888 8 888 .d88' Y888..8P
+ 888 8 888ooo88P' `8888'
+ 888 8 888 .8PY888.
+ `88. .8' 888 d8' `888b
+ `YbodP' o888o o888o o88888o
+
+
+ The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
+ https://upx.github.io
+
+
+
+WELCOME
+=======
+
+Welcome to UPX !
+
+Please don't forget to read the file LICENSE - UPX is distributed
+under the GNU General Public License (GPL) with special exceptions
+allowing the distribution of all compressed executables, including
+commercial programs.
+
+
+INTRODUCTION
+============
+
+UPX is an advanced executable file compressor. UPX will typically
+reduce the file size of programs and DLLs by around 50%-70%, thus
+reducing disk space, network load times, download times and
+other distribution and storage costs.
+
+Programs and libraries compressed by UPX are completely self-contained
+and run exactly as before, with no runtime or memory penalty for most
+of the supported formats.
+
+UPX supports a number of different executable formats, including
+Windows 95/98/ME/NT/2000/XP/CE programs and DLLs, DOS programs,
+and Linux executables and kernels.
+
+UPX is free software distributed under the term of the GNU General
+Public License. Full source code is available.
+
+UPX may be distributed and used freely, even with commercial applications.
+See the UPX License Agreement for details.
+
+UPX is rated number one in the well known Archive Comparison Test. Visit
+http://compression.ca/ .
+
+UPX aims to be Commercial Quality Freeware.
+
+
+SHORT DOCUMENTATION
+===================
+
+'upx program.exe' will compress a program or DLL. For best compression
+results try 'upx --brute program.exe'.
+
+Please see the file UPX.DOC for the full documentation. The files
+NEWS and BUGS also contain various tidbits of information.
+
+
+DISCLAIMER
+==========
+
+UPX comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.
+
+Having said that, we think that UPX is quite stable now. Indeed we
+have compressed lots of files without any problems. Also, the
+current version has undergone several months of beta testing -
+actually it's almost 8 years since our first public beta.
+
+This is the first production quality release, and we plan that future
+releases will be backward compatible with this version.
+
+Please report all problems or suggestions to the authors. Thanks.
+
+
+THE FUTURE
+==========
+
+ - AArch64 (64-bit ARM) for Linux and iOS.
+
+ - The Linux approach could probably get ported to a lot of other Unix
+ variants, at least for other i386 architectures it shouldn't be too
+ much work. If someone sends me a fresh hard disk and an official
+ FreeBSD/OpenBSD/NetBSD/Solaris/BeOS... CD I might take a look at it ;-)
+
+ - We will *NOT* add any sort of protection and/or encryption.
+ This only gives people a false feeling of security because
+ by definition all protectors/compressors can be broken.
+ And don't trust any advertisement of authors of other executable
+ compressors about this topic - just do a websearch on "unpackers"...
+
+ - Fix all remaining bugs - keep your reports coming ;-)
+
+ - See the file PROJECTS in the source code distribution if you want
+ to contribute.
+
+
+COPYRIGHT
+=========
+
+Copyright (C) 1996-2020 Markus Franz Xaver Johannes Oberhumer
+Copyright (C) 1996-2020 Laszlo Molnar
+Copyright (C) 2000-2020 John F. Reiser
+
+This program may be used freely, and you are welcome to
+redistribute it under certain conditions.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+UPX License Agreement for more details.
+
+You should have received a copy of the UPX License Agreement along
+with this program; see the file LICENSE. If not, visit the UPX home page.
+
+
+Share and enjoy,
+Markus & Laszlo & John
+
+
+ Markus F.X.J. Oberhumer Laszlo Molnar
+
+
+ John F. Reiser
+
+
+
+[ The term UPX is a shorthand for the Ultimate Packer for eXecutables
+ and holds no connection with potential owners of registered trademarks
+ or other rights. ]
+
+[ Feel free to contact us if you have commercial compression requirements
+ or interesting job offers. ]
+
diff --git a/UPX/README.1ST b/UPX/README.1ST
new file mode 100644
index 0000000..8f2d1c4
--- /dev/null
+++ b/UPX/README.1ST
@@ -0,0 +1,24 @@
+ ooooo ooo ooooooooo. ooooooo ooooo
+ `888' `8' `888 `Y88. `8888 d8'
+ 888 8 888 .d88' Y888..8P
+ 888 8 888ooo88P' `8888'
+ 888 8 888 .8PY888.
+ `88. .8' 888 d8' `888b
+ `YbodP' o888o o888o o88888o
+
+
+ The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
+ https://upx.github.io
+
+
+MAJOR NEWS IN UPX 3
+===================
+
+The main news since UPX 2 are:
+
+ * new format: added support for linux elf/arm
+
+ * better compression using the LZMA algorithm (option '--lzma')
+
+ * better support for MacOS
diff --git a/UPX/THANKS b/UPX/THANKS
new file mode 100644
index 0000000..19e82c3
--- /dev/null
+++ b/UPX/THANKS
@@ -0,0 +1,61 @@
+ ooooo ooo ooooooooo. ooooooo ooooo
+ `888' `8' `888 `Y88. `8888 d8'
+ 888 8 888 .d88' Y888..8P
+ 888 8 888ooo88P' `8888'
+ 888 8 888 .8PY888.
+ `88. .8' 888 d8' `888b
+ `YbodP' o888o o888o o88888o
+
+
+ The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
+ https://upx.github.io
+
+
+.___.. .
+ | |_ _.._ ;_/ __
+ | [ )(_][ )| \_)
+--------------------
+
+UPX would not be what it is today without the invaluable help of
+everybody who was kind enough to spend time testing it, using it
+in applications and reporting bugs.
+
+The following people made especially gracious contributions of their
+time and energy in helping to track down bugs, add new features, and
+generally assist in the UPX maintainership process:
+
+Adam Ierymenko
+ for severals ideas for the Linux version
+Andi Kleen and Jamie Lokier
+ for the /proc/self/fd/X and other Linux suggestions
+Andreas Muegge
+ for the Win32 GUI
+Atli Mar Gudmundsson
+ for several comments on the win32/pe stub
+Charles W. Sandmann
+ for the idea with the stubless decompressor in djgpp2/coff
+Ice
+ for debugging the PE headersize problem down
+Joergen Ibsen and d'b
+ for the relocation & address optimization ideas
+John S. Fine
+ for the new version of the dos/exe decompressor
+Lukundoo
+ for beta testing
+Michael Devore
+ for initial dos/exe device driver support
+Oleg V. Volkov
+ for various FreeBSD specific informations
+The Owl & G-RoM
+ for the --compress-icons fix
+Ralph Roth
+ for reporting several bugs
+Salvador Eduardo Tropea
+ for beta testing
+Stefan Widmann
+ for the win32/pe TLS callback support
+The WINE project (http://www.winehq.com/)
+ for lots of useful information found in their PE loader sources
+Natascha
+
diff --git a/UPX/upx.1 b/UPX/upx.1
new file mode 100644
index 0000000..4416a38
--- /dev/null
+++ b/UPX/upx.1
@@ -0,0 +1,1046 @@
+.\" Automatically generated by Pod::Man 4.12 (Pod::Simple 3.39)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "UPX 1"
+.TH UPX 1 "2020-01-23" "upx 3.96" " "
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+upx \- compress or expand executable files
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBupx\fR [\ \fIcommand\fR\ ] [\ \fIoptions\fR\ ] \fIfilename\fR...
+.SH "ABSTRACT"
+.IX Header "ABSTRACT"
+.Vb 3
+\& The Ultimate Packer for eXecutables
+\& Copyright (c) 1996\-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
+\& https://upx.github.io
+.Ve
+.PP
+\&\fB\s-1UPX\s0\fR is a portable, extendable, high-performance executable packer for
+several different executable formats. It achieves an excellent compression
+ratio and offers \fI*very*\fR fast decompression. Your executables suffer
+no memory overhead or other drawbacks for most of the formats supported,
+because of in-place decompression.
+.PP
+While you may use \fB\s-1UPX\s0\fR freely for both non-commercial and commercial
+executables (for details see the file \s-1LICENSE\s0), we would highly
+appreciate if you credit \fB\s-1UPX\s0\fR and ourselves in the documentation,
+possibly including a reference to the \fB\s-1UPX\s0\fR home page. Thanks.
+.PP
+[ Using \fB\s-1UPX\s0\fR in non-OpenSource applications without proper credits
+is considered not politically correct ;\-) ]
+.SH "DISCLAIMER"
+.IX Header "DISCLAIMER"
+\&\fB\s-1UPX\s0\fR comes with \s-1ABSOLUTELY NO WARRANTY\s0; for details see the file \s-1LICENSE.\s0
+.PP
+This is the first production quality release, and we plan that future 1.xx
+releases will be backward compatible with this version.
+.PP
+Please report all problems or suggestions to the authors. Thanks.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fB\s-1UPX\s0\fR is a versatile executable packer with the following features:
+.PP
+.Vb 2
+\& \- excellent compression ratio: compresses better than zip/gzip,
+\& use UPX to decrease the size of your distribution !
+\&
+\& \- very fast decompression: about 10 MiB/sec on an ancient Pentium 133,
+\& about 200 MiB/sec on an Athlon XP 2000+.
+\&
+\& \- no memory overhead for your compressed executables for most of the
+\& supported formats
+\&
+\& \- safe: you can list, test and unpack your executables
+\& Also, a checksum of both the compressed and uncompressed file is
+\& maintained internally.
+\&
+\& \- universal: UPX can pack a number of executable formats:
+\& * atari/tos
+\& * bvmlinuz/386 [bootable Linux kernel]
+\& * djgpp2/coff
+\& * dos/com
+\& * dos/exe
+\& * dos/sys
+\& * linux/386
+\& * linux/elf386
+\& * linux/sh386
+\& * ps1/exe
+\& * rtm32/pe
+\& * tmt/adam
+\& * vmlinuz/386 [bootable Linux kernel]
+\& * vmlinux/386
+\& * watcom/le (supporting DOS4G, PMODE/W, DOS32a and CauseWay)
+\& * win32/pe (exe and dll)
+\& * win64/pe (exe and dll)
+\& * arm/pe (exe and dll)
+\& * linux/elfamd64
+\& * linux/elfppc32
+\& * mach/elfppc32
+\&
+\& \- portable: UPX is written in portable endian\-neutral C++
+\&
+\& \- extendable: because of the class layout it\*(Aqs very easy to support
+\& new executable formats or add new compression algorithms
+\&
+\& \- free: UPX can be distributed and used freely. And from version 0.99
+\& the full source code of UPX is released under the GNU General Public
+\& License (GPL) !
+.Ve
+.PP
+You probably understand now why we call \fB\s-1UPX\s0\fR the "\fIultimate\fR"
+executable packer.
+.SH "COMMANDS"
+.IX Header "COMMANDS"
+.SS "Compress"
+.IX Subsection "Compress"
+This is the default operation, eg. \fBupx yourfile.exe\fR will compress the file
+specified on the command line.
+.SS "Decompress"
+.IX Subsection "Decompress"
+All \fB\s-1UPX\s0\fR supported file formats can be unpacked using the \fB\-d\fR switch, eg.
+\&\fBupx \-d yourfile.exe\fR will uncompress the file you've just compressed.
+.SS "Test"
+.IX Subsection "Test"
+The \fB\-t\fR command tests the integrity of the compressed and uncompressed
+data, eg. \fBupx \-t yourfile.exe\fR check whether your file can be safely
+decompressed. Note, that this command doesn't check the whole file, only
+the part that will be uncompressed during program execution. This means
+that you should not use this command instead of a virus checker.
+.SS "List"
+.IX Subsection "List"
+The \fB\-l\fR command prints out some information about the compressed files
+specified on the command line as parameters, eg \fBupx \-l yourfile.exe\fR
+shows the compressed / uncompressed size and the compression ratio of
+\&\fIyourfile.exe\fR.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+\&\fB\-q\fR: be quiet, suppress warnings
+.PP
+\&\fB\-q \-q\fR (or \fB\-qq\fR): be very quiet, suppress errors
+.PP
+\&\fB\-q \-q \-q\fR (or \fB\-qqq\fR): produce no output at all
+.PP
+\&\fB\-\-help\fR: prints the help
+.PP
+\&\fB\-\-version\fR: print the version of \fB\s-1UPX\s0\fR
+.PP
+\&\fB\-\-exact\fR: when compressing, require to be able to get a byte-identical file
+after decompression with option \fB\-d\fR. [\s-1NOTE:\s0 this is work in progress and is
+not supported for all formats yet. If you do care, as a workaround you can
+compress and then decompress your program a first time \- any further
+compress-decompress steps should then yield byte-identical results
+as compared to the first decompressed version.]
+.PP
+[ ...to be written... \- type `\fBupx \-\-help\fR' for now ]
+.SH "COMPRESSION LEVELS & TUNING"
+.IX Header "COMPRESSION LEVELS & TUNING"
+\&\fB\s-1UPX\s0\fR offers ten different compression levels from \fB\-1\fR to \fB\-9\fR,
+and \fB\-\-best\fR. The default compression level is \fB\-8\fR for files
+smaller than 512 KiB, and \fB\-7\fR otherwise.
+.IP "\(bu" 4
+Compression levels 1, 2 and 3 are pretty fast.
+.IP "\(bu" 4
+Compression levels 4, 5 and 6 achieve a good time/ratio performance.
+.IP "\(bu" 4
+Compression levels 7, 8 and 9 favor compression ratio over speed.
+.IP "\(bu" 4
+Compression level \fB\-\-best\fR may take a long time.
+.PP
+Note that compression level \fB\-\-best\fR can be somewhat slow for large
+files, but you definitely should use it when releasing a final version
+of your program.
+.PP
+Quick info for achieving the best compression ratio:
+.IP "\(bu" 4
+Try \fBupx \-\-brute myfile.exe\fR or even \fBupx \-\-ultra\-brute myfile.exe\fR.
+.IP "\(bu" 4
+Try if \fB\-\-overlay=strip\fR works.
+.IP "\(bu" 4
+For win32/pe programs there's \fB\-\-strip\-relocs=0\fR. See notes below.
+.SH "OVERLAY HANDLING OPTIONS"
+.IX Header "OVERLAY HANDLING OPTIONS"
+Info: An \*(L"overlay\*(R" means auxiliary data attached after the logical end of
+an executable, and it often contains application specific data
+(this is a common practice to avoid an extra data file, though
+it would be better to use resource sections).
+.PP
+\&\fB\s-1UPX\s0\fR handles overlays like many other executable packers do: it simply
+copies the overlay after the compressed image. This works with some
+files, but doesn't work with others, depending on how an application
+actually accesses this overlayed data.
+.PP
+.Vb 1
+\& \-\-overlay=copy Copy any extra data attached to the file. [DEFAULT]
+\&
+\& \-\-overlay=strip Strip any overlay from the program instead of
+\& copying it. Be warned, this may make the compressed
+\& program crash or otherwise unusable.
+\&
+\& \-\-overlay=skip Refuse to compress any program which has an overlay.
+.Ve
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+The environment variable \fB\s-1UPX\s0\fR can hold a set of default
+options for \fB\s-1UPX\s0\fR. These options are interpreted first and
+can be overwritten by explicit command line parameters.
+For example:
+.PP
+.Vb 3
+\& for DOS/Windows: set UPX=\-9 \-\-compress\-icons#0
+\& for sh/ksh/zsh: UPX="\-9 \-\-compress\-icons=0"; export UPX
+\& for csh/tcsh: setenv UPX "\-9 \-\-compress\-icons=0"
+.Ve
+.PP
+Under DOS/Windows you must use '#' instead of '=' when setting the
+environment variable because of a \s-1COMMAND.COM\s0 limitation.
+.PP
+Not all of the options are valid in the environment variable \-
+\&\fB\s-1UPX\s0\fR will tell you.
+.PP
+You can explicitly use the \fB\-\-no\-env\fR option to ignore the
+environment variable.
+.SH "NOTES FOR THE SUPPORTED EXECUTABLE FORMATS"
+.IX Header "NOTES FOR THE SUPPORTED EXECUTABLE FORMATS"
+.SS "\s-1NOTES FOR ATARI/TOS\s0"
+.IX Subsection "NOTES FOR ATARI/TOS"
+This is the executable format used by the Atari \s-1ST/TT,\s0 a Motorola 68000
+based personal computer which was popular in the late '80s. Support
+of this format is only because of nostalgic feelings of one of
+the authors and serves no practical purpose :\-).
+See http://www.freemint.de for more info.
+.PP
+Packed programs will be byte-identical to the original after uncompression.
+All debug information will be stripped, though.
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 4
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+.Ve
+.SS "\s-1NOTES FOR BVMLINUZ/I386\s0"
+.IX Subsection "NOTES FOR BVMLINUZ/I386"
+Same as vmlinuz/i386.
+.SS "\s-1NOTES FOR DOS/COM\s0"
+.IX Subsection "NOTES FOR DOS/COM"
+Obviously \fB\s-1UPX\s0\fR won't work with executables that want to read data from
+themselves (like some commandline utilities that ship with Win95/98/ME).
+.PP
+Compressed programs only work on a 286+.
+.PP
+Packed programs will be byte-identical to the original after uncompression.
+.PP
+Maximum uncompressed size: ~65100 bytes.
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 1
+\& \-\-8086 Create an executable that works on any 8086 CPU.
+\&
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+\&
+\& \-\-all\-filters Compress the program several times, using all
+\& available preprocessing filters. This may improve
+\& the compression ratio in some cases, but usually
+\& the default filter gives the best results anyway.
+.Ve
+.SS "\s-1NOTES FOR DOS/EXE\s0"
+.IX Subsection "NOTES FOR DOS/EXE"
+dos/exe stands for all \*(L"normal\*(R" 16\-bit \s-1DOS\s0 executables.
+.PP
+Obviously \fB\s-1UPX\s0\fR won't work with executables that want to read data from
+themselves (like some command line utilities that ship with Win95/98/ME).
+.PP
+Compressed programs only work on a 286+.
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 1
+\& \-\-8086 Create an executable that works on any 8086 CPU.
+\&
+\& \-\-no\-reloc Use no relocation records in the exe header.
+\&
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+.Ve
+.SS "\s-1NOTES FOR DOS/SYS\s0"
+.IX Subsection "NOTES FOR DOS/SYS"
+Compressed programs only work on a 286+.
+.PP
+Packed programs will be byte-identical to the original after uncompression.
+.PP
+Maximum uncompressed size: ~65350 bytes.
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 1
+\& \-\-8086 Create an executable that works on any 8086 CPU.
+\&
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+\&
+\& \-\-all\-filters Compress the program several times, using all
+\& available preprocessing filters. This may improve
+\& the compression ratio in some cases, but usually
+\& the default filter gives the best results anyway.
+.Ve
+.SS "\s-1NOTES FOR DJGPP2/COFF\s0"
+.IX Subsection "NOTES FOR DJGPP2/COFF"
+First of all, it is recommended to use \fB\s-1UPX\s0\fR *instead* of \fBstrip\fR. strip has
+the very bad habit of replacing your stub with its own (outdated) version.
+Additionally \fB\s-1UPX\s0\fR corrects a bug/feature in strip v2.8.x: it
+will fix the 4 KiB alignment of the stub.
+.PP
+\&\fB\s-1UPX\s0\fR includes the full functionality of stubify. This means it will
+automatically stubify your \s-1COFF\s0 files. Use the option \fB\-\-coff\fR to
+disable this functionality (see below).
+.PP
+\&\fB\s-1UPX\s0\fR automatically handles Allegro packfiles.
+.PP
+The \s-1DLM\s0 format (a rather exotic shared library extension) is not supported.
+.PP
+Packed programs will be byte-identical to the original after uncompression.
+All debug information and trailing garbage will be stripped, though.
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 2
+\& \-\-coff Produce COFF output instead of EXE. By default
+\& UPX keeps your current stub.
+\&
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+\&
+\& \-\-all\-filters Compress the program several times, using all
+\& available preprocessing filters. This may improve
+\& the compression ratio in some cases, but usually
+\& the default filter gives the best results anyway.
+.Ve
+.SS "\s-1NOTES FOR LINUX\s0 [general]"
+.IX Subsection "NOTES FOR LINUX [general]"
+Introduction
+.PP
+.Vb 4
+\& Linux/386 support in UPX consists of 3 different executable formats,
+\& one optimized for ELF executables ("linux/elf386"), one optimized
+\& for shell scripts ("linux/sh386"), and one generic format
+\& ("linux/386").
+\&
+\& We will start with a general discussion first, but please
+\& also read the relevant docs for each of the individual formats.
+\&
+\& Also, there is special support for bootable kernels \- see the
+\& description of the vmlinuz/386 format.
+.Ve
+.PP
+General user's overview
+.PP
+.Vb 7
+\& Running a compressed executable program trades less space on a
+\& \`\`permanent\*(Aq\*(Aq storage medium (such as a hard disk, floppy disk,
+\& CD\-ROM, flash memory, EPROM, etc.) for more space in one or more
+\& \`\`temporary\*(Aq\*(Aq storage media (such as RAM, swap space, /tmp, etc.).
+\& Running a compressed executable also requires some additional CPU
+\& cycles to generate the compressed executable in the first place,
+\& and to decompress it at each invocation.
+\&
+\& How much space is traded? It depends on the executable, but many
+\& programs save 30% to 50% of permanent disk space. How much CPU
+\& overhead is there? Again, it depends on the executable, but
+\& decompression speed generally is at least many megabytes per second,
+\& and frequently is limited by the speed of the underlying disk
+\& or network I/O.
+\&
+\& Depending on the statistics of usage and access, and the relative
+\& speeds of CPU, RAM, swap space, /tmp, and file system storage, then
+\& invoking and running a compressed executable can be faster than
+\& directly running the corresponding uncompressed program.
+\& The operating system might perform fewer expensive I/O operations
+\& to invoke the compressed program. Paging to or from swap space
+\& or /tmp might be faster than paging from the general file system.
+\& \`\`Medium\-sized\*(Aq\*(Aq programs which access about 1/3 to 1/2 of their
+\& stored program bytes can do particularly well with compression.
+\& Small programs tend not to benefit as much because the absolute
+\& savings is less. Big programs tend not to benefit proportionally
+\& because each invocation may use only a small fraction of the program,
+\& yet UPX decompresses the entire program before invoking it.
+\& But in environments where disk or flash memory storage is limited,
+\& then compression may win anyway.
+\&
+\& Currently, executables compressed by UPX do not share RAM at runtime
+\& in the way that executables mapped from a file system do. As a
+\& result, if the same program is run simultaneously by more than one
+\& process, then using the compressed version will require more RAM and/or
+\& swap space. So, shell programs (bash, csh, etc.) and \`\`make\*(Aq\*(Aq
+\& might not be good candidates for compression.
+\&
+\& UPX recognizes three executable formats for Linux: Linux/elf386,
+\& Linux/sh386, and Linux/386. Linux/386 is the most generic format;
+\& it accommodates any file that can be executed. At runtime, the UPX
+\& decompression stub re\-creates in /tmp a copy of the original file,
+\& and then the copy is (re\-)executed with the same arguments.
+\& ELF binary executables prefer the Linux/elf386 format by default,
+\& because UPX decompresses them directly into RAM, uses only one
+\& exec, does not use space in /tmp, and does not use /proc.
+\& Shell scripts where the underlying shell accepts a \`\`\-c\*(Aq\*(Aq argument
+\& can use the Linux/sh386 format. UPX decompresses the shell script
+\& into low memory, then maps the shell and passes the entire text of the
+\& script as an argument with a leading \`\`\-c\*(Aq\*(Aq.
+.Ve
+.PP
+General benefits:
+.PP
+.Vb 4
+\& \- UPX can compress all executables, be it AOUT, ELF, libc4, libc5,
+\& libc6, Shell/Perl/Python/... scripts, standalone Java .class
+\& binaries, or whatever...
+\& All scripts and programs will work just as before.
+\&
+\& \- Compressed programs are completely self\-contained. No need for
+\& any external program.
+\&
+\& \- UPX keeps your original program untouched. This means that
+\& after decompression you will have a byte\-identical version,
+\& and you can use UPX as a file compressor just like gzip.
+\& [ Note that UPX maintains a checksum of the file internally,
+\& so it is indeed a reliable alternative. ]
+\&
+\& \- As the stub only uses syscalls and isn\*(Aqt linked against libc it
+\& should run under any Linux configuration that can run ELF
+\& binaries.
+\&
+\& \- For the same reason compressed executables should run under
+\& FreeBSD and other systems which can run Linux binaries.
+\& [ Please send feedback on this topic ]
+.Ve
+.PP
+General drawbacks:
+.PP
+.Vb 4
+\& \- It is not advisable to compress programs which usually have many
+\& instances running (like \`sh\*(Aq or \`make\*(Aq) because the common segments of
+\& compressed programs won\*(Aqt be shared any longer between different
+\& processes.
+\&
+\& \- \`ldd\*(Aq and \`size\*(Aq won\*(Aqt show anything useful because all they
+\& see is the statically linked stub. Since version 0.82 the section
+\& headers are stripped from the UPX stub and \`size\*(Aq doesn\*(Aqt even
+\& recognize the file format. The file patches/patch\-elfcode.h has a
+\& patch to fix this bug in \`size\*(Aq and other programs which use GNU BFD.
+.Ve
+.PP
+General notes:
+.PP
+.Vb 2
+\& \- As UPX leaves your original program untouched it is advantageous
+\& to strip it before compression.
+\&
+\& \- If you compress a script you will lose platform independence \-
+\& this could be a problem if you are using NFS mounted disks.
+\&
+\& \- Compression of suid, guid and sticky\-bit programs is rejected
+\& because of possible security implications.
+\&
+\& \- For the same reason there is no sense in making any compressed
+\& program suid.
+\&
+\& \- Obviously UPX won\*(Aqt work with executables that want to read data
+\& from themselves. E.g., this might be a problem for Perl scripts
+\& which access their _\|_DATA_\|_ lines.
+\&
+\& \- In case of internal errors the stub will abort with exitcode 127.
+\& Typical reasons for this to happen are that the program has somehow
+\& been modified after compression.
+\& Running \`strace \-o strace.log compressed_file\*(Aq will tell you more.
+.Ve
+.SS "\s-1NOTES FOR LINUX/ELF386\s0"
+.IX Subsection "NOTES FOR LINUX/ELF386"
+Please read the general Linux description first.
+.PP
+The linux/elf386 format decompresses directly into \s-1RAM,\s0
+uses only one exec, does not use space in /tmp,
+and does not use /proc.
+.PP
+Linux/elf386 is automatically selected for Linux \s-1ELF\s0 executables.
+.PP
+Packed programs will be byte-identical to the original after uncompression.
+.PP
+How it works:
+.PP
+.Vb 9
+\& For ELF executables, UPX decompresses directly to memory, simulating
+\& the mapping that the operating system kernel uses during exec(),
+\& including the PT_INTERP program interpreter (if any).
+\& The brk() is set by a special PT_LOAD segment in the compressed
+\& executable itself. UPX then wipes the stack clean except for
+\& arguments, environment variables, and Elf_auxv entries (this is
+\& required by bugs in the startup code of /lib/ld\-linux.so as of
+\& May 2000), and transfers control to the program interpreter or
+\& the e_entry address of the original executable.
+\&
+\& The UPX stub is about 1700 bytes long, partly written in assembler
+\& and only uses kernel syscalls. It is not linked against any libc.
+.Ve
+.PP
+Specific drawbacks:
+.PP
+.Vb 9
+\& \- For linux/elf386 and linux/sh386 formats, you will be relying on
+\& RAM and swap space to hold all of the decompressed program during
+\& the lifetime of the process. If you already use most of your swap
+\& space, then you may run out. A system that is "out of memory"
+\& can become fragile. Many programs do not react gracefully when
+\& malloc() returns 0. With newer Linux kernels, the kernel
+\& may decide to kill some processes to regain memory, and you
+\& may not like the kernel\*(Aqs choice of which to kill. Running
+\& /usr/bin/top is one way to check on the usage of swap space.
+.Ve
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 1
+\& (none)
+.Ve
+.SS "\s-1NOTES FOR LINUX/SH386\s0"
+.IX Subsection "NOTES FOR LINUX/SH386"
+Please read the general Linux description first.
+.PP
+Shell scripts where the underling shell accepts a ``\-c'' argument
+can use the Linux/sh386 format. \fB\s-1UPX\s0\fR decompresses the shell script
+into low memory, then maps the shell and passes the entire text of the
+script as an argument with a leading ``\-c''.
+It does not use space in /tmp, and does not use /proc.
+.PP
+Linux/sh386 is automatically selected for shell scripts that
+use a known shell.
+.PP
+Packed programs will be byte-identical to the original after uncompression.
+.PP
+How it works:
+.PP
+.Vb 8
+\& For shell script executables (files beginning with "#!/" or "#! /")
+\& where the shell is known to accept "\-c ", UPX decompresses
+\& the file into low memory, then maps the shell (and its PT_INTERP),
+\& and passes control to the shell with the entire decompressed file
+\& as the argument after "\-c". Known shells are sh, ash, bash, bsh, csh,
+\& ksh, tcsh, pdksh. Restriction: UPX cannot use this method
+\& for shell scripts which use the one optional string argument after
+\& the shell name in the script (example: "#! /bin/sh option3\en".)
+\&
+\& The UPX stub is about 1700 bytes long, partly written in assembler
+\& and only uses kernel syscalls. It is not linked against any libc.
+.Ve
+.PP
+Specific drawbacks:
+.PP
+.Vb 9
+\& \- For linux/elf386 and linux/sh386 formats, you will be relying on
+\& RAM and swap space to hold all of the decompressed program during
+\& the lifetime of the process. If you already use most of your swap
+\& space, then you may run out. A system that is "out of memory"
+\& can become fragile. Many programs do not react gracefully when
+\& malloc() returns 0. With newer Linux kernels, the kernel
+\& may decide to kill some processes to regain memory, and you
+\& may not like the kernel\*(Aqs choice of which to kill. Running
+\& /usr/bin/top is one way to check on the usage of swap space.
+.Ve
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 1
+\& (none)
+.Ve
+.SS "\s-1NOTES FOR LINUX/386\s0"
+.IX Subsection "NOTES FOR LINUX/386"
+Please read the general Linux description first.
+.PP
+The generic linux/386 format decompresses to /tmp and needs
+/proc file system support. It starts the decompressed program
+via the \fBexecve()\fR syscall.
+.PP
+Linux/386 is only selected if the specialized linux/elf386
+and linux/sh386 won't recognize a file.
+.PP
+Packed programs will be byte-identical to the original after uncompression.
+.PP
+How it works:
+.PP
+.Vb 7
+\& For files which are not ELF and not a script for a known "\-c" shell,
+\& UPX uses kernel execve(), which first requires decompressing to a
+\& temporary file in the file system. Interestingly \-
+\& because of the good memory management of the Linux kernel \- this
+\& often does not introduce a noticeable delay, and in fact there
+\& will be no disk access at all if you have enough free memory as
+\& the entire process takes places within the file system buffers.
+\&
+\& A compressed executable consists of the UPX stub and an overlay
+\& which contains the original program in a compressed form.
+\&
+\& The UPX stub is a statically linked ELF executable and does
+\& the following at program startup:
+\&
+\& 1) decompress the overlay to a temporary location in /tmp
+\& 2) open the temporary file for reading
+\& 3) try to delete the temporary file and start (execve)
+\& the uncompressed program in /tmp using /proc//fd/X as
+\& attained by step 2)
+\& 4) if that fails, fork off a subprocess to clean up and
+\& start the program in /tmp in the meantime
+\&
+\& The UPX stub is about 1700 bytes long, partly written in assembler
+\& and only uses kernel syscalls. It is not linked against any libc.
+.Ve
+.PP
+Specific drawbacks:
+.PP
+.Vb 4
+\& \- You need additional free disk space for the uncompressed program
+\& in your /tmp directory. This program is deleted immediately after
+\& decompression, but you still need it for the full execution time
+\& of the program.
+\&
+\& \- You must have /proc file system support as the stub wants to open
+\& /proc//exe and needs /proc//fd/X. This also means that you
+\& cannot compress programs that are used during the boot sequence
+\& before /proc is mounted.
+\&
+\& \- Utilities like \`top\*(Aq will display numerical values in the process
+\& name field. This is because Linux computes the process name from
+\& the first argument of the last execve syscall (which is typically
+\& something like /proc//fd/3).
+\&
+\& \- Because of temporary decompression to disk the decompression speed
+\& is not as fast as with the other executable formats. Still, I can see
+\& no noticeable delay when starting programs like my ~3 MiB emacs (which
+\& is less than 1 MiB when compressed :\-).
+.Ve
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 3
+\& \-\-force\-execve Force the use of the generic linux/386 "execve"
+\& format, i.e. do not try the linux/elf386 and
+\& linux/sh386 formats.
+.Ve
+.SS "\s-1NOTES FOR PS1/EXE\s0"
+.IX Subsection "NOTES FOR PS1/EXE"
+This is the executable format used by the Sony PlayStation (PSone),
+a Mips R3000 based gaming console which is popular since the late '90s.
+Support of this format is very similar to the Atari one, because of
+nostalgic feelings of one of the authors.
+.PP
+Packed programs will be byte-identical to the original after uncompression,
+until further notice.
+.PP
+Maximum uncompressed size: ~1.89 / ~7.60 MiB.
+.PP
+Notes:
+.PP
+.Vb 6
+\& \- UPX creates as default a suitable executable for CD\-Mastering
+\& and console transfer. For a CD\-Master main executable you could also try
+\& the special option "\-\-boot\-only" as described below.
+\& It has been reported that upx packed executables are fully compatible with
+\& the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in
+\& Sony PlayStation (PSone) emulation mode.
+\&
+\& \- Normally the packed files use the same memory areas like the uncompressed
+\& versions, so they will not override other memory areas while unpacking.
+\& If this isn\*(Aqt possible UPX will abort showing a \*(Aqpacked data overlap\*(Aq
+\& error. With the "\-\-force" option UPX will relocate the loading address
+\& for the packed file, but this isn\*(Aqt a real problem if it is a single or
+\& the main executable.
+.Ve
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 4
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+\&
+\& \-\-8\-bit Uses 8 bit size compression [default: 32 bit]
+\&
+\& \-\-8mib\-ram PSone has 8 MiB ram available [default: 2 MiB]
+\&
+\& \-\-boot\-only This format is for main exes and CD\-Mastering only !
+\& It may slightly improve the compression ratio,
+\& decompression routines are faster than default ones.
+\& But it cannot be used for console transfer !
+\&
+\& \-\-no\-align This option disables CD mode 2 data sector format
+\& alignment. May slightly improves the compression ratio,
+\& but the compressed executable will not boot from a CD.
+\& Use it for console transfer only !
+.Ve
+.SS "\s-1NOTES FOR RTM32/PE\s0 and \s-1ARM/PE\s0"
+.IX Subsection "NOTES FOR RTM32/PE and ARM/PE"
+Same as win32/pe.
+.SS "\s-1NOTES FOR TMT/ADAM\s0"
+.IX Subsection "NOTES FOR TMT/ADAM"
+This format is used by the \s-1TMT\s0 Pascal compiler \- see http://www.tmt.com/ .
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 4
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+\&
+\& \-\-all\-filters Compress the program several times, using all
+\& available preprocessing filters. This may improve
+\& the compression ratio in some cases, but usually
+\& the default filter gives the best results anyway.
+.Ve
+.SS "\s-1NOTES FOR VMLINUZ/386\s0"
+.IX Subsection "NOTES FOR VMLINUZ/386"
+The vmlinuz/386 and bvmlinuz/386 formats take a gzip-compressed
+bootable Linux kernel image (\*(L"vmlinuz\*(R", \*(L"zImage\*(R", \*(L"bzImage\*(R"),
+gzip-decompress it and re-compress it with the \fB\s-1UPX\s0\fR compression method.
+.PP
+vmlinuz/386 is completely unrelated to the other Linux executable
+formats, and it does not share any of their drawbacks.
+.PP
+Notes:
+.PP
+.Vb 3
+\& \- Be sure that "vmlinuz/386" or "bvmlinuz/386" is displayed
+\& during compression \- otherwise a wrong executable format
+\& may have been used, and the kernel won\*(Aqt boot.
+.Ve
+.PP
+Benefits:
+.PP
+.Vb 4
+\& \- Better compression (but note that the kernel was already compressed,
+\& so the improvement is not as large as with other formats).
+\& Still, the bytes saved may be essential for special needs like
+\& boot disks.
+\&
+\& For example, this is what I get for my 2.2.16 kernel:
+\& 1589708 vmlinux
+\& 641073 bzImage [original]
+\& 560755 bzImage.upx [compressed by "upx \-9"]
+\&
+\& \- Much faster decompression at kernel boot time (but kernel
+\& decompression speed is not really an issue these days).
+.Ve
+.PP
+Drawbacks:
+.PP
+.Vb 1
+\& (none)
+.Ve
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 4
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+\&
+\& \-\-all\-filters Compress the program several times, using all
+\& available preprocessing filters. This may improve
+\& the compression ratio in some cases, but usually
+\& the default filter gives the best results anyway.
+.Ve
+.SS "\s-1NOTES FOR WATCOM/LE\s0"
+.IX Subsection "NOTES FOR WATCOM/LE"
+\&\fB\s-1UPX\s0\fR has been successfully tested with the following extenders:
+ \s-1DOS4G, DOS4GW, PMODE/W,\s0 DOS32a, CauseWay.
+ The \s-1WDOS/X\s0 extender is partly supported (for details
+ see the file bugs \s-1BUGS\s0).
+.PP
+DLLs and the \s-1LX\s0 format are not supported.
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 2
+\& \-\-le Produce an unbound LE output instead of
+\& keeping the current stub.
+.Ve
+.SS "\s-1NOTES FOR WIN32/PE\s0"
+.IX Subsection "NOTES FOR WIN32/PE"
+The \s-1PE\s0 support in \fB\s-1UPX\s0\fR is quite stable now, but probably there are
+still some incompatibilities with some files.
+.PP
+Because of the way \fB\s-1UPX\s0\fR (and other packers for this format) works, you
+can see increased memory usage of your compressed files because the whole
+program is loaded into memory at startup.
+If you start several instances of huge compressed programs you're
+wasting memory because the common segments of the program won't
+get shared across the instances.
+On the other hand if you're compressing only smaller programs, or
+running only one instance of larger programs, then this penalty is
+smaller, but it's still there.
+.PP
+If you're running executables from network, then compressed programs
+will load faster, and require less bandwidth during execution.
+.PP
+DLLs are supported. But \s-1UPX\s0 compressed DLLs can not share common data and
+code when they got used by multiple applications. So compressing msvcrt.dll
+is a waste of memory, but compressing the dll plugins of a particular
+application may be a better idea.
+.PP
+Screensavers are supported, with the restriction that the filename
+must end with \*(L".scr\*(R" (as screensavers are handled slightly different
+than normal exe files).
+.PP
+\&\s-1UPX\s0 compressed \s-1PE\s0 files have some minor memory overhead (usually in the
+10 \- 30 KiB range) which can be seen by specifying the \*(L"\-i\*(R" command
+line switch during compression.
+.PP
+Extra options available for this executable format:
+.PP
+.Vb 9
+\& \-\-compress\-exports=0 Don\*(Aqt compress the export section.
+\& Use this if you plan to run the compressed
+\& program under Wine.
+\& \-\-compress\-exports=1 Compress the export section. [DEFAULT]
+\& Compression of the export section can improve the
+\& compression ratio quite a bit but may not work
+\& with all programs (like winword.exe).
+\& UPX never compresses the export section of a DLL
+\& regardless of this option.
+\&
+\& \-\-compress\-icons=0 Don\*(Aqt compress any icons.
+\& \-\-compress\-icons=1 Compress all but the first icon.
+\& \-\-compress\-icons=2 Compress all icons which are not in the
+\& first icon directory. [DEFAULT]
+\& \-\-compress\-icons=3 Compress all icons.
+\&
+\& \-\-compress\-resources=0 Don\*(Aqt compress any resources at all.
+\&
+\& \-\-keep\-resource=list Don\*(Aqt compress resources specified by the list.
+\& The members of the list are separated by commas.
+\& A list member has the following format: I.
+\& I is the type of the resource. Standard types
+\& must be specified as decimal numbers, user types can be
+\& specified by decimal IDs or strings. I is the
+\& identifier of the resource. It can be a decimal number
+\& or a string. For example:
+\&
+\& \-\-keep\-resource=2/MYBITMAP,5,6/12345
+\&
+\& UPX won\*(Aqt compress the named bitmap resource "MYBITMAP",
+\& it leaves every dialog (5) resource uncompressed, and
+\& it won\*(Aqt touch the string table resource with identifier
+\& 12345.
+\&
+\& \-\-force Force compression even when there is an
+\& unexpected value in a header field.
+\& Use with care.
+\&
+\& \-\-strip\-relocs=0 Don\*(Aqt strip relocation records.
+\& \-\-strip\-relocs=1 Strip relocation records. [DEFAULT]
+\& This option only works on executables with base
+\& address greater or equal to 0x400000. Usually the
+\& compressed files becomes smaller, but some files
+\& may become larger. Note that the resulting file will
+\& not work under Windows 3.x (Win32s).
+\& UPX never strips relocations from a DLL
+\& regardless of this option.
+\&
+\& \-\-all\-methods Compress the program several times, using all
+\& available compression methods. This may improve
+\& the compression ratio in some cases, but usually
+\& the default method gives the best results anyway.
+\&
+\& \-\-all\-filters Compress the program several times, using all
+\& available preprocessing filters. This may improve
+\& the compression ratio in some cases, but usually
+\& the default filter gives the best results anyway.
+.Ve
+.SH "DIAGNOSTICS"
+.IX Header "DIAGNOSTICS"
+Exit status is normally 0; if an error occurs, exit status
+is 1. If a warning occurs, exit status is 2.
+.PP
+\&\fB\s-1UPX\s0\fR's diagnostics are intended to be self-explanatory.
+.SH "BUGS"
+.IX Header "BUGS"
+Please report all bugs immediately to the authors.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+.Vb 2
+\& Markus F.X.J. Oberhumer
+\& http://www.oberhumer.com
+\&
+\& Laszlo Molnar
+\&
+\& John F. Reiser
+\&
+\& Jens Medoch
+.Ve
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (C) 1996\-2020 Markus Franz Xaver Johannes Oberhumer
+.PP
+Copyright (C) 1996\-2020 Laszlo Molnar
+.PP
+Copyright (C) 2000\-2020 John F. Reiser
+.PP
+Copyright (C) 2002\-2020 Jens Medoch
+.PP
+This program may be used freely, and you are welcome to
+redistribute it under certain conditions.
+.PP
+This program is distributed in the hope that it will be useful,
+but \s-1WITHOUT ANY WARRANTY\s0; without even the implied warranty of
+\&\s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the
+\&\fB\s-1UPX\s0 License Agreement\fR for more details.
+.PP
+You should have received a copy of the \s-1UPX\s0 License Agreement along
+with this program; see the file \s-1LICENSE.\s0 If not, visit the \s-1UPX\s0 home page.
diff --git a/UPX/upx.doc b/UPX/upx.doc
new file mode 100644
index 0000000..175bd13
--- /dev/null
+++ b/UPX/upx.doc
@@ -0,0 +1,844 @@
+NAME
+ upx - compress or expand executable files
+
+SYNOPSIS
+ upx [ *command* ] [ *options* ] *filename*...
+
+ABSTRACT
+ The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
+ https://upx.github.io
+
+ UPX is a portable, extendable, high-performance executable packer for
+ several different executable formats. It achieves an excellent
+ compression ratio and offers **very** fast decompression. Your
+ executables suffer no memory overhead or other drawbacks for most of the
+ formats supported, because of in-place decompression.
+
+ While you may use UPX freely for both non-commercial and commercial
+ executables (for details see the file LICENSE), we would highly
+ appreciate if you credit UPX and ourselves in the documentation,
+ possibly including a reference to the UPX home page. Thanks.
+
+ [ Using UPX in non-OpenSource applications without proper credits is
+ considered not politically correct ;-) ]
+
+DISCLAIMER
+ UPX comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.
+
+ This is the first production quality release, and we plan that future
+ 1.xx releases will be backward compatible with this version.
+
+ Please report all problems or suggestions to the authors. Thanks.
+
+DESCRIPTION
+ UPX is a versatile executable packer with the following features:
+
+ - excellent compression ratio: compresses better than zip/gzip,
+ use UPX to decrease the size of your distribution !
+
+ - very fast decompression: about 10 MiB/sec on an ancient Pentium 133,
+ about 200 MiB/sec on an Athlon XP 2000+.
+
+ - no memory overhead for your compressed executables for most of the
+ supported formats
+
+ - safe: you can list, test and unpack your executables
+ Also, a checksum of both the compressed and uncompressed file is
+ maintained internally.
+
+ - universal: UPX can pack a number of executable formats:
+ * atari/tos
+ * bvmlinuz/386 [bootable Linux kernel]
+ * djgpp2/coff
+ * dos/com
+ * dos/exe
+ * dos/sys
+ * linux/386
+ * linux/elf386
+ * linux/sh386
+ * ps1/exe
+ * rtm32/pe
+ * tmt/adam
+ * vmlinuz/386 [bootable Linux kernel]
+ * vmlinux/386
+ * watcom/le (supporting DOS4G, PMODE/W, DOS32a and CauseWay)
+ * win32/pe (exe and dll)
+ * win64/pe (exe and dll)
+ * arm/pe (exe and dll)
+ * linux/elfamd64
+ * linux/elfppc32
+ * mach/elfppc32
+
+ - portable: UPX is written in portable endian-neutral C++
+
+ - extendable: because of the class layout it's very easy to support
+ new executable formats or add new compression algorithms
+
+ - free: UPX can be distributed and used freely. And from version 0.99
+ the full source code of UPX is released under the GNU General Public
+ License (GPL) !
+
+ You probably understand now why we call UPX the "*ultimate*" executable
+ packer.
+
+COMMANDS
+ Compress
+ This is the default operation, eg. upx yourfile.exe will compress the
+ file specified on the command line.
+
+ Decompress
+ All UPX supported file formats can be unpacked using the -d switch, eg.
+ upx -d yourfile.exe will uncompress the file you've just compressed.
+
+ Test
+ The -t command tests the integrity of the compressed and uncompressed
+ data, eg. upx -t yourfile.exe check whether your file can be safely
+ decompressed. Note, that this command doesn't check the whole file, only
+ the part that will be uncompressed during program execution. This means
+ that you should not use this command instead of a virus checker.
+
+ List
+ The -l command prints out some information about the compressed files
+ specified on the command line as parameters, eg upx -l yourfile.exe
+ shows the compressed / uncompressed size and the compression ratio of
+ *yourfile.exe*.
+
+OPTIONS
+ -q: be quiet, suppress warnings
+
+ -q -q (or -qq): be very quiet, suppress errors
+
+ -q -q -q (or -qqq): produce no output at all
+
+ --help: prints the help
+
+ --version: print the version of UPX
+
+ --exact: when compressing, require to be able to get a byte-identical
+ file after decompression with option -d. [NOTE: this is work in progress
+ and is not supported for all formats yet. If you do care, as a
+ workaround you can compress and then decompress your program a first
+ time - any further compress-decompress steps should then yield
+ byte-identical results as compared to the first decompressed version.]
+
+ [ ...to be written... - type `upx --help' for now ]
+
+COMPRESSION LEVELS & TUNING
+ UPX offers ten different compression levels from -1 to -9, and --best.
+ The default compression level is -8 for files smaller than 512 KiB, and
+ -7 otherwise.
+
+ * Compression levels 1, 2 and 3 are pretty fast.
+
+ * Compression levels 4, 5 and 6 achieve a good time/ratio performance.
+
+ * Compression levels 7, 8 and 9 favor compression ratio over speed.
+
+ * Compression level --best may take a long time.
+
+ Note that compression level --best can be somewhat slow for large files,
+ but you definitely should use it when releasing a final version of your
+ program.
+
+ Quick info for achieving the best compression ratio:
+
+ * Try upx --brute myfile.exe or even upx --ultra-brute myfile.exe.
+
+ * Try if --overlay=strip works.
+
+ * For win32/pe programs there's --strip-relocs=0. See notes below.
+
+OVERLAY HANDLING OPTIONS
+ Info: An "overlay" means auxiliary data attached after the logical end
+ of an executable, and it often contains application specific data (this
+ is a common practice to avoid an extra data file, though it would be
+ better to use resource sections).
+
+ UPX handles overlays like many other executable packers do: it simply
+ copies the overlay after the compressed image. This works with some
+ files, but doesn't work with others, depending on how an application
+ actually accesses this overlayed data.
+
+ --overlay=copy Copy any extra data attached to the file. [DEFAULT]
+
+ --overlay=strip Strip any overlay from the program instead of
+ copying it. Be warned, this may make the compressed
+ program crash or otherwise unusable.
+
+ --overlay=skip Refuse to compress any program which has an overlay.
+
+ENVIRONMENT
+ The environment variable UPX can hold a set of default options for UPX.
+ These options are interpreted first and can be overwritten by explicit
+ command line parameters. For example:
+
+ for DOS/Windows: set UPX=-9 --compress-icons#0
+ for sh/ksh/zsh: UPX="-9 --compress-icons=0"; export UPX
+ for csh/tcsh: setenv UPX "-9 --compress-icons=0"
+
+ Under DOS/Windows you must use '#' instead of '=' when setting the
+ environment variable because of a COMMAND.COM limitation.
+
+ Not all of the options are valid in the environment variable - UPX will
+ tell you.
+
+ You can explicitly use the --no-env option to ignore the environment
+ variable.
+
+NOTES FOR THE SUPPORTED EXECUTABLE FORMATS
+ NOTES FOR ATARI/TOS
+ This is the executable format used by the Atari ST/TT, a Motorola 68000
+ based personal computer which was popular in the late '80s. Support of
+ this format is only because of nostalgic feelings of one of the authors
+ and serves no practical purpose :-). See http://www.freemint.de for more
+ info.
+
+ Packed programs will be byte-identical to the original after
+ uncompression. All debug information will be stripped, though.
+
+ Extra options available for this executable format:
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ NOTES FOR BVMLINUZ/I386
+ Same as vmlinuz/i386.
+
+ NOTES FOR DOS/COM
+ Obviously UPX won't work with executables that want to read data from
+ themselves (like some commandline utilities that ship with Win95/98/ME).
+
+ Compressed programs only work on a 286+.
+
+ Packed programs will be byte-identical to the original after
+ uncompression.
+
+ Maximum uncompressed size: ~65100 bytes.
+
+ Extra options available for this executable format:
+
+ --8086 Create an executable that works on any 8086 CPU.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+ NOTES FOR DOS/EXE
+ dos/exe stands for all "normal" 16-bit DOS executables.
+
+ Obviously UPX won't work with executables that want to read data from
+ themselves (like some command line utilities that ship with
+ Win95/98/ME).
+
+ Compressed programs only work on a 286+.
+
+ Extra options available for this executable format:
+
+ --8086 Create an executable that works on any 8086 CPU.
+
+ --no-reloc Use no relocation records in the exe header.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ NOTES FOR DOS/SYS
+ Compressed programs only work on a 286+.
+
+ Packed programs will be byte-identical to the original after
+ uncompression.
+
+ Maximum uncompressed size: ~65350 bytes.
+
+ Extra options available for this executable format:
+
+ --8086 Create an executable that works on any 8086 CPU.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+ NOTES FOR DJGPP2/COFF
+ First of all, it is recommended to use UPX *instead* of strip. strip has
+ the very bad habit of replacing your stub with its own (outdated)
+ version. Additionally UPX corrects a bug/feature in strip v2.8.x: it
+ will fix the 4 KiB alignment of the stub.
+
+ UPX includes the full functionality of stubify. This means it will
+ automatically stubify your COFF files. Use the option --coff to disable
+ this functionality (see below).
+
+ UPX automatically handles Allegro packfiles.
+
+ The DLM format (a rather exotic shared library extension) is not
+ supported.
+
+ Packed programs will be byte-identical to the original after
+ uncompression. All debug information and trailing garbage will be
+ stripped, though.
+
+ Extra options available for this executable format:
+
+ --coff Produce COFF output instead of EXE. By default
+ UPX keeps your current stub.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+ NOTES FOR LINUX [general]
+ Introduction
+
+ Linux/386 support in UPX consists of 3 different executable formats,
+ one optimized for ELF executables ("linux/elf386"), one optimized
+ for shell scripts ("linux/sh386"), and one generic format
+ ("linux/386").
+
+ We will start with a general discussion first, but please
+ also read the relevant docs for each of the individual formats.
+
+ Also, there is special support for bootable kernels - see the
+ description of the vmlinuz/386 format.
+
+ General user's overview
+
+ Running a compressed executable program trades less space on a
+ ``permanent'' storage medium (such as a hard disk, floppy disk,
+ CD-ROM, flash memory, EPROM, etc.) for more space in one or more
+ ``temporary'' storage media (such as RAM, swap space, /tmp, etc.).
+ Running a compressed executable also requires some additional CPU
+ cycles to generate the compressed executable in the first place,
+ and to decompress it at each invocation.
+
+ How much space is traded? It depends on the executable, but many
+ programs save 30% to 50% of permanent disk space. How much CPU
+ overhead is there? Again, it depends on the executable, but
+ decompression speed generally is at least many megabytes per second,
+ and frequently is limited by the speed of the underlying disk
+ or network I/O.
+
+ Depending on the statistics of usage and access, and the relative
+ speeds of CPU, RAM, swap space, /tmp, and file system storage, then
+ invoking and running a compressed executable can be faster than
+ directly running the corresponding uncompressed program.
+ The operating system might perform fewer expensive I/O operations
+ to invoke the compressed program. Paging to or from swap space
+ or /tmp might be faster than paging from the general file system.
+ ``Medium-sized'' programs which access about 1/3 to 1/2 of their
+ stored program bytes can do particularly well with compression.
+ Small programs tend not to benefit as much because the absolute
+ savings is less. Big programs tend not to benefit proportionally
+ because each invocation may use only a small fraction of the program,
+ yet UPX decompresses the entire program before invoking it.
+ But in environments where disk or flash memory storage is limited,
+ then compression may win anyway.
+
+ Currently, executables compressed by UPX do not share RAM at runtime
+ in the way that executables mapped from a file system do. As a
+ result, if the same program is run simultaneously by more than one
+ process, then using the compressed version will require more RAM and/or
+ swap space. So, shell programs (bash, csh, etc.) and ``make''
+ might not be good candidates for compression.
+
+ UPX recognizes three executable formats for Linux: Linux/elf386,
+ Linux/sh386, and Linux/386. Linux/386 is the most generic format;
+ it accommodates any file that can be executed. At runtime, the UPX
+ decompression stub re-creates in /tmp a copy of the original file,
+ and then the copy is (re-)executed with the same arguments.
+ ELF binary executables prefer the Linux/elf386 format by default,
+ because UPX decompresses them directly into RAM, uses only one
+ exec, does not use space in /tmp, and does not use /proc.
+ Shell scripts where the underlying shell accepts a ``-c'' argument
+ can use the Linux/sh386 format. UPX decompresses the shell script
+ into low memory, then maps the shell and passes the entire text of the
+ script as an argument with a leading ``-c''.
+
+ General benefits:
+
+ - UPX can compress all executables, be it AOUT, ELF, libc4, libc5,
+ libc6, Shell/Perl/Python/... scripts, standalone Java .class
+ binaries, or whatever...
+ All scripts and programs will work just as before.
+
+ - Compressed programs are completely self-contained. No need for
+ any external program.
+
+ - UPX keeps your original program untouched. This means that
+ after decompression you will have a byte-identical version,
+ and you can use UPX as a file compressor just like gzip.
+ [ Note that UPX maintains a checksum of the file internally,
+ so it is indeed a reliable alternative. ]
+
+ - As the stub only uses syscalls and isn't linked against libc it
+ should run under any Linux configuration that can run ELF
+ binaries.
+
+ - For the same reason compressed executables should run under
+ FreeBSD and other systems which can run Linux binaries.
+ [ Please send feedback on this topic ]
+
+ General drawbacks:
+
+ - It is not advisable to compress programs which usually have many
+ instances running (like `sh' or `make') because the common segments of
+ compressed programs won't be shared any longer between different
+ processes.
+
+ - `ldd' and `size' won't show anything useful because all they
+ see is the statically linked stub. Since version 0.82 the section
+ headers are stripped from the UPX stub and `size' doesn't even
+ recognize the file format. The file patches/patch-elfcode.h has a
+ patch to fix this bug in `size' and other programs which use GNU BFD.
+
+ General notes:
+
+ - As UPX leaves your original program untouched it is advantageous
+ to strip it before compression.
+
+ - If you compress a script you will lose platform independence -
+ this could be a problem if you are using NFS mounted disks.
+
+ - Compression of suid, guid and sticky-bit programs is rejected
+ because of possible security implications.
+
+ - For the same reason there is no sense in making any compressed
+ program suid.
+
+ - Obviously UPX won't work with executables that want to read data
+ from themselves. E.g., this might be a problem for Perl scripts
+ which access their __DATA__ lines.
+
+ - In case of internal errors the stub will abort with exitcode 127.
+ Typical reasons for this to happen are that the program has somehow
+ been modified after compression.
+ Running `strace -o strace.log compressed_file' will tell you more.
+
+ NOTES FOR LINUX/ELF386
+ Please read the general Linux description first.
+
+ The linux/elf386 format decompresses directly into RAM, uses only one
+ exec, does not use space in /tmp, and does not use /proc.
+
+ Linux/elf386 is automatically selected for Linux ELF executables.
+
+ Packed programs will be byte-identical to the original after
+ uncompression.
+
+ How it works:
+
+ For ELF executables, UPX decompresses directly to memory, simulating
+ the mapping that the operating system kernel uses during exec(),
+ including the PT_INTERP program interpreter (if any).
+ The brk() is set by a special PT_LOAD segment in the compressed
+ executable itself. UPX then wipes the stack clean except for
+ arguments, environment variables, and Elf_auxv entries (this is
+ required by bugs in the startup code of /lib/ld-linux.so as of
+ May 2000), and transfers control to the program interpreter or
+ the e_entry address of the original executable.
+
+ The UPX stub is about 1700 bytes long, partly written in assembler
+ and only uses kernel syscalls. It is not linked against any libc.
+
+ Specific drawbacks:
+
+ - For linux/elf386 and linux/sh386 formats, you will be relying on
+ RAM and swap space to hold all of the decompressed program during
+ the lifetime of the process. If you already use most of your swap
+ space, then you may run out. A system that is "out of memory"
+ can become fragile. Many programs do not react gracefully when
+ malloc() returns 0. With newer Linux kernels, the kernel
+ may decide to kill some processes to regain memory, and you
+ may not like the kernel's choice of which to kill. Running
+ /usr/bin/top is one way to check on the usage of swap space.
+
+ Extra options available for this executable format:
+
+ (none)
+
+ NOTES FOR LINUX/SH386
+ Please read the general Linux description first.
+
+ Shell scripts where the underling shell accepts a ``-c'' argument can
+ use the Linux/sh386 format. UPX decompresses the shell script into low
+ memory, then maps the shell and passes the entire text of the script as
+ an argument with a leading ``-c''. It does not use space in /tmp, and
+ does not use /proc.
+
+ Linux/sh386 is automatically selected for shell scripts that use a known
+ shell.
+
+ Packed programs will be byte-identical to the original after
+ uncompression.
+
+ How it works:
+
+ For shell script executables (files beginning with "#!/" or "#! /")
+ where the shell is known to accept "-c ", UPX decompresses
+ the file into low memory, then maps the shell (and its PT_INTERP),
+ and passes control to the shell with the entire decompressed file
+ as the argument after "-c". Known shells are sh, ash, bash, bsh, csh,
+ ksh, tcsh, pdksh. Restriction: UPX cannot use this method
+ for shell scripts which use the one optional string argument after
+ the shell name in the script (example: "#! /bin/sh option3\n".)
+
+ The UPX stub is about 1700 bytes long, partly written in assembler
+ and only uses kernel syscalls. It is not linked against any libc.
+
+ Specific drawbacks:
+
+ - For linux/elf386 and linux/sh386 formats, you will be relying on
+ RAM and swap space to hold all of the decompressed program during
+ the lifetime of the process. If you already use most of your swap
+ space, then you may run out. A system that is "out of memory"
+ can become fragile. Many programs do not react gracefully when
+ malloc() returns 0. With newer Linux kernels, the kernel
+ may decide to kill some processes to regain memory, and you
+ may not like the kernel's choice of which to kill. Running
+ /usr/bin/top is one way to check on the usage of swap space.
+
+ Extra options available for this executable format:
+
+ (none)
+
+ NOTES FOR LINUX/386
+ Please read the general Linux description first.
+
+ The generic linux/386 format decompresses to /tmp and needs /proc file
+ system support. It starts the decompressed program via the execve()
+ syscall.
+
+ Linux/386 is only selected if the specialized linux/elf386 and
+ linux/sh386 won't recognize a file.
+
+ Packed programs will be byte-identical to the original after
+ uncompression.
+
+ How it works:
+
+ For files which are not ELF and not a script for a known "-c" shell,
+ UPX uses kernel execve(), which first requires decompressing to a
+ temporary file in the file system. Interestingly -
+ because of the good memory management of the Linux kernel - this
+ often does not introduce a noticeable delay, and in fact there
+ will be no disk access at all if you have enough free memory as
+ the entire process takes places within the file system buffers.
+
+ A compressed executable consists of the UPX stub and an overlay
+ which contains the original program in a compressed form.
+
+ The UPX stub is a statically linked ELF executable and does
+ the following at program startup:
+
+ 1) decompress the overlay to a temporary location in /tmp
+ 2) open the temporary file for reading
+ 3) try to delete the temporary file and start (execve)
+ the uncompressed program in /tmp using /proc//fd/X as
+ attained by step 2)
+ 4) if that fails, fork off a subprocess to clean up and
+ start the program in /tmp in the meantime
+
+ The UPX stub is about 1700 bytes long, partly written in assembler
+ and only uses kernel syscalls. It is not linked against any libc.
+
+ Specific drawbacks:
+
+ - You need additional free disk space for the uncompressed program
+ in your /tmp directory. This program is deleted immediately after
+ decompression, but you still need it for the full execution time
+ of the program.
+
+ - You must have /proc file system support as the stub wants to open
+ /proc//exe and needs /proc//fd/X. This also means that you
+ cannot compress programs that are used during the boot sequence
+ before /proc is mounted.
+
+ - Utilities like `top' will display numerical values in the process
+ name field. This is because Linux computes the process name from
+ the first argument of the last execve syscall (which is typically
+ something like /proc//fd/3).
+
+ - Because of temporary decompression to disk the decompression speed
+ is not as fast as with the other executable formats. Still, I can see
+ no noticeable delay when starting programs like my ~3 MiB emacs (which
+ is less than 1 MiB when compressed :-).
+
+ Extra options available for this executable format:
+
+ --force-execve Force the use of the generic linux/386 "execve"
+ format, i.e. do not try the linux/elf386 and
+ linux/sh386 formats.
+
+ NOTES FOR PS1/EXE
+ This is the executable format used by the Sony PlayStation (PSone), a
+ Mips R3000 based gaming console which is popular since the late '90s.
+ Support of this format is very similar to the Atari one, because of
+ nostalgic feelings of one of the authors.
+
+ Packed programs will be byte-identical to the original after
+ uncompression, until further notice.
+
+ Maximum uncompressed size: ~1.89 / ~7.60 MiB.
+
+ Notes:
+
+ - UPX creates as default a suitable executable for CD-Mastering
+ and console transfer. For a CD-Master main executable you could also try
+ the special option "--boot-only" as described below.
+ It has been reported that upx packed executables are fully compatible with
+ the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in
+ Sony PlayStation (PSone) emulation mode.
+
+ - Normally the packed files use the same memory areas like the uncompressed
+ versions, so they will not override other memory areas while unpacking.
+ If this isn't possible UPX will abort showing a 'packed data overlap'
+ error. With the "--force" option UPX will relocate the loading address
+ for the packed file, but this isn't a real problem if it is a single or
+ the main executable.
+
+ Extra options available for this executable format:
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --8-bit Uses 8 bit size compression [default: 32 bit]
+
+ --8mib-ram PSone has 8 MiB ram available [default: 2 MiB]
+
+ --boot-only This format is for main exes and CD-Mastering only !
+ It may slightly improve the compression ratio,
+ decompression routines are faster than default ones.
+ But it cannot be used for console transfer !
+
+ --no-align This option disables CD mode 2 data sector format
+ alignment. May slightly improves the compression ratio,
+ but the compressed executable will not boot from a CD.
+ Use it for console transfer only !
+
+ NOTES FOR RTM32/PE and ARM/PE
+ Same as win32/pe.
+
+ NOTES FOR TMT/ADAM
+ This format is used by the TMT Pascal compiler - see http://www.tmt.com/
+ .
+
+ Extra options available for this executable format:
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+ NOTES FOR VMLINUZ/386
+ The vmlinuz/386 and bvmlinuz/386 formats take a gzip-compressed bootable
+ Linux kernel image ("vmlinuz", "zImage", "bzImage"), gzip-decompress it
+ and re-compress it with the UPX compression method.
+
+ vmlinuz/386 is completely unrelated to the other Linux executable
+ formats, and it does not share any of their drawbacks.
+
+ Notes:
+
+ - Be sure that "vmlinuz/386" or "bvmlinuz/386" is displayed
+ during compression - otherwise a wrong executable format
+ may have been used, and the kernel won't boot.
+
+ Benefits:
+
+ - Better compression (but note that the kernel was already compressed,
+ so the improvement is not as large as with other formats).
+ Still, the bytes saved may be essential for special needs like
+ boot disks.
+
+ For example, this is what I get for my 2.2.16 kernel:
+ 1589708 vmlinux
+ 641073 bzImage [original]
+ 560755 bzImage.upx [compressed by "upx -9"]
+
+ - Much faster decompression at kernel boot time (but kernel
+ decompression speed is not really an issue these days).
+
+ Drawbacks:
+
+ (none)
+
+ Extra options available for this executable format:
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+ NOTES FOR WATCOM/LE
+ UPX has been successfully tested with the following extenders: DOS4G,
+ DOS4GW, PMODE/W, DOS32a, CauseWay. The WDOS/X extender is partly
+ supported (for details see the file bugs BUGS).
+
+ DLLs and the LX format are not supported.
+
+ Extra options available for this executable format:
+
+ --le Produce an unbound LE output instead of
+ keeping the current stub.
+
+ NOTES FOR WIN32/PE
+ The PE support in UPX is quite stable now, but probably there are still
+ some incompatibilities with some files.
+
+ Because of the way UPX (and other packers for this format) works, you
+ can see increased memory usage of your compressed files because the
+ whole program is loaded into memory at startup. If you start several
+ instances of huge compressed programs you're wasting memory because the
+ common segments of the program won't get shared across the instances. On
+ the other hand if you're compressing only smaller programs, or running
+ only one instance of larger programs, then this penalty is smaller, but
+ it's still there.
+
+ If you're running executables from network, then compressed programs
+ will load faster, and require less bandwidth during execution.
+
+ DLLs are supported. But UPX compressed DLLs can not share common data
+ and code when they got used by multiple applications. So compressing
+ msvcrt.dll is a waste of memory, but compressing the dll plugins of a
+ particular application may be a better idea.
+
+ Screensavers are supported, with the restriction that the filename must
+ end with ".scr" (as screensavers are handled slightly different than
+ normal exe files).
+
+ UPX compressed PE files have some minor memory overhead (usually in the
+ 10 - 30 KiB range) which can be seen by specifying the "-i" command line
+ switch during compression.
+
+ Extra options available for this executable format:
+
+ --compress-exports=0 Don't compress the export section.
+ Use this if you plan to run the compressed
+ program under Wine.
+ --compress-exports=1 Compress the export section. [DEFAULT]
+ Compression of the export section can improve the
+ compression ratio quite a bit but may not work
+ with all programs (like winword.exe).
+ UPX never compresses the export section of a DLL
+ regardless of this option.
+
+ --compress-icons=0 Don't compress any icons.
+ --compress-icons=1 Compress all but the first icon.
+ --compress-icons=2 Compress all icons which are not in the
+ first icon directory. [DEFAULT]
+ --compress-icons=3 Compress all icons.
+
+ --compress-resources=0 Don't compress any resources at all.
+
+ --keep-resource=list Don't compress resources specified by the list.
+ The members of the list are separated by commas.
+ A list member has the following format: I.
+ I is the type of the resource. Standard types
+ must be specified as decimal numbers, user types can be
+ specified by decimal IDs or strings. I is the
+ identifier of the resource. It can be a decimal number
+ or a string. For example:
+
+ --keep-resource=2/MYBITMAP,5,6/12345
+
+ UPX won't compress the named bitmap resource "MYBITMAP",
+ it leaves every dialog (5) resource uncompressed, and
+ it won't touch the string table resource with identifier
+ 12345.
+
+ --force Force compression even when there is an
+ unexpected value in a header field.
+ Use with care.
+
+ --strip-relocs=0 Don't strip relocation records.
+ --strip-relocs=1 Strip relocation records. [DEFAULT]
+ This option only works on executables with base
+ address greater or equal to 0x400000. Usually the
+ compressed files becomes smaller, but some files
+ may become larger. Note that the resulting file will
+ not work under Windows 3.x (Win32s).
+ UPX never strips relocations from a DLL
+ regardless of this option.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+DIAGNOSTICS
+ Exit status is normally 0; if an error occurs, exit status is 1. If a
+ warning occurs, exit status is 2.
+
+ UPX's diagnostics are intended to be self-explanatory.
+
+BUGS
+ Please report all bugs immediately to the authors.
+
+AUTHORS
+ Markus F.X.J. Oberhumer
+ http://www.oberhumer.com
+
+ Laszlo Molnar
+
+ John F. Reiser
+
+ Jens Medoch
+
+COPYRIGHT
+ Copyright (C) 1996-2020 Markus Franz Xaver Johannes Oberhumer
+
+ Copyright (C) 1996-2020 Laszlo Molnar
+
+ Copyright (C) 2000-2020 John F. Reiser
+
+ Copyright (C) 2002-2020 Jens Medoch
+
+ This program may be used freely, and you are welcome to redistribute it
+ under certain conditions.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the UPX License
+ Agreement for more details.
+
+ You should have received a copy of the UPX License Agreement along with
+ this program; see the file LICENSE. If not, visit the UPX home page.
+
diff --git a/UPX/upx.exe b/UPX/upx.exe
new file mode 100644
index 0000000..436082b
Binary files /dev/null and b/UPX/upx.exe differ
diff --git a/UPX/upx.html b/UPX/upx.html
new file mode 100644
index 0000000..40e0fb2
--- /dev/null
+++ b/UPX/upx.html
@@ -0,0 +1,812 @@
+
+
+
+
+upx - compress or expand executable files
+
+
+
+
+
+
+
+
+
NAME
+
+
upx - compress or expand executable files
+
+
SYNOPSIS
+
+
upx[ command ][ options ]filename...
+
+
ABSTRACT
+
+
The Ultimate Packer for eXecutables
+ Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
+ https://upx.github.io
+
+
UPX is a portable, extendable, high-performance executable packer for several different executable formats. It achieves an excellent compression ratio and offers *very* fast decompression. Your executables suffer no memory overhead or other drawbacks for most of the formats supported, because of in-place decompression.
+
+
While you may use UPX freely for both non-commercial and commercial executables (for details see the file LICENSE), we would highly appreciate if you credit UPX and ourselves in the documentation, possibly including a reference to the UPX home page. Thanks.
+
+
[ Using UPX in non-OpenSource applications without proper credits is considered not politically correct ;-) ]
+
+
DISCLAIMER
+
+
UPX comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.
+
+
This is the first production quality release, and we plan that future 1.xx releases will be backward compatible with this version.
+
+
Please report all problems or suggestions to the authors. Thanks.
+
+
DESCRIPTION
+
+
UPX is a versatile executable packer with the following features:
+
+
- excellent compression ratio: compresses better than zip/gzip,
+ use UPX to decrease the size of your distribution !
+
+ - very fast decompression: about 10 MiB/sec on an ancient Pentium 133,
+ about 200 MiB/sec on an Athlon XP 2000+.
+
+ - no memory overhead for your compressed executables for most of the
+ supported formats
+
+ - safe: you can list, test and unpack your executables
+ Also, a checksum of both the compressed and uncompressed file is
+ maintained internally.
+
+ - universal: UPX can pack a number of executable formats:
+ * atari/tos
+ * bvmlinuz/386 [bootable Linux kernel]
+ * djgpp2/coff
+ * dos/com
+ * dos/exe
+ * dos/sys
+ * linux/386
+ * linux/elf386
+ * linux/sh386
+ * ps1/exe
+ * rtm32/pe
+ * tmt/adam
+ * vmlinuz/386 [bootable Linux kernel]
+ * vmlinux/386
+ * watcom/le (supporting DOS4G, PMODE/W, DOS32a and CauseWay)
+ * win32/pe (exe and dll)
+ * win64/pe (exe and dll)
+ * arm/pe (exe and dll)
+ * linux/elfamd64
+ * linux/elfppc32
+ * mach/elfppc32
+
+ - portable: UPX is written in portable endian-neutral C++
+
+ - extendable: because of the class layout it's very easy to support
+ new executable formats or add new compression algorithms
+
+ - free: UPX can be distributed and used freely. And from version 0.99
+ the full source code of UPX is released under the GNU General Public
+ License (GPL) !
+
+
You probably understand now why we call UPX the "ultimate" executable packer.
+
+
COMMANDS
+
+
Compress
+
+
This is the default operation, eg. upx yourfile.exe will compress the file specified on the command line.
+
+
Decompress
+
+
All UPX supported file formats can be unpacked using the -d switch, eg. upx -d yourfile.exe will uncompress the file you've just compressed.
+
+
Test
+
+
The -t command tests the integrity of the compressed and uncompressed data, eg. upx -t yourfile.exe check whether your file can be safely decompressed. Note, that this command doesn't check the whole file, only the part that will be uncompressed during program execution. This means that you should not use this command instead of a virus checker.
+
+
List
+
+
The -l command prints out some information about the compressed files specified on the command line as parameters, eg upx -l yourfile.exe shows the compressed / uncompressed size and the compression ratio of yourfile.exe.
+
+
OPTIONS
+
+
-q: be quiet, suppress warnings
+
+
-q -q (or -qq): be very quiet, suppress errors
+
+
-q -q -q (or -qqq): produce no output at all
+
+
--help: prints the help
+
+
--version: print the version of UPX
+
+
--exact: when compressing, require to be able to get a byte-identical file after decompression with option -d. [NOTE: this is work in progress and is not supported for all formats yet. If you do care, as a workaround you can compress and then decompress your program a first time - any further compress-decompress steps should then yield byte-identical results as compared to the first decompressed version.]
+
+
[ ...to be written... - type `upx --help' for now ]
+
+
COMPRESSION LEVELS & TUNING
+
+
UPX offers ten different compression levels from -1 to -9, and --best. The default compression level is -8 for files smaller than 512 KiB, and -7 otherwise.
+
+
+
+
Compression levels 1, 2 and 3 are pretty fast.
+
+
+
Compression levels 4, 5 and 6 achieve a good time/ratio performance.
+
+
+
Compression levels 7, 8 and 9 favor compression ratio over speed.
+
+
+
Compression level --best may take a long time.
+
+
+
+
+
Note that compression level --best can be somewhat slow for large files, but you definitely should use it when releasing a final version of your program.
+
+
Quick info for achieving the best compression ratio:
+
+
+
+
Try upx --brute myfile.exe or even upx --ultra-brute myfile.exe.
+
+
+
Try if --overlay=strip works.
+
+
+
For win32/pe programs there's --strip-relocs=0. See notes below.
+
+
+
+
+
OVERLAY HANDLING OPTIONS
+
+
Info: An "overlay" means auxiliary data attached after the logical end of an executable, and it often contains application specific data (this is a common practice to avoid an extra data file, though it would be better to use resource sections).
+
+
UPX handles overlays like many other executable packers do: it simply copies the overlay after the compressed image. This works with some files, but doesn't work with others, depending on how an application actually accesses this overlayed data.
+
+
--overlay=copy Copy any extra data attached to the file. [DEFAULT]
+
+ --overlay=strip Strip any overlay from the program instead of
+ copying it. Be warned, this may make the compressed
+ program crash or otherwise unusable.
+
+ --overlay=skip Refuse to compress any program which has an overlay.
+
+
ENVIRONMENT
+
+
The environment variable UPX can hold a set of default options for UPX. These options are interpreted first and can be overwritten by explicit command line parameters. For example:
+
+
for DOS/Windows: set UPX=-9 --compress-icons#0
+ for sh/ksh/zsh: UPX="-9 --compress-icons=0"; export UPX
+ for csh/tcsh: setenv UPX "-9 --compress-icons=0"
+
+
Under DOS/Windows you must use '#' instead of '=' when setting the environment variable because of a COMMAND.COM limitation.
+
+
Not all of the options are valid in the environment variable - UPX will tell you.
+
+
You can explicitly use the --no-env option to ignore the environment variable.
+
+
NOTES FOR THE SUPPORTED EXECUTABLE FORMATS
+
+
NOTES FOR ATARI/TOS
+
+
This is the executable format used by the Atari ST/TT, a Motorola 68000 based personal computer which was popular in the late '80s. Support of this format is only because of nostalgic feelings of one of the authors and serves no practical purpose :-). See http://www.freemint.de for more info.
+
+
Packed programs will be byte-identical to the original after uncompression. All debug information will be stripped, though.
+
+
Extra options available for this executable format:
+
+
--all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+
NOTES FOR BVMLINUZ/I386
+
+
Same as vmlinuz/i386.
+
+
NOTES FOR DOS/COM
+
+
Obviously UPX won't work with executables that want to read data from themselves (like some commandline utilities that ship with Win95/98/ME).
+
+
Compressed programs only work on a 286+.
+
+
Packed programs will be byte-identical to the original after uncompression.
+
+
Maximum uncompressed size: ~65100 bytes.
+
+
Extra options available for this executable format:
+
+
--8086 Create an executable that works on any 8086 CPU.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+
NOTES FOR DOS/EXE
+
+
dos/exe stands for all "normal" 16-bit DOS executables.
+
+
Obviously UPX won't work with executables that want to read data from themselves (like some command line utilities that ship with Win95/98/ME).
+
+
Compressed programs only work on a 286+.
+
+
Extra options available for this executable format:
+
+
--8086 Create an executable that works on any 8086 CPU.
+
+ --no-reloc Use no relocation records in the exe header.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+
NOTES FOR DOS/SYS
+
+
Compressed programs only work on a 286+.
+
+
Packed programs will be byte-identical to the original after uncompression.
+
+
Maximum uncompressed size: ~65350 bytes.
+
+
Extra options available for this executable format:
+
+
--8086 Create an executable that works on any 8086 CPU.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+
NOTES FOR DJGPP2/COFF
+
+
First of all, it is recommended to use UPX *instead* of strip. strip has the very bad habit of replacing your stub with its own (outdated) version. Additionally UPX corrects a bug/feature in strip v2.8.x: it will fix the 4 KiB alignment of the stub.
+
+
UPX includes the full functionality of stubify. This means it will automatically stubify your COFF files. Use the option --coff to disable this functionality (see below).
+
+
UPX automatically handles Allegro packfiles.
+
+
The DLM format (a rather exotic shared library extension) is not supported.
+
+
Packed programs will be byte-identical to the original after uncompression. All debug information and trailing garbage will be stripped, though.
+
+
Extra options available for this executable format:
+
+
--coff Produce COFF output instead of EXE. By default
+ UPX keeps your current stub.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+
NOTES FOR LINUX [general]
+
+
Introduction
+
+
Linux/386 support in UPX consists of 3 different executable formats,
+ one optimized for ELF executables ("linux/elf386"), one optimized
+ for shell scripts ("linux/sh386"), and one generic format
+ ("linux/386").
+
+ We will start with a general discussion first, but please
+ also read the relevant docs for each of the individual formats.
+
+ Also, there is special support for bootable kernels - see the
+ description of the vmlinuz/386 format.
+
+
General user's overview
+
+
Running a compressed executable program trades less space on a
+ ``permanent'' storage medium (such as a hard disk, floppy disk,
+ CD-ROM, flash memory, EPROM, etc.) for more space in one or more
+ ``temporary'' storage media (such as RAM, swap space, /tmp, etc.).
+ Running a compressed executable also requires some additional CPU
+ cycles to generate the compressed executable in the first place,
+ and to decompress it at each invocation.
+
+ How much space is traded? It depends on the executable, but many
+ programs save 30% to 50% of permanent disk space. How much CPU
+ overhead is there? Again, it depends on the executable, but
+ decompression speed generally is at least many megabytes per second,
+ and frequently is limited by the speed of the underlying disk
+ or network I/O.
+
+ Depending on the statistics of usage and access, and the relative
+ speeds of CPU, RAM, swap space, /tmp, and file system storage, then
+ invoking and running a compressed executable can be faster than
+ directly running the corresponding uncompressed program.
+ The operating system might perform fewer expensive I/O operations
+ to invoke the compressed program. Paging to or from swap space
+ or /tmp might be faster than paging from the general file system.
+ ``Medium-sized'' programs which access about 1/3 to 1/2 of their
+ stored program bytes can do particularly well with compression.
+ Small programs tend not to benefit as much because the absolute
+ savings is less. Big programs tend not to benefit proportionally
+ because each invocation may use only a small fraction of the program,
+ yet UPX decompresses the entire program before invoking it.
+ But in environments where disk or flash memory storage is limited,
+ then compression may win anyway.
+
+ Currently, executables compressed by UPX do not share RAM at runtime
+ in the way that executables mapped from a file system do. As a
+ result, if the same program is run simultaneously by more than one
+ process, then using the compressed version will require more RAM and/or
+ swap space. So, shell programs (bash, csh, etc.) and ``make''
+ might not be good candidates for compression.
+
+ UPX recognizes three executable formats for Linux: Linux/elf386,
+ Linux/sh386, and Linux/386. Linux/386 is the most generic format;
+ it accommodates any file that can be executed. At runtime, the UPX
+ decompression stub re-creates in /tmp a copy of the original file,
+ and then the copy is (re-)executed with the same arguments.
+ ELF binary executables prefer the Linux/elf386 format by default,
+ because UPX decompresses them directly into RAM, uses only one
+ exec, does not use space in /tmp, and does not use /proc.
+ Shell scripts where the underlying shell accepts a ``-c'' argument
+ can use the Linux/sh386 format. UPX decompresses the shell script
+ into low memory, then maps the shell and passes the entire text of the
+ script as an argument with a leading ``-c''.
+
+
General benefits:
+
+
- UPX can compress all executables, be it AOUT, ELF, libc4, libc5,
+ libc6, Shell/Perl/Python/... scripts, standalone Java .class
+ binaries, or whatever...
+ All scripts and programs will work just as before.
+
+ - Compressed programs are completely self-contained. No need for
+ any external program.
+
+ - UPX keeps your original program untouched. This means that
+ after decompression you will have a byte-identical version,
+ and you can use UPX as a file compressor just like gzip.
+ [ Note that UPX maintains a checksum of the file internally,
+ so it is indeed a reliable alternative. ]
+
+ - As the stub only uses syscalls and isn't linked against libc it
+ should run under any Linux configuration that can run ELF
+ binaries.
+
+ - For the same reason compressed executables should run under
+ FreeBSD and other systems which can run Linux binaries.
+ [ Please send feedback on this topic ]
+
+
General drawbacks:
+
+
- It is not advisable to compress programs which usually have many
+ instances running (like `sh' or `make') because the common segments of
+ compressed programs won't be shared any longer between different
+ processes.
+
+ - `ldd' and `size' won't show anything useful because all they
+ see is the statically linked stub. Since version 0.82 the section
+ headers are stripped from the UPX stub and `size' doesn't even
+ recognize the file format. The file patches/patch-elfcode.h has a
+ patch to fix this bug in `size' and other programs which use GNU BFD.
+
+
General notes:
+
+
- As UPX leaves your original program untouched it is advantageous
+ to strip it before compression.
+
+ - If you compress a script you will lose platform independence -
+ this could be a problem if you are using NFS mounted disks.
+
+ - Compression of suid, guid and sticky-bit programs is rejected
+ because of possible security implications.
+
+ - For the same reason there is no sense in making any compressed
+ program suid.
+
+ - Obviously UPX won't work with executables that want to read data
+ from themselves. E.g., this might be a problem for Perl scripts
+ which access their __DATA__ lines.
+
+ - In case of internal errors the stub will abort with exitcode 127.
+ Typical reasons for this to happen are that the program has somehow
+ been modified after compression.
+ Running `strace -o strace.log compressed_file' will tell you more.
+
+
NOTES FOR LINUX/ELF386
+
+
Please read the general Linux description first.
+
+
The linux/elf386 format decompresses directly into RAM, uses only one exec, does not use space in /tmp, and does not use /proc.
+
+
Linux/elf386 is automatically selected for Linux ELF executables.
+
+
Packed programs will be byte-identical to the original after uncompression.
+
+
How it works:
+
+
For ELF executables, UPX decompresses directly to memory, simulating
+ the mapping that the operating system kernel uses during exec(),
+ including the PT_INTERP program interpreter (if any).
+ The brk() is set by a special PT_LOAD segment in the compressed
+ executable itself. UPX then wipes the stack clean except for
+ arguments, environment variables, and Elf_auxv entries (this is
+ required by bugs in the startup code of /lib/ld-linux.so as of
+ May 2000), and transfers control to the program interpreter or
+ the e_entry address of the original executable.
+
+ The UPX stub is about 1700 bytes long, partly written in assembler
+ and only uses kernel syscalls. It is not linked against any libc.
+
+
Specific drawbacks:
+
+
- For linux/elf386 and linux/sh386 formats, you will be relying on
+ RAM and swap space to hold all of the decompressed program during
+ the lifetime of the process. If you already use most of your swap
+ space, then you may run out. A system that is "out of memory"
+ can become fragile. Many programs do not react gracefully when
+ malloc() returns 0. With newer Linux kernels, the kernel
+ may decide to kill some processes to regain memory, and you
+ may not like the kernel's choice of which to kill. Running
+ /usr/bin/top is one way to check on the usage of swap space.
+
+
Extra options available for this executable format:
+
+
(none)
+
+
NOTES FOR LINUX/SH386
+
+
Please read the general Linux description first.
+
+
Shell scripts where the underling shell accepts a ``-c'' argument can use the Linux/sh386 format. UPX decompresses the shell script into low memory, then maps the shell and passes the entire text of the script as an argument with a leading ``-c''. It does not use space in /tmp, and does not use /proc.
+
+
Linux/sh386 is automatically selected for shell scripts that use a known shell.
+
+
Packed programs will be byte-identical to the original after uncompression.
+
+
How it works:
+
+
For shell script executables (files beginning with "#!/" or "#! /")
+ where the shell is known to accept "-c <command>", UPX decompresses
+ the file into low memory, then maps the shell (and its PT_INTERP),
+ and passes control to the shell with the entire decompressed file
+ as the argument after "-c". Known shells are sh, ash, bash, bsh, csh,
+ ksh, tcsh, pdksh. Restriction: UPX cannot use this method
+ for shell scripts which use the one optional string argument after
+ the shell name in the script (example: "#! /bin/sh option3\n".)
+
+ The UPX stub is about 1700 bytes long, partly written in assembler
+ and only uses kernel syscalls. It is not linked against any libc.
+
+
Specific drawbacks:
+
+
- For linux/elf386 and linux/sh386 formats, you will be relying on
+ RAM and swap space to hold all of the decompressed program during
+ the lifetime of the process. If you already use most of your swap
+ space, then you may run out. A system that is "out of memory"
+ can become fragile. Many programs do not react gracefully when
+ malloc() returns 0. With newer Linux kernels, the kernel
+ may decide to kill some processes to regain memory, and you
+ may not like the kernel's choice of which to kill. Running
+ /usr/bin/top is one way to check on the usage of swap space.
+
+
Extra options available for this executable format:
+
+
(none)
+
+
NOTES FOR LINUX/386
+
+
Please read the general Linux description first.
+
+
The generic linux/386 format decompresses to /tmp and needs /proc file system support. It starts the decompressed program via the execve() syscall.
+
+
Linux/386 is only selected if the specialized linux/elf386 and linux/sh386 won't recognize a file.
+
+
Packed programs will be byte-identical to the original after uncompression.
+
+
How it works:
+
+
For files which are not ELF and not a script for a known "-c" shell,
+ UPX uses kernel execve(), which first requires decompressing to a
+ temporary file in the file system. Interestingly -
+ because of the good memory management of the Linux kernel - this
+ often does not introduce a noticeable delay, and in fact there
+ will be no disk access at all if you have enough free memory as
+ the entire process takes places within the file system buffers.
+
+ A compressed executable consists of the UPX stub and an overlay
+ which contains the original program in a compressed form.
+
+ The UPX stub is a statically linked ELF executable and does
+ the following at program startup:
+
+ 1) decompress the overlay to a temporary location in /tmp
+ 2) open the temporary file for reading
+ 3) try to delete the temporary file and start (execve)
+ the uncompressed program in /tmp using /proc/<pid>/fd/X as
+ attained by step 2)
+ 4) if that fails, fork off a subprocess to clean up and
+ start the program in /tmp in the meantime
+
+ The UPX stub is about 1700 bytes long, partly written in assembler
+ and only uses kernel syscalls. It is not linked against any libc.
+
+
Specific drawbacks:
+
+
- You need additional free disk space for the uncompressed program
+ in your /tmp directory. This program is deleted immediately after
+ decompression, but you still need it for the full execution time
+ of the program.
+
+ - You must have /proc file system support as the stub wants to open
+ /proc/<pid>/exe and needs /proc/<pid>/fd/X. This also means that you
+ cannot compress programs that are used during the boot sequence
+ before /proc is mounted.
+
+ - Utilities like `top' will display numerical values in the process
+ name field. This is because Linux computes the process name from
+ the first argument of the last execve syscall (which is typically
+ something like /proc/<pid>/fd/3).
+
+ - Because of temporary decompression to disk the decompression speed
+ is not as fast as with the other executable formats. Still, I can see
+ no noticeable delay when starting programs like my ~3 MiB emacs (which
+ is less than 1 MiB when compressed :-).
+
+
Extra options available for this executable format:
+
+
--force-execve Force the use of the generic linux/386 "execve"
+ format, i.e. do not try the linux/elf386 and
+ linux/sh386 formats.
+
+
NOTES FOR PS1/EXE
+
+
This is the executable format used by the Sony PlayStation (PSone), a Mips R3000 based gaming console which is popular since the late '90s. Support of this format is very similar to the Atari one, because of nostalgic feelings of one of the authors.
+
+
Packed programs will be byte-identical to the original after uncompression, until further notice.
+
+
Maximum uncompressed size: ~1.89 / ~7.60 MiB.
+
+
Notes:
+
+
- UPX creates as default a suitable executable for CD-Mastering
+ and console transfer. For a CD-Master main executable you could also try
+ the special option "--boot-only" as described below.
+ It has been reported that upx packed executables are fully compatible with
+ the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in
+ Sony PlayStation (PSone) emulation mode.
+
+ - Normally the packed files use the same memory areas like the uncompressed
+ versions, so they will not override other memory areas while unpacking.
+ If this isn't possible UPX will abort showing a 'packed data overlap'
+ error. With the "--force" option UPX will relocate the loading address
+ for the packed file, but this isn't a real problem if it is a single or
+ the main executable.
+
+
Extra options available for this executable format:
+
+
--all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --8-bit Uses 8 bit size compression [default: 32 bit]
+
+ --8mib-ram PSone has 8 MiB ram available [default: 2 MiB]
+
+ --boot-only This format is for main exes and CD-Mastering only !
+ It may slightly improve the compression ratio,
+ decompression routines are faster than default ones.
+ But it cannot be used for console transfer !
+
+ --no-align This option disables CD mode 2 data sector format
+ alignment. May slightly improves the compression ratio,
+ but the compressed executable will not boot from a CD.
+ Use it for console transfer only !
+
+
NOTES FOR RTM32/PE and ARM/PE
+
+
Same as win32/pe.
+
+
NOTES FOR TMT/ADAM
+
+
This format is used by the TMT Pascal compiler - see http://www.tmt.com/ .
+
+
Extra options available for this executable format:
+
+
--all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+
NOTES FOR VMLINUZ/386
+
+
The vmlinuz/386 and bvmlinuz/386 formats take a gzip-compressed bootable Linux kernel image ("vmlinuz", "zImage", "bzImage"), gzip-decompress it and re-compress it with the UPX compression method.
+
+
vmlinuz/386 is completely unrelated to the other Linux executable formats, and it does not share any of their drawbacks.
+
+
Notes:
+
+
- Be sure that "vmlinuz/386" or "bvmlinuz/386" is displayed
+ during compression - otherwise a wrong executable format
+ may have been used, and the kernel won't boot.
+
+
Benefits:
+
+
- Better compression (but note that the kernel was already compressed,
+ so the improvement is not as large as with other formats).
+ Still, the bytes saved may be essential for special needs like
+ boot disks.
+
+ For example, this is what I get for my 2.2.16 kernel:
+ 1589708 vmlinux
+ 641073 bzImage [original]
+ 560755 bzImage.upx [compressed by "upx -9"]
+
+ - Much faster decompression at kernel boot time (but kernel
+ decompression speed is not really an issue these days).
+
+
Drawbacks:
+
+
(none)
+
+
Extra options available for this executable format:
+
+
--all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+
NOTES FOR WATCOM/LE
+
+
UPX has been successfully tested with the following extenders: DOS4G, DOS4GW, PMODE/W, DOS32a, CauseWay. The WDOS/X extender is partly supported (for details see the file bugs BUGS).
+
+
DLLs and the LX format are not supported.
+
+
Extra options available for this executable format:
+
+
--le Produce an unbound LE output instead of
+ keeping the current stub.
+
+
NOTES FOR WIN32/PE
+
+
The PE support in UPX is quite stable now, but probably there are still some incompatibilities with some files.
+
+
Because of the way UPX (and other packers for this format) works, you can see increased memory usage of your compressed files because the whole program is loaded into memory at startup. If you start several instances of huge compressed programs you're wasting memory because the common segments of the program won't get shared across the instances. On the other hand if you're compressing only smaller programs, or running only one instance of larger programs, then this penalty is smaller, but it's still there.
+
+
If you're running executables from network, then compressed programs will load faster, and require less bandwidth during execution.
+
+
DLLs are supported. But UPX compressed DLLs can not share common data and code when they got used by multiple applications. So compressing msvcrt.dll is a waste of memory, but compressing the dll plugins of a particular application may be a better idea.
+
+
Screensavers are supported, with the restriction that the filename must end with ".scr" (as screensavers are handled slightly different than normal exe files).
+
+
UPX compressed PE files have some minor memory overhead (usually in the 10 - 30 KiB range) which can be seen by specifying the "-i" command line switch during compression.
+
+
Extra options available for this executable format:
+
+
--compress-exports=0 Don't compress the export section.
+ Use this if you plan to run the compressed
+ program under Wine.
+ --compress-exports=1 Compress the export section. [DEFAULT]
+ Compression of the export section can improve the
+ compression ratio quite a bit but may not work
+ with all programs (like winword.exe).
+ UPX never compresses the export section of a DLL
+ regardless of this option.
+
+ --compress-icons=0 Don't compress any icons.
+ --compress-icons=1 Compress all but the first icon.
+ --compress-icons=2 Compress all icons which are not in the
+ first icon directory. [DEFAULT]
+ --compress-icons=3 Compress all icons.
+
+ --compress-resources=0 Don't compress any resources at all.
+
+ --keep-resource=list Don't compress resources specified by the list.
+ The members of the list are separated by commas.
+ A list member has the following format: I<type[/name]>.
+ I<Type> is the type of the resource. Standard types
+ must be specified as decimal numbers, user types can be
+ specified by decimal IDs or strings. I<Name> is the
+ identifier of the resource. It can be a decimal number
+ or a string. For example:
+
+ --keep-resource=2/MYBITMAP,5,6/12345
+
+ UPX won't compress the named bitmap resource "MYBITMAP",
+ it leaves every dialog (5) resource uncompressed, and
+ it won't touch the string table resource with identifier
+ 12345.
+
+ --force Force compression even when there is an
+ unexpected value in a header field.
+ Use with care.
+
+ --strip-relocs=0 Don't strip relocation records.
+ --strip-relocs=1 Strip relocation records. [DEFAULT]
+ This option only works on executables with base
+ address greater or equal to 0x400000. Usually the
+ compressed files becomes smaller, but some files
+ may become larger. Note that the resulting file will
+ not work under Windows 3.x (Win32s).
+ UPX never strips relocations from a DLL
+ regardless of this option.
+
+ --all-methods Compress the program several times, using all
+ available compression methods. This may improve
+ the compression ratio in some cases, but usually
+ the default method gives the best results anyway.
+
+ --all-filters Compress the program several times, using all
+ available preprocessing filters. This may improve
+ the compression ratio in some cases, but usually
+ the default filter gives the best results anyway.
+
+
DIAGNOSTICS
+
+
Exit status is normally 0; if an error occurs, exit status is 1. If a warning occurs, exit status is 2.
+
+
UPX's diagnostics are intended to be self-explanatory.
+
+
BUGS
+
+
Please report all bugs immediately to the authors.
+
+
AUTHORS
+
+
Markus F.X.J. Oberhumer <markus@oberhumer.com>
+ http://www.oberhumer.com
+
+ Laszlo Molnar <ezerotven+github@gmail.com>
+
+ John F. Reiser <jreiser@BitWagon.com>
+
+ Jens Medoch <jssg@users.sourceforge.net>
+
+
COPYRIGHT
+
+
Copyright (C) 1996-2020 Markus Franz Xaver Johannes Oberhumer
+
+
Copyright (C) 1996-2020 Laszlo Molnar
+
+
Copyright (C) 2000-2020 John F. Reiser
+
+
Copyright (C) 2002-2020 Jens Medoch
+
+
This program may be used freely, and you are welcome to redistribute it under certain conditions.
+
+
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the UPX License Agreement for more details.
+
+
You should have received a copy of the UPX License Agreement along with this program; see the file LICENSE. If not, visit the UPX home page.
+
+
+
+
+
+
+
diff --git a/bg.mp4 b/bg.mp4
new file mode 100644
index 0000000..0ad019f
Binary files /dev/null and b/bg.mp4 differ
diff --git a/dist/wxPython_WallPaperEngine/MSVCP140.dll b/dist/wxPython_WallPaperEngine/MSVCP140.dll
new file mode 100644
index 0000000..8c80863
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/MSVCP140.dll differ
diff --git a/dist/wxPython_WallPaperEngine/VCRUNTIME140.dll b/dist/wxPython_WallPaperEngine/VCRUNTIME140.dll
new file mode 100644
index 0000000..a5bdfeb
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/VCRUNTIME140.dll differ
diff --git a/dist/wxPython_WallPaperEngine/_asyncio.pyd b/dist/wxPython_WallPaperEngine/_asyncio.pyd
new file mode 100644
index 0000000..589b736
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_asyncio.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_bz2.pyd b/dist/wxPython_WallPaperEngine/_bz2.pyd
new file mode 100644
index 0000000..fbd5c04
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_bz2.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_ctypes.pyd b/dist/wxPython_WallPaperEngine/_ctypes.pyd
new file mode 100644
index 0000000..634aa42
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_ctypes.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_decimal.pyd b/dist/wxPython_WallPaperEngine/_decimal.pyd
new file mode 100644
index 0000000..9439ca1
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_decimal.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_elementtree.pyd b/dist/wxPython_WallPaperEngine/_elementtree.pyd
new file mode 100644
index 0000000..33820e2
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_elementtree.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_hashlib.pyd b/dist/wxPython_WallPaperEngine/_hashlib.pyd
new file mode 100644
index 0000000..305fdd7
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_hashlib.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_lzma.pyd b/dist/wxPython_WallPaperEngine/_lzma.pyd
new file mode 100644
index 0000000..47263df
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_lzma.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_multiprocessing.pyd b/dist/wxPython_WallPaperEngine/_multiprocessing.pyd
new file mode 100644
index 0000000..8f3ad18
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_multiprocessing.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_overlapped.pyd b/dist/wxPython_WallPaperEngine/_overlapped.pyd
new file mode 100644
index 0000000..7ccebde
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_overlapped.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_queue.pyd b/dist/wxPython_WallPaperEngine/_queue.pyd
new file mode 100644
index 0000000..097bd62
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_queue.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_socket.pyd b/dist/wxPython_WallPaperEngine/_socket.pyd
new file mode 100644
index 0000000..e9577f5
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_socket.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_ssl.pyd b/dist/wxPython_WallPaperEngine/_ssl.pyd
new file mode 100644
index 0000000..fdefff7
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_ssl.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/_win32sysloader.pyd b/dist/wxPython_WallPaperEngine/_win32sysloader.pyd
new file mode 100644
index 0000000..280a90c
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/_win32sysloader.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/INSTALLER b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/INSTALLER
new file mode 100644
index 0000000..a1b589e
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/LICENSE b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/LICENSE
new file mode 100644
index 0000000..6013a21
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/LICENSE
@@ -0,0 +1,18 @@
+Copyright (c) 2004 Istvan Albert unless otherwise noted.
+Copyright (c) 2006-2010 Bob Ippolito
+Copyright (2) 2010-2020 Ronald Oussoren, et. al.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/METADATA b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/METADATA
new file mode 100644
index 0000000..02551a6
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/METADATA
@@ -0,0 +1,289 @@
+Metadata-Version: 2.1
+Name: altgraph
+Version: 0.17.2
+Summary: Python graph (network) package
+Home-page: https://altgraph.readthedocs.io
+Author: Ronald Oussoren
+Author-email: ronaldoussoren@mac.com
+Maintainer: Ronald Oussoren
+Maintainer-email: ronaldoussoren@mac.com
+License: MIT
+Download-URL: http://pypi.python.org/pypi/altgraph
+Keywords: graph
+Platform: any
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: Scientific/Engineering :: Mathematics
+Classifier: Topic :: Scientific/Engineering :: Visualization
+Description-Content-Type: text/x-rst; charset=UTF-8
+License-File: LICENSE
+Project-URL: Documentation, https://altgraph.readthedocs.io/en/latest/
+Project-URL: Issue tracker, https://github.com/ronaldoussoren/altgraph/issues
+Project-URL: Repository, https://github.com/ronaldoussoren/altgraph
+
+altgraph is a fork of graphlib: a graph (network) package for constructing
+graphs, BFS and DFS traversals, topological sort, shortest paths, etc. with
+graphviz output.
+
+altgraph includes some additional usage of Python 2.6+ features and
+enhancements related to modulegraph and macholib.
+
+CI status
+---------
+
+.. image:: https://github.com/ronaldoussoren/altgraph/workflows/Lint/badge.svg
+.. image:: https://github.com/ronaldoussoren/altgraph/workflows/Test/badge.svg
+
+Project links
+-------------
+
+* `Documentation `_
+
+* `Issue Tracker `_
+
+* `Repository `_
+
+
+Release history
+===============
+
+0.17.1
+------
+
+* Explicitly mark Python 3.10 as supported in wheel metadata.
+
+0.17
+----
+
+* Explicitly mark Python 3.8 as supported in wheel metadata.
+
+* Migrate from Bitbucket to GitHub
+
+* Run black on the entire repository
+
+0.16.1
+------
+
+* Explicitly mark Python 3.7 as supported in wheel metadata.
+
+0.16
+----
+
+* Add LICENSE file
+
+0.15
+----
+
+* ``ObjectGraph.get_edges``, ``ObjectGraph.getEdgeData`` and ``ObjectGraph.updateEdgeData``
+ accept *None* as the node to get and treat this as an alias for *self* (as other
+ methods already did).
+
+0.14
+----
+
+- Issue #7: Remove use of ``iteritems`` in altgraph.GraphAlgo code
+
+0.13
+----
+
+- Issue #4: Graph._bfs_subgraph and back_bfs_subgraph return subgraphs with reversed edges
+
+ Fix by "pombredanne" on bitbucket.
+
+
+0.12
+----
+
+- Added ``ObjectGraph.edgeData`` to retrieve the edge data
+ from a specific edge.
+
+- Added ``AltGraph.update_edge_data`` and ``ObjectGraph.updateEdgeData``
+ to update the data associated with a graph edge.
+
+0.11
+----
+
+- Stabilize the order of elements in dot file exports,
+ patch from bitbucket user 'pombredanne'.
+
+- Tweak setup.py file to remove dependency on distribute (but
+ keep the dependency on setuptools)
+
+
+0.10.2
+------
+
+- There where no classifiers in the package metadata due to a bug
+ in setup.py
+
+0.10.1
+------
+
+This is a bugfix release
+
+Bug fixes:
+
+- Issue #3: The source archive contains a README.txt
+ while the setup file refers to ReadMe.txt.
+
+ This is caused by a misfeature in distutils, as a
+ workaround I've renamed ReadMe.txt to README.txt
+ in the source tree and setup file.
+
+
+0.10
+-----
+
+This is a minor feature release
+
+Features:
+
+- Do not use "2to3" to support Python 3.
+
+ As a side effect of this altgraph now supports
+ Python 2.6 and later, and no longer supports
+ earlier releases of Python.
+
+- The order of attributes in the Dot output
+ is now always alphabetical.
+
+ With this change the output will be consistent
+ between runs and Python versions.
+
+0.9
+---
+
+This is a minor bugfix release
+
+Features:
+
+- Added ``altgraph.ObjectGraph.ObjectGraph.nodes``, a method
+ yielding all nodes in an object graph.
+
+Bugfixes:
+
+- The 0.8 release didn't work with py2app when using
+ python 3.x.
+
+
+0.8
+-----
+
+This is a minor feature release. The major new feature
+is a extensive set of unittests, which explains almost
+all other changes in this release.
+
+Bugfixes:
+
+- Installing failed with Python 2.5 due to using a distutils
+ class that isn't available in that version of Python
+ (issue #1 on the issue tracker)
+
+- ``altgraph.GraphStat.degree_dist`` now actually works
+
+- ``altgraph.Graph.add_edge(a, b, create_nodes=False)`` will
+ no longer create the edge when one of the nodes doesn't
+ exist.
+
+- ``altgraph.Graph.forw_topo_sort`` failed for some sparse graphs.
+
+- ``altgraph.Graph.back_topo_sort`` was completely broken in
+ previous releases.
+
+- ``altgraph.Graph.forw_bfs_subgraph`` now actually works.
+
+- ``altgraph.Graph.back_bfs_subgraph`` now actually works.
+
+- ``altgraph.Graph.iterdfs`` now returns the correct result
+ when the ``forward`` argument is ``False``.
+
+- ``altgraph.Graph.iterdata`` now returns the correct result
+ when the ``forward`` argument is ``False``.
+
+
+Features:
+
+- The ``altgraph.Graph`` constructor now accepts an argument
+ that contains 2- and 3-tuples instead of requireing that
+ all items have the same size. The (optional) argument can now
+ also be any iterator.
+
+- ``altgraph.Graph.Graph.add_node`` has no effect when you
+ add a hidden node.
+
+- The private method ``altgraph.Graph._bfs`` is no longer
+ present.
+
+- The private method ``altgraph.Graph._dfs`` is no longer
+ present.
+
+- ``altgraph.ObjectGraph`` now has a ``__contains__`` methods,
+ which means you can use the ``in`` operator to check if a
+ node is part of a graph.
+
+- ``altgraph.GraphUtil.generate_random_graph`` will raise
+ ``GraphError`` instead of looping forever when it is
+ impossible to create the requested graph.
+
+- ``altgraph.Dot.edge_style`` raises ``GraphError`` when
+ one of the nodes is not present in the graph. The method
+ silently added the tail in the past, but without ensuring
+ a consistent graph state.
+
+- ``altgraph.Dot.save_img`` now works when the mode is
+ ``"neato"``.
+
+0.7.2
+-----
+
+This is a minor bugfix release
+
+Bugfixes:
+
+- distutils didn't include the documentation subtree
+
+0.7.1
+-----
+
+This is a minor feature release
+
+Features:
+
+- Documentation is now generated using `sphinx `_
+ and can be viewed at .
+
+- The repository has moved to bitbucket
+
+- ``altgraph.GraphStat.avg_hops`` is no longer present, the function had no
+ implementation and no specified behaviour.
+
+- the module ``altgraph.compat`` is gone, which means altgraph will no
+ longer work with Python 2.3.
+
+
+0.7.0
+-----
+
+This is a minor feature release.
+
+Features:
+
+- Support for Python 3
+
+- It is now possible to run tests using 'python setup.py test'
+
+ (The actual testsuite is still very minimal though)
+
+
diff --git a/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/RECORD b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/RECORD
new file mode 100644
index 0000000..b0a131b
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/RECORD
@@ -0,0 +1,21 @@
+altgraph-0.17.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+altgraph-0.17.2.dist-info/LICENSE,sha256=bBlNbbDGTUVTXRDJUUK5sM2nt9zH8d3uMCs9U289vkY,1002
+altgraph-0.17.2.dist-info/METADATA,sha256=F3Nk9zBKSMii3kNr_Ju4si34--Zoud_UMHFHsZT6yt8,7221
+altgraph-0.17.2.dist-info/RECORD,,
+altgraph-0.17.2.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
+altgraph-0.17.2.dist-info/top_level.txt,sha256=HEBeRWf5ItVPc7Y9hW7hGlrLXZjPoL4by6CAhBV_BwA,9
+altgraph-0.17.2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
+altgraph/Dot.py,sha256=fHS-GozpcEKyWxW2v110JaFMS68iIc0oYFlFDuNQgOQ,9901
+altgraph/Graph.py,sha256=6b6fSHLA5QSqMDnSHIO7_WJnBYIdq3K5Bt8VipRODwg,20788
+altgraph/GraphAlgo.py,sha256=Uu9aTjSKWi38iQ_e9ZrwCnzQaI1WWFDhJ6kfmu0jxAA,5645
+altgraph/GraphStat.py,sha256=vj3VqCOkzpAKggxVFLE_AlMIfPm1WN17DX4rbZjXAx4,1890
+altgraph/GraphUtil.py,sha256=1T4DJc2bJn6EIU_Ct4m0oiKlXWkXvqcXE8CGL2K9en8,3990
+altgraph/ObjectGraph.py,sha256=o7fPJtyBEgJSXAkUjzvj35B-FOY4uKzfLGqSvTitx8c,6490
+altgraph/__init__.py,sha256=YtY-rHf6X_lYk8820da2uVZT-C-B9KGpGXvBg1oZ0Fc,5015
+altgraph/__pycache__/Dot.cpython-38.pyc,,
+altgraph/__pycache__/Graph.cpython-38.pyc,,
+altgraph/__pycache__/GraphAlgo.cpython-38.pyc,,
+altgraph/__pycache__/GraphStat.cpython-38.pyc,,
+altgraph/__pycache__/GraphUtil.cpython-38.pyc,,
+altgraph/__pycache__/ObjectGraph.cpython-38.pyc,,
+altgraph/__pycache__/__init__.cpython-38.pyc,,
diff --git a/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/WHEEL b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/WHEEL
new file mode 100644
index 0000000..01b8fc7
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/WHEEL
@@ -0,0 +1,6 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.36.2)
+Root-Is-Purelib: true
+Tag: py2-none-any
+Tag: py3-none-any
+
diff --git a/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/top_level.txt b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/top_level.txt
new file mode 100644
index 0000000..5ad6b8a
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/top_level.txt
@@ -0,0 +1 @@
+altgraph
diff --git a/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/zip-safe b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/altgraph-0.17.2.dist-info/zip-safe
@@ -0,0 +1 @@
+
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-console-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-console-l1-1-0.dll
new file mode 100644
index 0000000..726b975
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-console-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-datetime-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-datetime-l1-1-0.dll
new file mode 100644
index 0000000..f2ecfa7
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-datetime-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-debug-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-debug-l1-1-0.dll
new file mode 100644
index 0000000..7bd075b
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-debug-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-errorhandling-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-errorhandling-l1-1-0.dll
new file mode 100644
index 0000000..3bafba9
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-errorhandling-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-fibers-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-fibers-l1-1-0.dll
new file mode 100644
index 0000000..651ffe1
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-fibers-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l1-1-0.dll
new file mode 100644
index 0000000..12bf0b6
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l1-2-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l1-2-0.dll
new file mode 100644
index 0000000..da64db3
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l1-2-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l2-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l2-1-0.dll
new file mode 100644
index 0000000..9246b98
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-file-l2-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-handle-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-handle-l1-1-0.dll
new file mode 100644
index 0000000..c96e31d
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-handle-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-heap-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-heap-l1-1-0.dll
new file mode 100644
index 0000000..baa932f
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-heap-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-interlocked-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-interlocked-l1-1-0.dll
new file mode 100644
index 0000000..7aa0639
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-interlocked-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-libraryloader-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-libraryloader-l1-1-0.dll
new file mode 100644
index 0000000..ddd5e27
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-libraryloader-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-localization-l1-2-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-localization-l1-2-0.dll
new file mode 100644
index 0000000..7b90b7c
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-localization-l1-2-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-memory-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-memory-l1-1-0.dll
new file mode 100644
index 0000000..63e54f3
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-memory-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-namedpipe-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-namedpipe-l1-1-0.dll
new file mode 100644
index 0000000..37e956e
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-namedpipe-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-processenvironment-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-processenvironment-l1-1-0.dll
new file mode 100644
index 0000000..a2f3605
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-processenvironment-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-processthreads-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-processthreads-l1-1-0.dll
new file mode 100644
index 0000000..f4d3a03
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-processthreads-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-processthreads-l1-1-1.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-processthreads-l1-1-1.dll
new file mode 100644
index 0000000..7bc40e0
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-processthreads-l1-1-1.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-profile-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-profile-l1-1-0.dll
new file mode 100644
index 0000000..da2b687
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-profile-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-rtlsupport-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-rtlsupport-l1-1-0.dll
new file mode 100644
index 0000000..ae6dce5
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-rtlsupport-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-string-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-string-l1-1-0.dll
new file mode 100644
index 0000000..32b52be
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-string-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-synch-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-synch-l1-1-0.dll
new file mode 100644
index 0000000..b88f76a
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-synch-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-synch-l1-2-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-synch-l1-2-0.dll
new file mode 100644
index 0000000..a17135a
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-synch-l1-2-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-sysinfo-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-sysinfo-l1-1-0.dll
new file mode 100644
index 0000000..527d1a1
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-sysinfo-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-timezone-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-timezone-l1-1-0.dll
new file mode 100644
index 0000000..bab2d02
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-timezone-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-core-util-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-core-util-l1-1-0.dll
new file mode 100644
index 0000000..080a9c9
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-core-util-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-conio-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-conio-l1-1-0.dll
new file mode 100644
index 0000000..2355a62
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-conio-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-convert-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-convert-l1-1-0.dll
new file mode 100644
index 0000000..ddd2b4c
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-convert-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-environment-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-environment-l1-1-0.dll
new file mode 100644
index 0000000..e2fe9ef
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-environment-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-filesystem-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-filesystem-l1-1-0.dll
new file mode 100644
index 0000000..97ea465
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-filesystem-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-heap-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-heap-l1-1-0.dll
new file mode 100644
index 0000000..4e3af05
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-heap-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-locale-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-locale-l1-1-0.dll
new file mode 100644
index 0000000..5fcd98b
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-locale-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-math-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-math-l1-1-0.dll
new file mode 100644
index 0000000..c3f2800
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-math-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-multibyte-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-multibyte-l1-1-0.dll
new file mode 100644
index 0000000..e86ce81
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-multibyte-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-process-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-process-l1-1-0.dll
new file mode 100644
index 0000000..bc346dc
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-process-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-runtime-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-runtime-l1-1-0.dll
new file mode 100644
index 0000000..d0a43f8
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-runtime-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-stdio-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-stdio-l1-1-0.dll
new file mode 100644
index 0000000..59e68c0
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-stdio-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-string-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-string-l1-1-0.dll
new file mode 100644
index 0000000..08015e2
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-string-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-time-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-time-l1-1-0.dll
new file mode 100644
index 0000000..6e3ba53
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-time-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/api-ms-win-crt-utility-l1-1-0.dll b/dist/wxPython_WallPaperEngine/api-ms-win-crt-utility-l1-1-0.dll
new file mode 100644
index 0000000..eaa7204
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/api-ms-win-crt-utility-l1-1-0.dll differ
diff --git a/dist/wxPython_WallPaperEngine/base_library.zip b/dist/wxPython_WallPaperEngine/base_library.zip
new file mode 100644
index 0000000..5db30d9
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/base_library.zip differ
diff --git a/dist/wxPython_WallPaperEngine/cv2/__init__.py b/dist/wxPython_WallPaperEngine/cv2/__init__.py
new file mode 100644
index 0000000..6583e96
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/__init__.py
@@ -0,0 +1,190 @@
+'''
+OpenCV Python binary extension loader
+'''
+import os
+import importlib
+import sys
+
+from .cv2 import *
+from .cv2 import _registerMatType
+from . import mat_wrapper
+from . import gapi
+from . import misc
+from . import utils
+from . import data
+from . import version
+
+__all__ = []
+
+try:
+ import numpy
+ import numpy.core.multiarray
+except ImportError:
+ print('OpenCV bindings requires "numpy" package.')
+ print('Install it via command:')
+ print(' pip install numpy')
+ raise
+
+# TODO
+# is_x64 = sys.maxsize > 2**32
+
+
+def __load_extra_py_code_for_module(base, name, enable_debug_print=False):
+ module_name = "{}.{}".format(__name__, name)
+ export_module_name = "{}.{}".format(base, name)
+ native_module = sys.modules.pop(module_name, None)
+ try:
+ py_module = importlib.import_module(module_name)
+ except ImportError as err:
+ if enable_debug_print:
+ print("Can't load Python code for module:", module_name,
+ ". Reason:", err)
+ # Extension doesn't contain extra py code
+ return False
+
+ if not hasattr(base, name):
+ setattr(sys.modules[base], name, py_module)
+ sys.modules[export_module_name] = py_module
+ # If it is C extension module it is already loaded by cv2 package
+ if native_module:
+ setattr(py_module, "_native", native_module)
+ for k, v in filter(lambda kv: not hasattr(py_module, kv[0]),
+ native_module.__dict__.items()):
+ if enable_debug_print: print(' symbol({}): {} = {}'.format(name, k, v))
+ setattr(py_module, k, v)
+ return True
+
+
+def __collect_extra_submodules(enable_debug_print=False):
+ def modules_filter(module):
+ return all((
+ # module is not internal
+ not module.startswith("_"),
+ not module.startswith("python-"),
+ # it is not a file
+ os.path.isdir(os.path.join(_extra_submodules_init_path, module))
+ ))
+ if sys.version_info[0] < 3:
+ if enable_debug_print:
+ print("Extra submodules is loaded only for Python 3")
+ return []
+
+ __INIT_FILE_PATH = os.path.abspath(__file__)
+ _extra_submodules_init_path = os.path.dirname(__INIT_FILE_PATH)
+ return filter(modules_filter, os.listdir(_extra_submodules_init_path))
+
+
+def bootstrap():
+ import sys
+
+ import copy
+ save_sys_path = copy.copy(sys.path)
+
+ if hasattr(sys, 'OpenCV_LOADER'):
+ print(sys.path)
+ raise ImportError('ERROR: recursion is detected during loading of "cv2" binary extensions. Check OpenCV installation.')
+ sys.OpenCV_LOADER = True
+
+ DEBUG = False
+ if hasattr(sys, 'OpenCV_LOADER_DEBUG'):
+ DEBUG = True
+
+ import platform
+ if DEBUG: print('OpenCV loader: os.name="{}" platform.system()="{}"'.format(os.name, str(platform.system())))
+
+ LOADER_DIR = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
+
+ PYTHON_EXTENSIONS_PATHS = []
+ BINARIES_PATHS = []
+
+ g_vars = globals()
+ l_vars = locals()
+
+ if sys.version_info[:2] < (3, 0):
+ from . load_config_py2 import exec_file_wrapper
+ else:
+ from . load_config_py3 import exec_file_wrapper
+
+ def load_first_config(fnames, required=True):
+ for fname in fnames:
+ fpath = os.path.join(LOADER_DIR, fname)
+ if not os.path.exists(fpath):
+ if DEBUG: print('OpenCV loader: config not found, skip: {}'.format(fpath))
+ continue
+ if DEBUG: print('OpenCV loader: loading config: {}'.format(fpath))
+ exec_file_wrapper(fpath, g_vars, l_vars)
+ return True
+ if required:
+ raise ImportError('OpenCV loader: missing configuration file: {}. Check OpenCV installation.'.format(fnames))
+
+ load_first_config(['config.py'], True)
+ load_first_config([
+ 'config-{}.{}.py'.format(sys.version_info[0], sys.version_info[1]),
+ 'config-{}.py'.format(sys.version_info[0])
+ ], True)
+
+ if DEBUG: print('OpenCV loader: PYTHON_EXTENSIONS_PATHS={}'.format(str(l_vars['PYTHON_EXTENSIONS_PATHS'])))
+ if DEBUG: print('OpenCV loader: BINARIES_PATHS={}'.format(str(l_vars['BINARIES_PATHS'])))
+
+ applySysPathWorkaround = False
+ if hasattr(sys, 'OpenCV_REPLACE_SYS_PATH_0'):
+ applySysPathWorkaround = True
+ else:
+ try:
+ BASE_DIR = os.path.dirname(LOADER_DIR)
+ if sys.path[0] == BASE_DIR or os.path.realpath(sys.path[0]) == BASE_DIR:
+ applySysPathWorkaround = True
+ except:
+ if DEBUG: print('OpenCV loader: exception during checking workaround for sys.path[0]')
+ pass # applySysPathWorkaround is False
+
+ for p in reversed(l_vars['PYTHON_EXTENSIONS_PATHS']):
+ sys.path.insert(1 if not applySysPathWorkaround else 0, p)
+
+ if os.name == 'nt':
+ if sys.version_info[:2] >= (3, 8): # https://github.com/python/cpython/pull/12302
+ for p in l_vars['BINARIES_PATHS']:
+ try:
+ os.add_dll_directory(p)
+ except Exception as e:
+ if DEBUG: print('Failed os.add_dll_directory(): '+ str(e))
+ pass
+ os.environ['PATH'] = ';'.join(l_vars['BINARIES_PATHS']) + ';' + os.environ.get('PATH', '')
+ if DEBUG: print('OpenCV loader: PATH={}'.format(str(os.environ['PATH'])))
+ else:
+ # amending of LD_LIBRARY_PATH works for sub-processes only
+ os.environ['LD_LIBRARY_PATH'] = ':'.join(l_vars['BINARIES_PATHS']) + ':' + os.environ.get('LD_LIBRARY_PATH', '')
+
+ if DEBUG: print("Relink everything from native cv2 module to cv2 package")
+
+ py_module = sys.modules.pop("cv2")
+
+ native_module = importlib.import_module("cv2.cv2")
+
+ sys.modules["cv2"] = py_module
+ setattr(py_module, "_native", native_module)
+
+ for item_name, item in filter(lambda kv: kv[0] not in ("__file__", "__loader__", "__spec__",
+ "__name__", "__package__"),
+ native_module.__dict__.items()):
+ if item_name not in g_vars:
+ g_vars[item_name] = item
+
+ sys.path = save_sys_path # multiprocessing should start from bootstrap code (https://github.com/opencv/opencv/issues/18502)
+
+ try:
+ del sys.OpenCV_LOADER
+ except Exception as e:
+ if DEBUG:
+ print("Exception during delete OpenCV_LOADER:", e)
+
+ if DEBUG: print('OpenCV loader: binary extension... OK')
+
+ for submodule in __collect_extra_submodules(DEBUG):
+ if __load_extra_py_code_for_module("cv2", submodule, DEBUG):
+ if DEBUG: print("Extra Python code for", submodule, "is loaded")
+
+ if DEBUG: print('OpenCV loader: DONE')
+
+
+bootstrap()
diff --git a/dist/wxPython_WallPaperEngine/cv2/config-3.py b/dist/wxPython_WallPaperEngine/cv2/config-3.py
new file mode 100644
index 0000000..587a42b
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/config-3.py
@@ -0,0 +1,24 @@
+PYTHON_EXTENSIONS_PATHS = [
+ LOADER_DIR
+] + PYTHON_EXTENSIONS_PATHS
+
+ci_and_not_headless = False
+
+try:
+ from .version import ci_build, headless
+
+ ci_and_not_headless = ci_build and not headless
+except:
+ pass
+
+# the Qt plugin is included currently only in the pre-built wheels
+if sys.platform.startswith("linux") and ci_and_not_headless:
+ os.environ["QT_QPA_PLATFORM_PLUGIN_PATH"] = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)), "qt", "plugins"
+ )
+
+# Qt will throw warning on Linux if fonts are not found
+if sys.platform.startswith("linux") and ci_and_not_headless:
+ os.environ["QT_QPA_FONTDIR"] = os.path.join(
+ os.path.dirname(os.path.abspath(__file__)), "qt", "fonts"
+ )
diff --git a/dist/wxPython_WallPaperEngine/cv2/config.py b/dist/wxPython_WallPaperEngine/cv2/config.py
new file mode 100644
index 0000000..a1346b3
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/config.py
@@ -0,0 +1,5 @@
+import os
+
+BINARIES_PATHS = [
+ os.path.join(os.path.join(LOADER_DIR, '../../'), 'x64/vc14/bin')
+] + BINARIES_PATHS
diff --git a/dist/wxPython_WallPaperEngine/cv2/cv2.pyd b/dist/wxPython_WallPaperEngine/cv2/cv2.pyd
new file mode 100644
index 0000000..280bfe1
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/cv2/cv2.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/cv2/data/__init__.py b/dist/wxPython_WallPaperEngine/cv2/data/__init__.py
new file mode 100644
index 0000000..1cad275
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/data/__init__.py
@@ -0,0 +1,3 @@
+import os
+
+haarcascades = os.path.join(os.path.dirname(__file__), "")
diff --git a/dist/wxPython_WallPaperEngine/cv2/gapi/__init__.py b/dist/wxPython_WallPaperEngine/cv2/gapi/__init__.py
new file mode 100644
index 0000000..b132671
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/gapi/__init__.py
@@ -0,0 +1,299 @@
+__all__ = ['op', 'kernel']
+
+import sys
+import cv2 as cv
+
+# NB: Register function in specific module
+def register(mname):
+ def parameterized(func):
+ sys.modules[mname].__dict__[func.__name__] = func
+ return func
+ return parameterized
+
+
+@register('cv2.gapi')
+def networks(*args):
+ return cv.gapi_GNetPackage(list(map(cv.detail.strip, args)))
+
+
+@register('cv2.gapi')
+def compile_args(*args):
+ return list(map(cv.GCompileArg, args))
+
+
+@register('cv2')
+def GIn(*args):
+ return [*args]
+
+
+@register('cv2')
+def GOut(*args):
+ return [*args]
+
+
+@register('cv2')
+def gin(*args):
+ return [*args]
+
+
+@register('cv2.gapi')
+def descr_of(*args):
+ return [*args]
+
+
+@register('cv2')
+class GOpaque():
+ # NB: Inheritance from c++ class cause segfault.
+ # So just aggregate cv.GOpaqueT instead of inheritance
+ def __new__(cls, argtype):
+ return cv.GOpaqueT(argtype)
+
+ class Bool():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_BOOL)
+
+ class Int():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_INT)
+
+ class Double():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_DOUBLE)
+
+ class Float():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_FLOAT)
+
+ class String():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_STRING)
+
+ class Point():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_POINT)
+
+ class Point2f():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_POINT2F)
+
+ class Size():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_SIZE)
+
+ class Rect():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_RECT)
+
+ class Prim():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_DRAW_PRIM)
+
+ class Any():
+ def __new__(self):
+ return cv.GOpaqueT(cv.gapi.CV_ANY)
+
+@register('cv2')
+class GArray():
+ # NB: Inheritance from c++ class cause segfault.
+ # So just aggregate cv.GArrayT instead of inheritance
+ def __new__(cls, argtype):
+ return cv.GArrayT(argtype)
+
+ class Bool():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_BOOL)
+
+ class Int():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_INT)
+
+ class Double():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_DOUBLE)
+
+ class Float():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_FLOAT)
+
+ class String():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_STRING)
+
+ class Point():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_POINT)
+
+ class Point2f():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_POINT2F)
+
+ class Size():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_SIZE)
+
+ class Rect():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_RECT)
+
+ class Scalar():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_SCALAR)
+
+ class Mat():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_MAT)
+
+ class GMat():
+ def __new__(self):
+ return cv.GArrayT(cv.gapi.CV_GMAT)
+
+ class Prim():
+ def __new__(self):
+ return cv.GArray(cv.gapi.CV_DRAW_PRIM)
+
+ class Any():
+ def __new__(self):
+ return cv.GArray(cv.gapi.CV_ANY)
+
+
+# NB: Top lvl decorator takes arguments
+def op(op_id, in_types, out_types):
+
+ garray_types= {
+ cv.GArray.Bool: cv.gapi.CV_BOOL,
+ cv.GArray.Int: cv.gapi.CV_INT,
+ cv.GArray.Double: cv.gapi.CV_DOUBLE,
+ cv.GArray.Float: cv.gapi.CV_FLOAT,
+ cv.GArray.String: cv.gapi.CV_STRING,
+ cv.GArray.Point: cv.gapi.CV_POINT,
+ cv.GArray.Point2f: cv.gapi.CV_POINT2F,
+ cv.GArray.Size: cv.gapi.CV_SIZE,
+ cv.GArray.Rect: cv.gapi.CV_RECT,
+ cv.GArray.Scalar: cv.gapi.CV_SCALAR,
+ cv.GArray.Mat: cv.gapi.CV_MAT,
+ cv.GArray.GMat: cv.gapi.CV_GMAT,
+ cv.GArray.Prim: cv.gapi.CV_DRAW_PRIM,
+ cv.GArray.Any: cv.gapi.CV_ANY
+ }
+
+ gopaque_types= {
+ cv.GOpaque.Size: cv.gapi.CV_SIZE,
+ cv.GOpaque.Rect: cv.gapi.CV_RECT,
+ cv.GOpaque.Bool: cv.gapi.CV_BOOL,
+ cv.GOpaque.Int: cv.gapi.CV_INT,
+ cv.GOpaque.Double: cv.gapi.CV_DOUBLE,
+ cv.GOpaque.Float: cv.gapi.CV_FLOAT,
+ cv.GOpaque.String: cv.gapi.CV_STRING,
+ cv.GOpaque.Point: cv.gapi.CV_POINT,
+ cv.GOpaque.Point2f: cv.gapi.CV_POINT2F,
+ cv.GOpaque.Size: cv.gapi.CV_SIZE,
+ cv.GOpaque.Rect: cv.gapi.CV_RECT,
+ cv.GOpaque.Prim: cv.gapi.CV_DRAW_PRIM,
+ cv.GOpaque.Any: cv.gapi.CV_ANY
+ }
+
+ type2str = {
+ cv.gapi.CV_BOOL: 'cv.gapi.CV_BOOL' ,
+ cv.gapi.CV_INT: 'cv.gapi.CV_INT' ,
+ cv.gapi.CV_DOUBLE: 'cv.gapi.CV_DOUBLE' ,
+ cv.gapi.CV_FLOAT: 'cv.gapi.CV_FLOAT' ,
+ cv.gapi.CV_STRING: 'cv.gapi.CV_STRING' ,
+ cv.gapi.CV_POINT: 'cv.gapi.CV_POINT' ,
+ cv.gapi.CV_POINT2F: 'cv.gapi.CV_POINT2F' ,
+ cv.gapi.CV_SIZE: 'cv.gapi.CV_SIZE',
+ cv.gapi.CV_RECT: 'cv.gapi.CV_RECT',
+ cv.gapi.CV_SCALAR: 'cv.gapi.CV_SCALAR',
+ cv.gapi.CV_MAT: 'cv.gapi.CV_MAT',
+ cv.gapi.CV_GMAT: 'cv.gapi.CV_GMAT',
+ cv.gapi.CV_DRAW_PRIM: 'cv.gapi.CV_DRAW_PRIM'
+ }
+
+ # NB: Second lvl decorator takes class to decorate
+ def op_with_params(cls):
+ if not in_types:
+ raise Exception('{} operation should have at least one input!'.format(cls.__name__))
+
+ if not out_types:
+ raise Exception('{} operation should have at least one output!'.format(cls.__name__))
+
+ for i, t in enumerate(out_types):
+ if t not in [cv.GMat, cv.GScalar, *garray_types, *gopaque_types]:
+ raise Exception('{} unsupported output type: {} in possition: {}'
+ .format(cls.__name__, t.__name__, i))
+
+ def on(*args):
+ if len(in_types) != len(args):
+ raise Exception('Invalid number of input elements!\nExpected: {}, Actual: {}'
+ .format(len(in_types), len(args)))
+
+ for i, (t, a) in enumerate(zip(in_types, args)):
+ if t in garray_types:
+ if not isinstance(a, cv.GArrayT):
+ raise Exception("{} invalid type for argument {}.\nExpected: {}, Actual: {}"
+ .format(cls.__name__, i, cv.GArrayT.__name__, type(a).__name__))
+
+ elif a.type() != garray_types[t]:
+ raise Exception("{} invalid GArrayT type for argument {}.\nExpected: {}, Actual: {}"
+ .format(cls.__name__, i, type2str[garray_types[t]], type2str[a.type()]))
+
+ elif t in gopaque_types:
+ if not isinstance(a, cv.GOpaqueT):
+ raise Exception("{} invalid type for argument {}.\nExpected: {}, Actual: {}"
+ .format(cls.__name__, i, cv.GOpaqueT.__name__, type(a).__name__))
+
+ elif a.type() != gopaque_types[t]:
+ raise Exception("{} invalid GOpaque type for argument {}.\nExpected: {}, Actual: {}"
+ .format(cls.__name__, i, type2str[gopaque_types[t]], type2str[a.type()]))
+
+ else:
+ if t != type(a):
+ raise Exception('{} invalid input type for argument {}.\nExpected: {}, Actual: {}'
+ .format(cls.__name__, i, t.__name__, type(a).__name__))
+
+ op = cv.gapi.__op(op_id, cls.outMeta, *args)
+
+ out_protos = []
+ for i, out_type in enumerate(out_types):
+ if out_type == cv.GMat:
+ out_protos.append(op.getGMat())
+ elif out_type == cv.GScalar:
+ out_protos.append(op.getGScalar())
+ elif out_type in gopaque_types:
+ out_protos.append(op.getGOpaque(gopaque_types[out_type]))
+ elif out_type in garray_types:
+ out_protos.append(op.getGArray(garray_types[out_type]))
+ else:
+ raise Exception("""In {}: G-API operation can't produce the output with type: {} in position: {}"""
+ .format(cls.__name__, out_type.__name__, i))
+
+ return tuple(out_protos) if len(out_protos) != 1 else out_protos[0]
+
+ # NB: Extend operation class
+ cls.id = op_id
+ cls.on = staticmethod(on)
+ return cls
+
+ return op_with_params
+
+
+def kernel(op_cls):
+ # NB: Second lvl decorator takes class to decorate
+ def kernel_with_params(cls):
+ # NB: Add new members to kernel class
+ cls.id = op_cls.id
+ cls.outMeta = op_cls.outMeta
+ return cls
+
+ return kernel_with_params
+
+
+# FIXME: On the c++ side every class is placed in cv2 module.
+cv.gapi.wip.draw.Rect = cv.gapi_wip_draw_Rect
+cv.gapi.wip.draw.Text = cv.gapi_wip_draw_Text
+cv.gapi.wip.draw.Circle = cv.gapi_wip_draw_Circle
+cv.gapi.wip.draw.Line = cv.gapi_wip_draw_Line
+cv.gapi.wip.draw.Mosaic = cv.gapi_wip_draw_Mosaic
+cv.gapi.wip.draw.Image = cv.gapi_wip_draw_Image
+cv.gapi.wip.draw.Poly = cv.gapi_wip_draw_Poly
+
+cv.gapi.streaming.queue_capacity = cv.gapi_streaming_queue_capacity
diff --git a/dist/wxPython_WallPaperEngine/cv2/load_config_py2.py b/dist/wxPython_WallPaperEngine/cv2/load_config_py2.py
new file mode 100644
index 0000000..07fbae9
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/load_config_py2.py
@@ -0,0 +1,6 @@
+# flake8: noqa
+import sys
+
+if sys.version_info[:2] < (3, 0):
+ def exec_file_wrapper(fpath, g_vars, l_vars):
+ execfile(fpath, g_vars, l_vars)
diff --git a/dist/wxPython_WallPaperEngine/cv2/load_config_py3.py b/dist/wxPython_WallPaperEngine/cv2/load_config_py3.py
new file mode 100644
index 0000000..6f3b21a
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/load_config_py3.py
@@ -0,0 +1,9 @@
+# flake8: noqa
+import os
+import sys
+
+if sys.version_info[:2] >= (3, 0):
+ def exec_file_wrapper(fpath, g_vars, l_vars):
+ with open(fpath) as f:
+ code = compile(f.read(), os.path.basename(fpath), 'exec')
+ exec(code, g_vars, l_vars)
diff --git a/dist/wxPython_WallPaperEngine/cv2/mat_wrapper/__init__.py b/dist/wxPython_WallPaperEngine/cv2/mat_wrapper/__init__.py
new file mode 100644
index 0000000..7309c32
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/mat_wrapper/__init__.py
@@ -0,0 +1,33 @@
+__all__ = []
+
+import sys
+import numpy as np
+import cv2 as cv
+
+# NumPy documentation: https://numpy.org/doc/stable/user/basics.subclassing.html
+
+class Mat(np.ndarray):
+ '''
+ cv.Mat wrapper for numpy array.
+
+ Stores extra metadata information how to interpret and process of numpy array for underlying C++ code.
+ '''
+
+ def __new__(cls, arr, **kwargs):
+ obj = arr.view(Mat)
+ return obj
+
+ def __init__(self, arr, **kwargs):
+ self.wrap_channels = kwargs.pop('wrap_channels', getattr(arr, 'wrap_channels', False))
+ if len(kwargs) > 0:
+ raise TypeError('Unknown parameters: {}'.format(repr(kwargs)))
+
+ def __array_finalize__(self, obj):
+ if obj is None:
+ return
+ self.wrap_channels = getattr(obj, 'wrap_channels', None)
+
+
+Mat.__module__ = cv.__name__
+cv.Mat = Mat
+cv._registerMatType(Mat)
diff --git a/dist/wxPython_WallPaperEngine/cv2/misc/__init__.py b/dist/wxPython_WallPaperEngine/cv2/misc/__init__.py
new file mode 100644
index 0000000..3e0559d
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/misc/__init__.py
@@ -0,0 +1 @@
+from .version import get_ocv_version
diff --git a/dist/wxPython_WallPaperEngine/cv2/misc/version.py b/dist/wxPython_WallPaperEngine/cv2/misc/version.py
new file mode 100644
index 0000000..d347058
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/misc/version.py
@@ -0,0 +1,5 @@
+import cv2
+
+
+def get_ocv_version():
+ return getattr(cv2, "__version__", "unavailable")
diff --git a/dist/wxPython_WallPaperEngine/cv2/opencv_videoio_ffmpeg455_64.dll b/dist/wxPython_WallPaperEngine/cv2/opencv_videoio_ffmpeg455_64.dll
new file mode 100644
index 0000000..54a6a13
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/cv2/opencv_videoio_ffmpeg455_64.dll differ
diff --git a/dist/wxPython_WallPaperEngine/cv2/utils/__init__.py b/dist/wxPython_WallPaperEngine/cv2/utils/__init__.py
new file mode 100644
index 0000000..49cd40b
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/utils/__init__.py
@@ -0,0 +1,14 @@
+from collections import namedtuple
+
+import cv2
+
+
+NativeMethodPatchedResult = namedtuple("NativeMethodPatchedResult",
+ ("py", "native"))
+
+
+def testOverwriteNativeMethod(arg):
+ return NativeMethodPatchedResult(
+ arg + 1,
+ cv2.utils._native.testOverwriteNativeMethod(arg)
+ )
diff --git a/dist/wxPython_WallPaperEngine/cv2/version.py b/dist/wxPython_WallPaperEngine/cv2/version.py
new file mode 100644
index 0000000..06627e6
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/cv2/version.py
@@ -0,0 +1,4 @@
+opencv_version = "4.5.5.64"
+contrib = False
+headless = False
+ci_build = True
\ No newline at end of file
diff --git a/dist/wxPython_WallPaperEngine/libcrypto-1_1.dll b/dist/wxPython_WallPaperEngine/libcrypto-1_1.dll
new file mode 100644
index 0000000..0a1f769
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/libcrypto-1_1.dll differ
diff --git a/dist/wxPython_WallPaperEngine/libffi-7.dll b/dist/wxPython_WallPaperEngine/libffi-7.dll
new file mode 100644
index 0000000..d900b47
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/libffi-7.dll differ
diff --git a/dist/wxPython_WallPaperEngine/libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll b/dist/wxPython_WallPaperEngine/libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll
new file mode 100644
index 0000000..7176af9
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll differ
diff --git a/dist/wxPython_WallPaperEngine/libssl-1_1.dll b/dist/wxPython_WallPaperEngine/libssl-1_1.dll
new file mode 100644
index 0000000..767a6aa
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/libssl-1_1.dll differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/core/_multiarray_tests.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/core/_multiarray_tests.cp38-win_amd64.pyd
new file mode 100644
index 0000000..d98a0cd
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/core/_multiarray_tests.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/core/_multiarray_umath.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/core/_multiarray_umath.cp38-win_amd64.pyd
new file mode 100644
index 0000000..6b7718d
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/core/_multiarray_umath.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/fft/_pocketfft_internal.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/fft/_pocketfft_internal.cp38-win_amd64.pyd
new file mode 100644
index 0000000..d4dfc5f
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/fft/_pocketfft_internal.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/linalg/_umath_linalg.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/linalg/_umath_linalg.cp38-win_amd64.pyd
new file mode 100644
index 0000000..7347d3d
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/linalg/_umath_linalg.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/linalg/lapack_lite.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/linalg/lapack_lite.cp38-win_amd64.pyd
new file mode 100644
index 0000000..e464c33
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/linalg/lapack_lite.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/_bounded_integers.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/_bounded_integers.cp38-win_amd64.pyd
new file mode 100644
index 0000000..5bd59cb
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/_bounded_integers.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/_common.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/_common.cp38-win_amd64.pyd
new file mode 100644
index 0000000..f59f31c
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/_common.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/_generator.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/_generator.cp38-win_amd64.pyd
new file mode 100644
index 0000000..8f3502f
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/_generator.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/_mt19937.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/_mt19937.cp38-win_amd64.pyd
new file mode 100644
index 0000000..526567e
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/_mt19937.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/_pcg64.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/_pcg64.cp38-win_amd64.pyd
new file mode 100644
index 0000000..a1d8b6f
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/_pcg64.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/_philox.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/_philox.cp38-win_amd64.pyd
new file mode 100644
index 0000000..5579884
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/_philox.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/_sfc64.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/_sfc64.cp38-win_amd64.pyd
new file mode 100644
index 0000000..759032e
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/_sfc64.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/bit_generator.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/bit_generator.cp38-win_amd64.pyd
new file mode 100644
index 0000000..818978a
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/bit_generator.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/numpy/random/mtrand.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/numpy/random/mtrand.cp38-win_amd64.pyd
new file mode 100644
index 0000000..81ad4af
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/numpy/random/mtrand.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/psutil/_psutil_windows.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/psutil/_psutil_windows.cp38-win_amd64.pyd
new file mode 100644
index 0000000..49275e8
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/psutil/_psutil_windows.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/pyexpat.pyd b/dist/wxPython_WallPaperEngine/pyexpat.pyd
new file mode 100644
index 0000000..c4b49c5
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/pyexpat.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/COPYING.txt b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/COPYING.txt
new file mode 100644
index 0000000..ab2e20d
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/COPYING.txt
@@ -0,0 +1,602 @@
+================================
+ The PyInstaller licensing terms
+================================
+
+
+Copyright (c) 2010-2022, PyInstaller Development Team
+Copyright (c) 2005-2009, Giovanni Bajo
+Based on previous work under copyright (c) 2002 McMillan Enterprises, Inc.
+
+
+PyInstaller is licensed under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2 of the License,
+or (at your option) any later version.
+
+
+Bootloader Exception
+--------------------
+
+In addition to the permissions in the GNU General Public License, the
+authors give you unlimited permission to link or embed compiled bootloader
+and related files into combinations with other programs, and to distribute
+those combinations without any restriction coming from the use of those
+files. (The General Public License restrictions do apply in other respects;
+for example, they cover modification of the files, and distribution when
+not linked into a combined executable.)
+
+
+Bootloader and Related Files
+----------------------------
+
+Bootloader and related files are files which are embedded within the
+final executable. This includes files in directories:
+
+./bootloader/
+./PyInstaller/loader
+
+
+Run-time Hooks
+----------------------------
+
+Run-time Hooks are a different kind of files embedded within the final
+executable. To ease moving them into a separate repository, or into the
+respective project, these files are now licensed under the Apache License,
+Version 2.0.
+
+Run-time Hooks are in the directory
+./PyInstaller/hooks/rthooks
+
+
+About the PyInstaller Development Team
+--------------------------------------
+
+The PyInstaller Development Team is the set of contributors
+to the PyInstaller project. A full list with details is kept
+in the documentation directory, in the file
+``doc/CREDITS.rst``.
+
+The core team that coordinates development on GitHub can be found here:
+https://github.com/pyinstaller/pyinstaller. As of 2021, it consists of:
+
+* Hartmut Goebel
+* Jasper Harrison
+* Bryan Jones
+* Brenainn Woodsend
+* Rok Mandeljc
+
+Our Copyright Policy
+--------------------
+
+PyInstaller uses a shared copyright model. Each contributor maintains copyright
+over their contributions to PyInstaller. But, it is important to note that these
+contributions are typically only changes to the repositories. Thus,
+the PyInstaller source code, in its entirety is not the copyright of any single
+person or institution. Instead, it is the collective copyright of the entire
+PyInstaller Development Team. If individual contributors want to maintain
+a record of what changes/contributions they have specific copyright on, they
+should indicate their copyright in the commit message of the change, when they
+commit the change to the PyInstaller repository.
+
+With this in mind, the following banner should be used in any source code file
+to indicate the copyright and license terms:
+
+
+#-----------------------------------------------------------------------------
+# 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)
+#-----------------------------------------------------------------------------
+
+
+For run-time hooks, the following banner should be used:
+
+#-----------------------------------------------------------------------------
+# Copyright (c) 2005-2022, PyInstaller Development Team.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#
+# SPDX-License-Identifier: Apache-2.0
+#-----------------------------------------------------------------------------
+
+
+================================
+GNU General Public License
+================================
+
+https://gnu.org/licenses/gpl-2.0.html
+
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+================================
+Apache License 2.0
+================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/INSTALLER b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/INSTALLER
new file mode 100644
index 0000000..a1b589e
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/METADATA b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/METADATA
new file mode 100644
index 0000000..46069d1
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/METADATA
@@ -0,0 +1,208 @@
+Metadata-Version: 2.1
+Name: pyinstaller
+Version: 5.0.1
+Summary: PyInstaller bundles a Python application and all its dependencies into a single package.
+Home-page: https://www.pyinstaller.org/
+Author: Hartmut Goebel, Giovanni Bajo, David Vierra, David Cortesi, Martin Zibricky
+License: GPLv2-or-later with a special exception which allows to use PyInstaller to build and distribute non-free programs (including commercial ones)
+Project-URL: Source, https://github.com/pyinstaller/pyinstaller
+Keywords: packaging, app, apps, bundle, convert, standalone, executable,pyinstaller, cxfreeze, freeze, py2exe, py2app, bbfreeze
+Platform: UNKNOWN
+Classifier: Development Status :: 6 - Mature
+Classifier: Environment :: Console
+Classifier: Intended Audience :: Developers
+Classifier: Intended Audience :: Other Audience
+Classifier: Intended Audience :: System Administrators
+Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
+Classifier: Natural Language :: English
+Classifier: Operating System :: MacOS :: MacOS X
+Classifier: Operating System :: Microsoft :: Windows
+Classifier: Operating System :: POSIX
+Classifier: Operating System :: POSIX :: AIX
+Classifier: Operating System :: POSIX :: BSD
+Classifier: Operating System :: POSIX :: Linux
+Classifier: Operating System :: POSIX :: SunOS/Solaris
+Classifier: Programming Language :: C
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Topic :: Software Development
+Classifier: Topic :: Software Development :: Build Tools
+Classifier: Topic :: Software Development :: Interpreters
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: System :: Installation/Setup
+Classifier: Topic :: System :: Software Distribution
+Classifier: Topic :: Utilities
+Requires-Python: <3.11,>=3.7
+Description-Content-Type: text/x-rst
+License-File: COPYING.txt
+Requires-Dist: setuptools
+Requires-Dist: altgraph
+Requires-Dist: pyinstaller-hooks-contrib (>=2020.6)
+Requires-Dist: importlib-metadata ; python_version < "3.8"
+Requires-Dist: macholib (>=1.8) ; sys_platform == "darwin"
+Requires-Dist: pefile (>=2017.8.1) ; sys_platform == "win32"
+Requires-Dist: pywin32-ctypes (>=0.2.0) ; sys_platform == "win32"
+Provides-Extra: encryption
+Requires-Dist: tinyaes (>=1.0.0) ; extra == 'encryption'
+Provides-Extra: hook_testing
+Requires-Dist: pytest (>=2.7.3) ; extra == 'hook_testing'
+Requires-Dist: execnet (>=1.5.0) ; extra == 'hook_testing'
+Requires-Dist: psutil ; extra == 'hook_testing'
+
+PyInstaller Overview
+====================
+
+PyInstaller bundles a Python application and all its dependencies into a single
+package. The user can run the packaged app without installing a Python
+interpreter or any modules.
+
+:Documentation: https://pyinstaller.readthedocs.io/
+:Website: http://www.pyinstaller.org/
+:Code: https://github.com/pyinstaller/pyinstaller
+
+PyInstaller reads a Python script written by you. It analyzes your code
+to discover every other module and library your script needs in order to
+execute. Then it collects copies of all those files -- including the active
+Python interpreter! -- and puts them with your script in a single folder, or
+optionally in a single executable file.
+
+
+PyInstaller is tested against Windows, macOS, and GNU/Linux.
+However, it is not a cross-compiler:
+to make a Windows app you run PyInstaller in Windows; to make
+a GNU/Linux app you run it in GNU/Linux, etc.
+PyInstaller has been used successfully
+with AIX, Solaris, FreeBSD and OpenBSD,
+but is not tested against them as part of the continuous integration tests.
+
+
+Main Advantages
+---------------
+
+- Works out-of-the-box with any Python version 3.7-3.10.
+- Fully multi-platform, and uses the OS support to load the dynamic libraries,
+ thus ensuring full compatibility.
+- Correctly bundles the major Python packages such as numpy, PyQt5,
+ PySide2, Django, wxPython, matplotlib and others out-of-the-box.
+- Compatible with many 3rd-party packages out-of-the-box. (All the required
+ tricks to make external packages work are already integrated.)
+- Libraries like PyQt5, PySide2, wxPython, matplotlib or Django are fully
+ supported, without having to handle plugins or external data files manually.
+- Works with code signing on macOS.
+- Bundles MS Visual C++ DLLs on Windows.
+
+
+Installation
+------------
+
+PyInstaller is available on PyPI. You can install it through `pip`::
+
+ pip install pyinstaller
+
+
+Requirements and Tested Platforms
+---------------------------------
+
+- Python:
+
+ - 3.7-3.10
+ - tinyaes_ 1.0+ (only if using bytecode encryption).
+ Instead of installing tinyaes, ``pip install pyinstaller[encryption]`` instead.
+
+- Windows (32bit/64bit):
+
+ - PyInstaller should work on Windows 7 or newer, but we only officially support Windows 8+.
+
+ - Support for Python installed from the Windows store without using virtual
+ environments requires PyInstaller 4.4 or later.
+
+- GNU/Linux (32bit/64bit)
+
+ - ldd: Console application to print the shared libraries required
+ by each program or shared library. This typically can be found in
+ the distribution-package `glibc` or `libc-bin`.
+ - objdump: Console application to display information from
+ object files. This typically can be found in the
+ distribution-package `binutils`.
+ - objcopy: Console application to copy and translate object files.
+ This typically can be found in the distribution-package `binutils`,
+ too.
+
+- macOS (64bit):
+
+ - macOS 10.15 (Catalina) or newer.
+
+
+Usage
+-----
+
+Basic usage is very simple, just run it against your main script::
+
+ pyinstaller /path/to/yourscript.py
+
+For more details, see the `manual`_.
+
+
+Untested Platforms
+------------------
+
+The following platforms have been contributed and any feedback or
+enhancements on these are welcome.
+
+- FreeBSD
+
+ - ldd
+
+- Solaris
+
+ - ldd
+ - objdump
+
+- AIX
+
+ - AIX 6.1 or newer. PyInstaller will not work with statically
+ linked Python libraries.
+ - ldd
+
+- PowerPC GNU/Linux (Debian)
+
+
+Before using any contributed platform, you need to build the PyInstaller
+bootloader, as we do not ship binary packages. Download PyInstaller
+source, and build the bootloader::
+
+ cd bootloader
+ python ./waf all
+
+Then install PyInstaller::
+
+ python setup.py install
+
+or simply use it directly from the source (pyinstaller.py).
+
+
+Support
+-------
+
+See http://www.pyinstaller.org/support.html for how to find help as well as
+for commercial support.
+
+
+Changes in this Release
+-----------------------
+
+You can find a detailed list of changes in this release
+in the `Changelog`_ section of the manual.
+
+
+.. _tinyaes: https://github.com/naufraghi/tinyaes-py
+.. _`manual`: https://pyinstaller.readthedocs.io/en/v5.0.1/
+.. _`Changelog`: https://pyinstaller.readthedocs.io/en/v5.0.1/CHANGES.html
+
+
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/RECORD b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/RECORD
new file mode 100644
index 0000000..2105f51
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/RECORD
@@ -0,0 +1,703 @@
+../../Scripts/pyi-archive_viewer.exe,sha256=f0-goroBWJstnA7LJZouWR8R3DrWHNeBYF1h8e0t38k,106357
+../../Scripts/pyi-bindepend.exe,sha256=nMip9MI78-shIL_vMtanEBjJp0expGA3k3ob04tqRwo,106352
+../../Scripts/pyi-grab_version.exe,sha256=FiBQoKgmWIBJynDw4Dc0LV9wTqRfWtEeWMgciy92lp4,106355
+../../Scripts/pyi-makespec.exe,sha256=FSdDBtSNNpLNsnFiLLT7pEn9EufjpyyEsT4ykBi33FM,106351
+../../Scripts/pyi-set_version.exe,sha256=YR0SB5Tbb00fCf_7sJIcKkmQ_2PfSdwFv2lvyZGI38Y,106354
+../../Scripts/pyinstaller.exe,sha256=tMBjaJzjhnTiqfQN3i5aPdDDGoTSAzQZLoyY85QGqNY,106336
+PyInstaller/__init__.py,sha256=Ev75nzQOSY96isbGZNULnKXJPw5rv4plwEs1addVu6Q,2997
+PyInstaller/__main__.py,sha256=NgWq-KwnknaAOh-BGrh6azHlu_IY6zFeQtjJO5P-QOc,6687
+PyInstaller/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/__pycache__/__main__.cpython-38.pyc,,
+PyInstaller/__pycache__/_recursion_to_deep_message.cpython-38.pyc,,
+PyInstaller/__pycache__/_shared_with_waf.cpython-38.pyc,,
+PyInstaller/__pycache__/compat.cpython-38.pyc,,
+PyInstaller/__pycache__/config.cpython-38.pyc,,
+PyInstaller/__pycache__/configure.cpython-38.pyc,,
+PyInstaller/__pycache__/exceptions.cpython-38.pyc,,
+PyInstaller/__pycache__/log.cpython-38.pyc,,
+PyInstaller/_recursion_to_deep_message.py,sha256=QC0Jh-wgv0Z5ARhFz-u9Rd8BWbME7FuZ6HnjSoodHPU,1821
+PyInstaller/_shared_with_waf.py,sha256=iwI88E6siBnaL4LCy8FAj3PHGwG3ixlL10MI4m1O-C0,3955
+PyInstaller/archive/__init__.py,sha256=fNGhsx0m5s9iq4yMvH6J1tI0vzUKWd62lIQNSnKTGCE,22
+PyInstaller/archive/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/archive/__pycache__/pyz_crypto.cpython-38.pyc,,
+PyInstaller/archive/__pycache__/readers.cpython-38.pyc,,
+PyInstaller/archive/__pycache__/writers.cpython-38.pyc,,
+PyInstaller/archive/pyz_crypto.py,sha256=dhf2gcyJ2CJhXP6OhImbaK4StbO9VK2--Si6NGXcWI0,1303
+PyInstaller/archive/readers.py,sha256=uClmu1OhFfcQ2UqdEsKAr-Bk-cUlfAY93r6NYNkE9EU,8183
+PyInstaller/archive/writers.py,sha256=Uf9XdnbSFcgjUfm0rMSfs2Vjf8Vmd7cUTQfPgVzvaoQ,23112
+PyInstaller/bootloader/Windows-64bit/run.exe,sha256=CYHcWn28apkCA2FWe_vpSkCybNcwrQHvFLiMhUJ8xvM,253440
+PyInstaller/bootloader/Windows-64bit/run_d.exe,sha256=4ml3w5ZY6zrCfPyt5VkbPyfhPblPUvFFB5kULBCzsRU,258048
+PyInstaller/bootloader/Windows-64bit/runw.exe,sha256=_h0K2LLpfw2X3HaoV5CAC-7wOHgfgmIw2YawNZD014A,254464
+PyInstaller/bootloader/Windows-64bit/runw_d.exe,sha256=WlHO96c0Wg0UsUd2fmLhFuWKLNioLoKZ5-4XeAGiBvU,259584
+PyInstaller/bootloader/images/github_logo.png,sha256=imO7TMwvLWqjXQOv6VYGyQ5AIMOoGN4HG_uXPrKR5fo,266950
+PyInstaller/bootloader/images/icon-console.icns,sha256=TrztrfQbL3yp6yZbQm1p-IV8XXZSOjTtl8sH-cXybpI,106001
+PyInstaller/bootloader/images/icon-console.ico,sha256=aALW1IOexhlTRN7sYcLc9gIWH52Xsk9ic3kEaehHets,59521
+PyInstaller/bootloader/images/icon-console.svg,sha256=ch-48QSGSm6Z0g0dPbFLAHqeoIBY8lQ5fvPFYBSrTC4,339276
+PyInstaller/bootloader/images/icon-windowed.icns,sha256=uQo7VuWRab4Phv4EEGmfQsyqFqDIXZgO8OtgaAMvCzY,110199
+PyInstaller/bootloader/images/icon-windowed.ico,sha256=Fo2xuKfGL6KrksEhAYXRRZI_McG-I_3tQtlCD0i5g5I,60690
+PyInstaller/bootloader/images/icon-windowed.svg,sha256=Djj2Zv-uqNbITnV31bkBgtK_nTP_16rWSMJesH_l7K0,339293
+PyInstaller/building/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/building/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/building/__pycache__/api.cpython-38.pyc,,
+PyInstaller/building/__pycache__/build_main.cpython-38.pyc,,
+PyInstaller/building/__pycache__/datastruct.cpython-38.pyc,,
+PyInstaller/building/__pycache__/icon.cpython-38.pyc,,
+PyInstaller/building/__pycache__/makespec.cpython-38.pyc,,
+PyInstaller/building/__pycache__/osx.cpython-38.pyc,,
+PyInstaller/building/__pycache__/splash.cpython-38.pyc,,
+PyInstaller/building/__pycache__/splash_templates.cpython-38.pyc,,
+PyInstaller/building/__pycache__/templates.cpython-38.pyc,,
+PyInstaller/building/__pycache__/toc_conversion.cpython-38.pyc,,
+PyInstaller/building/__pycache__/utils.cpython-38.pyc,,
+PyInstaller/building/api.py,sha256=MBooF8kNzVo-I6gB8Z5lFLUWUAsfaGdfz8IlBALCZ9U,48695
+PyInstaller/building/build_main.py,sha256=TCtmmdaTWY_6zCm0gubNwdk7IM1No96J6iftj9SoJOo,37597
+PyInstaller/building/datastruct.py,sha256=nd6DQ28eUEzwZyqF-SE7mZ2GxjUpQlKrCxVvNF-O-wA,10841
+PyInstaller/building/icon.py,sha256=yYOD32ZSDUDvvbSgD8o1gDVDdLXROyA1JMoHtzHdtUU,2888
+PyInstaller/building/makespec.py,sha256=QqAHpLD3iII0okNtA_PPbo6maBujxcCQVIzJG2Sqmu8,31940
+PyInstaller/building/osx.py,sha256=Nm5Vo0hoOgty276Yevuq99Vxx35iyY-H_cDWK5rSx5I,12087
+PyInstaller/building/splash.py,sha256=PA_N6lEJtHxyi-VVpCeZQjX2aZQZxORx3-6nRes6yhM,23128
+PyInstaller/building/splash_templates.py,sha256=_4HH4f0HaPZnmoncQnTJgCWYMM6DAgDbvgA7PretRl0,7452
+PyInstaller/building/templates.py,sha256=mulM5kIB6Yz8iUXs_VaM_q8IL182eKCmsYNA_zX-x-c,3642
+PyInstaller/building/toc_conversion.py,sha256=S8qn8ntVS1_X8p9oGHM3KO8Ae8z8ZmqnuZ7OwfaFrDo,6954
+PyInstaller/building/utils.py,sha256=BIhXKUrQtgwTlsFRM0r7hSIxfSENC0A7IWFupIbWN_o,30814
+PyInstaller/compat.py,sha256=dK0NfVGQvomoIJkvwK7Ng5qUXH2DHAFfGs_fXK1J-_U,31325
+PyInstaller/config.py,sha256=4himr49b7bL-PEGDjmWKY7KxY54UNiGStPxhN5CkMmM,1727
+PyInstaller/configure.py,sha256=7S0b47ObuAIjEpW6WKxABY1ofiuN3KRHx7t-mNeNVEA,3342
+PyInstaller/depend/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/depend/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/depend/__pycache__/analysis.cpython-38.pyc,,
+PyInstaller/depend/__pycache__/bindepend.cpython-38.pyc,,
+PyInstaller/depend/__pycache__/bytecode.cpython-38.pyc,,
+PyInstaller/depend/__pycache__/dylib.cpython-38.pyc,,
+PyInstaller/depend/__pycache__/imphook.cpython-38.pyc,,
+PyInstaller/depend/__pycache__/imphookapi.cpython-38.pyc,,
+PyInstaller/depend/__pycache__/utils.cpython-38.pyc,,
+PyInstaller/depend/analysis.py,sha256=OkdIWv-3k2ytNJAtgFoJEHNYf_hyb8sgIj9-I_r20z0,40501
+PyInstaller/depend/bindepend.py,sha256=odvx_8DOLq-uAlM6oxnrJe8nVvmXJ-Y4djOA_VgK2uY,38651
+PyInstaller/depend/bytecode.py,sha256=yf2CM2sU2ZIJNi5NoqwaT4ysWnQjbZH21U4IaHxXbe0,8901
+PyInstaller/depend/dylib.py,sha256=KgfMXoMUpowtughEVtYCvaBEpJrirPOAMtAq_oAQjpI,15843
+PyInstaller/depend/imphook.py,sha256=IfJySj5_eLHCYSIM7O1Rd19VTVsEj_HL_e1LNPwpGp8,26470
+PyInstaller/depend/imphookapi.py,sha256=p9deCqmrdvW4W2gcOQ8qcwzqFZckTVXEOWPaMiP1CB4,19269
+PyInstaller/depend/utils.py,sha256=6Z27Z-Flgz1UTy10uNgOdOt4WRCavnnsBe8fRUqeNkA,17042
+PyInstaller/exceptions.py,sha256=SBk5I0NTvooCCEcKFpOCUCmUgkOvZQwkhLJ3ZgtFAa8,1101
+PyInstaller/fake-modules/__pycache__/pyi_splash.cpython-38.pyc,,
+PyInstaller/fake-modules/__pycache__/site.cpython-38.pyc,,
+PyInstaller/fake-modules/pyi_splash.py,sha256=aWKRy3pmY-ZBldzBTNC_EVIkp2wAroNCbwXuWzPQdaA,8550
+PyInstaller/fake-modules/site.py,sha256=1cfhhn0IyCWKg6KzltiWaV2u83ZGYU31y3GX-bCk8nQ,2191
+PyInstaller/hooks/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/hooks/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PIL.Image.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PIL.ImageFilter.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PIL.SpiderImagePlugin.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PIL.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.Qt.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtGui.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtHelp.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtLocation.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimedia.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimediaWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetwork.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtOpenGL.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtPositioning.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtPrintSupport.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtQml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuickWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtScript.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtSensors.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtSerialPort.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtSql.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtSvg.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtTest.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngine.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKit.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKitWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.QtXml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt5.uic.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtGui.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtHelp.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimedia.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimediaWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetwork.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGL.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGLWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtPrintSupport.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtQml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuickWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtSql.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvg.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtTest.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineQuick.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.QtXml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PyQt6.uic.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtGui.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtHelp.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtLocation.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimedia.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimediaWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtNetwork.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGL.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtPositioning.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtPrintSupport.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtQml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtQuick.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtScript.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtSensors.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtSerialPort.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtSql.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtSvg.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtTest.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtUiTools.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngine.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKit.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKitWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.QtXml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.Qwt5.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide2.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtGui.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtHelp.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimedia.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimediaWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtNetwork.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGL.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGLWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtPrintSupport.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtQml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtSql.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtSvg.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtTest.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtUiTools.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineCore.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineQuick.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtWidgets.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.QtXml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-PySide6.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-_tkinter.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-babel.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-difflib.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-distutils.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-distutils.util.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.contrib.sessions.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.core.cache.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.core.mail.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.core.management.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.db.backends.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.db.backends.mysql.base.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.db.backends.oracle.base.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-django.template.loaders.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-encodings.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gevent.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Atk.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Champlain.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Clutter.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GIRepository.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GLib.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GModule.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GObject.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Gdk.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GdkPixbuf.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Gio.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Gst.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GstAudio.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GstBase.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GstPbutils.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GstTag.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GstVideo.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Gtk.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GtkChamplain.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GtkClutter.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GtkSource.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.GtkosxApplication.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.HarfBuzz.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.Pango.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.PangoCairo.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.cairo.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-gi.repository.xlib.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-heapq.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-idlelib.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-importlib_metadata.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-importlib_resources.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-keyring.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-kivy.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-lib2to3.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-matplotlib.backends.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-matplotlib.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-matplotlib.numerix.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-multiprocessing.util.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-numpy._pytesttester.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-numpy.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-packaging.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pandas.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pandas.io.formats.style.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pandas.plotting.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pickle.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pkg_resources.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pygments.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pytz.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-pytzdata.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-qtawesome.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scapy.layers.all.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.io.matlab.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.linalg.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.sparse.csgraph.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.spatial.transform.rotation.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.special._ellip_harm_2.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.special._ufuncs.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scipy.stats._stats.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-scrapy.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-setuptools.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-setuptools.msvc.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-shelve.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-sphinx.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-sqlalchemy.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-sqlite3.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-sysconfig.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-wcwidth.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-win32ctypes.core.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-xml.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-xml.dom.domreg.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-xml.etree.cElementTree.cpython-38.pyc,,
+PyInstaller/hooks/__pycache__/hook-zope.interface.cpython-38.pyc,,
+PyInstaller/hooks/hook-PIL.Image.py,sha256=pF0ey6PPJNvt36vws2xd4Tn6s8qUOgRH0g4nzc8_MJI,845
+PyInstaller/hooks/hook-PIL.ImageFilter.py,sha256=JixQZMNDErlnY2XuUMpphV0h6W7E1cZC65eZLNMayBk,589
+PyInstaller/hooks/hook-PIL.SpiderImagePlugin.py,sha256=5NNqIYGAWKAddpwlWYZYZtndKITdSlTGiuEnvUe_5Wc,773
+PyInstaller/hooks/hook-PIL.py,sha256=3AHumpCzmeARzCqss3EdfxM9u-qticrmGxhLcnh9Ndw,1100
+PyInstaller/hooks/hook-PyQt5.Qt.py,sha256=_5fUaeehqt2xylCIlN_UxtlVobNyBsabrV-fpKs2gks,1274
+PyInstaller/hooks/hook-PyQt5.QtCore.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtGui.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtHelp.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtLocation.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtMultimedia.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtMultimediaWidgets.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtNetwork.py,sha256=tv2Jc9uOCb0iF4IeHzCMbO52HVCK73dgxQh_S93_r6E,742
+PyInstaller/hooks/hook-PyQt5.QtOpenGL.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtPositioning.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtPrintSupport.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtQml.py,sha256=bQvYEW1EAN76it4Oh4rx56BAlE22ZrijgFStjq6NXIY,778
+PyInstaller/hooks/hook-PyQt5.QtQuick.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtQuickWidgets.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtScript.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtSensors.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtSerialPort.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtSql.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtSvg.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtTest.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtWebEngine.py,sha256=tjikeNeHcrIBnnmFN3s3kD2G6zSYSrbamoXEmZpT8l8,633
+PyInstaller/hooks/hook-PyQt5.QtWebEngineCore.py,sha256=vHFQefP0KzpQt8VOLQHxzLIbxxlIV4ndCXrPQz5HniA,1051
+PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py,sha256=tjikeNeHcrIBnnmFN3s3kD2G6zSYSrbamoXEmZpT8l8,633
+PyInstaller/hooks/hook-PyQt5.QtWebKit.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtWebKitWidgets.py,sha256=tjikeNeHcrIBnnmFN3s3kD2G6zSYSrbamoXEmZpT8l8,633
+PyInstaller/hooks/hook-PyQt5.QtWidgets.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.QtXml.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PyQt5.py,sha256=o5ykD9OaP-lXAyaaWZY-fNvmPGrvoFsZJX3up_X4k2k,961
+PyInstaller/hooks/hook-PyQt5.uic.py,sha256=M8LX-KbmDKirLJ2WMZR_0ktOZw1y_Gp9-u1fV3bNtm8,979
+PyInstaller/hooks/hook-PyQt6.QtCore.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtGui.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtHelp.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtMultimedia.py,sha256=nwWBlCS3TCeaom2w_XkSg917qRu8xHvS5ZBPjS2BJrA,633
+PyInstaller/hooks/hook-PyQt6.QtMultimediaWidgets.py,sha256=nwWBlCS3TCeaom2w_XkSg917qRu8xHvS5ZBPjS2BJrA,633
+PyInstaller/hooks/hook-PyQt6.QtNetwork.py,sha256=bGa5yAQul6CbC0Vp0e-Ymb4fdBVQvE27vuuJNwgYkNg,742
+PyInstaller/hooks/hook-PyQt6.QtOpenGL.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtOpenGLWidgets.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtPrintSupport.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtQml.py,sha256=Zog5b8rX-3Y9Y35zCkuk5iepx7ZipPmUHBuLzCz_KqY,778
+PyInstaller/hooks/hook-PyQt6.QtQuick.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtQuickWidgets.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtSql.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtSvg.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtTest.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtWebEngineCore.py,sha256=Pq_Q8rLIdy-KdJsQh7oD2vuRYXn2i6arPrZ4BpVukOk,1407
+PyInstaller/hooks/hook-PyQt6.QtWebEngineQuick.py,sha256=mmt6liTlkTDWqdxmxFZANWdct0XtNwf55zxRQBK9Io0,633
+PyInstaller/hooks/hook-PyQt6.QtWebEngineWidgets.py,sha256=mmt6liTlkTDWqdxmxFZANWdct0XtNwf55zxRQBK9Io0,633
+PyInstaller/hooks/hook-PyQt6.QtWidgets.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.QtXml.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PyQt6.py,sha256=94IJsmczxF1Hu3z-2Jk3Fn-GnmhBQlhw9YpIkpUFu0s,790
+PyInstaller/hooks/hook-PyQt6.uic.py,sha256=zq32caghd3M10PQ2Xbu7aumeFn20nJRHNgnGeiMd0mU,979
+PyInstaller/hooks/hook-PySide2.QtCore.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtGui.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtHelp.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtLocation.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtMultimedia.py,sha256=o5vcvdEUVTa9ZgxEs0dZdwV3OlKHUxRPUz6Ku5FqgvA,979
+PyInstaller/hooks/hook-PySide2.QtMultimediaWidgets.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtNetwork.py,sha256=nk6m2m2RdaNUWL6vWrrwejA35DZttHgHCJveCtbqeVg,746
+PyInstaller/hooks/hook-PySide2.QtOpenGL.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtPositioning.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtPrintSupport.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtQml.py,sha256=lOGuPiroGuUsmNnnPc81l6bDim-HhMQpeTCu8ays0Cg,782
+PyInstaller/hooks/hook-PySide2.QtQuick.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtQuickWidgets.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtScript.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtSensors.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtSerialPort.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtSql.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtSvg.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtTest.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtUiTools.py,sha256=rZ-wmguO9yfl_4r3UEcr_HEPYeSsj-myay0g8VUDY5g,710
+PyInstaller/hooks/hook-PySide2.QtWebEngine.py,sha256=tjikeNeHcrIBnnmFN3s3kD2G6zSYSrbamoXEmZpT8l8,633
+PyInstaller/hooks/hook-PySide2.QtWebEngineCore.py,sha256=d7q5Ha4K8FJYNXrb05pAF5lukNRT1QSPSlTPrcK1Oq8,1059
+PyInstaller/hooks/hook-PySide2.QtWebEngineWidgets.py,sha256=tjikeNeHcrIBnnmFN3s3kD2G6zSYSrbamoXEmZpT8l8,633
+PyInstaller/hooks/hook-PySide2.QtWebKit.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtWebKitWidgets.py,sha256=tjikeNeHcrIBnnmFN3s3kD2G6zSYSrbamoXEmZpT8l8,633
+PyInstaller/hooks/hook-PySide2.QtWidgets.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.QtXml.py,sha256=jv0585rw283nJpK2w9Cpcik-C5L_-m07pHcff72fB-4,633
+PyInstaller/hooks/hook-PySide2.Qwt5.py,sha256=QjXqqxhCP90TwjnEW_cgFRKHF0klQ8qB0YCpAtsSqs4,972
+PyInstaller/hooks/hook-PySide2.py,sha256=IvKb7le130FBK5F6uMC3SiVNtZZPSlezGzyyrFpX04s,798
+PyInstaller/hooks/hook-PySide6.QtCore.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtGui.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtHelp.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtMultimedia.py,sha256=A9ehoUSMg3O-EelkQysuqHJj2eD3BvEx68mVPR_Fqp4,981
+PyInstaller/hooks/hook-PySide6.QtMultimediaWidgets.py,sha256=nwWBlCS3TCeaom2w_XkSg917qRu8xHvS5ZBPjS2BJrA,633
+PyInstaller/hooks/hook-PySide6.QtNetwork.py,sha256=DmVinN9G7dWuNzyNbZz3pUPzlt1kVLKXt6VWnJ6mk4E,746
+PyInstaller/hooks/hook-PySide6.QtOpenGL.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtOpenGLWidgets.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtPrintSupport.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtQml.py,sha256=H3h3XXnZoZrHxjdBFdl0xDyl57TUpPtDj4S_2l8coGk,782
+PyInstaller/hooks/hook-PySide6.QtQuick.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtQuickWidgets.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtSql.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtSvg.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtTest.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtUiTools.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtWebEngineCore.py,sha256=C1BZPAc_Jd5k0LP9KOtFRR7glSDmfzFWidLwbzEK0Vs,1417
+PyInstaller/hooks/hook-PySide6.QtWebEngineQuick.py,sha256=mmt6liTlkTDWqdxmxFZANWdct0XtNwf55zxRQBK9Io0,633
+PyInstaller/hooks/hook-PySide6.QtWebEngineWidgets.py,sha256=mmt6liTlkTDWqdxmxFZANWdct0XtNwf55zxRQBK9Io0,633
+PyInstaller/hooks/hook-PySide6.QtWidgets.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.QtXml.py,sha256=owbHf1XFbGCED-2EPJ9rY0sdVCvs69QpyxVwcbOjOEI,633
+PyInstaller/hooks/hook-PySide6.py,sha256=EeYS8Nb7gdiI5h3d0azA-zr50c_ZdAFm9Sbr_rMboHQ,798
+PyInstaller/hooks/hook-_tkinter.py,sha256=B-3cCYNW8N6VS2pg4tSp-FFjkc_jU1qiq3EJjN1V5K4,1327
+PyInstaller/hooks/hook-babel.py,sha256=-0XIdatOLXknGj5IVMdm7YTjYUjuvNJIKbhq2T38920,633
+PyInstaller/hooks/hook-difflib.py,sha256=FMgRWZv2onJLkR9Zc3FEzOqF8zaMcJS3wU6MoVa3HPo,577
+PyInstaller/hooks/hook-distutils.py,sha256=zpEc8QHQBIssBDMZC5kRQWl0R-PdEHAn5SJGJ5r2__w,1481
+PyInstaller/hooks/hook-distutils.util.py,sha256=x3ZOTa5QdQHT6X4KzWmYpyJc2K6D64X3CKJxl4c6WRI,661
+PyInstaller/hooks/hook-django.contrib.sessions.py,sha256=tXo9Yyav9OsNu_Gn9Jh2Q6irnLb731wObWb55fYgeMY,635
+PyInstaller/hooks/hook-django.core.cache.py,sha256=hunbkn_ootu_vGkkmCwSFbBL92E6q-4KQFrUKw3Akcg,629
+PyInstaller/hooks/hook-django.core.mail.py,sha256=RPz95wmcHOUhjNxrUWHvn2lIC-8tFlYU90621QVJuTE,1069
+PyInstaller/hooks/hook-django.core.management.py,sha256=_SiU0iPfGVFiJ7TNKX29E35jfVqlB8CeturJFJG2Wv4,941
+PyInstaller/hooks/hook-django.db.backends.mysql.base.py,sha256=8Fl9wG2jOkHZzlAN4WOHQXmtL41O7gRuGGwWI3gWQmQ,611
+PyInstaller/hooks/hook-django.db.backends.oracle.base.py,sha256=j0m1WlejYgCToS7kvQoXBQTW0vG3SsCcb2titryAC4U,563
+PyInstaller/hooks/hook-django.db.backends.py,sha256=iQfimADAbd9eV8-uVrGKWPE1eHhRXyaptBLu4oOcrhw,983
+PyInstaller/hooks/hook-django.py,sha256=qeZyYQb3qY26NPtSP_6-tXKDPt3SpzW0hUTwqMPsP3M,3922
+PyInstaller/hooks/hook-django.template.loaders.py,sha256=6NhKlMUGJ2UiC9xkWB6d6DaLsxnEnVWNjTW9gZsKEGA,626
+PyInstaller/hooks/hook-encodings.py,sha256=jQCZBBf0NfJCPBZ0-Xuxstil4uqzS36k16dAG240A-s,612
+PyInstaller/hooks/hook-gevent.py,sha256=UY01pZbnRohm1FwFY5YPTosM3SyC9TG2nlw8fVQ3nPU,1011
+PyInstaller/hooks/hook-gi.py,sha256=UAdebH1jEtpVqLC__klliVQjtJ4XfRkeJ_HdMUZJamI,714
+PyInstaller/hooks/hook-gi.repository.Atk.py,sha256=0eGyzg34b6GNceLLAW2ern3JFLUmMuzdjpJb-26wvQc,978
+PyInstaller/hooks/hook-gi.repository.Champlain.py,sha256=eU02hbtNRWV1Zp11bPnJAVWU81fjK7TzMSVD_WSUrJ8,705
+PyInstaller/hooks/hook-gi.repository.Clutter.py,sha256=ULnhfG8ZUdehSaWaryCJJtnXLA47NOMMXvOBMQHnskw,700
+PyInstaller/hooks/hook-gi.repository.GIRepository.py,sha256=PbfGxHXCu4PTZwa_qMFFblblJBeujABRP0u4hcKV72g,703
+PyInstaller/hooks/hook-gi.repository.GLib.py,sha256=FC0QcRkd0wugl_3-IdjQ0HeBWUsxNQhtKsMmju9RCWc,1730
+PyInstaller/hooks/hook-gi.repository.GModule.py,sha256=qpibFCQWmHblFOkf9gIajMV7LFLSkcPUL3O6M0xSr7M,1136
+PyInstaller/hooks/hook-gi.repository.GObject.py,sha256=gVKVV_n1tQa7So9sDmdFjGh1N70vHRdNP2g2xm4irZw,1136
+PyInstaller/hooks/hook-gi.repository.Gdk.py,sha256=xYAd58ucEPUoYoolFxTR4YzIo1mUJ5DUG8y_r7DdkSQ,751
+PyInstaller/hooks/hook-gi.repository.GdkPixbuf.py,sha256=kAbgbucbk6lS4eew3zrk2_7tumPeak0fHTF-WPdUABU,6416
+PyInstaller/hooks/hook-gi.repository.Gio.py,sha256=JPBzaSMda9KkxbAQHKycztum063_u5WWFc_j30xLmVs,2751
+PyInstaller/hooks/hook-gi.repository.Gst.py,sha256=RpSPGby9CKq2qaJi8j6xNP4d3rlpw_Rphz02bO3adFE,2544
+PyInstaller/hooks/hook-gi.repository.GstAudio.py,sha256=AbYGB0jnTIg94oyHb-wdPpNenUt4tA_QH645_wb-8_8,869
+PyInstaller/hooks/hook-gi.repository.GstBase.py,sha256=H4sTtgnL-jJ4CXKUvJX2j8iJRNdP969852qu8l4F7oY,868
+PyInstaller/hooks/hook-gi.repository.GstPbutils.py,sha256=sq68-wSpNmwBX_pTNu77jr_yAcwNsJ5qd30iRwQmh8E,871
+PyInstaller/hooks/hook-gi.repository.GstTag.py,sha256=lv1_wpnQkZZLhGYFGaT5gSeKUTKzIdYdILcLDuBH6wI,867
+PyInstaller/hooks/hook-gi.repository.GstVideo.py,sha256=7HxUtp4kaSSfoNx4Zy4qzAfQUJvrwJetJPfvmsYDV4Q,869
+PyInstaller/hooks/hook-gi.repository.Gtk.py,sha256=9gB54XrEVrOCg_y58jGzhVOfCxKR63ojE0Nj64vtMTI,1879
+PyInstaller/hooks/hook-gi.repository.GtkChamplain.py,sha256=brHH7Ti6eL6ETNc5YhhkLULxinbkTRW-PUK_vA49Iz0,711
+PyInstaller/hooks/hook-gi.repository.GtkClutter.py,sha256=c9YhZnPbydeBmNf9ugW0z0fAt48iCvt8THCX8JWg8U0,706
+PyInstaller/hooks/hook-gi.repository.GtkSource.py,sha256=2bIc37HGXqYwLZ85NXTLKMIm2hTDvSg-F8HfPKHhc0A,1165
+PyInstaller/hooks/hook-gi.repository.GtkosxApplication.py,sha256=AAt9nnB8nh_fDIOResOOrWWMx-h77946id8qhoILP3c,767
+PyInstaller/hooks/hook-gi.repository.HarfBuzz.py,sha256=jSe7hLlhxJMys2vTZ2g16yHpprBE-Pbyn4poWhi27hc,699
+PyInstaller/hooks/hook-gi.repository.Pango.py,sha256=KzIzCPyHmbmKXT6uwwL6H5z2m-tzbE9x1QAm3U5SyGk,696
+PyInstaller/hooks/hook-gi.repository.PangoCairo.py,sha256=Tbp-qcpSNPJJtLAm85evZPsmZM3gNTrV2f90VVlIZAo,701
+PyInstaller/hooks/hook-gi.repository.cairo.py,sha256=dLguoMTFdi9N7rDSUK9r4ICh09TIEoVvSnmVy7TAnx8,696
+PyInstaller/hooks/hook-gi.repository.xlib.py,sha256=vUSyAh15WmpCG8-RbQecS8QKOPYq9mZfQm4rnwqJ9Hw,695
+PyInstaller/hooks/hook-heapq.py,sha256=6e0GbHpFtVHYKJJrNqReTzerBP-sUZ7DorzsK1fvOI8,578
+PyInstaller/hooks/hook-idlelib.py,sha256=yljPDymoBskgmt9uhWbglG_MDvggyFQ3Hu03GszNf7k,602
+PyInstaller/hooks/hook-importlib_metadata.py,sha256=gnPJLK01aAN8fli5qktSoscgXYoP03LK0jm6TUsBO04,1350
+PyInstaller/hooks/hook-importlib_resources.py,sha256=SwJ9pAQA57h_OtujmdCKUXGZoNNlkofDW8fTLDekdF4,1181
+PyInstaller/hooks/hook-keyring.py,sha256=E-R-K19HTDZDwNMBECMmw3HK-Z09rRmpt4Dsn839IWE,888
+PyInstaller/hooks/hook-kivy.py,sha256=5Xsdia68W_q33n5UyTrS285Y0LH4fhqfodvNBIO8y1I,1130
+PyInstaller/hooks/hook-lib2to3.py,sha256=M2pgscInrJwraAfiwYRkMosUws6w78RhmtEC15qI3MY,653
+PyInstaller/hooks/hook-matplotlib.backends.py,sha256=WrJFAvLJfbznTEdy8u46sus4u_-5u0IAnKtsgmnhivQ,8537
+PyInstaller/hooks/hook-matplotlib.numerix.py,sha256=qRBt6VjqW5Kp0BcS58fwjKDzTqawKB9RDTho110BQPM,683
+PyInstaller/hooks/hook-matplotlib.py,sha256=fZynZDBSoLg9ePwr5P3WHUzhhrzMixjfOyU_ktKZPic,701
+PyInstaller/hooks/hook-multiprocessing.util.py,sha256=4Q6Xt-e4NkIMnoAf2_w_J5ausuKXsj3MY4nel6XNVmk,791
+PyInstaller/hooks/hook-numpy._pytesttester.py,sha256=rF_yWSuIsO1FZsDZVqwfJZLt9XNfr89exFpuz4FNXHQ,798
+PyInstaller/hooks/hook-numpy.py,sha256=zEGt50kqjZdPGMy149J0X7xmeb_XSv5zCN1fLG6ZWr8,2335
+PyInstaller/hooks/hook-packaging.py,sha256=md-E7sGXo4uonkS_DJbSdAANmnO5ukkCsmkno90aelM,577
+PyInstaller/hooks/hook-pandas.io.formats.style.py,sha256=LH1zF2GLPUaQGA0-5LuvTT5T8Dga7Agux0kz6RV_yxY,751
+PyInstaller/hooks/hook-pandas.plotting.py,sha256=lGRnCt0tPTzeDaT-611PS45HOcHqKD0RuZwHRMrCDGM,944
+PyInstaller/hooks/hook-pandas.py,sha256=V65wYr2sPhzCoNwN1qr9hY_22fFP6b8hiHXm6UAOSQM,959
+PyInstaller/hooks/hook-pickle.py,sha256=GLZElq3Bp-HTvO_-Hy6MW2GfD53hxob4B0n5UefHA3o,810
+PyInstaller/hooks/hook-pkg_resources.py,sha256=TTdooAMgpWMwAvuJdOeDg42lTx3j4rFXi87uh8xSrDU,2607
+PyInstaller/hooks/hook-pygments.py,sha256=NOO9-bIxZy2YCWG_pfmXyyE3MetaPmpy9zqs9MWaVBw,1184
+PyInstaller/hooks/hook-pytz.py,sha256=6h90uJE9LnNvyaPufReNPyR5x9K1kMs3SxRBpM0N5ug,734
+PyInstaller/hooks/hook-pytzdata.py,sha256=NISzhFGpFErDwHW54smhJpC6Ifvn-ibLdoEe5yopz4Y,603
+PyInstaller/hooks/hook-qtawesome.py,sha256=O2oKklNj4F1aF5LoGWocZdRas0ojy0e1gwdggG3iyjI,792
+PyInstaller/hooks/hook-scapy.layers.all.py,sha256=gF9forN00jakLKqBQloIUyvKcX--KW2cut3IT1oL_6Y,930
+PyInstaller/hooks/hook-scipy.io.matlab.py,sha256=--DsGEanFiRpH6PC-7B84EI_OMMzpXe6Vx0i6NesvmM,655
+PyInstaller/hooks/hook-scipy.linalg.py,sha256=MlgrCB8xczgQqH2Mcnkivp9RqsKgGqVgeUgtjFmU95A,633
+PyInstaller/hooks/hook-scipy.py,sha256=iH5iue9RAxwe7xS-jOMWjxT3WS03hnAI--8_wKM-X6M,1290
+PyInstaller/hooks/hook-scipy.sparse.csgraph.py,sha256=CTpRIwZv0EFCE4btjLS_BCFF5ofacar_P9pa4umWi14,611
+PyInstaller/hooks/hook-scipy.spatial.transform.rotation.py,sha256=78vBWllrVEJeGVNqaR84AmBRPIl_VbPMv0tNy0E-ag0,797
+PyInstaller/hooks/hook-scipy.special._ellip_harm_2.py,sha256=hO_5RCu290QOK_YS7xixcKVZd-s48yS1lyut1RMDi1Q,1317
+PyInstaller/hooks/hook-scipy.special._ufuncs.py,sha256=_wVjrco-rEaHHtqHhy4Ew_jSmSa5zAuYynoefORRJGI,696
+PyInstaller/hooks/hook-scipy.stats._stats.py,sha256=gapp6rCkfrFHYMq1Jr0tHJlOnOWI-1WJ3gDnhC-DpYk,660
+PyInstaller/hooks/hook-scrapy.py,sha256=Sh_JQGUEkklWDLfyAJL_PaEiaEl1EJRifj96ifLnTb8,819
+PyInstaller/hooks/hook-setuptools.msvc.py,sha256=O3U4MLJxA1qubMLhDI6SlaSbdr78ox6c2OfCpWcMvXE,599
+PyInstaller/hooks/hook-setuptools.py,sha256=xsfcd4Tnke_kSAfya2_R4MJE-u4ykPVNcM__IJQJlvA,1245
+PyInstaller/hooks/hook-shelve.py,sha256=_tWTyCQesu0C3OETddBD6QgMPs8eVRvkaudHevopiZg,603
+PyInstaller/hooks/hook-sphinx.py,sha256=qk-VtenFc3O6Li9iKyTqsc9oy5vnpM3fpunL_VqIEYM,1998
+PyInstaller/hooks/hook-sqlalchemy.py,sha256=oWR6BRmeNSnJcoF6p3nE_gAqCIXXOxDa1vNG0E1j7Lo,3255
+PyInstaller/hooks/hook-sqlite3.py,sha256=y8DFRHbbgl1QKEFWl7mq5bN1SP08MH9lW77qHc8pi2o,813
+PyInstaller/hooks/hook-sysconfig.py,sha256=fGFPSnB9WDY6PmrubX-BjU_z7psXFKq-huqrLb1cMQU,1313
+PyInstaller/hooks/hook-wcwidth.py,sha256=bn1mfZIU9ToVG9tKMNZdeVHCC2BlNZCJdmVe-T8MzxE,602
+PyInstaller/hooks/hook-win32ctypes.core.py,sha256=CmK4YTbr1rLh6D0QKqbYXb8e0pcWFM4O9g26I0cIcag,993
+PyInstaller/hooks/hook-xml.dom.domreg.py,sha256=j4RhtDt8RFEFXy--NToxNa_7PZHy4QxylbDvBlPfUyE,569
+PyInstaller/hooks/hook-xml.etree.cElementTree.py,sha256=nTEohQymks1VDCuvv6YCpUbBZkEUnSJvlJ7-Cz_U_cI,615
+PyInstaller/hooks/hook-xml.py,sha256=DAwvLKec_ihjamewX8xlzEPoYwTuxXFtS9krGDn7w5A,569
+PyInstaller/hooks/hook-zope.interface.py,sha256=YH3F1nWFIGn9cbDbZ75iENPl2i7VWzEi07w4Pszvph8,539
+PyInstaller/hooks/pre_find_module_path/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/hooks/pre_find_module_path/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/hooks/pre_find_module_path/__pycache__/hook-PyQt5.uic.port_v2.cpython-38.pyc,,
+PyInstaller/hooks/pre_find_module_path/__pycache__/hook-distutils.cpython-38.pyc,,
+PyInstaller/hooks/pre_find_module_path/__pycache__/hook-pyi_splash.cpython-38.pyc,,
+PyInstaller/hooks/pre_find_module_path/__pycache__/hook-site.cpython-38.pyc,,
+PyInstaller/hooks/pre_find_module_path/hook-PyQt5.uic.port_v2.py,sha256=O9vegB1GoluN4MhScS3hgOs2G5OFUhJBlTNhTvyF2mI,696
+PyInstaller/hooks/pre_find_module_path/hook-distutils.py,sha256=HnmcSU4VdmCv_EnSKRt5q5UGPzlkGCf-cHXmUmO9_Hs,1716
+PyInstaller/hooks/pre_find_module_path/hook-pyi_splash.py,sha256=DNUfYwpBTVAsLTApAGkN_ec-55Dm_kNfp3cAYsUlKe4,1412
+PyInstaller/hooks/pre_find_module_path/hook-site.py,sha256=mQGa5Q6ji6fEvdAKQ_xi8dmykYwo0C_10fRzhlEYy0s,1252
+PyInstaller/hooks/pre_safe_import_module/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/hooks/pre_safe_import_module/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Atk.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Champlain.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Clutter.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GIRepository.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GLib.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GModule.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GObject.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gdk.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GdkPixbuf.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gio.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gst.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAudio.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBase.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPbutils.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTag.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVideo.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gtk.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkChamplain.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkClutter.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkSource.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkosxApplication.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.HarfBuzz.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Pango.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.PangoCairo.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.cairo.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.xlib.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-setuptools.extern.six.moves.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-six.moves.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-urllib3.packages.six.moves.cpython-38.pyc,,
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Atk.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Champlain.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Clutter.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GIRepository.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GLib.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GModule.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GObject.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gdk.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GdkPixbuf.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gio.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gst.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAudio.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBase.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPbutils.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTag.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVideo.py,sha256=eBpc_POd-HjyeQquxTyWrgXDKPygwRvfjzNGdEqDHUo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gtk.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkChamplain.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkClutter.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkSource.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkosxApplication.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.HarfBuzz.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Pango.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.PangoCairo.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.cairo.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.xlib.py,sha256=bUrcLEAWPm84oVbdhnSDPl8gRT46DuM8roTi9LVifxo,783
+PyInstaller/hooks/pre_safe_import_module/hook-setuptools.extern.six.moves.py,sha256=EcRTkXvLxlnAsOe5McEFnC7uNiOK0UUVDMIoOXLixAM,1477
+PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py,sha256=vX1Gv7NHiUwztMzP5t6CYBe1fn2-H3u_FwRinwa-WfU,3731
+PyInstaller/hooks/pre_safe_import_module/hook-urllib3.packages.six.moves.py,sha256=HA_8f_OOHnpuF0qjC_3WWdmgV-jvf3S0-RvYIKFr870,1240
+PyInstaller/hooks/rthooks.dat,sha256=oj7vJFAdjRo6BV5Ti9Y_y2I2pwCJ7LUcazPZnbqxzgU,1295
+PyInstaller/hooks/rthooks/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/hooks/rthooks/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth__tkinter.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_django.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gdkpixbuf.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gi.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gio.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_glib.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gstreamer.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gtk.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_inspect.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_kivy.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_mplconfig.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_multiprocessing.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgres.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgutil.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt5.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt5webengine.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt6.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt6webengine.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside2.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside2webengine.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside6.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside6webengine.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_subprocess.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_win32api.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/__pycache__/pyi_rth_win32comgenpy.cpython-38.pyc,,
+PyInstaller/hooks/rthooks/pyi_rth__tkinter.py,sha256=BOosyvb3KPRSR1zBcTyxOnXIcKyp1qx68o3-rwnPrAM,1136
+PyInstaller/hooks/rthooks/pyi_rth_django.py,sha256=pT_8AFidlpBDtQbpvQYhEU_SPWr7JB0gUQGMtgVEoAQ,2793
+PyInstaller/hooks/rthooks/pyi_rth_gdkpixbuf.py,sha256=LdxGWepCX9VVsP83Bar8m6TS23c7FiQwDNUp-Hw-PG4,1309
+PyInstaller/hooks/rthooks/pyi_rth_gi.py,sha256=2HN8n5QUCToMQ_kBbvrzxSCwWCQhGsWxzfB6UYL_L_w,568
+PyInstaller/hooks/rthooks/pyi_rth_gio.py,sha256=UInl6xlrH5r0Y3DpbHqeOaq6mjP2Y30_5GsT07sKdlk,567
+PyInstaller/hooks/rthooks/pyi_rth_glib.py,sha256=iKKi2ezujmDT0DD6-KeridUDNWQ0rcqn52UBa94UGsM,1324
+PyInstaller/hooks/rthooks/pyi_rth_gstreamer.py,sha256=yVGvw2H7ECEQn4JjEgOKymNR6HiSr8XCDLVFC1nqWQs,1079
+PyInstaller/hooks/rthooks/pyi_rth_gtk.py,sha256=XrnthY0OT_q__MnaILnt_a2dtD9EmZQtHRcNJhIeN5c,802
+PyInstaller/hooks/rthooks/pyi_rth_inspect.py,sha256=pFbO-N7_seR2vQcV9xYv9bzbsRPUKYV650KQr9FX_jw,1904
+PyInstaller/hooks/rthooks/pyi_rth_kivy.py,sha256=C1cxAsNeKdbSMhqIdhjo8wpecYbUFpYrxWBG4TieVJ0,665
+PyInstaller/hooks/rthooks/pyi_rth_mplconfig.py,sha256=l8juKbNdm8xIMxp98J1dg29drNEa19mFfghw0krshbE,1486
+PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py,sha256=KH2_jDiLXhSlUayByoIhI8tWb2Nf68NAD6ttcUj7chM,3764
+PyInstaller/hooks/rthooks/pyi_rth_pkgres.py,sha256=chTVIHxN_n7dECdOzQpCYI49K38QY1mnCkPHNZ-Osqs,8550
+PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py,sha256=ikEYJQuPiqVkeR4oMlYOBwHpT8hPwUPibDg1D5EA0jw,4278
+PyInstaller/hooks/rthooks/pyi_rth_pyqt5.py,sha256=5-cf1D-FHHk7bVIty3T3f4klIpJHu1LjcT_L2HxjA8g,1238
+PyInstaller/hooks/rthooks/pyi_rth_pyqt5webengine.py,sha256=EbX2jf8MAKP7OrEvP9GiZNckwYXHiGXytb8yiehWgZ4,1380
+PyInstaller/hooks/rthooks/pyi_rth_pyqt6.py,sha256=jfp89YnSupg71fs0IkZl7Tem7YceIXj5IaJ3NYxPvhg,1317
+PyInstaller/hooks/rthooks/pyi_rth_pyqt6webengine.py,sha256=T9w0CuUIWl7ekwqzonXk8C2-s9ih2vBydvWPDdfqJI4,1308
+PyInstaller/hooks/rthooks/pyi_rth_pyside2.py,sha256=oz6rBDxV1ZSLiKBE-lajqd8mdyZfoL__bmPGFECLgwc,1293
+PyInstaller/hooks/rthooks/pyi_rth_pyside2webengine.py,sha256=ywGxTYixzldRuVgr5qEU0ovpNxy19vtftYDK3TBkHEU,1093
+PyInstaller/hooks/rthooks/pyi_rth_pyside6.py,sha256=ufvRDdJ-fBiCpdhfNwIFIDDzLwjXrhZcyJa3FiKdujY,1293
+PyInstaller/hooks/rthooks/pyi_rth_pyside6webengine.py,sha256=zgrUwjSIIkJxQodh-EldP75gQPUN0E--OqhDJUlL4UU,1093
+PyInstaller/hooks/rthooks/pyi_rth_subprocess.py,sha256=bw1JBUQ9YvWUAiTBE5gDPG6-vxAbnm5Fbln2-mTOQEo,1060
+PyInstaller/hooks/rthooks/pyi_rth_win32api.py,sha256=p2yu1cf6Dpv7TNi3FBgQ7Qg6Fe8e8VWGh8R7RxiP0Kk,933
+PyInstaller/hooks/rthooks/pyi_rth_win32comgenpy.py,sha256=O5wB9763Kf2EbQvKgz5x1pqlMQ-z3XqoIgLIkrEVazg,2204
+PyInstaller/isolated/__init__.py,sha256=CH_Ls5cv7Pi3k7KNhWM-tdiOTqo93FrTC7npL_-cOH4,1499
+PyInstaller/isolated/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/isolated/__pycache__/_child.cpython-38.pyc,,
+PyInstaller/isolated/__pycache__/_parent.cpython-38.pyc,,
+PyInstaller/isolated/_child.py,sha256=jmz7bX9IQIH5FjFz2OOazEouNVkbLZVqq-d9X_TeGzU,3690
+PyInstaller/isolated/_parent.py,sha256=xU4RqbaAm157ZBSOnjIPt2oo8Ey3do9eNRNmbexOgZI,10499
+PyInstaller/lib/README.rst,sha256=VdkvnJUKg6D2bv3nfb-bJoWQ00jTf-pLbvv7KbsSaTA,1333
+PyInstaller/lib/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/lib/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/__init__.py,sha256=q1XQN2YGfSINUSLuBsTs7uhMArf62AFQxdSrq3fS4-o,21
+PyInstaller/lib/modulegraph/__main__.py,sha256=hiwjxxmiY3QfLQ7f0Pd_eSDQYL8MXQyQtkRoJSHe3hU,2653
+PyInstaller/lib/modulegraph/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/__pycache__/__main__.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/__pycache__/_compat.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/__pycache__/find_modules.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/__pycache__/modulegraph.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/__pycache__/util.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/__pycache__/zipio.cpython-38.pyc,,
+PyInstaller/lib/modulegraph/_compat.py,sha256=e_cIW00svLpuuc-1xIMUnMsT11mmWSJlm3R7F4jefdk,494
+PyInstaller/lib/modulegraph/find_modules.py,sha256=Rdzmty604KYGxs1XCm8rJUcWPEGshcwh3vpXDJywG7k,10313
+PyInstaller/lib/modulegraph/modulegraph.py,sha256=brj1Vuf4blNqT-6Zi59-4Smzw4It6MnIsE6vygswsNE,139153
+PyInstaller/lib/modulegraph/util.py,sha256=Z0P6DCTaUYh2VHGl4y-gKg0JD81iPUQL_GNYSuouz-g,4108
+PyInstaller/lib/modulegraph/zipio.py,sha256=wi5VHVDSagrPkQQ53Ajeqw0iQa26ZFEcwC7mFXyhZOg,9917
+PyInstaller/loader/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/loader/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/loader/__pycache__/pyiboot01_bootstrap.cpython-38.pyc,,
+PyInstaller/loader/__pycache__/pyimod01_os_path.cpython-38.pyc,,
+PyInstaller/loader/__pycache__/pyimod02_archive.cpython-38.pyc,,
+PyInstaller/loader/__pycache__/pyimod03_importers.cpython-38.pyc,,
+PyInstaller/loader/__pycache__/pyimod04_ctypes.cpython-38.pyc,,
+PyInstaller/loader/pyiboot01_bootstrap.py,sha256=ojF1YTJBk4VdewS89K0lvqIBoiZ7yeC4BbDV6YI6Q8A,4328
+PyInstaller/loader/pyimod01_os_path.py,sha256=6tr4xc64yWj6EhVBsWGqOoUhfy97NpWBfS9LJm1AYXE,3042
+PyInstaller/loader/pyimod02_archive.py,sha256=MR47187rMIVSRd7e8JVvhz0UYc_YJ_rlneKAKcEebRQ,10536
+PyInstaller/loader/pyimod03_importers.py,sha256=EIRGio8aXGfM1SyTfN-GAxLkKn9UQq76Kirt1_WU-Cg,29540
+PyInstaller/loader/pyimod04_ctypes.py,sha256=Gz5HEDmbzA3iM_RFQaceJrBuQHG2aB3FLA14b2Dk-Uw,3928
+PyInstaller/log.py,sha256=cVN2MyJjl8WwY8yYO4dnEAH1jdPWaYHb2kyeIvjLJOs,1549
+PyInstaller/utils/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/utils/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/utils/__pycache__/_gitrevision.cpython-38.pyc,,
+PyInstaller/utils/__pycache__/conftest.cpython-38.pyc,,
+PyInstaller/utils/__pycache__/git.cpython-38.pyc,,
+PyInstaller/utils/__pycache__/misc.cpython-38.pyc,,
+PyInstaller/utils/__pycache__/osx.cpython-38.pyc,,
+PyInstaller/utils/__pycache__/run_tests.cpython-38.pyc,,
+PyInstaller/utils/__pycache__/tests.cpython-38.pyc,,
+PyInstaller/utils/_gitrevision.py,sha256=1EhTxSK7qNLyYFJXA71MkMFBpl6SSP8kAqUNV9RMk_Y,451
+PyInstaller/utils/cliutils/__init__.py,sha256=MsSFjiLMLJZ7QhUPpVBWKiyDnCzryquRyr329NoCACI,2
+PyInstaller/utils/cliutils/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/utils/cliutils/__pycache__/archive_viewer.cpython-38.pyc,,
+PyInstaller/utils/cliutils/__pycache__/bindepend.cpython-38.pyc,,
+PyInstaller/utils/cliutils/__pycache__/grab_version.cpython-38.pyc,,
+PyInstaller/utils/cliutils/__pycache__/makespec.cpython-38.pyc,,
+PyInstaller/utils/cliutils/__pycache__/set_version.cpython-38.pyc,,
+PyInstaller/utils/cliutils/archive_viewer.py,sha256=mfAIXUUr84hCpQsgwnL3hFgPcP2RGeDRW51LEZLaaa8,7838
+PyInstaller/utils/cliutils/bindepend.py,sha256=3Cgmb-XnsziD7AIpR8z3gNi5nAa3AvRVl27DbRZ6saY,1742
+PyInstaller/utils/cliutils/grab_version.py,sha256=KFX0WjgclMSH-Jjw2Yk6rWPVTBlrIUGFxHSIMaI0y-Q,1700
+PyInstaller/utils/cliutils/makespec.py,sha256=XNUtMTbDogsmtG56z7wuRjOUm5gfPfLBQtTnEfvE4EE,1502
+PyInstaller/utils/cliutils/set_version.py,sha256=bis7K9SvefQoTHd4tGnW1qGu7jKz6VP1Ok18ouiL9pI,1289
+PyInstaller/utils/conftest.py,sha256=LR91u1Q_ex5BAIejWW2YTyxxcw5ZfvvLlIBhZRtnlnU,23579
+PyInstaller/utils/git.py,sha256=Bz9NURzmNARCPbInoQ4g7ftRERaBTmBwpPBL8uZ5i0o,2014
+PyInstaller/utils/hooks/__init__.py,sha256=1CWeA-Q2c2u2gbkcPAQByIgApRHNZaBeY54NEhOhaLY,48640
+PyInstaller/utils/hooks/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/utils/hooks/__pycache__/conda.cpython-38.pyc,,
+PyInstaller/utils/hooks/__pycache__/django.cpython-38.pyc,,
+PyInstaller/utils/hooks/__pycache__/gi.cpython-38.pyc,,
+PyInstaller/utils/hooks/__pycache__/qt.cpython-38.pyc,,
+PyInstaller/utils/hooks/__pycache__/tcl_tk.cpython-38.pyc,,
+PyInstaller/utils/hooks/__pycache__/win32.cpython-38.pyc,,
+PyInstaller/utils/hooks/conda.py,sha256=6Kq4Kr06ncufC0g5_O64RTsGkHHBwgw_eV0FArrd5Us,14265
+PyInstaller/utils/hooks/django.py,sha256=7g2eR3KJdX6Sw_Qs-8Q0CvLuDpa3NAngyVDHtxAuzvo,3091
+PyInstaller/utils/hooks/gi.py,sha256=K0AiM4dziq2xnCNs99CqdijKORGGWUMD480Ik2nQuHY,8745
+PyInstaller/utils/hooks/qt.py,sha256=AWRqCA-cYvCafCyuCGfh2WnVMAeNIMxTZ3dOUaTr8Wo,46366
+PyInstaller/utils/hooks/subproc/__init__.py,sha256=fNGhsx0m5s9iq4yMvH6J1tI0vzUKWd62lIQNSnKTGCE,22
+PyInstaller/utils/hooks/subproc/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/utils/hooks/subproc/__pycache__/django_import_finder.cpython-38.pyc,,
+PyInstaller/utils/hooks/subproc/django_import_finder.py,sha256=V9VWroLcthGtg4KmqyGATSG2fOHWzNoYWnNKn7OXx0Q,3426
+PyInstaller/utils/hooks/tcl_tk.py,sha256=ttWR2N_FSJIYsOEjvxCJBxNZ8AXnsBqBeM67mL6NyZ0,9904
+PyInstaller/utils/hooks/win32.py,sha256=aEaHRDo-yqfn3Rs1-ScyNPCB4f6020_EsCt867oLyGA,1706
+PyInstaller/utils/misc.py,sha256=IiwBTDYzP2hJoONa7-TQv4w02XTjewBRzUD6qXKrwV8,11520
+PyInstaller/utils/osx.py,sha256=xS56m3W3dYKDy0QVOXcDzCNk9TFtprs10Sl7ooEm02I,14989
+PyInstaller/utils/run_tests.py,sha256=z7mWMVAEve-AdBPkwoHv5NoyPjP-zcflO_SqzE1KQ5M,2887
+PyInstaller/utils/tests.py,sha256=LEu0YEEHtnLDB6XOLDKswoeqvZqMXVF65G01e7fW5RA,5766
+PyInstaller/utils/win32/__init__.py,sha256=fNGhsx0m5s9iq4yMvH6J1tI0vzUKWd62lIQNSnKTGCE,22
+PyInstaller/utils/win32/__pycache__/__init__.cpython-38.pyc,,
+PyInstaller/utils/win32/__pycache__/icon.cpython-38.pyc,,
+PyInstaller/utils/win32/__pycache__/versioninfo.cpython-38.pyc,,
+PyInstaller/utils/win32/__pycache__/winmanifest.cpython-38.pyc,,
+PyInstaller/utils/win32/__pycache__/winresource.cpython-38.pyc,,
+PyInstaller/utils/win32/__pycache__/winutils.cpython-38.pyc,,
+PyInstaller/utils/win32/icon.py,sha256=6x8zUFZEGbcBPRD9rNJrTlsncvvQb0-yBEggkYO4VBM,9445
+PyInstaller/utils/win32/versioninfo.py,sha256=5NGKRFyPcTkzsbFvFxd6Sz5EX1kDa-EmdAg6ZlywsPM,19847
+PyInstaller/utils/win32/winmanifest.py,sha256=gUvXqaJYZpyIp3wPvbaTDx4HTa0G88px8xUW4izibVA,44237
+PyInstaller/utils/win32/winresource.py,sha256=pdP1vcDZt2WbYBeKTqllNhh1V65EWPB3F7gFOCgwOqk,9621
+PyInstaller/utils/win32/winutils.py,sha256=-ZvWMWiqhZvat0hPPKU5AgMTY1a__bUtCAEaPap48kM,6335
+pyinstaller-5.0.1.dist-info/COPYING.txt,sha256=3XMVc10MPLsMyGGj6k2c7kl1aLmMrOpkrz6lH05LU4Y,30634
+pyinstaller-5.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+pyinstaller-5.0.1.dist-info/METADATA,sha256=QUX6JKPl2YIaB7aJQ2929CLqTS_ch9VBLGgyA1tL5RA,7138
+pyinstaller-5.0.1.dist-info/RECORD,,
+pyinstaller-5.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+pyinstaller-5.0.1.dist-info/WHEEL,sha256=i9qQj8KaD8_YEW0Vc2oS56fKju23RkQ-FVz-QmzVakQ,98
+pyinstaller-5.0.1.dist-info/entry_points.txt,sha256=HvUkY2YCPxcJQjENngRlDEtmYlf_qWegG1_wv_J99GM,361
+pyinstaller-5.0.1.dist-info/top_level.txt,sha256=GuRmvWXGTRJNYmK5iWGOglNv4L3by7YKaEiKycNZ4XQ,12
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/REQUESTED b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/REQUESTED
new file mode 100644
index 0000000..e69de29
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/WHEEL b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/WHEEL
new file mode 100644
index 0000000..9605f56
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/WHEEL
@@ -0,0 +1,5 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.37.1)
+Root-Is-Purelib: true
+Tag: py3-none-win_amd64
+
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/entry_points.txt b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/entry_points.txt
new file mode 100644
index 0000000..cbc8725
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/entry_points.txt
@@ -0,0 +1,8 @@
+[console_scripts]
+pyi-archive_viewer = PyInstaller.utils.cliutils.archive_viewer:run
+pyi-bindepend = PyInstaller.utils.cliutils.bindepend:run
+pyi-grab_version = PyInstaller.utils.cliutils.grab_version:run
+pyi-makespec = PyInstaller.utils.cliutils.makespec:run
+pyi-set_version = PyInstaller.utils.cliutils.set_version:run
+pyinstaller = PyInstaller.__main__:run
+
diff --git a/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/top_level.txt b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/top_level.txt
new file mode 100644
index 0000000..c313980
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/pyinstaller-5.0.1.dist-info/top_level.txt
@@ -0,0 +1 @@
+PyInstaller
diff --git a/dist/wxPython_WallPaperEngine/python3.dll b/dist/wxPython_WallPaperEngine/python3.dll
new file mode 100644
index 0000000..f94b2d8
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/python3.dll differ
diff --git a/dist/wxPython_WallPaperEngine/python38.dll b/dist/wxPython_WallPaperEngine/python38.dll
new file mode 100644
index 0000000..6bd01bf
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/python38.dll differ
diff --git a/dist/wxPython_WallPaperEngine/pywintypes38.dll b/dist/wxPython_WallPaperEngine/pywintypes38.dll
new file mode 100644
index 0000000..88adeb8
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/pywintypes38.dll differ
diff --git a/dist/wxPython_WallPaperEngine/select.pyd b/dist/wxPython_WallPaperEngine/select.pyd
new file mode 100644
index 0000000..dc50d24
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/select.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/INSTALLER b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/INSTALLER
new file mode 100644
index 0000000..a1b589e
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/LICENSE b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/LICENSE
new file mode 100644
index 0000000..353924b
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/LICENSE
@@ -0,0 +1,19 @@
+Copyright Jason R. Coombs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/METADATA b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/METADATA
new file mode 100644
index 0000000..f4463b4
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/METADATA
@@ -0,0 +1,143 @@
+Metadata-Version: 2.1
+Name: setuptools
+Version: 62.1.0
+Summary: Easily download, build, install, upgrade, and uninstall Python packages
+Home-page: https://github.com/pypa/setuptools
+Author: Python Packaging Authority
+Author-email: distutils-sig@python.org
+License: UNKNOWN
+Project-URL: Documentation, https://setuptools.pypa.io/
+Keywords: CPAN PyPI distutils eggs package management
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: System :: Archiving :: Packaging
+Classifier: Topic :: System :: Systems Administration
+Classifier: Topic :: Utilities
+Requires-Python: >=3.7
+License-File: LICENSE
+Provides-Extra: certs
+Provides-Extra: docs
+Requires-Dist: sphinx ; extra == 'docs'
+Requires-Dist: jaraco.packaging (>=9) ; extra == 'docs'
+Requires-Dist: rst.linker (>=1.9) ; extra == 'docs'
+Requires-Dist: jaraco.tidelift (>=1.4) ; extra == 'docs'
+Requires-Dist: pygments-github-lexers (==0.0.5) ; extra == 'docs'
+Requires-Dist: sphinx-favicon ; extra == 'docs'
+Requires-Dist: sphinx-inline-tabs ; extra == 'docs'
+Requires-Dist: sphinxcontrib-towncrier ; extra == 'docs'
+Requires-Dist: furo ; extra == 'docs'
+Provides-Extra: ssl
+Provides-Extra: testing
+Requires-Dist: pytest (>=6) ; extra == 'testing'
+Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing'
+Requires-Dist: pytest-flake8 ; extra == 'testing'
+Requires-Dist: pytest-enabler (>=1.0.1) ; extra == 'testing'
+Requires-Dist: pytest-perf ; extra == 'testing'
+Requires-Dist: mock ; extra == 'testing'
+Requires-Dist: flake8-2020 ; extra == 'testing'
+Requires-Dist: virtualenv (>=13.0.0) ; extra == 'testing'
+Requires-Dist: wheel ; extra == 'testing'
+Requires-Dist: pip (>=19.1) ; extra == 'testing'
+Requires-Dist: jaraco.envs (>=2.2) ; extra == 'testing'
+Requires-Dist: pytest-xdist ; extra == 'testing'
+Requires-Dist: jaraco.path (>=3.2.0) ; extra == 'testing'
+Requires-Dist: build[virtualenv] ; extra == 'testing'
+Requires-Dist: filelock (>=3.4.0) ; extra == 'testing'
+Requires-Dist: pip-run (>=8.8) ; extra == 'testing'
+Requires-Dist: ini2toml[lite] (>=0.9) ; extra == 'testing'
+Requires-Dist: tomli-w (>=1.0.0) ; extra == 'testing'
+Provides-Extra: testing-integration
+Requires-Dist: pytest ; extra == 'testing-integration'
+Requires-Dist: pytest-xdist ; extra == 'testing-integration'
+Requires-Dist: pytest-enabler ; extra == 'testing-integration'
+Requires-Dist: virtualenv (>=13.0.0) ; extra == 'testing-integration'
+Requires-Dist: tomli ; extra == 'testing-integration'
+Requires-Dist: wheel ; extra == 'testing-integration'
+Requires-Dist: jaraco.path (>=3.2.0) ; extra == 'testing-integration'
+Requires-Dist: jaraco.envs (>=2.2) ; extra == 'testing-integration'
+Requires-Dist: build[virtualenv] ; extra == 'testing-integration'
+Requires-Dist: filelock (>=3.4.0) ; extra == 'testing-integration'
+Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing'
+Requires-Dist: pytest-cov ; (platform_python_implementation != "PyPy") and extra == 'testing'
+Requires-Dist: pytest-mypy (>=0.9.1) ; (platform_python_implementation != "PyPy") and extra == 'testing'
+
+.. image:: https://raw.githubusercontent.com/pypa/setuptools/main/docs/images/banner-640x320.svg
+ :align: center
+
+|
+
+.. image:: https://img.shields.io/pypi/v/setuptools.svg
+ :target: `PyPI link`_
+
+.. image:: https://img.shields.io/pypi/pyversions/setuptools.svg
+ :target: `PyPI link`_
+
+.. _PyPI link: https://pypi.org/project/setuptools
+
+.. image:: https://github.com/pypa/setuptools/workflows/tests/badge.svg
+ :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22
+ :alt: tests
+
+.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
+ :target: https://github.com/psf/black
+ :alt: Code style: Black
+
+.. image:: https://img.shields.io/readthedocs/setuptools/latest.svg
+ :target: https://setuptools.pypa.io
+
+.. image:: https://img.shields.io/badge/skeleton-2022-informational
+ :target: https://blog.jaraco.com/skeleton
+
+.. image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white
+ :target: https://codecov.io/gh/pypa/setuptools
+
+.. image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat
+ :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme
+
+.. image:: https://img.shields.io/discord/803025117553754132
+ :target: https://discord.com/channels/803025117553754132/815945031150993468
+ :alt: Discord
+
+See the `Installation Instructions
+`_ in the Python Packaging
+User's Guide for instructions on installing, upgrading, and uninstalling
+Setuptools.
+
+Questions and comments should be directed to `GitHub Discussions
+`_.
+Bug reports and especially tested patches may be
+submitted directly to the `bug tracker
+`_.
+
+
+Code of Conduct
+===============
+
+Everyone interacting in the setuptools project's codebases, issue trackers,
+chat rooms, and fora is expected to follow the
+`PSF Code of Conduct `_.
+
+
+For Enterprise
+==============
+
+Available as part of the Tidelift Subscription.
+
+Setuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
+
+`Learn more `_.
+
+
+Security Contact
+================
+
+To report a security vulnerability, please use the
+`Tidelift security contact `_.
+Tidelift will coordinate the fix and disclosure.
+
+
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/RECORD b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/RECORD
new file mode 100644
index 0000000..fed0ddd
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/RECORD
@@ -0,0 +1,428 @@
+_distutils_hack/__init__.py,sha256=Am1CVQftk_MHAKvfJQVpQMwVx3lrAbKGPhKIUgwawDY,5298
+_distutils_hack/__pycache__/__init__.cpython-38.pyc,,
+_distutils_hack/__pycache__/override.cpython-38.pyc,,
+_distutils_hack/override.py,sha256=Eu_s-NF6VIZ4Cqd0tbbA5wtWky2IZPNd8et6GLt1mzo,44
+distutils-precedence.pth,sha256=JjjOniUA5XKl4N5_rtZmHrVp0baW_LoHsN0iPaX10iQ,151
+pkg_resources/__init__.py,sha256=fT5Y3P1tcSX8sJomClUU10WHeFmvqyNZM4UZHzdpAvg,108568
+pkg_resources/__pycache__/__init__.cpython-38.pyc,,
+pkg_resources/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+pkg_resources/_vendor/__pycache__/__init__.cpython-38.pyc,,
+pkg_resources/_vendor/__pycache__/appdirs.cpython-38.pyc,,
+pkg_resources/_vendor/__pycache__/pyparsing.cpython-38.pyc,,
+pkg_resources/_vendor/__pycache__/zipp.cpython-38.pyc,,
+pkg_resources/_vendor/appdirs.py,sha256=MievUEuv3l_mQISH5SF0shDk_BNhHHzYiAPrT3ITN4I,24701
+pkg_resources/_vendor/importlib_resources/__init__.py,sha256=evPm12kLgYqTm-pbzm60bOuumumT8IpBNWFp0uMyrzE,506
+pkg_resources/_vendor/importlib_resources/__pycache__/__init__.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/_adapters.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/_common.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/_compat.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/_itertools.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/_legacy.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/abc.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/readers.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/__pycache__/simple.cpython-38.pyc,,
+pkg_resources/_vendor/importlib_resources/_adapters.py,sha256=o51tP2hpVtohP33gSYyAkGNpLfYDBqxxYsadyiRZi1E,4504
+pkg_resources/_vendor/importlib_resources/_common.py,sha256=iIxAaQhotSh6TLLUEfL_ynU2fzEeyHMz9JcL46mUhLg,2741
+pkg_resources/_vendor/importlib_resources/_compat.py,sha256=nFBCGMvImglrqgYkb9aPgOj68-h6xbw-ca94XOv1-zs,2706
+pkg_resources/_vendor/importlib_resources/_itertools.py,sha256=WCdJ1Gs_kNFwKENyIG7TO0Y434IWCu0zjVVSsSbZwU8,884
+pkg_resources/_vendor/importlib_resources/_legacy.py,sha256=TMLkx6aEM6U8xIREPXqGZrMbUhTiPUuPl6ESD7RdYj4,3494
+pkg_resources/_vendor/importlib_resources/abc.py,sha256=MvTJJXajbl74s36Gyeesf76egtbFnh-TMtzQMVhFWXo,3886
+pkg_resources/_vendor/importlib_resources/readers.py,sha256=_9QLGQ5AzrED3PY8S2Zf8V6yLR0-nqqYqtQmgleDJzY,3566
+pkg_resources/_vendor/importlib_resources/simple.py,sha256=xt0qhXbwt3bZ86zuaaKbTiE9A0mDbwu0saRjUq_pcY0,2836
+pkg_resources/_vendor/jaraco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+pkg_resources/_vendor/jaraco/__pycache__/__init__.cpython-38.pyc,,
+pkg_resources/_vendor/jaraco/__pycache__/context.cpython-38.pyc,,
+pkg_resources/_vendor/jaraco/__pycache__/functools.cpython-38.pyc,,
+pkg_resources/_vendor/jaraco/context.py,sha256=7X1tpCLc5EN45iWGzGcsH0Unx62REIkvtRvglj0SiUA,5420
+pkg_resources/_vendor/jaraco/functools.py,sha256=eLwPh8FWY7rQ_cj1YxCekUkibTuerwyoJ_41H7Q7oWM,13515
+pkg_resources/_vendor/jaraco/text/__init__.py,sha256=cN55bFcceW4wTHG5ruv5IuEDRarP-4hBYX8zl94_c30,15526
+pkg_resources/_vendor/jaraco/text/__pycache__/__init__.cpython-38.pyc,,
+pkg_resources/_vendor/more_itertools/__init__.py,sha256=ZQYu_9H6stSG7viUgT32TFqslqcZwq82kWRZooKiI8Y,83
+pkg_resources/_vendor/more_itertools/__pycache__/__init__.cpython-38.pyc,,
+pkg_resources/_vendor/more_itertools/__pycache__/more.cpython-38.pyc,,
+pkg_resources/_vendor/more_itertools/__pycache__/recipes.cpython-38.pyc,,
+pkg_resources/_vendor/more_itertools/more.py,sha256=oave_26jctLsuF30e1SOWMgW0bEuwS-t08wkaLUwvXc,132569
+pkg_resources/_vendor/more_itertools/recipes.py,sha256=N6aCDwoIPvE-aiqpGU-nbFwqiM3X8MKRcxBM84naW88,18410
+pkg_resources/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661
+pkg_resources/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497
+pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/_manylinux.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/_musllinux.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/markers.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/tags.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/utils.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/__pycache__/version.cpython-38.pyc,,
+pkg_resources/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488
+pkg_resources/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378
+pkg_resources/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
+pkg_resources/_vendor/packaging/markers.py,sha256=gFSKoBTb0sKDw1v_apJy15lPr0v2mEvuEkfooTtcWx4,8496
+pkg_resources/_vendor/packaging/requirements.py,sha256=uJ4cjwm3_nrfHJLCcGU9mT5aw8SXfw8v1aBUD7OFuVs,4706
+pkg_resources/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110
+pkg_resources/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699
+pkg_resources/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200
+pkg_resources/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665
+pkg_resources/_vendor/pyparsing.py,sha256=tmrp-lu-qO1i75ZzIN5A12nKRRD1Cm4Vpk-5LR9rims,232055
+pkg_resources/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
+pkg_resources/extern/__init__.py,sha256=inFoCK9jn_yRFqkbNSOxOYyZD0aB3awch_xtbwIW_-Y,2426
+pkg_resources/extern/__pycache__/__init__.cpython-38.pyc,,
+setuptools-62.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+setuptools-62.1.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050
+setuptools-62.1.0.dist-info/METADATA,sha256=ISOIsdNYOMJof1ulhFzp5nozv49jSUI3C0MpBdi18AE,6039
+setuptools-62.1.0.dist-info/RECORD,,
+setuptools-62.1.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+setuptools-62.1.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
+setuptools-62.1.0.dist-info/entry_points.txt,sha256=wGnbIm7sqODfIXBH1z7YfkG4xXIks1fD-hFCtQrVaE4,2635
+setuptools-62.1.0.dist-info/top_level.txt,sha256=d9yL39v_W7qmKDDSH6sT4bE0j_Ls1M3P161OGgdsm4g,41
+setuptools/__init__.py,sha256=IIYv_YijqFsRSC0bMTpWoexzV6R__DZPsgZCExr5C2Q,5528
+setuptools/__pycache__/__init__.cpython-38.pyc,,
+setuptools/__pycache__/_deprecation_warning.cpython-38.pyc,,
+setuptools/__pycache__/_entry_points.cpython-38.pyc,,
+setuptools/__pycache__/_imp.cpython-38.pyc,,
+setuptools/__pycache__/_importlib.cpython-38.pyc,,
+setuptools/__pycache__/_itertools.cpython-38.pyc,,
+setuptools/__pycache__/_path.cpython-38.pyc,,
+setuptools/__pycache__/_reqs.cpython-38.pyc,,
+setuptools/__pycache__/archive_util.cpython-38.pyc,,
+setuptools/__pycache__/build_meta.cpython-38.pyc,,
+setuptools/__pycache__/dep_util.cpython-38.pyc,,
+setuptools/__pycache__/depends.cpython-38.pyc,,
+setuptools/__pycache__/discovery.cpython-38.pyc,,
+setuptools/__pycache__/dist.cpython-38.pyc,,
+setuptools/__pycache__/errors.cpython-38.pyc,,
+setuptools/__pycache__/extension.cpython-38.pyc,,
+setuptools/__pycache__/glob.cpython-38.pyc,,
+setuptools/__pycache__/installer.cpython-38.pyc,,
+setuptools/__pycache__/launch.cpython-38.pyc,,
+setuptools/__pycache__/logging.cpython-38.pyc,,
+setuptools/__pycache__/monkey.cpython-38.pyc,,
+setuptools/__pycache__/msvc.cpython-38.pyc,,
+setuptools/__pycache__/namespaces.cpython-38.pyc,,
+setuptools/__pycache__/package_index.cpython-38.pyc,,
+setuptools/__pycache__/py34compat.cpython-38.pyc,,
+setuptools/__pycache__/sandbox.cpython-38.pyc,,
+setuptools/__pycache__/unicode_utils.cpython-38.pyc,,
+setuptools/__pycache__/version.cpython-38.pyc,,
+setuptools/__pycache__/wheel.cpython-38.pyc,,
+setuptools/__pycache__/windows_support.cpython-38.pyc,,
+setuptools/_deprecation_warning.py,sha256=jU9-dtfv6cKmtQJOXN8nP1mm7gONw5kKEtiPtbwnZyI,218
+setuptools/_distutils/__init__.py,sha256=3YtkfadGoU57VMEQFk2TNyMZVud1kDkakWQLhWg2Fm8,536
+setuptools/_distutils/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/_collections.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/_macos_compat.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/_msvccompiler.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/archive_util.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/bcppcompiler.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/ccompiler.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/cmd.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/config.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/core.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/cygwinccompiler.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/debug.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/dep_util.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/dir_util.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/dist.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/errors.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/extension.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/fancy_getopt.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/file_util.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/filelist.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/log.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/msvc9compiler.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/msvccompiler.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/py35compat.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/py38compat.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/py39compat.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/spawn.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/sysconfig.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/text_file.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/unixccompiler.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/util.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/version.cpython-38.pyc,,
+setuptools/_distutils/__pycache__/versionpredicate.cpython-38.pyc,,
+setuptools/_distutils/_collections.py,sha256=s7zkSh7QUyJWEYSt5n10ouAZNDYvux8YCHnnY3k0wmQ,1330
+setuptools/_distutils/_macos_compat.py,sha256=-v_Z0M1LEH5k-VhSBBbuz_pDp3nSZ4rzU9E7iIskPDc,239
+setuptools/_distutils/_msvccompiler.py,sha256=i8vRyUE3jqX5BLzVa3ZeLheyEoKN6KGJDJ44Tlz69ww,20809
+setuptools/_distutils/archive_util.py,sha256=qW-uiGwYexTvK5e-iSel_31Dshx-CqTanNPK6snwf98,8572
+setuptools/_distutils/bcppcompiler.py,sha256=gJqtPboJZl1llfCtjo_SVCE1DdjgK1H2rd0Vngz18QI,14885
+setuptools/_distutils/ccompiler.py,sha256=YbernlpGZZqKnfzZSfJ814fINca8cicZiUlBjyUPyaM,47644
+setuptools/_distutils/cmd.py,sha256=eco6LAGUtobLuPafuhmgKgkwRRL_WY8KJ4YeDCHpcls,18079
+setuptools/_distutils/command/__init__.py,sha256=2TA-rlNDlzeI-csbWHXFjGD8uOYqALMfyWOhT49nC6g,799
+setuptools/_distutils/command/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/bdist.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/bdist_dumb.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/bdist_msi.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/bdist_rpm.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/bdist_wininst.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/build.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/build_clib.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/build_ext.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/build_py.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/build_scripts.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/check.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/clean.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/config.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/install.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/install_data.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/install_egg_info.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/install_headers.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/install_lib.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/install_scripts.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/py37compat.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/register.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/sdist.cpython-38.pyc,,
+setuptools/_distutils/command/__pycache__/upload.cpython-38.pyc,,
+setuptools/_distutils/command/bdist.py,sha256=2z4eudRl_n7m3lG9leL0IYqes4bsm8c0fxfZuiafjMg,5562
+setuptools/_distutils/command/bdist_dumb.py,sha256=BTur9jcIppyP7Piavjfsk7YjElqvxeYO2npUyPPOekc,4913
+setuptools/_distutils/command/bdist_msi.py,sha256=9Q1f4Pw4PRsg54fqHVgH8FZb78-yN4D5VlDC2KugX0A,35574
+setuptools/_distutils/command/bdist_rpm.py,sha256=gjOw22GhDSbcq0bdq25cTb-n6HWWm0bShLQad_mkJ4k,21537
+setuptools/_distutils/command/bdist_wininst.py,sha256=iGlaI-VfElHOneeczKHWnSN5a10-7IMcJaXuR1mdS3c,16030
+setuptools/_distutils/command/build.py,sha256=wOSoeOXIye6wvC95bM9VIuNXpB_xv32H7olgNxWLPCQ,5814
+setuptools/_distutils/command/build_clib.py,sha256=bgVTHh28eLQA2Gkw68amApd_j7qQBX4MTI-zTvAK_J4,8022
+setuptools/_distutils/command/build_ext.py,sha256=KgxpopuD6sqep0LsumMH15joWih0VdbnXpYm-ETNjoE,31612
+setuptools/_distutils/command/build_py.py,sha256=hXesMrH_epNj6K8SUtJdipgEis3EdICKeZ8VWe_ndck,16495
+setuptools/_distutils/command/build_scripts.py,sha256=_101sDyUKSEfu3302x3VGiyHIl4aXWSutDXCXY2XTtE,5637
+setuptools/_distutils/command/check.py,sha256=ul4DfgJALBlQiQLYJ6NoL8rKYoO-1TM0fc-g7k3SAYU,6197
+setuptools/_distutils/command/clean.py,sha256=2TCt47ru4hZZM0RfVfUYj5bbpicpGLP4Qhw5jBtvp9k,2776
+setuptools/_distutils/command/config.py,sha256=2aTjww3PwjMB8-ZibCe4P7B-qG1hM1gn_rJXYyxRz6c,13117
+setuptools/_distutils/command/install.py,sha256=dsCo4g_FG6SMsX_TIJQ-qaHWbgdjupBBie4-dfm793o,30075
+setuptools/_distutils/command/install_data.py,sha256=YhGOAwh3gJPqF7em5XA0rmpR42z1bLh80ooElzDyUvk,2822
+setuptools/_distutils/command/install_egg_info.py,sha256=WijZ7cHMAkNMMCwrZ--KoqV9M2RtLouU4-qSbiCwv70,2753
+setuptools/_distutils/command/install_headers.py,sha256=XQ6idkbIDfr1ljXCOznuVUMvOFpHBn6cK0Wz9gIM2b4,1298
+setuptools/_distutils/command/install_lib.py,sha256=9AofR-MO9lAtjwwuukCptepOaJEKMZW2VHiyR5hU7HA,8397
+setuptools/_distutils/command/install_scripts.py,sha256=_CLUeQwGJRcY2kik7azPMn5IdtDCrjWdUvZ1khlG6ck,2017
+setuptools/_distutils/command/py37compat.py,sha256=qzRhhvTihqx_PZZt2ZYECxh1X3Oj255VqatzelYFAKw,671
+setuptools/_distutils/command/register.py,sha256=2jaq9968rt2puRVDBx1HbNiXv27uOk8idE_4lPf_3VM,11712
+setuptools/_distutils/command/sdist.py,sha256=qotJjAOzyhJjq2-oDImjNFrOtaSneEFDJTB-sEk1wnU,19005
+setuptools/_distutils/command/upload.py,sha256=BLO1w7eSAqsCjCLXtf_CRVSjwF1WmyOByGVGNdcQ8oY,7597
+setuptools/_distutils/config.py,sha256=dtHgblx9JhfyrKx1-J7Jlxw_f7s8ZbPFQii2UWMTZpY,4827
+setuptools/_distutils/core.py,sha256=0v7Emh9y0AW9o4AEjfVMhDxKzTFWFxUQn46spFSL56g,9282
+setuptools/_distutils/cygwinccompiler.py,sha256=eOMXcoZ_Reto4VQR_lWK-IylR1Lsi_RW0MMwCqhlvtU,14521
+setuptools/_distutils/debug.py,sha256=N6MrTAqK6l9SVk6tWweR108PM8Ol7qNlfyV-nHcLhsY,139
+setuptools/_distutils/dep_util.py,sha256=GuR9Iw_jzZRkyemJ5HX8rB_wRGxkIBcBm1qh54r7zhk,3491
+setuptools/_distutils/dir_util.py,sha256=UwhBOUTcV65GTwce4SPuTXR8Z8q3LYEcmttqcGb0bYo,7778
+setuptools/_distutils/dist.py,sha256=Biuf6ca8uiFfMScRFsYUKtb5neMPtxKxRtXn50_1f3U,50421
+setuptools/_distutils/errors.py,sha256=Yr6tKZGdzBoNi53vBtiq0UJ__X05CmxSdQJqOWaw6SY,3577
+setuptools/_distutils/extension.py,sha256=bTb3Q0CoevGKYv5dX1ls--Ln8tlB0-UEOsi9BwzlZ-s,10515
+setuptools/_distutils/fancy_getopt.py,sha256=OPxp2CxHi1Yp_d1D8JxW4Ueq9fC71tegQFaafh58GGU,17784
+setuptools/_distutils/file_util.py,sha256=0hUqfItN_x2DVihR0MHdA4KCMVCOO8VoByaFp_a6MDg,8148
+setuptools/_distutils/filelist.py,sha256=Z9f5hvepZnpniZ2IFmCnWIjdviWozs8sbARBhWajwoM,13407
+setuptools/_distutils/log.py,sha256=gZ0wCQvSMzrS_6ccOhtvceqigM77oT_GKB_nnooRIXo,1973
+setuptools/_distutils/msvc9compiler.py,sha256=XXs85TZO4quRKOdWUk6ylcD-1f_QAm4ceiHbiW5tH-k,30474
+setuptools/_distutils/msvccompiler.py,sha256=E-Fm6eLWnRr-sSRpHGOq6ezJ7YCnDuM3MV7_i9wiTRg,23531
+setuptools/_distutils/py35compat.py,sha256=-sk1vBIsOgH-AobjIYbK_OEjdJF_54Ul_D1EiE9XM_c,455
+setuptools/_distutils/py38compat.py,sha256=II7ddBxOijC7uNN4z_46HYUjwYTJYMNiLJoGTormZm0,212
+setuptools/_distutils/py39compat.py,sha256=gHQq_Tc-eA3YEqELlx6WbfwmvK9J1_sOZ8rzLY6ema4,638
+setuptools/_distutils/spawn.py,sha256=rbPiTTUGLIo0QtzS-n04HuzXh15ztDcUDJ94vXfheFY,3474
+setuptools/_distutils/sysconfig.py,sha256=HQ_npe8jyRvzpPPSCSZ2MhMJtEWoEyRAws7mlSTrA6s,17254
+setuptools/_distutils/text_file.py,sha256=PsuAJeWdKJoLSV_6N6IpB5-0Pa84KzLUucJMFRazw3I,12483
+setuptools/_distutils/unixccompiler.py,sha256=Niw7fP35jvJkK0EWU-2zNuWRtzlKxyCx5bd7UPZXfPk,15799
+setuptools/_distutils/util.py,sha256=2WMXovrYPE-Uc06ckbV-mHgm9IKsaQ4nUdSGiK-9w_I,18537
+setuptools/_distutils/version.py,sha256=74BG0K1UZA9NFWK6QNCY8nb1Q_olMeWnh2O-qjEm6rE,13015
+setuptools/_distutils/versionpredicate.py,sha256=vx4ND3BtMgxFR9iZ4_t3WFa-NdIKxO8vtOd0twBppxc,5277
+setuptools/_entry_points.py,sha256=5rRyEuiC0tdEsoCRJ6NWii5RET134mtDtjoSTFdLCwA,1972
+setuptools/_imp.py,sha256=HmF91IbitRfsD5z-g4_wmcuH-RahyIONbPgiCOFgtzA,2392
+setuptools/_importlib.py,sha256=VItIWibvlzNI2QEko84WAmLh0b0_iVFd8TtjY0AekjY,891
+setuptools/_itertools.py,sha256=pZAgXNz6tRPUFnHAaKJ90xAgD0gLPemcE1396Zgz73o,675
+setuptools/_path.py,sha256=nMzHs8z0MXh_MsQG3ndRrWsQS1q2u_E_-0QxeVqXfkk,176
+setuptools/_reqs.py,sha256=ApdTOmDFyK7hbHDnAH8VwhtVD5kvnOthyMNTmrUeFXs,501
+setuptools/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+setuptools/_vendor/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/__pycache__/ordered_set.cpython-38.pyc,,
+setuptools/_vendor/__pycache__/pyparsing.cpython-38.pyc,,
+setuptools/_vendor/__pycache__/typing_extensions.cpython-38.pyc,,
+setuptools/_vendor/__pycache__/zipp.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__init__.py,sha256=xRXwTtvg4EAYuBotYeGawbjraQD4GFIvKgMClxApCDY,30130
+setuptools/_vendor/importlib_metadata/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__pycache__/_adapters.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__pycache__/_collections.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__pycache__/_compat.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__pycache__/_functools.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__pycache__/_itertools.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__pycache__/_meta.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/__pycache__/_text.cpython-38.pyc,,
+setuptools/_vendor/importlib_metadata/_adapters.py,sha256=B6fCi5-8mLVDFUZj3krI5nAo-mKp1dH_qIavyIyFrJs,1862
+setuptools/_vendor/importlib_metadata/_collections.py,sha256=CJ0OTCHIjWA0ZIVS4voORAsn2R4R2cQBEtPsZEJpASY,743
+setuptools/_vendor/importlib_metadata/_compat.py,sha256=cotBaMUB-2pIRZboQnWp9fEqm6Dwlypndn-EEn0bj5M,1828
+setuptools/_vendor/importlib_metadata/_functools.py,sha256=PsY2-4rrKX4RVeRC1oGp1lB1pmC9eKN88_f-bD9uOoA,2895
+setuptools/_vendor/importlib_metadata/_itertools.py,sha256=cvr_2v8BRbxcIl5x5ldfqdHjhI8Yi8s8yk50G_nm6jQ,2068
+setuptools/_vendor/importlib_metadata/_meta.py,sha256=_F48Hu_jFxkfKWz5wcYS8vO23qEygbVdF9r-6qh-hjE,1154
+setuptools/_vendor/importlib_metadata/_text.py,sha256=HCsFksZpJLeTP3NEk_ngrAeXVRRtTrtyh9eOABoRP4A,2166
+setuptools/_vendor/importlib_resources/__init__.py,sha256=evPm12kLgYqTm-pbzm60bOuumumT8IpBNWFp0uMyrzE,506
+setuptools/_vendor/importlib_resources/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/_adapters.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/_common.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/_compat.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/_itertools.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/_legacy.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/abc.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/readers.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/__pycache__/simple.cpython-38.pyc,,
+setuptools/_vendor/importlib_resources/_adapters.py,sha256=o51tP2hpVtohP33gSYyAkGNpLfYDBqxxYsadyiRZi1E,4504
+setuptools/_vendor/importlib_resources/_common.py,sha256=iIxAaQhotSh6TLLUEfL_ynU2fzEeyHMz9JcL46mUhLg,2741
+setuptools/_vendor/importlib_resources/_compat.py,sha256=nFBCGMvImglrqgYkb9aPgOj68-h6xbw-ca94XOv1-zs,2706
+setuptools/_vendor/importlib_resources/_itertools.py,sha256=WCdJ1Gs_kNFwKENyIG7TO0Y434IWCu0zjVVSsSbZwU8,884
+setuptools/_vendor/importlib_resources/_legacy.py,sha256=TMLkx6aEM6U8xIREPXqGZrMbUhTiPUuPl6ESD7RdYj4,3494
+setuptools/_vendor/importlib_resources/abc.py,sha256=MvTJJXajbl74s36Gyeesf76egtbFnh-TMtzQMVhFWXo,3886
+setuptools/_vendor/importlib_resources/readers.py,sha256=_9QLGQ5AzrED3PY8S2Zf8V6yLR0-nqqYqtQmgleDJzY,3566
+setuptools/_vendor/importlib_resources/simple.py,sha256=xt0qhXbwt3bZ86zuaaKbTiE9A0mDbwu0saRjUq_pcY0,2836
+setuptools/_vendor/jaraco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+setuptools/_vendor/jaraco/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/jaraco/__pycache__/context.cpython-38.pyc,,
+setuptools/_vendor/jaraco/__pycache__/functools.cpython-38.pyc,,
+setuptools/_vendor/jaraco/context.py,sha256=7X1tpCLc5EN45iWGzGcsH0Unx62REIkvtRvglj0SiUA,5420
+setuptools/_vendor/jaraco/functools.py,sha256=ap1qoXaNABOx897366NTMEd2objrqAoSO1zuxZPjcmM,13512
+setuptools/_vendor/jaraco/text/__init__.py,sha256=KfFGMerrkN_0V0rgtJVx-9dHt3tW7i_uJypjwEcLtC0,15517
+setuptools/_vendor/jaraco/text/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/more_itertools/__init__.py,sha256=C7sXffHTXM3P-iaLPPfqfmDoxOflQMJLcM7ed9p3jak,82
+setuptools/_vendor/more_itertools/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/more_itertools/__pycache__/more.cpython-38.pyc,,
+setuptools/_vendor/more_itertools/__pycache__/recipes.cpython-38.pyc,,
+setuptools/_vendor/more_itertools/more.py,sha256=0rB_mibFR51sq33UlAI_bWfaNdsYNnJr1v6S0CaW7QA,117959
+setuptools/_vendor/more_itertools/recipes.py,sha256=UkNkrsZyqiwgLHANBTmvMhCvaNSvSNYhyOpz_Jc55DY,16256
+setuptools/_vendor/nspektr/__init__.py,sha256=XWtmwe82S6ne5CzsYcIQGRdkv_Ifpar1TXj8o6A702w,4039
+setuptools/_vendor/nspektr/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/nspektr/__pycache__/_compat.cpython-38.pyc,,
+setuptools/_vendor/nspektr/_compat.py,sha256=CF22_lONX0wNkW3nn5CCK7nH3EneY6tWP_7_xtz2UkY,600
+setuptools/_vendor/ordered_set.py,sha256=dbaCcs27dyN9gnMWGF5nA_BrVn6Q-NrjKYJpV9_fgBs,15130
+setuptools/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661
+setuptools/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497
+setuptools/_vendor/packaging/__pycache__/__about__.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/_manylinux.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/_musllinux.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/_structures.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/markers.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/requirements.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/tags.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/utils.cpython-38.pyc,,
+setuptools/_vendor/packaging/__pycache__/version.cpython-38.pyc,,
+setuptools/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488
+setuptools/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378
+setuptools/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
+setuptools/_vendor/packaging/markers.py,sha256=lihRgqpZjLM-JW-vxlLPqU3kmVe79g9vypy1kxmTRuQ,8493
+setuptools/_vendor/packaging/requirements.py,sha256=Opd0FjqgdEiWkzBLyo1oLU0Dj01uIFwTAnAJQrr6j2A,4700
+setuptools/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110
+setuptools/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699
+setuptools/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200
+setuptools/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665
+setuptools/_vendor/pyparsing.py,sha256=tmrp-lu-qO1i75ZzIN5A12nKRRD1Cm4Vpk-5LR9rims,232055
+setuptools/_vendor/tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396
+setuptools/_vendor/tomli/__pycache__/__init__.cpython-38.pyc,,
+setuptools/_vendor/tomli/__pycache__/_parser.cpython-38.pyc,,
+setuptools/_vendor/tomli/__pycache__/_re.cpython-38.pyc,,
+setuptools/_vendor/tomli/__pycache__/_types.cpython-38.pyc,,
+setuptools/_vendor/tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633
+setuptools/_vendor/tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943
+setuptools/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
+setuptools/_vendor/typing_extensions.py,sha256=1uqi_RSlI7gos4eJB_NEV3d5wQwzTUQHd3_jrkbTo8Q,87149
+setuptools/_vendor/zipp.py,sha256=ajztOH-9I7KA_4wqDYygtHa6xUBVZgFpmZ8FE74HHHI,8425
+setuptools/archive_util.py,sha256=6WShpDR_uGZOaORRfzBmJyTYtX9xtrhmXTFPqE8kL8s,7346
+setuptools/build_meta.py,sha256=Rp40H4rz20WB0GUz7sGshN9mPx3M18zo7aW5hwejie0,10902
+setuptools/cli-32.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536
+setuptools/cli-64.exe,sha256=KLABu5pyrnokJCv6skjXZ6GsXeyYHGcqOUT3oHI3Xpo,74752
+setuptools/cli-arm64.exe,sha256=o9amxowudZ98NvNWh_a2DRY8LhoIRqTAekxABqltiMc,137216
+setuptools/cli.exe,sha256=dfEuovMNnA2HLa3jRfMPVi5tk4R7alCbpTvuxtCyw0Y,65536
+setuptools/command/__init__.py,sha256=e-8TJOikUe3St0fw2b2p9u5EDdSxl5zHUBJJKifbcQ8,217
+setuptools/command/__pycache__/__init__.cpython-38.pyc,,
+setuptools/command/__pycache__/alias.cpython-38.pyc,,
+setuptools/command/__pycache__/bdist_egg.cpython-38.pyc,,
+setuptools/command/__pycache__/bdist_rpm.cpython-38.pyc,,
+setuptools/command/__pycache__/build_clib.cpython-38.pyc,,
+setuptools/command/__pycache__/build_ext.cpython-38.pyc,,
+setuptools/command/__pycache__/build_py.cpython-38.pyc,,
+setuptools/command/__pycache__/develop.cpython-38.pyc,,
+setuptools/command/__pycache__/dist_info.cpython-38.pyc,,
+setuptools/command/__pycache__/easy_install.cpython-38.pyc,,
+setuptools/command/__pycache__/egg_info.cpython-38.pyc,,
+setuptools/command/__pycache__/install.cpython-38.pyc,,
+setuptools/command/__pycache__/install_egg_info.cpython-38.pyc,,
+setuptools/command/__pycache__/install_lib.cpython-38.pyc,,
+setuptools/command/__pycache__/install_scripts.cpython-38.pyc,,
+setuptools/command/__pycache__/py36compat.cpython-38.pyc,,
+setuptools/command/__pycache__/register.cpython-38.pyc,,
+setuptools/command/__pycache__/rotate.cpython-38.pyc,,
+setuptools/command/__pycache__/saveopts.cpython-38.pyc,,
+setuptools/command/__pycache__/sdist.cpython-38.pyc,,
+setuptools/command/__pycache__/setopt.cpython-38.pyc,,
+setuptools/command/__pycache__/test.cpython-38.pyc,,
+setuptools/command/__pycache__/upload.cpython-38.pyc,,
+setuptools/command/__pycache__/upload_docs.cpython-38.pyc,,
+setuptools/command/alias.py,sha256=1sLQxZcNh6dDQpDmm4G7UGGTol83nY1NTPmNBbm2siI,2381
+setuptools/command/bdist_egg.py,sha256=QEIu1AkgS02j6ejonJY7kwGp6LNxfMeYZ3sxkd55ftA,16623
+setuptools/command/bdist_rpm.py,sha256=PxrgoHPNaw2Pw2qNjjHDPC-Ay_IaDbCqP3d_5N-cj2A,1182
+setuptools/command/build_clib.py,sha256=fWHSFGkk10VCddBWCszvNhowbG9Z9CZXVjQ2uSInoOs,4415
+setuptools/command/build_ext.py,sha256=SNK042HfB2ezlDQbSVRGFqI1IM5A4AsjU1wpV3fgskE,13212
+setuptools/command/build_py.py,sha256=c90V1nVPEtYkdye-xvo-B48V5RLvSgD8JBMfPtUbtYw,8751
+setuptools/command/develop.py,sha256=5_Ss7ENd1_B_jVMY1tF5UV_y1Xu6jbVzAPG8oKeluGA,7012
+setuptools/command/dist_info.py,sha256=7mPeWYcn3_73jFnI8tZf3fZbOb3jGB2z9MOCFst5B_8,2068
+setuptools/command/easy_install.py,sha256=sx7_Rwpa2wUvPZZTa7jLpY3shEL4Ti2d2u1yIUMahHs,85662
+setuptools/command/egg_info.py,sha256=JCzdfLRLE5cpWD9g6lRyW-b83Sb5B4XHcJflrCDX6rk,26272
+setuptools/command/install.py,sha256=CBdw9iITHAc0Zt1YE_8dSWY5BscuTJGrCe2jtEsnepk,5163
+setuptools/command/install_egg_info.py,sha256=pgZ64m_-kmtx3QISHN_kRtMiZC_Y8x1Nr1j38jXEbXQ,2226
+setuptools/command/install_lib.py,sha256=Uz42McsyHZAjrB6cw9E7Bz0xsaTbzxnM1PI9CBhiPtE,3875
+setuptools/command/install_scripts.py,sha256=APFFpt_lYUEo-viMtpXr-Hkwycwq8knTxSTNUu_TwHo,2612
+setuptools/command/launcher manifest.xml,sha256=xlLbjWrB01tKC0-hlVkOKkiSPbzMml2eOPtJ_ucCnbE,628
+setuptools/command/py36compat.py,sha256=7yLWzQj179Enx3pJ8V1cDDCzeLMFMd9XJXlK-iZTq5Y,4946
+setuptools/command/register.py,sha256=kk3DxXCb5lXTvqnhfwx2g6q7iwbUmgTyXUCaBooBOUk,468
+setuptools/command/rotate.py,sha256=SvsQPasezIojPjvMnfkqzh8P0U0tCj0daczF8uc3NQM,2128
+setuptools/command/saveopts.py,sha256=za7QCBcQimKKriWcoCcbhxPjUz30gSB74zuTL47xpP4,658
+setuptools/command/sdist.py,sha256=kTpUQpmT9XSE6wR3ClCNCH7eD7eNAeywIISYIRIYOpU,6422
+setuptools/command/setopt.py,sha256=okxhqD1NM1nQlbSVDCNv6P7Y7g680sc2r-tUW7wPH1Y,5086
+setuptools/command/test.py,sha256=j3NeJ3_ADgkCvWHfuvMrZmSFoTQFngp9Lg3XYNkyZlg,8133
+setuptools/command/upload.py,sha256=XT3YFVfYPAmA5qhGg0euluU98ftxRUW-PzKcODMLxUs,462
+setuptools/command/upload_docs.py,sha256=Cn9xYk61g9oPnVR2ItPJjv-dOjSGmN5faUPAvQjHCT8,7492
+setuptools/config/__init__.py,sha256=WJ2fUe8YBvyln56mjpLXdFKffdEyRJ4cZUenRwCJo1Y,1107
+setuptools/config/__pycache__/__init__.cpython-38.pyc,,
+setuptools/config/__pycache__/_apply_pyprojecttoml.cpython-38.pyc,,
+setuptools/config/__pycache__/expand.cpython-38.pyc,,
+setuptools/config/__pycache__/pyprojecttoml.cpython-38.pyc,,
+setuptools/config/__pycache__/setupcfg.cpython-38.pyc,,
+setuptools/config/_apply_pyprojecttoml.py,sha256=jv3iXCN0vyyJ3URsBaMJo13D5qfd45uV92Wv5N4uwvg,13535
+setuptools/config/_validate_pyproject/__init__.py,sha256=5YXPW1sabVn5jpZ25sUjeF6ij3_4odJiwUWi4nRD2Dc,1038
+setuptools/config/_validate_pyproject/__pycache__/__init__.cpython-38.pyc,,
+setuptools/config/_validate_pyproject/__pycache__/error_reporting.cpython-38.pyc,,
+setuptools/config/_validate_pyproject/__pycache__/extra_validations.cpython-38.pyc,,
+setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_exceptions.cpython-38.pyc,,
+setuptools/config/_validate_pyproject/__pycache__/fastjsonschema_validations.cpython-38.pyc,,
+setuptools/config/_validate_pyproject/__pycache__/formats.cpython-38.pyc,,
+setuptools/config/_validate_pyproject/error_reporting.py,sha256=vWiDs0hjlCBjZ_g4Xszsh97lIP9M4_JaLQ6MCQ26W9U,11266
+setuptools/config/_validate_pyproject/extra_validations.py,sha256=yLqffO96MQ4rLTY989DbUUpvaFQSE_hvKqfCtdducIM,1181
+setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py,sha256=w749JgqKi8clBFcObdcbZVqsmF4oJ_QByhZ1SGbUFNw,1612
+setuptools/config/_validate_pyproject/fastjsonschema_validations.py,sha256=LKhtts-xxeH8BMquXugtPO-Bg1eHDV3TcSuIEUXcx0M,260344
+setuptools/config/_validate_pyproject/formats.py,sha256=Rw135sGHUm87Dv5xUqnx-H2E9WdGgl6NGa5szxFdef4,8647
+setuptools/config/expand.py,sha256=VJIzsWkje01-fEZptALT_3gov7AEiqtvMoNtd_T4xIs,16781
+setuptools/config/pyprojecttoml.py,sha256=aY68maLn-6szqpTIcyZk2lCioC7m7Qi6fbo48W_b9rQ,17427
+setuptools/config/setupcfg.py,sha256=hY46B9b0aonfl7qLQPODy-lgG0M_z1DreIzTXLJpK_4,22098
+setuptools/dep_util.py,sha256=BDx1BkzNQntvAB4alypHbW5UVBzjqths000PrUL4Zqc,949
+setuptools/depends.py,sha256=QYQIadr5DwLxPzkErhNt5hmRhvGhWxoXZMRXCm_jcQ0,5499
+setuptools/discovery.py,sha256=8aAGdW4N5ekR03cMUnlsPo0RB9V24Zphy3iRkCB0Kig,20785
+setuptools/dist.py,sha256=67lLlJKEM5HI5S9QfT2Ert-bujxhkOOlUcOi7WeHaxc,45587
+setuptools/errors.py,sha256=2uToNIRA7dG995pf8ox8a4r7nJtP62-hpLhzsRirnx0,2464
+setuptools/extension.py,sha256=wOWVz6qk-B3qx-O3vNp2gUZ2ItDEoB4MXIDNU_HCdiU,1675
+setuptools/extern/__init__.py,sha256=8Uq3VMtfXVjuCpLPxkPhuAPR9RdWkV9cvspZCpC5Q3c,2523
+setuptools/extern/__pycache__/__init__.cpython-38.pyc,,
+setuptools/glob.py,sha256=1oZjbfjAHSXbgdhSuR6YGU8jKob9L8NtEmBYqcPTLYk,4873
+setuptools/gui-32.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536
+setuptools/gui-64.exe,sha256=aYKMhX1IJLn4ULHgWX0sE0yREUt6B3TEHf_jOw6yNyE,75264
+setuptools/gui-arm64.exe,sha256=TEFnOKDi-mq3ZszxqbCoCXTnM_lhUWjdIqBpr6fVs40,137728
+setuptools/gui.exe,sha256=XBr0bHMA6Hpz2s9s9Bzjl-PwXfa9nH4ie0rFn4V2kWA,65536
+setuptools/installer.py,sha256=s6DQfsoICBJxbUqbduhOJtl1oG0S4yegRCg3EAs0i3M,3824
+setuptools/launch.py,sha256=TyPT-Ic1T2EnYvGO26gfNRP4ysBlrhpbRjQxWsiO414,812
+setuptools/logging.py,sha256=npS_AaQd7a-4CVqxC8CKKkwQqLNvSH__pPO94BOB8TY,1148
+setuptools/monkey.py,sha256=0e3HdVKXHL415O7np-AUqhEFXPPuDdJKbI47chQ_DE4,5217
+setuptools/msvc.py,sha256=3LLt938e6OR7wWPzIvCQu7LCWZSIKqoKV6w3r8jV3kY,50561
+setuptools/namespaces.py,sha256=PMqGVPXPYQgjUTvEg9bGccRAkIODrQ6NmsDg_fwErwI,3093
+setuptools/package_index.py,sha256=ASkMt7VYTHbri-EbnHGD7jZt8shSoy6wxg1uX-t2YdA,40020
+setuptools/py34compat.py,sha256=KYOd6ybRxjBW8NJmYD8t_UyyVmysppFXqHpFLdslGXU,245
+setuptools/sandbox.py,sha256=mR83i-mu-ZUU_7TaMgYCeRSyzkqv8loJ_GR9xhS2DDw,14348
+setuptools/script (dev).tmpl,sha256=RUzQzCQUaXtwdLtYHWYbIQmOaES5Brqq1FvUA_tu-5I,218
+setuptools/script.tmpl,sha256=WGTt5piezO27c-Dbx6l5Q4T3Ff20A5z7872hv3aAhYY,138
+setuptools/unicode_utils.py,sha256=aOOFo4JGwAsiBttGYDsqFS7YqWQeZ2j6DWiCuctR_00,941
+setuptools/version.py,sha256=og_cuZQb0QI6ukKZFfZWPlr1HgJBPPn2vO2m_bI9ZTE,144
+setuptools/wheel.py,sha256=MR8kfgs8p4Bfj-GWlgHunMdJv7LPk_lO1zWzhnL3_hQ,8303
+setuptools/windows_support.py,sha256=KXrFWrteXjhIou0gGwlfBy0ttAszHP52ETq-2pc0mes,718
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/REQUESTED b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/REQUESTED
new file mode 100644
index 0000000..e69de29
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/WHEEL b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/WHEEL
new file mode 100644
index 0000000..becc9a6
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/WHEEL
@@ -0,0 +1,5 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.37.1)
+Root-Is-Purelib: true
+Tag: py3-none-any
+
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/entry_points.txt b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/entry_points.txt
new file mode 100644
index 0000000..18041f6
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/entry_points.txt
@@ -0,0 +1,55 @@
+[distutils.commands]
+alias = setuptools.command.alias:alias
+bdist_egg = setuptools.command.bdist_egg:bdist_egg
+bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm
+build_clib = setuptools.command.build_clib:build_clib
+build_ext = setuptools.command.build_ext:build_ext
+build_py = setuptools.command.build_py:build_py
+develop = setuptools.command.develop:develop
+dist_info = setuptools.command.dist_info:dist_info
+easy_install = setuptools.command.easy_install:easy_install
+egg_info = setuptools.command.egg_info:egg_info
+install = setuptools.command.install:install
+install_egg_info = setuptools.command.install_egg_info:install_egg_info
+install_lib = setuptools.command.install_lib:install_lib
+install_scripts = setuptools.command.install_scripts:install_scripts
+rotate = setuptools.command.rotate:rotate
+saveopts = setuptools.command.saveopts:saveopts
+sdist = setuptools.command.sdist:sdist
+setopt = setuptools.command.setopt:setopt
+test = setuptools.command.test:test
+upload_docs = setuptools.command.upload_docs:upload_docs
+
+[distutils.setup_keywords]
+dependency_links = setuptools.dist:assert_string_list
+eager_resources = setuptools.dist:assert_string_list
+entry_points = setuptools.dist:check_entry_points
+exclude_package_data = setuptools.dist:check_package_data
+extras_require = setuptools.dist:check_extras
+include_package_data = setuptools.dist:assert_bool
+install_requires = setuptools.dist:check_requirements
+namespace_packages = setuptools.dist:check_nsp
+package_data = setuptools.dist:check_package_data
+packages = setuptools.dist:check_packages
+python_requires = setuptools.dist:check_specifier
+setup_requires = setuptools.dist:check_requirements
+test_loader = setuptools.dist:check_importable
+test_runner = setuptools.dist:check_importable
+test_suite = setuptools.dist:check_test_suite
+tests_require = setuptools.dist:check_requirements
+use_2to3 = setuptools.dist:invalid_unless_false
+zip_safe = setuptools.dist:assert_bool
+
+[egg_info.writers]
+PKG-INFO = setuptools.command.egg_info:write_pkg_info
+dependency_links.txt = setuptools.command.egg_info:overwrite_arg
+depends.txt = setuptools.command.egg_info:warn_depends_obsolete
+eager_resources.txt = setuptools.command.egg_info:overwrite_arg
+entry_points.txt = setuptools.command.egg_info:write_entries
+namespace_packages.txt = setuptools.command.egg_info:overwrite_arg
+requires.txt = setuptools.command.egg_info:write_requirements
+top_level.txt = setuptools.command.egg_info:write_toplevel_names
+
+[setuptools.finalize_distribution_options]
+keywords = setuptools.dist:Distribution._finalize_setup_keywords
+parent_finalize = setuptools.dist:_Distribution.finalize_options
diff --git a/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/top_level.txt b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/top_level.txt
new file mode 100644
index 0000000..b5ac107
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/setuptools-62.1.0.dist-info/top_level.txt
@@ -0,0 +1,3 @@
+_distutils_hack
+pkg_resources
+setuptools
diff --git a/dist/wxPython_WallPaperEngine/ucrtbase.dll b/dist/wxPython_WallPaperEngine/ucrtbase.dll
new file mode 100644
index 0000000..0b41078
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/ucrtbase.dll differ
diff --git a/dist/wxPython_WallPaperEngine/unicodedata.pyd b/dist/wxPython_WallPaperEngine/unicodedata.pyd
new file mode 100644
index 0000000..d019c17
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/unicodedata.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/INSTALLER b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/INSTALLER
new file mode 100644
index 0000000..a1b589e
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/LICENSE.txt b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/LICENSE.txt
new file mode 100644
index 0000000..c3441e6
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/LICENSE.txt
@@ -0,0 +1,22 @@
+"wheel" copyright (c) 2012-2014 Daniel Holth and
+contributors.
+
+The MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/METADATA b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/METADATA
new file mode 100644
index 0000000..79b641b
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/METADATA
@@ -0,0 +1,69 @@
+Metadata-Version: 2.1
+Name: wheel
+Version: 0.37.1
+Summary: A built-package format for Python
+Home-page: https://github.com/pypa/wheel
+Author: Daniel Holth
+Author-email: dholth@fastmail.fm
+Maintainer: Alex Grönholm
+Maintainer-email: alex.gronholm@nextday.fi
+License: MIT
+Project-URL: Documentation, https://wheel.readthedocs.io/
+Project-URL: Changelog, https://wheel.readthedocs.io/en/stable/news.html
+Project-URL: Issue Tracker, https://github.com/pypa/wheel/issues
+Keywords: wheel,packaging
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: Topic :: System :: Archiving :: Packaging
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7
+Provides-Extra: test
+Requires-Dist: pytest (>=3.0.0) ; extra == 'test'
+Requires-Dist: pytest-cov ; extra == 'test'
+
+wheel
+=====
+
+This library is the reference implementation of the Python wheel packaging
+standard, as defined in `PEP 427`_.
+
+It has two different roles:
+
+#. A setuptools_ extension for building wheels that provides the
+ ``bdist_wheel`` setuptools command
+#. A command line tool for working with wheel files
+
+It should be noted that wheel is **not** intended to be used as a library, and
+as such there is no stable, public API.
+
+.. _PEP 427: https://www.python.org/dev/peps/pep-0427/
+.. _setuptools: https://pypi.org/project/setuptools/
+
+Documentation
+-------------
+
+The documentation_ can be found on Read The Docs.
+
+.. _documentation: https://wheel.readthedocs.io/
+
+Code of Conduct
+---------------
+
+Everyone interacting in the wheel project's codebases, issue trackers, chat
+rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
+
+.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
+
+
+
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/RECORD b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/RECORD
new file mode 100644
index 0000000..750ba64
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/RECORD
@@ -0,0 +1,41 @@
+../../Scripts/wheel.exe,sha256=A4eWiLGGuWTPW_Tiq6AL9hUWpg8jDWo68m5eNKzUdg0,106839
+wheel-0.37.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+wheel-0.37.1.dist-info/LICENSE.txt,sha256=zKniDGrx_Pv2lAjzd3aShsvuvN7TNhAMm0o_NfvmNeQ,1125
+wheel-0.37.1.dist-info/METADATA,sha256=YmebdXwPQlF98dp9V-Cy4BlE-M-fFM-J9cPVVvlSUi8,2328
+wheel-0.37.1.dist-info/RECORD,,
+wheel-0.37.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+wheel-0.37.1.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
+wheel-0.37.1.dist-info/entry_points.txt,sha256=N8HbYFST3yrNQYeB2wXWBEPUhFsEtKNRPaCFGJPyqyc,108
+wheel-0.37.1.dist-info/top_level.txt,sha256=HxSBIbgEstMPe4eFawhA66Mq-QYHMopXVoAncfjb_1c,6
+wheel/__init__.py,sha256=yLOqsEZUPaM3VNKOMxQraLgCCyF8q3k10KY4C1Hi_Lo,23
+wheel/__main__.py,sha256=lF-YLO4hdQmoWuh4eWZd8YL1U95RSdm76sNLBXa0vjE,417
+wheel/__pycache__/__init__.cpython-38.pyc,,
+wheel/__pycache__/__main__.cpython-38.pyc,,
+wheel/__pycache__/bdist_wheel.cpython-38.pyc,,
+wheel/__pycache__/macosx_libfile.cpython-38.pyc,,
+wheel/__pycache__/metadata.cpython-38.pyc,,
+wheel/__pycache__/pkginfo.cpython-38.pyc,,
+wheel/__pycache__/util.cpython-38.pyc,,
+wheel/__pycache__/wheelfile.cpython-38.pyc,,
+wheel/bdist_wheel.py,sha256=2vfv3g_b8BvZ5Do9bpLEBdu9dQEcvoMQ1flXpKYFJDU,19075
+wheel/cli/__init__.py,sha256=GWSoGUpRabTf8bk3FsNTPrc5Fsr8YOv2dX55iY2W7eY,2572
+wheel/cli/__pycache__/__init__.cpython-38.pyc,,
+wheel/cli/__pycache__/convert.cpython-38.pyc,,
+wheel/cli/__pycache__/pack.cpython-38.pyc,,
+wheel/cli/__pycache__/unpack.cpython-38.pyc,,
+wheel/cli/convert.py,sha256=7F4vj23A2OghDDWn9gX2V-_TeXMza1a5nIejmFGEUJM,9498
+wheel/cli/pack.py,sha256=Bfq6KrHicZKrpbktkreeRxIaWwBozUP99JQy2D8-ddY,3364
+wheel/cli/unpack.py,sha256=0VWzT7U_xyenTPwEVavxqvdee93GPvAFHnR3Uu91aRc,673
+wheel/macosx_libfile.py,sha256=Xvp-IrFyRJ9RThIrPxfEpVCDGfljJPWRTZiyopk70hI,15930
+wheel/metadata.py,sha256=b3kPhZn2w2D9wengltX5nGIZQ3ERUOQ5U-K5vHKPdeg,4344
+wheel/pkginfo.py,sha256=GR76kupQzn1x9sKDaXuE6B6FsZ4OkfRtG7pndlXPvQ4,1257
+wheel/util.py,sha256=mnNZkJCi9DHLI_q4lTudoD0mW97h_AoAWl7prNPLXJc,938
+wheel/vendored/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+wheel/vendored/__pycache__/__init__.cpython-38.pyc,,
+wheel/vendored/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+wheel/vendored/packaging/__pycache__/__init__.cpython-38.pyc,,
+wheel/vendored/packaging/__pycache__/_typing.cpython-38.pyc,,
+wheel/vendored/packaging/__pycache__/tags.cpython-38.pyc,,
+wheel/vendored/packaging/_typing.py,sha256=x59EhQ57TMT-kTRyLZV25HZvYGGwbucTo6iKh_O0tMw,1812
+wheel/vendored/packaging/tags.py,sha256=noDvA--vVKVKlg49XMuZ5_Epi85jW7gMOKfiGuJ2sqU,29560
+wheel/wheelfile.py,sha256=NyH8VcFLvu7jUwH6r4KoL_U45OKFVpUyJ5Z7gRAI_Lc,7574
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/REQUESTED b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/REQUESTED
new file mode 100644
index 0000000..e69de29
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/WHEEL b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/WHEEL
new file mode 100644
index 0000000..0b18a28
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/WHEEL
@@ -0,0 +1,6 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.37.1)
+Root-Is-Purelib: true
+Tag: py2-none-any
+Tag: py3-none-any
+
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/entry_points.txt b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/entry_points.txt
new file mode 100644
index 0000000..b27acad
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/entry_points.txt
@@ -0,0 +1,6 @@
+[console_scripts]
+wheel = wheel.cli:main
+
+[distutils.commands]
+bdist_wheel = wheel.bdist_wheel:bdist_wheel
+
diff --git a/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/top_level.txt b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/top_level.txt
new file mode 100644
index 0000000..2309722
--- /dev/null
+++ b/dist/wxPython_WallPaperEngine/wheel-0.37.1.dist-info/top_level.txt
@@ -0,0 +1 @@
+wheel
diff --git a/dist/wxPython_WallPaperEngine/win32api.pyd b/dist/wxPython_WallPaperEngine/win32api.pyd
new file mode 100644
index 0000000..2493d9c
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/win32api.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/win32gui.pyd b/dist/wxPython_WallPaperEngine/win32gui.pyd
new file mode 100644
index 0000000..c3d574d
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/win32gui.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/win32pdh.pyd b/dist/wxPython_WallPaperEngine/win32pdh.pyd
new file mode 100644
index 0000000..9d30255
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/win32pdh.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wx/_adv.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/wx/_adv.cp38-win_amd64.pyd
new file mode 100644
index 0000000..4f95b32
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wx/_adv.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wx/_core.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/wx/_core.cp38-win_amd64.pyd
new file mode 100644
index 0000000..91c9755
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wx/_core.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wx/_html.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/wx/_html.cp38-win_amd64.pyd
new file mode 100644
index 0000000..dd8888e
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wx/_html.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wx/_msw.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/wx/_msw.cp38-win_amd64.pyd
new file mode 100644
index 0000000..fe0566a
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wx/_msw.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wx/_xml.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/wx/_xml.cp38-win_amd64.pyd
new file mode 100644
index 0000000..00e8ad6
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wx/_xml.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wx/_xrc.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/wx/_xrc.cp38-win_amd64.pyd
new file mode 100644
index 0000000..e7a3054
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wx/_xrc.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wx/siplib.cp38-win_amd64.pyd b/dist/wxPython_WallPaperEngine/wx/siplib.cp38-win_amd64.pyd
new file mode 100644
index 0000000..6f3e389
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wx/siplib.cp38-win_amd64.pyd differ
diff --git a/dist/wxPython_WallPaperEngine/wxPython_WallPaperEngine.exe b/dist/wxPython_WallPaperEngine/wxPython_WallPaperEngine.exe
new file mode 100644
index 0000000..646d317
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wxPython_WallPaperEngine.exe differ
diff --git a/dist/wxPython_WallPaperEngine/wxbase315u_net_vc140_x64.dll b/dist/wxPython_WallPaperEngine/wxbase315u_net_vc140_x64.dll
new file mode 100644
index 0000000..2f6a53d
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wxbase315u_net_vc140_x64.dll differ
diff --git a/dist/wxPython_WallPaperEngine/wxbase315u_vc140_x64.dll b/dist/wxPython_WallPaperEngine/wxbase315u_vc140_x64.dll
new file mode 100644
index 0000000..642733e
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wxbase315u_vc140_x64.dll differ
diff --git a/dist/wxPython_WallPaperEngine/wxbase315u_xml_vc140_x64.dll b/dist/wxPython_WallPaperEngine/wxbase315u_xml_vc140_x64.dll
new file mode 100644
index 0000000..9862934
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wxbase315u_xml_vc140_x64.dll differ
diff --git a/dist/wxPython_WallPaperEngine/wxmsw315u_core_vc140_x64.dll b/dist/wxPython_WallPaperEngine/wxmsw315u_core_vc140_x64.dll
new file mode 100644
index 0000000..5dedc5c
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wxmsw315u_core_vc140_x64.dll differ
diff --git a/dist/wxPython_WallPaperEngine/wxmsw315u_html_vc140_x64.dll b/dist/wxPython_WallPaperEngine/wxmsw315u_html_vc140_x64.dll
new file mode 100644
index 0000000..9651c9e
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wxmsw315u_html_vc140_x64.dll differ
diff --git a/dist/wxPython_WallPaperEngine/wxmsw315u_xrc_vc140_x64.dll b/dist/wxPython_WallPaperEngine/wxmsw315u_xrc_vc140_x64.dll
new file mode 100644
index 0000000..9d53596
Binary files /dev/null and b/dist/wxPython_WallPaperEngine/wxmsw315u_xrc_vc140_x64.dll differ
diff --git a/wxPython_WallPaperEngine.spec b/wxPython_WallPaperEngine.spec
new file mode 100644
index 0000000..ee846e0
--- /dev/null
+++ b/wxPython_WallPaperEngine.spec
@@ -0,0 +1,50 @@
+# -*- mode: python ; coding: utf-8 -*-
+
+
+block_cipher = None
+
+
+a = Analysis(
+ ['Manager.py'],
+ pathex=[],
+ binaries=[],
+ datas=[],
+ hiddenimports=[],
+ hookspath=[],
+ hooksconfig={},
+ runtime_hooks=[],
+ excludes=[],
+ win_no_prefer_redirects=False,
+ win_private_assemblies=False,
+ cipher=block_cipher,
+ noarchive=False,
+)
+pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
+
+exe = EXE(
+ pyz,
+ a.scripts,
+ [],
+ exclude_binaries=True,
+ name='wxPython_WallPaperEngine',
+ debug=False,
+ bootloader_ignore_signals=False,
+ strip=False,
+ upx=True,
+ console=False,
+ disable_windowed_traceback=False,
+ argv_emulation=False,
+ target_arch=None,
+ codesign_identity=None,
+ entitlements_file=None,
+)
+coll = COLLECT(
+ exe,
+ a.binaries,
+ a.zipfiles,
+ a.datas,
+ strip=False,
+ upx=True,
+ upx_exclude=[],
+ name='wxPython_WallPaperEngine',
+)
diff --git "a/\346\211\223\345\214\205\345\221\275\344\273\244.txt" "b/\346\211\223\345\214\205\345\221\275\344\273\244.txt"
index 5fb9daa..e1d69e3 100644
--- "a/\346\211\223\345\214\205\345\221\275\344\273\244.txt"
+++ "b/\346\211\223\345\214\205\345\221\275\344\273\244.txt"
@@ -1 +1 @@
-pyinstaller -D Manager.py -w -y
\ No newline at end of file
+pyinstaller -D Manager.py -w -y -n wxPython_WallPaperEngine --upx-dir UPX
\ No newline at end of file