From 4ce8720b9dd2eec75863f10f82642ba1edcf7f2d Mon Sep 17 00:00:00 2001
From: Dani John <rocksdanister@gmail.com>
Date: Wed, 9 Sep 2020 19:23:18 +0530
Subject: [PATCH] v1.0.7 src: Wallpaper preview and fixes

- Wallpaper preview - opens a live preview of the wallpaper in a new window with full input support.
- Fixed a bug where it was not possible to customise wallpaper properties of multiple wallpapers in duplicate mode.
-Resolved: https://github.com/rocksdanister/lively/issues/127
Fixed a bug where system-traymenu appears on different screen than the one where cursor is present.
- Temporarily removed libvlc videoplayer and and disabled Convert to video feature.
- Resolved: https://github.com/rocksdanister/lively/issues/125
Installer now checks whether .net core is installed.
- Updated some localization texts.
---
 README.md                                     |   4 +-
 src/installer/Script.iss                      |  22 ++-
 .../livelygrid/LivelyGridView.xaml            |   5 +-
 .../livelygrid/LivelyGridView.xaml.cs         |   1 +
 .../livelysettings/SettingsPage.xaml          |   2 +-
 src/livelywpf/livelySubProcess/Program.cs     |   1 +
 .../Core/InputForwarding/RawInputDX.xaml.cs   |   2 +-
 src/livelywpf/livelywpf/Core/SetupDesktop.cs  |  20 ++-
 .../livelywpf/Core/Wallpapers/WebProcess.cs   |  50 +++----
 src/livelywpf/livelywpf/Docs/license.rtf      | 114 ++++++++--------
 .../livelywpf/Model/SettingsModel.cs          |  24 +---
 src/livelywpf/livelywpf/Program.cs            |   5 +-
 .../Properties/Resources.Designer.cs          |   9 ++
 .../livelywpf/Properties/Resources.ar.resx    |   3 +
 .../livelywpf/Properties/Resources.de.resx    |   3 +
 .../livelywpf/Properties/Resources.es.resx    |   3 +
 .../livelywpf/Properties/Resources.fil.resx   |   3 +
 .../livelywpf/Properties/Resources.fr.resx    |   3 +
 .../livelywpf/Properties/Resources.hu.resx    |   3 +
 .../livelywpf/Properties/Resources.it.resx    |   3 +
 .../livelywpf/Properties/Resources.ko.resx    |   3 +
 .../livelywpf/Properties/Resources.ms.resx    |  21 +--
 .../livelywpf/Properties/Resources.nl-NL.resx |   3 +
 .../livelywpf/Properties/Resources.pl.resx    |   3 +
 .../livelywpf/Properties/Resources.pt-BR.resx |   3 +
 .../livelywpf/Properties/Resources.pt.resx    |   3 +
 .../livelywpf/Properties/Resources.resx       |   3 +
 .../livelywpf/Properties/Resources.ru.resx    |   3 +
 .../livelywpf/Properties/Resources.sv.resx    |   3 +
 .../livelywpf/Properties/Resources.uk.resx    |   3 +
 .../Properties/Resources.zh-Hant.resx         |   3 +
 .../livelywpf/Properties/Resources.zh.resx    |  15 ++-
 src/livelywpf/livelywpf/Systray.cs            |  52 +++++++-
 .../ViewModel/ScreenLayoutViewModel.cs        |  12 +-
 .../livelywpf/ViewModel/SettingsViewModel.cs  |  17 +++
 .../Dialogues/WallpaperPreviewWindow.xaml     |  21 +++
 .../Dialogues/WallpaperPreviewWindow.xaml.cs  | 126 ++++++++++++++++++
 .../Views/Main/AddWallpaperView.xaml          |   2 +-
 .../livelywpf/Views/Main/LibraryView.xaml.cs  |  11 +-
 .../Views/Screen/ScreenLayoutView.xaml.cs     |   2 +-
 .../WallpaperViews/VLCElement.xaml.cs         |  13 +-
 src/livelywpf/livelywpf/livelywpf.csproj      |   8 +-
 42 files changed, 451 insertions(+), 159 deletions(-)
 create mode 100644 src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml
 create mode 100644 src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml.cs

diff --git a/README.md b/README.md
index 9edd1cb14..5ef078c26 100644
--- a/README.md
+++ b/README.md
@@ -88,10 +88,10 @@ Help translate lively to other languages: <a href="https://github.com/rocksdanis
 
 **_I'm not officially affiliated with Unity technologies, godot, shadertoy;_**
 ## Download
-##### Latest version: v1.0.5.0 (Windows 10 1903 or above)[What's new?](https://github.com/rocksdanister/lively/releases/tag/v1.0.5.0)
+##### Latest version: v1.0.7.0 (Windows 10 1903 or above)[What's new?](https://github.com/rocksdanister/lively/releases/tag/v1.0.7.0)
 - [`Download Lively Wallpaper`][direct-full-win32] 
      
-[direct-full-win32]: https://github.com/rocksdanister/lively/releases/download/v1.0.5.0/lively_setup_x86_full_v1050.exe
+[direct-full-win32]: https://github.com/rocksdanister/lively/releases/download/v1.0.7.0/lively_setup_x86_full_v1070.exe
 
 **Installer will give Smartscreen warning, [discussion.](https://github.com/rocksdanister/lively/issues/9)**
 
diff --git a/src/installer/Script.iss b/src/installer/Script.iss
index 31353d64c..bfd809d65 100644
--- a/src/installer/Script.iss
+++ b/src/installer/Script.iss
@@ -2,7 +2,7 @@
 ; https://jrsoftware.org/isinfo.php
 
 #define MyAppName "Lively Wallpaper"
-#define MyAppVersion "1.0.5.0"
+#define MyAppVersion "1.0.7.0"
 #define MyAppPublisher "rocksdanister"
 #define MyAppURL "https://github.com/rocksdanister/lively"
 #define MyAppExeName "livelywpf.exe"
@@ -68,6 +68,7 @@ Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType:
 [Files]
 Source: "VC\VC_redist.x86.exe"; DestDir: {tmp}; Flags: deleteafterinstall
 Source: "dotnetcore\windowsdesktop-runtime-3.1.7-win-x86.exe"; DestDir: {tmp}; Flags: deleteafterinstall
+Source: "dotnetcore\netcorecheck.exe"; DestDir: {tmp}; Flags: deleteafterinstall
 
 ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 Source: "Release\livelywpf.exe"; DestDir: "{app}"; Flags: ignoreversion;
@@ -81,8 +82,7 @@ Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: de
 Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall 
 ;skipifsilent
 Filename: "{tmp}\VC_redist.x86.exe"; Check: VCRedistNeedsInstall; StatusMsg: Installing Visual Studio Runtime Libraries...
-;todo: check if .net core is already installed.
-Filename: "{tmp}\windowsdesktop-runtime-3.1.7-win-x86.exe"; StatusMsg: Installing .Net Core 3.1...
+Filename: "{tmp}\windowsdesktop-runtime-3.1.7-win-x86.exe"; Check: NetCoreNeedsInstall('3.1.7');  StatusMsg: Installing .Net Core 3.1...
 
 [Code]
 var
@@ -213,6 +213,7 @@ begin
 end;
 
 //////////////////////////////////////////////////////////////////////
+// Uninstaller promts user whether to close lively if running before proceeding.
 function InitializeUninstall(): Boolean;
 var
   ErrorCode: Integer;
@@ -226,3 +227,18 @@ begin
 
   Result := True;
 end;
+//////////////////////////////////////////////////////////////////////
+// Credits: https://github.com/domgho/InnoDependencyInstaller
+// NetCoreCheck tool is necessary for detecting if a specific version of .NET Core/.NET 5.0 is installed: https://github.com/dotnet/runtime/issues/36479
+// Source code: https://github.com/dotnet/deployment-tools/tree/master/src/clickonce/native/projects/NetCoreCheck
+// Download netcorecheck.exe: https://go.microsoft.com/fwlink/?linkid=2135256
+// Download netcorecheck_x64.exe: https://go.microsoft.com/fwlink/?linkid=2135504
+function NetCoreNeedsInstall(version: String): Boolean;
+var
+	netcoreRuntime: String;
+	resultCode: Integer;
+begin
+  // Example: 'Microsoft.NETCore.App', 'Microsoft.AspNetCore.App', 'Microsoft.WindowsDesktop.App'
+  netcoreRuntime := 'Microsoft.WindowsDesktop.App'
+	Result := not(Exec(ExpandConstant('{tmp}{\}') + 'netcorecheck.exe', netcoreRuntime + ' ' + version, '', SW_HIDE, ewWaitUntilTerminated, resultCode) and (resultCode = 0));
+end;
diff --git a/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml b/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml
index 2aaa752b5..4cb3de05e 100644
--- a/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml
+++ b/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml
@@ -69,10 +69,11 @@
                 <MenuFlyout.Items>
                     <MenuFlyoutItem x:Name="moreInformation" Text="{x:Bind UIText.TextInformation}" Click="contextMenu_Click"/>
                     <MenuFlyoutItem x:Name="setWallpaper" Text="{x:Bind UIText.TextSetWallpaper}" Click="contextMenu_Click"/>
-                    <MenuFlyoutItem x:Name="showOnDisk" Text="{x:Bind UIText.TextShowDisk}" Click="contextMenu_Click"/>
+                    <MenuFlyoutItem x:Name="previewWallpaper" Text="{x:Bind UIText.TextPreviewWallpaper}" Click="contextMenu_Click"/>
                     <MenuFlyoutItem x:Name="customiseWallpaper" Text="{x:Bind UIText.TextCustomise}" Click="contextMenu_Click"/>
+                    <MenuFlyoutItem x:Name="showOnDisk" Text="{x:Bind UIText.TextShowDisk}" Click="contextMenu_Click"/>
                     <MenuFlyoutItem x:Name="exportWallpaper" Text="{x:Bind UIText.TextExportZip}" Click="contextMenu_Click"/>
-                    <MenuFlyoutItem x:Name="convertVideo" Text="{x:Bind UIText.TextConvertVideo}" Click="contextMenu_Click"/>
+                    <MenuFlyoutItem x:Name="convertVideo" Text="{x:Bind UIText.TextConvertVideo}" Click="contextMenu_Click" IsEnabled="False"/>
                     <MenuFlyoutItem x:Name="deleteWallpaper" Text="{x:Bind UIText.TextDelete}" Click="contextMenu_Click"/>
                 </MenuFlyout.Items>
             </MenuFlyout>
diff --git a/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml.cs b/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml.cs
index 22ce5d262..2a91262dc 100644
--- a/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml.cs
+++ b/src/livelywpf/UserControls/livelygrid/LivelyGridView.xaml.cs
@@ -40,6 +40,7 @@ public class LocalizeTextGridView
         public string TextExportZip { get; set; }
         public string TextDelete { get; set; }
         public string TextAddWallpaper { get; set; }
+        public string TextPreviewWallpaper { get; set; }
     }
 
     public sealed partial class LivelyGridView : UserControl
diff --git a/src/livelywpf/UserControls/livelysettings/SettingsPage.xaml b/src/livelywpf/UserControls/livelysettings/SettingsPage.xaml
index a3fe7f245..74fdf7fa5 100644
--- a/src/livelywpf/UserControls/livelysettings/SettingsPage.xaml
+++ b/src/livelywpf/UserControls/livelysettings/SettingsPage.xaml
@@ -167,7 +167,7 @@
                             </ComboBox>
                             <TextBlock Margin="0,10,0,0" FontSize="12" TextWrapping="Wrap" Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}" Text="{x:Bind UIText.TipBrowserEngine}"/>
 
-                            <CheckBox Content="{x:Bind UIText.TitleDiskCache}" IsEnabled="False" Margin="0, 5, 0, 0"/>
+                            <CheckBox Content="{x:Bind UIText.TitleDiskCache}" Margin="0, 5, 0, 0" IsChecked="{Binding CefDiskCache, Mode=TwoWay}" IsEnabled="False"/>
                             <TextBlock Margin="0,10,0,0" FontSize="12" TextWrapping="Wrap" Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}" Text="{x:Bind UIText.TipDisCache}"/>
 
                             <TextBlock Margin="0, 10, 0, 0" Text="{x:Bind UIText.TitleBrowserDebuggingPort}"/>
diff --git a/src/livelywpf/livelySubProcess/Program.cs b/src/livelywpf/livelySubProcess/Program.cs
index fab588d55..edc81512b 100644
--- a/src/livelywpf/livelySubProcess/Program.cs
+++ b/src/livelywpf/livelySubProcess/Program.cs
@@ -9,6 +9,7 @@ namespace livelySubProcess
     /// <summary>
     /// Kills external application type wallpapers in the event lively main pgm is killed by taskmanager/other pgms like av software.
     /// This is just incase safety, when shutdown properly the "wpItems" list is cleared by lively before exit.
+    /// The external lively pgms such as livelycefsharp and libmpvplayer etc will close themselves if lively exits without subprocess.
     /// </summary>
     class Program
     {
diff --git a/src/livelywpf/livelywpf/Core/InputForwarding/RawInputDX.xaml.cs b/src/livelywpf/livelywpf/Core/InputForwarding/RawInputDX.xaml.cs
index 7db1852b0..80b4e1967 100644
--- a/src/livelywpf/livelywpf/Core/InputForwarding/RawInputDX.xaml.cs
+++ b/src/livelywpf/livelywpf/Core/InputForwarding/RawInputDX.xaml.cs
@@ -188,7 +188,7 @@ private static void ForwardMessage(int x, int y, int msg, IntPtr wParam)
                         x.GetWallpaperType() == WallpaperType.godot)
                     {
                         if (ScreenHelper.ScreenCompare(display, x.GetScreen(), DisplayIdentificationMode.screenLayout) ||
-                                Program.SettingsVM.Settings.WallpaperArrangement == WallpaperArrangement.span)
+                            Program.SettingsVM.Settings.WallpaperArrangement == WallpaperArrangement.span)
                         {
                             //The low-order word specifies the x-coordinate of the cursor, the high-order word specifies the y-coordinate of the cursor.
                             //ref: https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-mousemove
diff --git a/src/livelywpf/livelywpf/Core/SetupDesktop.cs b/src/livelywpf/livelywpf/Core/SetupDesktop.cs
index 393916c93..3910a576d 100644
--- a/src/livelywpf/livelywpf/Core/SetupDesktop.cs
+++ b/src/livelywpf/livelywpf/Core/SetupDesktop.cs
@@ -121,8 +121,8 @@ public static void SetWallpaper(LibraryModel wp, LivelyScreen targetDisplay)
             }
 
             if(wp.LivelyInfo.Type == WallpaperType.web 
-            || wp.LivelyInfo.Type == WallpaperType.webaudio 
-            || wp.LivelyInfo.Type == WallpaperType.url)
+                || wp.LivelyInfo.Type == WallpaperType.webaudio 
+                || wp.LivelyInfo.Type == WallpaperType.url)
             {
                 wp.ItemStartup = true;
                 var item = new WebProcess(wp.FilePath, wp, targetDisplay);
@@ -131,8 +131,8 @@ public static void SetWallpaper(LibraryModel wp, LivelyScreen targetDisplay)
                 item.Show();
             }
             if (wp.LivelyInfo.Type == WallpaperType.app
-            || wp.LivelyInfo.Type == WallpaperType.godot
-            || wp.LivelyInfo.Type == WallpaperType.unity)
+                || wp.LivelyInfo.Type == WallpaperType.godot
+                || wp.LivelyInfo.Type == WallpaperType.unity)
             {
                 System.Windows.MessageBox.Show("not supported currently");
                 return;
@@ -217,9 +217,10 @@ public static void SetWallpaper(LibraryModel wp, LivelyScreen targetDisplay)
         private static async void SetupDesktop_WallpaperInitialized(object sender, WindowInitializedArgs e)
         {
             await semaphoreSlimWallpaperInitLock.WaitAsync();
+            IWallpaper wallpaper = null;
             try
             {
-                var wallpaper = (IWallpaper)sender;
+                wallpaper = (IWallpaper)sender;
                 wallpapersPending.Remove(wallpaper);
                 wallpaper.WindowInitialized -= SetupDesktop_WallpaperInitialized;
                 await System.Windows.Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(delegate
@@ -310,6 +311,15 @@ private static async void SetupDesktop_WallpaperInitialized(object sender, Windo
                     MessageBox.Show(e.Error.Message, Properties.Resources.TitleAppName);
                 }
             }
+            catch(Exception ex)
+            {
+                Logger.Error("Core: Failed processing wallpaper: " + ex.ToString());
+                if(wallpaper != null)
+                {
+                    wallpaper.Terminate();
+                }
+                WallpaperChanged?.Invoke(null, null);
+            }
             finally
             {
                 semaphoreSlimWallpaperInitLock.Release();
diff --git a/src/livelywpf/livelywpf/Core/Wallpapers/WebProcess.cs b/src/livelywpf/livelywpf/Core/Wallpapers/WebProcess.cs
index 8f51ad135..e4ab048a9 100644
--- a/src/livelywpf/livelywpf/Core/Wallpapers/WebProcess.cs
+++ b/src/livelywpf/livelywpf/Core/Wallpapers/WebProcess.cs
@@ -2,6 +2,7 @@
 using System.Diagnostics;
 using System.IO;
 using System.Management;
+using System.Text;
 
 namespace livelywpf.Core
 {
@@ -42,56 +43,35 @@ public WebProcess(string path, LibraryModel model, LivelyScreen display)
                 }
             }
 
-            string cmdArgs;
-            if (model.LivelyInfo.Type == WallpaperType.web)
+            StringBuilder cmdArgs = new StringBuilder();
+            cmdArgs.Append("--url " + "\"" + path + "\"" + " --display " + "\"" + display + "\"");
+            cmdArgs.Append(model.LivelyInfo.Type == WallpaperType.url ? " --type online" : " --type local" + " --property " + "\"" + LivelyPropertyCopy + "\"");
+            //Fail to send empty string as arg; "debug" is set as optional variable in cmdline parser library.
+            if (!string.IsNullOrWhiteSpace(Program.SettingsVM.Settings.WebDebugPort))
             {
-                //Fail to send empty string as arg; "debug" is set as optional variable in cmdline parser library.
-                if (string.IsNullOrWhiteSpace(Program.SettingsVM.Settings.WebDebugPort))
-                {
-                    cmdArgs = "--url " + "\"" + path + "\"" + " --type local" + " --display " + "\"" + display + "\"" +
-                        " --property " + "\"" + LivelyPropertyCopy + "\"";
-                }
-                else
-                {
-                    cmdArgs = "--url " + "\"" + path + "\"" + " --type local" + " --display " + "\"" + display + "\"" +
-                      " --property " + "\"" + LivelyPropertyCopy + "\"" + " --debug " + Program.SettingsVM.Settings.WebDebugPort;
-                }
+                cmdArgs.Append(" --debug " + Program.SettingsVM.Settings.WebDebugPort);
             }
-            else if (model.LivelyInfo.Type == WallpaperType.webaudio)
+
+            if (Program.SettingsVM.Settings.CefDiskCache)
             {
-                if (string.IsNullOrWhiteSpace(Program.SettingsVM.Settings.WebDebugPort))
-                {
-                    cmdArgs = "--url " + "\"" + path + "\"" + " --type local" + " --display " + "\"" + display + "\"" + " --audio true" +
-                          " --property " + "\"" + LivelyPropertyCopy + "\"";
-                }
-                else
-                {
-                    cmdArgs = "--url " + "\"" + path + "\"" + " --type local" + " --display " + "\"" + display + "\"" + " --audio true" +
-                        " --property " + "\"" + LivelyPropertyCopy + "\"" + " --debug " + Program.SettingsVM.Settings.WebDebugPort;
-                }
+                cmdArgs.Append(" --cache " + "\"" + Path.Combine(Program.AppDataDir, "Cef", "cache", display.DeviceNumber) + "\"");
             }
-            else
+
+            if (model.LivelyInfo.Type == WallpaperType.webaudio)
             {
-                if (string.IsNullOrWhiteSpace(Program.SettingsVM.Settings.WebDebugPort))
-                {
-                    cmdArgs = "--url " + "\"" + path + "\"" + " --type online" + " --display " + "\"" + display + "\"";
-                }
-                else
-                {
-                    cmdArgs = "--url " + "\"" + path + "\"" + " --type online" + " --display " + "\"" + display + "\"" +
-                       " --debug " + Program.SettingsVM.Settings.WebDebugPort;
-                }
+                cmdArgs.Append(" --audio true");
             }
 
             ProcessStartInfo start = new ProcessStartInfo
             {
-                Arguments = cmdArgs,
+                Arguments = cmdArgs.ToString(),
                 FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins", "cef", "LivelyCefSharp.exe"),
                 RedirectStandardInput = true,
                 RedirectStandardOutput = true,
                 UseShellExecute = false,
                 WorkingDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins", "cef")
             };
+            cmdArgs.Clear();
 
             Process webProcess = new Process
             {
diff --git a/src/livelywpf/livelywpf/Docs/license.rtf b/src/livelywpf/livelywpf/Docs/license.rtf
index 604a58332..4400f5ba9 100644
--- a/src/livelywpf/livelywpf/Docs/license.rtf
+++ b/src/livelywpf/livelywpf/Docs/license.rtf
@@ -66,13 +66,13 @@ No Spacing;}{\*\cs24 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \spriori
 \sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp59\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0
 \itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp60\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp56\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp53\itap0\li0\ri0\sb90\sa0}{\pgp\ipgp5\itap0\li0
 \ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp64\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp62\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid268697\rsid329413\rsid527348\rsid668813\rsid740603
-\rsid810069\rsid1116686\rsid1120488\rsid1129000\rsid1262392\rsid1516284\rsid1575969\rsid1596782\rsid1601621\rsid1711571\rsid1862052\rsid2172097\rsid2173968\rsid2182642\rsid2430419\rsid2649499\rsid2831276\rsid2833446\rsid2905903\rsid3024595\rsid3150095
-\rsid3219979\rsid3240521\rsid3427772\rsid3546445\rsid3697037\rsid3939954\rsid3940102\rsid4279899\rsid4332568\rsid4408171\rsid4414334\rsid4416096\rsid4465966\rsid4595797\rsid4675836\rsid5068027\rsid5129439\rsid5461361\rsid5471568\rsid5703634\rsid6231472
-\rsid6243171\rsid6695955\rsid6704124\rsid7042697\rsid7212464\rsid7362808\rsid7433477\rsid7481440\rsid7750787\rsid7814905\rsid8149878\rsid8532619\rsid8612330\rsid8616423\rsid8718502\rsid8745047\rsid8804037\rsid8876939\rsid8931313\rsid9845156\rsid9919483
-\rsid9977545\rsid9990090\rsid9991455\rsid10168555\rsid10175951\rsid10370081\rsid10569259\rsid10761062\rsid10833687\rsid10951986\rsid10956787\rsid11363778\rsid11671717\rsid12338710\rsid12474677\rsid12482967\rsid12806171\rsid13119445\rsid13135701
-\rsid13373303\rsid13381601\rsid13579817\rsid13643783\rsid13662555\rsid13788930\rsid13963034\rsid14048677\rsid14057040\rsid14226533\rsid14367033\rsid14370252\rsid14494510\rsid14685526\rsid14701935\rsid14877467\rsid14903299\rsid15098231\rsid15273691
-\rsid15363914\rsid15401395\rsid15477676\rsid15487171\rsid15488107\rsid15739539\rsid15756206\rsid15932669\rsid15934410\rsid16070726\rsid16189706\rsid16328086\rsid16349761\rsid16391475\rsid16543391}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0
-\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Dani John}{\operator Dani John}{\creatim\yr2019\mo9\dy7\hr22\min27}{\revtim\yr2020\mo9\dy6\hr22\min25}{\version119}{\edmins207}{\nofpages36}{\nofwords15446}
+\rsid810069\rsid1116686\rsid1120488\rsid1129000\rsid1262392\rsid1516284\rsid1575969\rsid1596782\rsid1601621\rsid1711571\rsid1862052\rsid2172097\rsid2173968\rsid2182642\rsid2430419\rsid2649499\rsid2775362\rsid2831276\rsid2833446\rsid2905903\rsid3024595
+\rsid3150095\rsid3219979\rsid3240521\rsid3427772\rsid3546445\rsid3697037\rsid3939954\rsid3940102\rsid4279899\rsid4332568\rsid4408171\rsid4414334\rsid4416096\rsid4465966\rsid4595797\rsid4675836\rsid5068027\rsid5129439\rsid5461361\rsid5471568\rsid5703634
+\rsid6231472\rsid6243171\rsid6695955\rsid6704124\rsid7042697\rsid7212464\rsid7362808\rsid7433477\rsid7481440\rsid7750787\rsid7814905\rsid8149878\rsid8532619\rsid8612330\rsid8616423\rsid8718502\rsid8745047\rsid8804037\rsid8876939\rsid8931313\rsid9845156
+\rsid9919483\rsid9977545\rsid9990090\rsid9991455\rsid10168555\rsid10175951\rsid10370081\rsid10569259\rsid10761062\rsid10833687\rsid10951986\rsid10956787\rsid11363778\rsid11671717\rsid12338710\rsid12474677\rsid12482967\rsid12806171\rsid13119445
+\rsid13135701\rsid13373303\rsid13381601\rsid13579817\rsid13643783\rsid13662555\rsid13788930\rsid13963034\rsid14048677\rsid14057040\rsid14226533\rsid14367033\rsid14370252\rsid14494510\rsid14685526\rsid14701935\rsid14877467\rsid14903299\rsid15098231
+\rsid15273691\rsid15363914\rsid15401395\rsid15477676\rsid15487171\rsid15488107\rsid15739539\rsid15756206\rsid15932669\rsid15934410\rsid16070726\rsid16189706\rsid16328086\rsid16349761\rsid16391475\rsid16543391}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0
+\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Dani John}{\operator Dani John}{\creatim\yr2019\mo9\dy7\hr22\min27}{\revtim\yr2020\mo9\dy9\hr19}{\version120}{\edmins208}{\nofpages36}{\nofwords15446}
 {\nofchars88048}{\nofcharsws103288}{\vern57433}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect 
 \widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen
 \expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1
@@ -111,7 +111,7 @@ Godot, Bizhawk, Shadertoy.com or any }{\rtlch\fcs1 \ab\ai\af1\afs20 \ltrch\fcs0
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\chshdng0\chcfpat0\chcbpat8\insrsid4414334\charrsid11671717 Interity (Italian)
 \par Jaehyung Lee (Korean) - }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\chshdng0\chcfpat0\chcbpat8\insrsid4414334\charrsid11671717  HYPERLINK "http://www.kolanp.com" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\chshdng0\chcfpat0\chcbpat8\insrsid4414334\charrsid11671717 {\*\datafield 
-00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4600000068007400740070003a002f002f007700770077002e006b006f006c0061006e0070002e0063006f006d002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0003ff83000000000000ff}}
+00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4600000068007400740070003a002f002f007700770077002e006b006f006c0061006e0070002e0063006f006d002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0003ff83000000000000ff00}}
 }{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\chshdng0\chcfpat0\chcbpat8\insrsid4414334\charrsid11671717 http://www.kolanp.com}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 
 \ltrch\fcs0 \cs25\f1\fs20\insrsid4414334\charrsid11671717 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs27\f1\fs20\lang1040\langfe1033\langnp1040\insrsid4414334\charrsid11671717 Jo\'e3o Branco (Portuguese)
@@ -126,7 +126,7 @@ Godot, Bizhawk, Shadertoy.com or any }{\rtlch\fcs1 \ab\ai\af1\afs20 \ltrch\fcs0
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4414334\charrsid11671717 Tugdual Meeus (French)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4414334 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid329413 ANotThrowawayKonto (Malay)
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4595797 Lulucmy
-\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid15487171 Frank Z (Dutch)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid15487171\charrsid11671717 
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid2775362 Marieau}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid15487171  (Dutch)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid15487171\charrsid11671717 
 \par }\pard\plain \ltrpar\ql \li0\ri0\widctlpar\brdrb\brdrs\brdrw10\brsp20 
 \tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8616423 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 
 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\chshdng0\chcfpat0\chcbpat8\insrsid8616423\charrsid13662555 
@@ -135,7 +135,7 @@ Godot, Bizhawk, Shadertoy.com or any }{\rtlch\fcs1 \ab\ai\af1\afs20 \ltrch\fcs0
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid12482967 Icons by icons8:}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid9977545\charrsid3219979  }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid9977545\charrsid3219979  HYPERLINK "https://icons8.com/" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9977545\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b40000000680074007400700073003a002f002f00690063006f006e00730038002e0063006f006d002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000b0770045730000ff500000f3000000
-00000000ff000000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid9977545\charrsid3219979 https://icons8.com/}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 
+00000000ff00000000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid9977545\charrsid3219979 https://icons8.com/}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 
 \ltrch\fcs0 \f1\fs20\insrsid9977545\charrsid3219979 
 \par }\pard \ltrpar\ql \li0\ri0\widctlpar\brdrb\brdrs\brdrw10\brsp20 
 \tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12806171 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
@@ -148,7 +148,7 @@ Godot, Bizhawk, Shadertoy.com or any }{\rtlch\fcs1 \ab\ai\af1\afs20 \ltrch\fcs0
 \f1\fs20\cf1\insrsid12482967\charrsid12482967 ayne }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid1862052 B}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid12482967\charrsid12482967 anner}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\cf1\insrsid12482967 : }{\field{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid12482967  HYPERLINK "https://waynebanner.artstation.com/" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid12482967 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b60000000680074007400700073003a002f002f007700610079006e006500620061006e006e00650072002e00610072007400730074006100740069006f006e002e0063006f006d002f000000795881f43b1d7f48af2c
-825dc485276300000000a5ab0003000000010000000100}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid12482967\charrsid12482967 https://waynebanner.artstation.com/}}}\sectd \ltrsect
+825dc485276300000000a5ab000300000001000000010000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid12482967\charrsid12482967 https://waynebanner.artstation.com/}}}\sectd \ltrsect
 \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid12482967 
 \par }\pard \ltrpar\ql \li0\ri0\widctlpar\brdrb\brdrs\brdrw10\brsp20 
 \tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12482967 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
@@ -158,12 +158,12 @@ Godot, Bizhawk, Shadertoy.com or any }{\rtlch\fcs1 \ab\ai\af1\afs20 \ltrch\fcs0
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid10370081\charrsid3219979 CefSharp}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10370081\charrsid3219979 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid10370081\charrsid3219979  HYPERLINK "https://github.com/cefsharp/CefSharp" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14494510\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b62000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00630065006600730068006100720070002f00430065006600530068006100720070000000795881f43b1d7f48
-af2c825dc485276300000000a5ab0003000000fe000100000000770000000000000000000000000000000073005c12ff80000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid10370081\charrsid3219979 https://github.com/cefsharp/CefSharp}}}
+af2c825dc485276300000000a5ab0003000000fe000100000000770000000000000000000000000000000073005c12ff8000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid10370081\charrsid3219979 https://github.com/cefsharp/CefSharp}}}
 \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10370081\charrsid3219979 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid15098231\charrsid3219979  HYPERLINK "https://github.com/cefsharp/CefSharp/blob/master/LICENSE" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid10370081\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8a000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00630065006600730068006100720070002f00430065006600530068006100720070002f0062006c006f006200
-2f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab000300360000686e0000000000009700000000e455000000000000000000000000610064000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+2f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab000300360000686e0000000000009700000000e45500000000000000000000000061006400000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\f1\fs20\ul\cf2\insrsid15098231\charrsid3219979 https://github.com/cefsharp/CefSharp/blob/master/LICENSE}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid15098231\charrsid3219979 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid15098231\charrsid3219979 
@@ -202,12 +202,12 @@ af2c825dc485276300000000a5ab0003000000fe0001000000007700000000000000000000000000
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid14370252\charrsid14370252 RawInput.Sharp}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14370252\charrsid14370252 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid14370252\charrsid14370252  HYPERLINK "https://github.com/mfakane/rawinput-sharp" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16543391\charrsid14370252 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006d00660061006b0061006e0065002f0072006100770069006e007000750074002d0073006800610072007000
-0000795881f43b1d7f48af2c825dc485276300000000a5ab000300590000000000200000ff0000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid14370252\charrsid14370252 \hich\af1\dbch\af31501\loch\f1 
+0000795881f43b1d7f48af2c825dc485276300000000a5ab000300590000000000200000ff000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid14370252\charrsid14370252 \hich\af1\dbch\af31501\loch\f1 
 https://github.com/mfakane/rawinput-sharp}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14370252\charrsid14370252 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14370252\charrsid14370252  HYPERLINK "https://github.com/mfakane/rawinput-sharp/blob/master/LICENSE.txt" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid16543391\charrsid14370252 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b9c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006d00660061006b0061006e0065002f0072006100770069006e007000750074002d0073006800610072007000
-2f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000000000410000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+2f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab00030000000000000041000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid14370252\charrsid14370252 \hich\af1\dbch\af31501\loch\f1 https://github.com/mfakane/rawinput-sharp/blob/master/LICENSE.txt}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {
 \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14370252\charrsid14370252 
 \par }\pard\plain \ltrpar\s19\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14370252 
@@ -238,13 +238,13 @@ https://github.com/mfakane/rawinput-sharp}}}\sectd \ltrsect\linex0\endnhere\sect
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid14057040\charrsid3219979 Newtonsoft.Json}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14057040\charrsid3219979 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid14057040\charrsid3219979  HYPERLINK "https://github.com/JamesNK/Newtonsoft.Json" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16349761\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004a0061006d00650073004e004b002f004e006500770074006f006e0073006f00660074002e004a0073006f00
-6e000000795881f43b1d7f48af2c825dc485276300000000a5ab00030007000000000000ff000000000002000000000000ff000000000100000000bcff00}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid14057040\charrsid3219979 
+6e000000795881f43b1d7f48af2c825dc485276300000000a5ab00030007000000000000ff000000000002000000000000ff000000000100000000bcff0000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid14057040\charrsid3219979 
 https://github.com/JamesNK/Newtonsoft.Json}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14057040\charrsid3219979 
 \par }\pard \ltrpar\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9845156 {\rtlch\fcs1 
 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14057040\charrsid3219979 License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14057040\charrsid3219979 
  HYPERLINK "https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16349761\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b9c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004a0061006d00650073004e004b002f004e006500770074006f006e0073006f00660074002e004a0073006f00
-6e002f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e006d0064000000795881f43b1d7f48af2c825dc485276300000000a5ab000300030000000000000200000000000000000000000000000000001c00000000fc0000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 
+6e002f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e006d0064000000795881f43b1d7f48af2c825dc485276300000000a5ab000300030000000000000200000000000000000000000000000000001c00000000fc000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 
 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid14057040\charrsid3219979 https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid14057040\charrsid3219979 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9845156\charrsid3219979 
@@ -275,14 +275,14 @@ https://github.com/JamesNK/Newtonsoft.Json}}}\sectd \ltrsect\linex0\endnhere\sec
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid13579817\charrsid13579817 Youtube-dl}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13579817\charrsid13579817 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid13579817\charrsid13579817  HYPERLINK "https://github.com/ytdl-org/youtube-dl" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid329413\charrsid13579817 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b66000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f007900740064006c002d006f00720067002f0079006f00750074007500620065002d0064006c000000795881f4
-3b1d7f48af2c825dc485276300000000a5ab00030000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid13579817\charrsid13579817 \hich\af1\dbch\af31501\loch\f1 https://github.com/ytdl-org/youtube-dl}}}
+3b1d7f48af2c825dc485276300000000a5ab0003000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid13579817\charrsid13579817 \hich\af1\dbch\af31501\loch\f1 https://github.com/ytdl-org/youtube-dl}}}
 \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13579817\charrsid13579817 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13579817\charrsid13579817  HYPERLINK "https://github.com/ytdl-org/youtube-dl/blob/master/LICENSE" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid329413\charrsid13579817 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8e000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f007900740064006c002d006f00720067002f0079006f00750074007500620065002d0064006c002f0062006c00
-6f0062002f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab00030000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid13579817\charrsid13579817 
-\hich\af1\dbch\af31501\loch\f1 https://github.com/ytdl-org/youtube-dl/blob/master/LIC\hich\af1\dbch\af31501\loch\f1 ENSE}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
-\f1\fs20\insrsid13579817\charrsid13579817 
+6f0062002f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+\cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid13579817\charrsid13579817 \hich\af1\dbch\af31501\loch\f1 https://github.com/ytdl-org/youtube-dl/blob/master/LIC\hich\af1\dbch\af31501\loch\f1 ENSE}}}\sectd \ltrsect
+\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13579817\charrsid13579817 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid13579817\charrsid13579817 This is free and unencumbered software released into the public domain.
 \par 
 \par Anyone is free to copy, modify, publish, use, compile, sell, or
@@ -312,12 +312,12 @@ https://github.com/JamesNK/Newtonsoft.Json}}}\sectd \ltrsect\linex0\endnhere\sec
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid16391475\charrsid16391475 libmpv}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid16391475 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid16391475\charrsid16391475  HYPERLINK "https://github.com/mpv-player/mpv/tree/master/libmpv" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13579817\charrsid16391475 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b82000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006d00700076002d0070006c0061007900650072002f006d00700076002f0074007200650065002f006d006100
-73007400650072002f006c00690062006d00700076000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid16391475\charrsid16391475 
+73007400650072002f006c00690062006d00700076000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid16391475\charrsid16391475 
 \hich\af1\dbch\af31501\loch\f1 https://github.com/mpv-player/mpv/tree/master/libmpv}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid16391475 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid16391475  HYPERLINK "https://github.com/mpv-player/mpv/blob/master/Copyright" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid13579817\charrsid16391475 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b88000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006d00700076002d0070006c0061007900650072002f006d00700076002f0062006c006f0062002f006d006100
-73007400650072002f0043006f0070007900720069006700680074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid16391475\charrsid16391475 
+73007400650072002f0043006f0070007900720069006700680074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid16391475\charrsid16391475 
 \hich\af1\dbch\af31501\loch\f1 https://github.com/mpv-player/mpv/blob/master/Copyright}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid16391475 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid16391475\charrsid16391475                     GNU GENERAL PUBLIC LICENSE
 \par                        Version 2, June 1991
@@ -664,12 +664,12 @@ https://github.com/JamesNK/Newtonsoft.Json}}}\sectd \ltrsect\linex0\endnhere\sec
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid16391475\charrsid8149878 Mpv.net}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid8149878 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid16391475\charrsid8149878  HYPERLINK "https://github.com/stax76/mpv.net" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid8149878 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f007300740061007800370036002f006d00700076002e006e00650074000000795881f43b1d7f48af2c825dc485
-276300000000a5ab0003ff0000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid16391475\charrsid8149878 \hich\af1\dbch\af31501\loch\f1 https://github.com/stax76/mpv.net}}}\sectd \ltrsect
+276300000000a5ab0003ff000000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid16391475\charrsid8149878 \hich\af1\dbch\af31501\loch\f1 https://github.com/stax76/mpv.net}}}\sectd \ltrsect
 \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid8149878 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid8149878  HYPERLINK "https://github.com/stax76/mpv.net/blob/master/LICENSE.txt" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid16391475\charrsid8149878 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f007300740061007800370036002f006d00700076002e006e00650074002f0062006c006f0062002f006d006100
-73007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003200000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+73007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000320000000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid16391475\charrsid8149878 \hich\af1\dbch\af31501\loch\f1 https://github.com/stax76/mpv.net/blob/master/LICENSE.txt}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 
 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid16391475\charrsid8149878 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid16391475\charrsid8149878 MIT License\line 
@@ -701,14 +701,14 @@ https://github.com/JamesNK/Newtonsoft.Json}}}\sectd \ltrsect\linex0\endnhere\sec
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid4416096 C}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid10956787\charrsid4416096 ommandline}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10956787\charrsid4416096 : }{\field\fldedit{\*\fldinst {
 \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10956787\charrsid4416096  HYPERLINK "https://github.com/commandlineparser/commandline" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14370252\charrsid4416096 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7a000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0063006f006d006d0061006e0064006c0069006e0065007000610072007300650072002f0063006f006d006d00
-61006e0064006c0069006e0065000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000006500000000006e0069}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid10956787\charrsid4416096 
+61006e0064006c0069006e0065000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000006500000000006e006900}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid10956787\charrsid4416096 
 \hich\af1\dbch\af31501\loch\f1 https://gi\hich\af1\dbch\af31501\loch\f1 thub.com/commandlineparser/commandline}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid10956787\charrsid4416096 
 \par }\pard \ltrpar\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2182642 {\rtlch\fcs1 
 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10956787\charrsid4416096 License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10956787\charrsid4416096 
  HYPERLINK "https://github.com/commandlineparser/commandline/blob/master/License.md" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14370252\charrsid4416096 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90ba8000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0063006f006d006d0061006e0064006c0069006e0065007000610072007300650072002f0063006f006d006d00
-61006e0064006c0069006e0065002f0062006c006f0062002f006d00610073007400650072002f004c006900630065006e00730065002e006d0064000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000006e0000000000680000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+61006e0064006c0069006e0065002f0062006c006f0062002f006d00610073007400650072002f004c006900630065006e00730065002e006d0064000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000006e000000000068000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid10956787\charrsid4416096 \hich\af1\dbch\af31501\loch\f1 https://github.com/commandlineparser/commandline/blob/master/License.md}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj 
 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10956787\charrsid4416096 
 \par }\pard \ltrpar\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid10956787 {\rtlch\fcs1 
@@ -742,12 +742,12 @@ https://github.com/JamesNK/Newtonsoft.Json}}}\sectd \ltrsect\linex0\endnhere\sec
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid8931313\charrsid3219979 NLog}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8931313\charrsid3219979 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8931313\charrsid3219979 
  HYPERLINK "https://github.com/NLog/NLog" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14367033\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b52000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004e004c006f0067002f004e004c006f0067000000795881f43b1d7f48af2c825dc485276300000000a5ab0003
-80f07600001f0000006900000000000011000000fa0000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid8931313\charrsid3219979 https://github.com/NLog/NLog}}}\sectd \ltrsect
+80f07600001f0000006900000000000011000000fa0000000000000000ff}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid8931313\charrsid3219979 https://github.com/NLog/NLog}}}\sectd \ltrsect
 \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8931313\charrsid3219979 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8931313\charrsid3219979  HYPERLINK "https://github.com/NLog/NLog/blob/dev/LICENSE.txt" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14367033\charrsid3219979 
 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004e004c006f0067002f004e004c006f0067002f0062006c006f0062002f006400650076002f004c0049004300
-45004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000000000001cff000000000012000000000c0000007400001c00}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid8931313\charrsid3219979 
+45004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000000000001cff000000000012000000000c0000007400001c0000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid8931313\charrsid3219979 
 https://github.com/NLog/NLog/blob/dev/LICENSE.txt}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8931313\charrsid3219979 
 \par }\pard\plain \ltrpar\s19\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8931313 \rtlch\fcs1 
 \af2\afs20\alang1025 \ltrch\fcs0 \f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f1\cf1\insrsid8931313\charrsid3219979 
@@ -787,12 +787,12 @@ https://github.com/NLog/NLog/blob/dev/LICENSE.txt}}}\sectd \ltrsect\linex0\endnh
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid8532619\charrsid3219979 Magick.NET}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8532619\charrsid3219979 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid8532619\charrsid3219979  HYPERLINK "https://github.com/dlemstra/Magick.NET" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10951986\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b66000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0064006c0065006d0073007400720061002f004d0061006700690063006b002e004e00450054000000795881f4
-3b1d7f48af2c825dc485276300000000a5ab000300000000000000ff00000000ff00009800680000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid8532619\charrsid3219979 \hich\af1\dbch\af31501\loch\f1 
+3b1d7f48af2c825dc485276300000000a5ab000300000000000000ff00000000ff0000980068000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid8532619\charrsid3219979 \hich\af1\dbch\af31501\loch\f1 
 https://github.com/dlemstra/Magick.NET}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8532619\charrsid3219979 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8532619\charrsid3219979  HYPERLINK "https://github.com/dlemstra/Magick.NET/blob/master/License.txt" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid10951986\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b96000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0064006c0065006d0073007400720061002f004d0061006700690063006b002e004e00450054002f0062006c00
-6f0062002f006d00610073007400650072002f004c006900630065006e00730065002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000000000002a0000370000006600000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+6f0062002f006d00610073007400650072002f004c006900630065006e00730065002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000000000002a000037000000660000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid8532619\charrsid3219979 \hich\af1\dbch\af31501\loch\f1 https://github.com/dlemstra/Magick.NET/blob/master/License.txt}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {
 \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8532619\charrsid3219979 
 \par }\pard\plain \ltrpar\s19\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8532619 \rtlch\fcs1 
@@ -1005,12 +1005,12 @@ https://github.com/dlemstra/Magick.NET}}}\sectd \ltrsect\linex0\endnhere\sectlin
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid3219979\charrsid1129000 Inno Setup}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3219979\charrsid1129000 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid3219979\charrsid1129000  HYPERLINK "http://www.jrsoftware.org/" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1040\langfe1033\langnp1040\insrsid1129000\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4e00000068007400740070003a002f002f007700770077002e006a00720073006f006600740077006100720065002e006f00720067002f000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000
-00690000fa0000000068000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid3219979\charrsid1129000 \hich\af1\dbch\af31501\loch\f1 http://www.jrsoftware.org/}}}\sectd \ltrsect
+00690000fa000000006800000068}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid3219979\charrsid1129000 \hich\af1\dbch\af31501\loch\f1 http://www.jrsoftware.org/}}}\sectd \ltrsect
 \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3219979\charrsid1129000 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3219979\charrsid3219979 License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3219979\charrsid3219979  HYPERLINK "http://www.jrsoftware.org/files/is/license.txt" }{
 \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1129000\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b7600000068007400740070003a002f002f007700770077002e006a00720073006f006600740077006100720065002e006f00720067002f00660069006c00650073002f00690073002f006c006900630065006e007300
-65002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000060100003afa0000000000340000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid3219979\charrsid3219979 
+65002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000060100003afa000000000034000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid3219979\charrsid3219979 
 \hich\af1\dbch\af31501\loch\f1 http://www.jrsoftware.org/files/is/license.txt}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3219979\charrsid3219979 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid3219979\charrsid3219979 Except where otherwise noted, all of the documentation and software included in the Inno Setup
 \par package is copyrighted by Jordan Russell.
@@ -1046,12 +1046,12 @@ https://github.com/dlemstra/Magick.NET}}}\sectd \ltrsect\linex0\endnhere\sectlin
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid10175951\charrsid10175951 ModernWpf}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10175951\charrsid10175951 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid10175951\charrsid10175951  HYPERLINK "https://github.com/Kinnara/ModernWpf" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8718502\charrsid10175951 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b62000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004b0069006e006e006100720061002f004d006f006400650072006e005700700066000000795881f43b1d7f48
-af2c825dc485276300000000a5ab0003180000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid10175951\charrsid10175951 \hich\af1\dbch\af31501\loch\f1 https://github.com/Kinnara/ModernWpf}}}
+af2c825dc485276300000000a5ab000318000000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid10175951\charrsid10175951 \hich\af1\dbch\af31501\loch\f1 https://github.com/Kinnara/ModernWpf}}}
 \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10175951\charrsid10175951 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10175951\charrsid10175951  HYPERLINK "https://github.com/Kinnara/ModernWpf/blob/master/LICENSE" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid8718502\charrsid10175951 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8a000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f004b0069006e006e006100720061002f004d006f006400650072006e005700700066002f0062006c006f006200
-2f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000005c000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+2f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000005c00000068}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid10175951\charrsid10175951 \hich\af1\dbch\af31501\loch\f1 https://github.com/Kinnara/ModernWpf/blob/master/LICENSE}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 
 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid10175951\charrsid10175951 
 \par }\pard\plain \ltrpar\s19\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid10175951 
@@ -1082,13 +1082,13 @@ af2c825dc485276300000000a5ab0003180000000000000000}}}{\fldrslt {\rtlch\fcs1 \af1
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid5068027 Octokit.net}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5068027\charrsid5068027 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5068027\charrsid5068027 
  HYPERLINK "https://github.com/octokit/octokit.net" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8718502\charrsid5068027 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b66000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006f00630074006f006b00690074002f006f00630074006f006b00690074002e006e00650074000000795881f4
-3b1d7f48af2c825dc485276300000000a5ab0003000078000020000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid5068027\charrsid5068027 \hich\af1\dbch\af31501\loch\f1 
+3b1d7f48af2c825dc485276300000000a5ab000300007800002000000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid5068027\charrsid5068027 \hich\af1\dbch\af31501\loch\f1 
 https://github.com/octokit/octokit.net}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5068027\charrsid5068027 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5068027\charrsid5068027  HYPERLINK "https://github.com/octokit/octokit.net/blob/main/LICENSE.txt" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid8718502\charrsid5068027 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b92000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f006f00630074006f006b00690074002f006f00630074006f006b00690074002e006e00650074002f0062006c00
-6f0062002f006d00610069006e002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000003800fe00}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
-\cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid5068027\charrsid5068027 \hich\af1\dbch\af31501\loch\f1 https://github.com/octokit/octokit.net/blob/mai\hich\af1\dbch\af31501\loch\f1 n/LICENSE.txt}}}\sectd \ltrsect
+6f0062002f006d00610069006e002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000003800fe00d8}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+\cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid5068027\charrsid5068027 \hich\af1\dbch\af31501\loch\f1 https://github.com/octokit/octokit.net/blob/ma\hich\af1\dbch\af31501\loch\f1 in/LICENSE.txt}}}\sectd \ltrsect
 \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5068027\charrsid5068027 
 \par }\pard\plain \ltrpar\s19\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5068027 \rtlch\fcs1 
 \af2\afs20\alang1025 \ltrch\fcs0 \f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f1\cf1\insrsid5068027\charrsid5068027 MIT License
@@ -1117,12 +1117,12 @@ https://github.com/octokit/octokit.net}}}\sectd \ltrsect\linex0\endnhere\sectlin
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid4332568\charrsid4332568 SharpZipLib}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4332568\charrsid4332568 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid4332568\charrsid4332568  HYPERLINK "https://github.com/icsharpcode/SharpZipLib" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8718502\charrsid4332568 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00690063007300680061007200700063006f00640065002f00530068006100720070005a00690070004c006900
-62000000795881f43b1d7f48af2c825dc485276300000000a5ab000300f229000058000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid4332568\charrsid4332568 \hich\af1\dbch\af31501\loch\f1 
+62000000795881f43b1d7f48af2c825dc485276300000000a5ab000300f22900005800000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid4332568\charrsid4332568 \hich\af1\dbch\af31501\loch\f1 
 https://github.com/icsharpcode/SharpZipLib}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4332568\charrsid4332568 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4332568\charrsid4332568  HYPERLINK "https://github.com/icsharpcode/SharpZipLib/blob/master/LICENSE.txt" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid8718502\charrsid4332568 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b9e000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00690063007300680061007200700063006f00640065002f00530068006100720070005a00690070004c006900
-62002f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003450000000075000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+62002f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab000345000000007500000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid4332568\charrsid4332568 \hich\af1\dbch\af31501\loch\f1 https://github.com/icsharpcode/SharpZipLib/blob/master/LICENSE.txt}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {
 \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4332568\charrsid4332568 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid4332568\charrsid4332568 MIT License}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid4332568\charrsid8149878 \line 
@@ -1148,12 +1148,12 @@ https://github.com/icsharpcode/SharpZipLib}}}\sectd \ltrsect\linex0\endnhere\sec
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid14048677\charrsid5068027 libvlcsharp}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14048677\charrsid5068027 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid14048677\charrsid5068027  HYPERLINK "https://github.com/videolan/libvlcsharp" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8718502\charrsid5068027 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b68000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0076006900640065006f006c0061006e002f006c006900620076006c0063007300680061007200700000007958
-81f43b1d7f48af2c825dc485276300000000a5ab0003000000680044000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid14048677\charrsid5068027 \hich\af1\dbch\af31501\loch\f1 
+81f43b1d7f48af2c825dc485276300000000a5ab000300000068004400000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid14048677\charrsid5068027 \hich\af1\dbch\af31501\loch\f1 
 https://github.com/videolan/libvlcsharp}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14048677\charrsid5068027 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14048677\charrsid5068027  HYPERLINK "https://github.com/videolan/libvlcsharp/blob/3.x/LICENSE" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid8718502\charrsid5068027 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b8a000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0076006900640065006f006c0061006e002f006c006900620076006c006300730068006100720070002f006200
-6c006f0062002f0033002e0078002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000008005a020000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+6c006f0062002f0033002e0078002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000008005a02000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid14048677\charrsid5068027 \hich\af1\dbch\af31501\loch\f1 https://github.com/videolan/libvlcsharp/blob/3.x/LICENSE}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 
 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14048677\charrsid5068027 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid14048677\charrsid5068027                   GNU LESSER GENERAL PUBLIC LICENSE
@@ -1667,19 +1667,20 @@ https://github.com/videolan/libvlcsharp}}}\sectd \ltrsect\linex0\endnhere\sectli
 \par }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782  HYPERLINK "https://github.com/videolan/vlc/tree/master/lib" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8718502\charrsid1596782 
 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b78000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0076006900640065006f006c0061006e002f0076006c0063002f0074007200650065002f006d00610073007400
-650072002f006c00690062000000795881f43b1d7f48af2c825dc485276300000000a5ab00030000000000ce00000c}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid1596782\charrsid1596782 \hich\af1\dbch\af31501\loch\f1 
-https://github.com/videolan/vlc/tree/master/lib}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782 
+650072002f006c00690062000000795881f43b1d7f48af2c825dc485276300000000a5ab00030000000000ce00000c00}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid1596782\charrsid1596782 
+\hich\af1\dbch\af31501\loch\f1 https://github.com/videolan/vlc/tree/master/lib}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782 
 \par }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782  HYPERLINK "https://code.videolan.org/videolan/libvlc-nuget" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8718502\charrsid1596782 
 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b78000000680074007400700073003a002f002f0063006f00640065002e0076006900640065006f006c0061006e002e006f00720067002f0076006900640065006f006c0061006e002f006c006900620076006c006300
-2d006e0075006700650074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003d200000000ce004600}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid1596782\charrsid1596782 \hich\af1\dbch\af31501\loch\f1 
-https://code.videolan.org/videolan/libvlc-nuget}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782 
+2d006e0075006700650074000000795881f43b1d7f48af2c825dc485276300000000a5ab0003d200000000ce00460000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid1596782\charrsid1596782 
+\hich\af1\dbch\af31501\loch\f1 https://code.videolan.org/videolan/libvlc-nuget}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782 
 \par License: }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782 
 \par }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782  HYPERLINK "https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid8718502\charrsid1596782 
 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b88000000680074007400700073003a002f002f007700770077002e0067006e0075002e006f00720067002f006c006900630065006e007300650073002f006f006c0064002d006c006900630065006e00730065007300
-2f006c00670070006c002d0032002e0031002e00680074006d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000007800a200}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid1596782\charrsid1596782 
-\hich\af1\dbch\af31501\loch\f1 https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782 
+2f006c00670070006c002d0032002e0031002e00680074006d006c000000795881f43b1d7f48af2c825dc485276300000000a5ab000300000000007800a20000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+\cs18\fs20\ul\cf2\loch\af1\hich\af1\dbch\af31501\insrsid1596782\charrsid1596782 \hich\af1\dbch\af31501\loch\f1 https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid1596782\charrsid1596782 
 \par                   GNU LESSER GENERAL PUBLIC LICENSE
 \par                        Version 2.1, February 1999
 \par 
@@ -2192,13 +2193,12 @@ https://code.videolan.org/videolan/libvlc-nuget}}}\sectd \ltrsect\linex0\endnher
 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid5471568 
 \par MaterialSkin: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5471568  HYPERLINK "https://github.com/IgnaceMaes/MaterialSkin" }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5471568 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6e000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00490067006e006100630065004d006100650073002f004d006100740065007200690061006c0053006b006900
-6e000000795881f43b1d7f48af2c825dc485276300000000a5ab0003ff9814000045000000000000000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs18\ul\cf2\dbch\af31501\insrsid5471568 \hich\af31506\dbch\af31501\loch\f31506 https://github.com/IgnaceMaes/MaterialSkin}}}
-\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5471568 
+6e000000795881f43b1d7f48af2c825dc485276300000000a5ab0003ff981400004500000000000000000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs18\ul\cf2\dbch\af31501\insrsid5471568 \hich\af31506\dbch\af31501\loch\f31506 https://github.com/IgnaceMaes/MaterialSkin}
+}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5471568 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5471568  HYPERLINK "https://github.com/IgnaceMaes/MaterialSkin/blob/master/LICENSE" }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5471568 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b96000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f00490067006e006100630065004d006100650073002f004d006100740065007200690061006c0053006b006900
-6e002f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab0003ff0000000000000000ff0000000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs18\ul\cf2\dbch\af31501\insrsid5471568 
-\hich\af31506\dbch\af31501\loch\f31506 https://github.com/IgnaceMaes/MaterialSkin/blob/m\hich\af31506\dbch\af31501\loch\f31506 aster/LICENSE}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 
-\insrsid5471568 
+6e002f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045000000795881f43b1d7f48af2c825dc485276300000000a5ab0003ff0000000000000000ff000000000000}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs18\ul\cf2\dbch\af31501\insrsid5471568 
+\hich\af31506\dbch\af31501\loch\f31506 https://github.com/IgnaceMaes/MaterialSkin/blob/master/LICENSE}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5471568 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid5471568\charrsid8804037 
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\cf1\insrsid5471568\charrsid8876939 Copyright (c) 2014 Ignace Maes
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid5471568\charrsid8804037 
@@ -2228,12 +2228,12 @@ https://code.videolan.org/videolan/libvlc-nuget}}}\sectd \ltrsect\linex0\endnher
 \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\ul\insrsid5471568\charrsid3219979 Html5-boilerplate}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5471568\charrsid3219979 : }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid5471568\charrsid3219979  HYPERLINK "https://github.com/h5bp/html5-boilerplate" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1040\langfe1033\langnp1040\insrsid5471568\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b6c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0068003500620070002f00680074006d006c0035002d0062006f0069006c006500720070006c00610074006500
-0000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000003c72ff0000000000ff000000050000000000000000000081}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid5471568\charrsid3219979 https://github.com/h5bp/html5-boilerplate}}}
+0000795881f43b1d7f48af2c825dc485276300000000a5ab0003000000003c72ff0000000000ff0000000500000000000000000000810c}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \cs18\f1\fs20\ul\cf2\insrsid5471568\charrsid3219979 https://github.com/h5bp/html5-boilerplate}}}
 \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5471568\charrsid3219979 
 \par License: }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5471568\charrsid3219979  HYPERLINK "https://github.com/h5bp/html5-boilerplate/blob/master/LICENSE.txt" }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid5471568\charrsid3219979 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b9c000000680074007400700073003a002f002f006700690074006800750062002e0063006f006d002f0068003500620070002f00680074006d006c0035002d0062006f0069006c006500720070006c00610074006500
-2f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab00034f0000000000ff0000000000ffff0000000000000000ff6900240000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
+2f0062006c006f0062002f006d00610073007400650072002f004c004900430045004e00530045002e007400780074000000795881f43b1d7f48af2c825dc485276300000000a5ab00034f0000000000ff0000000000ffff0000000000000000ff6900240000ff}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \cs18\f1\fs20\ul\cf2\insrsid5471568\charrsid3219979 https://github.com/h5bp/html5-boilerplate/blob/master/LICENSE.txt}}}\sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 
 \f1\fs20\insrsid5471568\charrsid3219979 
 \par 
@@ -2401,8 +2401,8 @@ fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff
 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000509e
-f4886e84d601feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
+ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000404b
+2453ad86d601feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000105000000000000}}
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Model/SettingsModel.cs b/src/livelywpf/livelywpf/Model/SettingsModel.cs
index a6cd2cac1..bc03a96df 100644
--- a/src/livelywpf/livelywpf/Model/SettingsModel.cs
+++ b/src/livelywpf/livelywpf/Model/SettingsModel.cs
@@ -39,7 +39,6 @@ public class SettingsModel : ObservableObject
         public bool LiveTile { get; set; }
         public System.Windows.Media.Stretch ScalerVideo { get; set; }
         public System.Windows.Media.Stretch ScalerGif { get; set; }
-        //public StreamQualitySuggestion StreamQuality { get; set; }
         public WallpaperArrangement WallpaperArrangement { get; set; }
         public string SavedURL { get; set; }
         public string IgnoreUpdateTag { get; set; }
@@ -81,27 +80,7 @@ public class SettingsModel : ObservableObject
         /// </summary>
         public int AudioVolumeGlobal { get; set; }
         public WallpaperScaler WallpaperScaling { get; set; }
-        //private 
-        /*
-        //todo need to rewrite audio manager from scratch.
-        public bool MuteVideo { get; set; }
-        public bool MuteCef { get; set; } //unused, need to get processid of subprocess of cef.
-        public bool MuteCefAudioIn { get; set; }
-        public bool MuteMic { get; set; }
-        public bool MuteAppWP { get; set; }
-        public bool MuteGlobal { get; set; } //mute audio of all types of wp's
-        public bool AlwaysAudio { get; set; } //play audio even when not on desktop
-
-        // warning user of risk, count.
-        public int WarningUnity { get; set; }
-        public int WarningGodot { get; set; }
-        public int WarningURL { get; set; }
-        public int WarningApp { get; set; }
-
-        public bool RunOnlyDesktop { get; set; } //run only when on desktop focus.
-        public VideoPlayer VidPlayer { get; set; }
-        public GIFPlayer GifPlayer { get; set; }
-        */
+        public bool CefDiskCache { get; set; }
 
         public SettingsModel()
         {
@@ -150,6 +129,7 @@ public SettingsModel()
             WallpaperBundleVersion = -1;
             AudioVolumeGlobal = 50;
             WallpaperScaling = WallpaperScaler.fill;
+            CefDiskCache = false;
         }
     }
 }
diff --git a/src/livelywpf/livelywpf/Program.cs b/src/livelywpf/livelywpf/Program.cs
index fa762bf2b..8d42f361d 100644
--- a/src/livelywpf/livelywpf/Program.cs
+++ b/src/livelywpf/livelywpf/Program.cs
@@ -19,7 +19,8 @@ public class Program
 
         private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
         private static readonly Mutex mutex = new Mutex(false, "LIVELY:DESKTOPWALLPAPERSYSTEM");
-        public static string WallpaperDir; //Loaded from Settings.json (User configurable.)
+        //Loaded from Settings.json (User configurable.)
+        public static string WallpaperDir;
         public static readonly string AppDataDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Lively Wallpaper");
 
         //todo: use singleton or something instead?
@@ -39,7 +40,7 @@ public static void Main()
                 // wait a few seconds in case livelywpf instance is just shutting down..
                 if (!mutex.WaitOne(TimeSpan.FromSeconds(1), false))
                 {
-                    //ref: https://stackoverflow.com/questions/19147/what-is-the-correct-way-to-create-a-single-instance-wpf-application
+                    // ref: https://stackoverflow.com/questions/19147/what-is-the-correct-way-to-create-a-single-instance-wpf-application
                     // send our registered Win32 message to make the currently running lively instance to bring to foreground.
                     // todo: ditch this once ipc server is ready?
                     NativeMethods.PostMessage(
diff --git a/src/livelywpf/livelywpf/Properties/Resources.Designer.cs b/src/livelywpf/livelywpf/Properties/Resources.Designer.cs
index 6710e15cc..2b446bbc6 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.Designer.cs
+++ b/src/livelywpf/livelywpf/Properties/Resources.Designer.cs
@@ -650,6 +650,15 @@ public static string TextPerformancePause {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Preview Wallpaper.
+        /// </summary>
+        public static string TextPreviewWallpaper {
+            get {
+                return ResourceManager.GetString("TextPreviewWallpaper", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Remove.
         /// </summary>
diff --git a/src/livelywpf/livelywpf/Properties/Resources.ar.resx b/src/livelywpf/livelywpf/Properties/Resources.ar.resx
index e24edde63..dfa50645b 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.ar.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.ar.resx
@@ -680,4 +680,7 @@ Edge is the built in webview of windows 10.</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.de.resx b/src/livelywpf/livelywpf/Properties/Resources.de.resx
index 9fb7cacd1..df14914d7 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.de.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.de.resx
@@ -681,5 +681,8 @@ https://github.com/rocksdanister/lively/wiki</value>
   </data>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
+  </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
   </data>   
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.es.resx b/src/livelywpf/livelywpf/Properties/Resources.es.resx
index b859589f0..f2273038e 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.es.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.es.resx
@@ -682,4 +682,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.fil.resx b/src/livelywpf/livelywpf/Properties/Resources.fil.resx
index da1181bd9..72541534f 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.fil.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.fil.resx
@@ -680,4 +680,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.fr.resx b/src/livelywpf/livelywpf/Properties/Resources.fr.resx
index ade08e18e..fe77f69a0 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.fr.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.fr.resx
@@ -685,4 +685,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
diff --git a/src/livelywpf/livelywpf/Properties/Resources.hu.resx b/src/livelywpf/livelywpf/Properties/Resources.hu.resx
index d6767af70..6c5bc367d 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.hu.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.hu.resx
@@ -683,4 +683,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.it.resx b/src/livelywpf/livelywpf/Properties/Resources.it.resx
index 99c655151..c90ef3a13 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.it.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.it.resx
@@ -685,4 +685,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.ko.resx b/src/livelywpf/livelywpf/Properties/Resources.ko.resx
index e57941261..82cf679c4 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.ko.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.ko.resx
@@ -684,4 +684,7 @@ Edge는 Windows 10의 내장 웹뷰입니다.</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.ms.resx b/src/livelywpf/livelywpf/Properties/Resources.ms.resx
index 2a1833e11..29b677308 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.ms.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.ms.resx
@@ -664,22 +664,25 @@ Edge ialah Webview sedia ada bagi Windows 10.</value>
   <data name="TitleAudioMaster" xml:space="preserve">
     <value>Kekuataan Bunyi (Utama)</value>
   </data>
-    <data name="TextWallpaperFitFill" xml:space="preserve">
-    <value>Fill</value>
+  <data name="TextWallpaperFitFill" xml:space="preserve">
+    <value>Isi</value>
   </data>
   <data name="TextWallpaperFitNone" xml:space="preserve">
-    <value>None</value>
+    <value>Tiada</value>
   </data>
   <data name="TextWallpaperFitUniform" xml:space="preserve">
-    <value>Uniform</value>
+    <value>Seragam</value>
   </data>
   <data name="TextWallpaperFitUniformToFill" xml:space="preserve">
-    <value>Uniform Fill</value>
+    <value>Isi Seragam</value>
+  </data>
+  <data name="TipWallpaperFit" xml:space="preserve">
+    <value>Algoritma Skala Wallpaper</value>
   </data>
-    <data name="TipWallpaperFit" xml:space="preserve">
-    <value>Wallpaper scaling algorithm.</value>
+  <data name="TitleWallpaperFit" xml:space="preserve">
+    <value>Pilih Padanan</value>
   </data>
-    <data name="TitleWallpaperFit" xml:space="preserve">
-    <value>Choose a fit</value>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
   </data>
 </root>
diff --git a/src/livelywpf/livelywpf/Properties/Resources.nl-NL.resx b/src/livelywpf/livelywpf/Properties/Resources.nl-NL.resx
index 52be74f5f..53d699f2e 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.nl-NL.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.nl-NL.resx
@@ -672,4 +672,7 @@ Alle processen: Heavier, Scant alle processen om afspeelmogelijkheden te bepalen
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
diff --git a/src/livelywpf/livelywpf/Properties/Resources.pl.resx b/src/livelywpf/livelywpf/Properties/Resources.pl.resx
index f9a466bec..7f3a3b4ec 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.pl.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.pl.resx
@@ -682,4 +682,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
diff --git a/src/livelywpf/livelywpf/Properties/Resources.pt-BR.resx b/src/livelywpf/livelywpf/Properties/Resources.pt-BR.resx
index 5a22901ee..39e629e55 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.pt-BR.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.pt-BR.resx
@@ -681,5 +681,8 @@ https://github.com/rocksdanister/lively/wiki</value>
   </data>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
+  </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
   </data>   
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.pt.resx b/src/livelywpf/livelywpf/Properties/Resources.pt.resx
index bd0732f30..3405b6553 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.pt.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.pt.resx
@@ -682,4 +682,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
diff --git a/src/livelywpf/livelywpf/Properties/Resources.resx b/src/livelywpf/livelywpf/Properties/Resources.resx
index 4b84e5d52..8bacdf156 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.resx
@@ -329,6 +329,9 @@ If still not working, close &amp;amp; start Lively again/ restart windows.
   <data name="TextPerformancePause" xml:space="preserve">
     <value>Pause</value>
   </data>
+  <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
   <data name="TextRemove" xml:space="preserve">
     <value>Remove</value>
   </data>
diff --git a/src/livelywpf/livelywpf/Properties/Resources.ru.resx b/src/livelywpf/livelywpf/Properties/Resources.ru.resx
index a8a3a0e33..9b6c9347d 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.ru.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.ru.resx
@@ -682,4 +682,7 @@ https://github.com/rocksdanister/lively/wiki</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.sv.resx b/src/livelywpf/livelywpf/Properties/Resources.sv.resx
index 6dcf10f1e..e68669e77 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.sv.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.sv.resx
@@ -682,4 +682,7 @@ Edge är den inbyggda webbvisningen av Windows 10.</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.uk.resx b/src/livelywpf/livelywpf/Properties/Resources.uk.resx
index 1881e1cea..1b2a57efe 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.uk.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.uk.resx
@@ -681,5 +681,8 @@ https://github.com/rocksdanister/lively/wiki</value>
   </data>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
+  </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
   </data>    
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.zh-Hant.resx b/src/livelywpf/livelywpf/Properties/Resources.zh-Hant.resx
index 586dab941..43edb3929 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.zh-Hant.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.zh-Hant.resx
@@ -679,4 +679,7 @@ Edge is the built in webview of windows 10.</value>
     <data name="TitleWallpaperFit" xml:space="preserve">
     <value>Choose a fit</value>
   </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/livelywpf/livelywpf/Properties/Resources.zh.resx b/src/livelywpf/livelywpf/Properties/Resources.zh.resx
index 59b9b8a9c..41486ec1f 100644
--- a/src/livelywpf/livelywpf/Properties/Resources.zh.resx
+++ b/src/livelywpf/livelywpf/Properties/Resources.zh.resx
@@ -667,21 +667,24 @@ https://github.com/rocksdanister/lively/wiki</value>
     <value>主音量</value>
   </data>
     <data name="TextWallpaperFitFill" xml:space="preserve">
-    <value>Fill</value>
+    <value>填充</value>
   </data>
   <data name="TextWallpaperFitNone" xml:space="preserve">
-    <value>None</value>
+    <value>无</value>
   </data>
   <data name="TextWallpaperFitUniform" xml:space="preserve">
-    <value>Uniform</value>
+    <value>统一</value>
   </data>
   <data name="TextWallpaperFitUniformToFill" xml:space="preserve">
-    <value>Uniform Fill</value>
+    <value>统一填充</value>
   </data>
     <data name="TipWallpaperFit" xml:space="preserve">
-    <value>Wallpaper scaling algorithm.</value>
+    <value>壁纸缩放算法。</value>
   </data>
     <data name="TitleWallpaperFit" xml:space="preserve">
-    <value>Choose a fit</value>
+    <value>选择契合度</value>
+  </data>
+    <data name="TextPreviewWallpaper" xml:space="preserve">
+    <value>Preview Wallpaper</value>
   </data>   
 </root>
diff --git a/src/livelywpf/livelywpf/Systray.cs b/src/livelywpf/livelywpf/Systray.cs
index 39c064549..d7838ed5c 100644
--- a/src/livelywpf/livelywpf/Systray.cs
+++ b/src/livelywpf/livelywpf/Systray.cs
@@ -25,7 +25,7 @@ public Systray(bool visibility = true)
 
             _notifyIcon.DoubleClick += (s, args) => Program.ShowMainWindow();
             _notifyIcon.Icon = Properties.Icons.appicon;
-            _notifyIcon.Text = "Lively Wallpaper";
+            _notifyIcon.Text = Properties.Resources.TitleAppName;
 
             CreateContextMenu();
             _notifyIcon.Visible = visibility;
@@ -45,6 +45,7 @@ private void CreateContextMenu()
                 Margin = new Padding(0),
                 //Font = new System.Drawing.Font("Segoe UI", 10F),
             };
+            _notifyIcon.ContextMenuStrip.Opening += ContextMenuStrip_Opening;
 
             _notifyIcon.ContextMenuStrip.Renderer = new Helpers.CustomContextMenu.RendererDark();
             _notifyIcon.ContextMenuStrip.Items.Add(Properties.Resources.TextOpenLively, Properties.Icons.icons8_home_64).Click += (s, e) => Program.ShowMainWindow();
@@ -78,6 +79,55 @@ private void CreateContextMenu()
             _notifyIcon.ContextMenuStrip.Items.Add(Properties.Resources.TextExit, Properties.Icons.icons8_delete_52).Click += (s, e) => Program.ExitApplication();
         }
 
+        /// <summary>
+        /// Fix for when menu opens to the nearest screen instead of the screen in which cursor is located.
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ContextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            ContextMenuStrip menuStrip = (sender as ContextMenuStrip);
+            if (ScreenHelper.IsMultiScreen())
+            {
+                //Finding screen in which cursor is present.
+                var screen = Screen.FromPoint(Cursor.Position);
+
+                var mousePos = Cursor.Position;
+                //Converting global cursor pos. to given screen pos.
+                mousePos.X += mousePos.X < 0 ?
+                    SystemInformation.VirtualScreen.Width - Screen.PrimaryScreen.Bounds.Width : -Math.Abs(screen.Bounds.X);
+                mousePos.Y += mousePos.Y < 0 ?
+                    SystemInformation.VirtualScreen.Height - Screen.PrimaryScreen.Bounds.Height : -Math.Abs(screen.Bounds.Y);
+
+                //guessing taskbar pos. based on cursor pos. on display.
+                bool isLeft = mousePos.X < screen.Bounds.Width * .5;
+                bool isTop = mousePos.Y < screen.Bounds.Height * .5;
+
+                //menu popup pos. rule.
+                if (isLeft && isTop)
+                {
+                    //not possible?
+                    menuStrip.Show(Cursor.Position, ToolStripDropDownDirection.Default);
+                }
+                if (isLeft && !isTop)
+                {
+                    menuStrip.Show(Cursor.Position, ToolStripDropDownDirection.AboveRight);
+                }
+                else if (!isLeft && isTop)
+                {
+                    menuStrip.Show(Cursor.Position, ToolStripDropDownDirection.BelowLeft);
+                }
+                else if (!isLeft && !isTop)
+                {
+                    menuStrip.Show(Cursor.Position, ToolStripDropDownDirection.AboveLeft);
+                }
+            }
+            else
+            {
+                menuStrip.Show(Cursor.Position, ToolStripDropDownDirection.AboveLeft);
+            }
+        }
+
         public void ShowBalloonNotification(int timeout, string title, string msg)
         {
             _notifyIcon.ShowBalloonTip(timeout, title, msg, ToolTipIcon.None);
diff --git a/src/livelywpf/livelywpf/ViewModel/ScreenLayoutViewModel.cs b/src/livelywpf/livelywpf/ViewModel/ScreenLayoutViewModel.cs
index d2115abde..423e07915 100644
--- a/src/livelywpf/livelywpf/ViewModel/ScreenLayoutViewModel.cs
+++ b/src/livelywpf/livelywpf/ViewModel/ScreenLayoutViewModel.cs
@@ -196,8 +196,7 @@ private void CanCustomiseWallpaper()
         private void UpdateLayout()
         {
             ScreenItems.Clear();
-            if (Program.SettingsVM.Settings.WallpaperArrangement == WallpaperArrangement.span
-            || Program.SettingsVM.Settings.WallpaperArrangement == WallpaperArrangement.duplicate)
+            if (Program.SettingsVM.Settings.WallpaperArrangement == WallpaperArrangement.span)
             {
                 if (SetupDesktop.Wallpapers.Count == 0)
                 {
@@ -224,7 +223,14 @@ private void UpdateLayout()
                             livelyPropertyFilePath = x.GetLivelyPropertyCopyPath();
                         }
                     });
-                    unsortedScreenItems.Add(new Model.ScreenLayoutModel(item, imgPath, livelyPropertyFilePath, item.DeviceNumber));
+                    if(Program.SettingsVM.Settings.WallpaperArrangement == WallpaperArrangement.duplicate)
+                    {
+                        unsortedScreenItems.Add(new Model.ScreenLayoutModel(item, imgPath, livelyPropertyFilePath, "-"));
+                    }
+                    else
+                    {
+                        unsortedScreenItems.Add(new Model.ScreenLayoutModel(item, imgPath, livelyPropertyFilePath, item.DeviceNumber));
+                    }
                 }
 
                 foreach (var item in unsortedScreenItems.OrderBy(x => x.Screen.Bounds.X).ToList())
diff --git a/src/livelywpf/livelywpf/ViewModel/SettingsViewModel.cs b/src/livelywpf/livelywpf/ViewModel/SettingsViewModel.cs
index f1b01792e..4f8958ab1 100644
--- a/src/livelywpf/livelywpf/ViewModel/SettingsViewModel.cs
+++ b/src/livelywpf/livelywpf/ViewModel/SettingsViewModel.cs
@@ -84,6 +84,7 @@ public SettingsViewModel()
             MoveExistingWallpaperNewDir = Settings.WallpaperDirMoveExistingWallpaperNewDir;
             GlobalWallpaperVolume = Settings.AudioVolumeGlobal;
             SelectedWallpaperScalingIndex = (int)Settings.WallpaperScaling;
+            CefDiskCache = Settings.CefDiskCache;
         }
 
         private SettingsModel _settings;
@@ -528,6 +529,22 @@ public string WebDebuggingPort
             }
         }
 
+        private bool _cefDiskCache;
+        public bool CefDiskCache
+        {
+            get { return _cefDiskCache; }
+            set
+            {
+                _cefDiskCache = value;
+                if(Settings.CefDiskCache != _cefDiskCache)
+                {
+                    Settings.CefDiskCache = _cefDiskCache;
+                    UpdateConfigFile();
+                }
+                OnPropertyChanged("CefDiskCache");
+            }
+        }
+
         private bool _detectStreamWallpaper;
         public bool DetectStreamWallpaper
         {
diff --git a/src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml b/src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml
new file mode 100644
index 000000000..595165811
--- /dev/null
+++ b/src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml
@@ -0,0 +1,21 @@
+<Window x:Class="livelywpf.Views.WallpaperPreviewWindow"
+        xmlns:ui="http://schemas.modernwpf.com/2019"
+        ui:WindowHelper.UseModernWindowStyle="True"
+        ui:ThemeManager.IsThemeAware="True"  
+        ui:TitleBar.IsIconVisible="True"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        mc:Ignorable="d"
+        ResizeMode="NoResize"
+        WindowStyle="ToolWindow"
+        BorderBrush="{DynamicResource SystemControlHighlightAltListAccentHighBrush}"   
+        Title="Preview" Height="740" Width="1280"
+        Loaded="Window_Loaded" Closing="Window_Closing">
+    <Grid>
+        <!-- wallpaper window will be placed here! -->
+        <Rectangle x:Name="PreviewBorder" Fill="{DynamicResource SystemControlForegroundBaseLowBrush}" Width="1200" Height="650" HorizontalAlignment="Center" VerticalAlignment="Center" />
+        <ui:ProgressRing x:Name="ProgressRing" IsActive="True" Width="100" Height="100"/>
+    </Grid>
+</Window>
diff --git a/src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml.cs b/src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml.cs
new file mode 100644
index 000000000..b6766e4b8
--- /dev/null
+++ b/src/livelywpf/livelywpf/Views/Dialogues/WallpaperPreviewWindow.xaml.cs
@@ -0,0 +1,126 @@
+using System;
+using System.Windows;
+using livelywpf.Core;
+
+namespace livelywpf.Views
+{
+    /// <summary>
+    /// Interaction logic for WallpaperPreviewWindow.xaml
+    /// </summary>
+    public partial class WallpaperPreviewWindow : Window
+    {
+        private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
+        private readonly LibraryModel wallpaperData;
+        private IWallpaper wallpaper = null;
+        private bool _initializedWallpaper = false;
+        public WallpaperPreviewWindow(LibraryModel wp)
+        {
+            InitializeComponent();
+            this.wallpaperData = wp;
+        }
+
+        private void Window_Loaded(object sender, RoutedEventArgs e)
+        {
+            LoadWallpaper(wallpaperData);
+        }
+
+        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            if(!_initializedWallpaper)
+            {
+                e.Cancel = true;
+                return;
+            }
+
+            if(wallpaper != null)
+            {
+                //detach wallpaper window from this dialogue.
+                WindowOperations.SetParentSafe(wallpaper.GetHWND(), IntPtr.Zero);
+                wallpaper.Terminate();
+            }
+        }
+
+        private void LoadWallpaper(LibraryModel wp)
+        {
+            var targetDisplay = Program.SettingsVM.Settings.SelectedDisplay;
+            if (wp.LivelyInfo.Type == WallpaperType.web
+                || wp.LivelyInfo.Type == WallpaperType.webaudio
+                || wp.LivelyInfo.Type == WallpaperType.url)
+            {
+                wp.ItemStartup = true;
+                var item = new WebProcess(wp.FilePath, wp, targetDisplay);
+                item.WindowInitialized += SetupDesktop_WallpaperInitialized;
+                item.Show();
+            }
+            if (wp.LivelyInfo.Type == WallpaperType.app
+                || wp.LivelyInfo.Type == WallpaperType.godot
+                || wp.LivelyInfo.Type == WallpaperType.unity)
+            {
+                MessageBox.Show("not supported currently");
+                this.Close();
+            }
+            else if (wp.LivelyInfo.Type == WallpaperType.video)
+            {
+                wp.ItemStartup = true;
+                var item = new VideoPlayerMPVExt(wp.FilePath, wp, targetDisplay,
+                    Program.SettingsVM.Settings.WallpaperScaling);
+                item.WindowInitialized += SetupDesktop_WallpaperInitialized;
+                item.Show();
+            }
+            else if (wp.LivelyInfo.Type == WallpaperType.videostream)
+            {
+                wp.ItemStartup = true;
+                var item = new VideoPlayerVLC(wp.FilePath, wp, targetDisplay);
+                item.WindowInitialized += SetupDesktop_WallpaperInitialized;
+                item.Show();
+            }
+            else if (wp.LivelyInfo.Type == WallpaperType.gif)
+            {
+                var item = new GIFPlayerUWP(wp.FilePath, wp,
+                    targetDisplay, Program.SettingsVM.Settings.WallpaperScaling);
+                item.WindowInitialized += SetupDesktop_WallpaperInitialized;
+                item.Show();
+            }
+        }
+
+        private void SetupDesktop_WallpaperInitialized(object sender, WindowInitializedArgs e)
+        {
+            try
+            {
+                _initializedWallpaper = true;
+                wallpaper = (IWallpaper)sender;
+                wallpaper.WindowInitialized -= SetupDesktop_WallpaperInitialized;
+                _ = this.Dispatcher.BeginInvoke(new Action(() => {
+                    wallpaper.GetWallpaperData().ItemStartup = false;
+                    ProgressRing.IsActive = false;
+                }));
+
+                if (e.Success)
+                {
+                    _ = this.Dispatcher.BeginInvoke(new Action(() => {       
+                        //attach wp hwnd to border ui element.
+                        WindowOperations.SetProgramToFramework(this, wallpaper.GetHWND(), PreviewBorder);
+                    }));
+                }
+                else
+                {
+                    Logger.Error("Wallpaper Preview: Failed to launch wallpaper: " + e.Msg + "\n" + e.Error.ToString());
+                    MessageBox.Show(e.Error.Message, Properties.Resources.TitleAppName);
+                    _ = this.Dispatcher.BeginInvoke(new Action(() => {
+                        this.Close();
+                    }));
+                }
+            }
+            catch (Exception ex)
+            {
+                Logger.Error("Wallpaper Preview: Failed processing wallpaper: " + ex.ToString());
+                if (wallpaper != null)
+                {
+                    _ = this.Dispatcher.BeginInvoke(new Action(() => {
+                        this.Close();
+                    }));
+                }
+            }
+        }
+    }
+}
diff --git a/src/livelywpf/livelywpf/Views/Main/AddWallpaperView.xaml b/src/livelywpf/livelywpf/Views/Main/AddWallpaperView.xaml
index a5607edaf..478dd555f 100644
--- a/src/livelywpf/livelywpf/Views/Main/AddWallpaperView.xaml
+++ b/src/livelywpf/livelywpf/Views/Main/AddWallpaperView.xaml
@@ -14,7 +14,7 @@
     <Grid>
         <StackPanel VerticalAlignment="Top" Margin="10, 0, 0, 0" HorizontalAlignment="Left">
             <TextBlock FontSize="12" Text="{x:Static p:Resources.TitleWallpaper}" FontWeight="Bold" Margin="0, 10, 0, 0"/>
-            <xamlHost:WindowsXamlHost x:Name="PreviewGif" HorizontalAlignment="Left" 
+            <xamlHost:WindowsXamlHost x:Name="PreviewGif" HorizontalAlignment="Left"
                       Width="384" Height="216" Margin="0, 10, 0, 0" InitialTypeName="Windows.UI.Xaml.Controls.Image" ChildChanged="PreviewGif_ChildChanged"  />
             <TextBlock FontSize="12" Margin="25, 5, 0, 0" Text="{x:Static p:Resources.DescriptionDragDropFIle}"/>
 
diff --git a/src/livelywpf/livelywpf/Views/Main/LibraryView.xaml.cs b/src/livelywpf/livelywpf/Views/Main/LibraryView.xaml.cs
index 960e82e9b..1bd749907 100644
--- a/src/livelywpf/livelywpf/Views/Main/LibraryView.xaml.cs
+++ b/src/livelywpf/livelywpf/Views/Main/LibraryView.xaml.cs
@@ -48,7 +48,8 @@ private void LivelyGridView_ChildChanged(object sender, EventArgs e)
                     TextExportZip = Properties.Resources.TextExportWallpaperZip,
                     TextInformation = Properties.Resources.TitleAbout,
                     TextSetWallpaper = Properties.Resources.TextSetWallpaper,
-                    TextShowDisk = Properties.Resources.TextShowOnDisk
+                    TextShowDisk = Properties.Resources.TextShowOnDisk,
+                    TextPreviewWallpaper = Properties.Resources.TextPreviewWallpaper
                 };
                 LivelyGridControl.GridElementSize((livelygrid.GridSize)Program.SettingsVM.SelectedTileSizeIndex);
                 LivelyGridControl.ContextMenuClick += LivelyGridControl_ContextMenuClick;
@@ -77,6 +78,14 @@ private async void LivelyGridControl_ContextMenuClick(object sender, object e)
             await this.Dispatcher.InvokeAsync(new Action(async () => {
                 switch (s.Name)
                 {
+                    case "previewWallpaper":
+                        var prev = new WallpaperPreviewWindow((LibraryModel)e)
+                        {
+                            WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner,
+                            Owner = App.AppWindow
+                        };
+                        prev.Show();
+                        break;
                     case "showOnDisk":
                         Program.LibraryVM.WallpaperShowOnDisk(e);
                         break;
diff --git a/src/livelywpf/livelywpf/Views/Screen/ScreenLayoutView.xaml.cs b/src/livelywpf/livelywpf/Views/Screen/ScreenLayoutView.xaml.cs
index ebe92b4d4..a1566231d 100644
--- a/src/livelywpf/livelywpf/Views/Screen/ScreenLayoutView.xaml.cs
+++ b/src/livelywpf/livelywpf/Views/Screen/ScreenLayoutView.xaml.cs
@@ -50,7 +50,7 @@ private void SetupDesktop_WallpaperChanged(object sender, EventArgs e)
 
         private void CreateLabelWindows()
         {
-            if(ScreenHelper.IsMultiScreen() && Program.SettingsVM.Settings.WallpaperArrangement != WallpaperArrangement.span)
+            if(ScreenHelper.IsMultiScreen())
             {
                 foreach (var item in ScreenHelper.GetScreen())
                 {
diff --git a/src/livelywpf/livelywpf/WallpaperViews/VLCElement.xaml.cs b/src/livelywpf/livelywpf/WallpaperViews/VLCElement.xaml.cs
index eb55f175c..53430b87c 100644
--- a/src/livelywpf/livelywpf/WallpaperViews/VLCElement.xaml.cs
+++ b/src/livelywpf/livelywpf/WallpaperViews/VLCElement.xaml.cs
@@ -142,11 +142,14 @@ private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs
         {
             try
             {
-                _mediaReady = false;
-                _mediaPlayer.EndReached -= _mediaPlayer_EndReached;
-                _mediaPlayer.Dispose();
-                _libVLC.Dispose();
-                _media.Dispose();
+                if(_mediaReady)
+                {
+                    _mediaReady = false;
+                    _mediaPlayer.EndReached -= _mediaPlayer_EndReached;
+                    _mediaPlayer.Dispose();
+                    _libVLC.Dispose();
+                    _media.Dispose();
+                }
             }
             catch (Exception ex)
             {
diff --git a/src/livelywpf/livelywpf/livelywpf.csproj b/src/livelywpf/livelywpf/livelywpf.csproj
index 283d4d50e..b5ff5a12a 100644
--- a/src/livelywpf/livelywpf/livelywpf.csproj
+++ b/src/livelywpf/livelywpf/livelywpf.csproj
@@ -10,7 +10,11 @@
     <StartupObject>livelywpf.Program</StartupObject>
     <ApplicationIcon>appicon.ico</ApplicationIcon>
     <Version>1.0.0</Version>
-    <AssemblyVersion>1.0.5.0</AssemblyVersion>
+    <AssemblyVersion>1.0.7.0</AssemblyVersion>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
+    <DefineConstants>TRACE</DefineConstants>
   </PropertyGroup>
 
   <ItemGroup>
@@ -28,7 +32,7 @@
     <PackageReference Include="ModernWpfUI" Version="0.9.1" />
     <PackageReference Include="Mpv.NET" Version="1.1.1" />
     <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
-    <PackageReference Include="NLog" Version="4.7.3" />
+    <PackageReference Include="NLog" Version="4.7.4" />
     <PackageReference Include="Octokit" Version="0.48.0" />
     <PackageReference Include="RawInput.Sharp" Version="0.0.3" />
     <PackageReference Include="SharpZipLib" Version="1.2.0" />