commit 3e31aa036322b96ada4fd65ca6bf98a3f19429df
Author: Merith-TK <merith@merith.xyz>
Date:   Sat Dec 28 13:07:51 2024 -0800

    Decompile and Rebuild v0.1.2
    
    begin work: base version 0993
    
    move original program for orgnization
    
    golang work
    
    snapshot decompiled code
    
    it builds! (but doesnt run)
    
    source code bump
    
    library stash
    
    decompile 0.1.2, make it build

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..98b3ccd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.vs
+bin/
+obj/
+vendor/
+*.exe
\ No newline at end of file
diff --git a/App.ico b/App.ico
new file mode 100644
index 0000000..16883c3
Binary files /dev/null and b/App.ico differ
diff --git a/ControlApp.Properties/Resources.cs b/ControlApp.Properties/Resources.cs
new file mode 100644
index 0000000..abd2c76
--- /dev/null
+++ b/ControlApp.Properties/Resources.cs
@@ -0,0 +1,48 @@
+using System.CodeDom.Compiler;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Globalization;
+using System.Resources;
+using System.Runtime.CompilerServices;
+
+namespace ControlApp.Properties;
+
+[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+[DebuggerNonUserCode]
+[CompilerGenerated]
+internal class Resources
+{
+	private static ResourceManager resourceMan;
+
+	private static CultureInfo resourceCulture;
+
+	[EditorBrowsable(EditorBrowsableState.Advanced)]
+	internal static ResourceManager ResourceManager
+	{
+		get
+		{
+			if (resourceMan == null)
+			{
+				resourceMan = new ResourceManager("ControlApp.Properties.Resources", typeof(Resources).Assembly);
+			}
+			return resourceMan;
+		}
+	}
+
+	[EditorBrowsable(EditorBrowsableState.Advanced)]
+	internal static CultureInfo Culture
+	{
+		get
+		{
+			return resourceCulture;
+		}
+		set
+		{
+			resourceCulture = value;
+		}
+	}
+
+	internal Resources()
+	{
+	}
+}
diff --git a/ControlApp.csproj b/ControlApp.csproj
new file mode 100644
index 0000000..7ebe680
--- /dev/null
+++ b/ControlApp.csproj
@@ -0,0 +1,55 @@
+<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
+  <PropertyGroup>
+    <AssemblyName>ControlApp</AssemblyName>
+    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>
+    <OutputType>WinExe</OutputType>
+    <UseWindowsForms>True</UseWindowsForms>
+    <TargetFramework>net8.0-windows</TargetFramework>
+  </PropertyGroup>
+  <PropertyGroup>
+    <LangVersion>12.0</LangVersion>
+    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup>
+    <RootNamespace />
+    <ApplicationIcon>App.ico</ApplicationIcon>
+    <PlatformTarget>x64</PlatformTarget>
+  </PropertyGroup>
+  <ItemGroup>
+    <PackageReference Include="System.Drawing.Common" Version="9.0.0" />
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="HtmlAgilityPack">
+      <HintPath>C:\ControlApp\HtmlAgilityPack.dll</HintPath>
+    </Reference>
+    <Reference Include="AxInterop.WMPLib">
+      <HintPath>C:\ControlApp\AxInterop.WMPLib.dll</HintPath>
+    </Reference>
+    <Reference Include="Vlc.DotNet.Forms">
+      <HintPath>C:\ControlApp\Vlc.DotNet.Forms.dll</HintPath>
+    </Reference>
+    <Reference Include="Vlc.DotNet.Core">
+      <HintPath>C:\ControlApp\Vlc.DotNet.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="Interop.WMPLib">
+      <HintPath>C:\ControlApp\Interop.WMPLib.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Speech">
+      <HintPath>C:\ControlApp\System.Speech.dll</HintPath>
+    </Reference>
+    <Reference Include="Emgu.CV">
+      <HintPath>C:\ControlApp\Emgu.CV.dll</HintPath>
+    </Reference>
+    <Reference Include="Emgu.CV.Bitmap">
+      <HintPath>C:\ControlApp\Emgu.CV.Bitmap.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Update="App.ico">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Update="Readme.md">
+      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ControlApp.csproj.user b/ControlApp.csproj.user
new file mode 100644
index 0000000..7bf5240
--- /dev/null
+++ b/ControlApp.csproj.user
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+  <ItemGroup>
+    <Compile Update="ControlApp\Audiopop.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\Blank.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\ComForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\ConfigSettingsForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\ControlApp.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\CustomMessage.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\Options.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\Other.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\PopUp.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\sendcmd.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\SendOrDelete.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\Subliminal.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\WatchForMe.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\Webform.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="ControlApp\WriteForMe.cs">
+      <SubType>Form</SubType>
+    </Compile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/ControlApp/ApplicationConfiguration.cs b/ControlApp/ApplicationConfiguration.cs
new file mode 100644
index 0000000..f41f4eb
--- /dev/null
+++ b/ControlApp/ApplicationConfiguration.cs
@@ -0,0 +1,15 @@
+using System.Runtime.CompilerServices;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+[CompilerGenerated]
+internal static class ApplicationConfiguration
+{
+	public static void Initialize()
+	{
+		Application.EnableVisualStyles();
+		Application.SetCompatibleTextRenderingDefault(defaultValue: false);
+		Application.SetHighDpiMode(HighDpiMode.SystemAware);
+	}
+}
diff --git a/ControlApp/Audiopop.cs b/ControlApp/Audiopop.cs
new file mode 100644
index 0000000..bbc17de
--- /dev/null
+++ b/ControlApp/Audiopop.cs
@@ -0,0 +1,59 @@
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Media;
+using System.Windows.Forms;
+using WMPLib;
+
+namespace ControlApp;
+
+public class Audiopop : Form
+{
+	private string whatlocal;
+
+	private IContainer components;
+
+	public Audiopop(string what)
+	{
+		whatlocal = what;
+		InitializeComponent();
+	}
+
+	private void Audiopop_Load(object sender, EventArgs e)
+	{
+		if (whatlocal.Substring(whatlocal.Length - 3, 3) == "wav")
+		{
+			new SoundPlayer(whatlocal).Play();
+			Close();
+			return;
+		}
+		WindowsMediaPlayerClass windowsMediaPlayerClass = new WindowsMediaPlayerClass();
+		((IWMPPlayer4)windowsMediaPlayerClass).URL = whatlocal;
+		((IWMPPlayer4)windowsMediaPlayerClass).controls.play();
+		Close();
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		base.SuspendLayout();
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 450);
+		base.Name = "Audiopop";
+		base.Opacity = 0.0;
+		base.ShowIcon = false;
+		base.ShowInTaskbar = false;
+		this.Text = "Audiopop";
+		base.Load += new System.EventHandler(Audiopop_Load);
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/Audiopop.resx b/ControlApp/Audiopop.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/Audiopop.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/Blank.cs b/ControlApp/Blank.cs
new file mode 100644
index 0000000..59f6f14
--- /dev/null
+++ b/ControlApp/Blank.cs
@@ -0,0 +1,108 @@
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class Blank : Form
+{
+	private int count;
+
+	private int whatlock;
+
+	private Timer tmr;
+
+	private LockMouse lockMouse;
+
+	private LockKeyboard LockKeyboard;
+
+	private IContainer components;
+
+	public Blank(int what)
+	{
+		tmr = new Timer();
+		tmr.Interval = (int)TimeSpan.FromSeconds(10.0).TotalMilliseconds;
+		tmr.Tick += closewindow;
+		lockMouse = new LockMouse();
+		LockKeyboard = new LockKeyboard();
+		whatlock = what;
+		InitializeComponent();
+		count = 1;
+	}
+
+	public void closewindow(object sender, EventArgs e)
+	{
+		count--;
+		if (count == 0)
+		{
+			if (whatlock == 1)
+			{
+				lockMouse.Unlock();
+			}
+			else if (whatlock == 2)
+			{
+				lockMouse.Unlock();
+				LockKeyboard.Unlock();
+			}
+			Close();
+		}
+	}
+
+	public void add_time(int what)
+	{
+		if (whatlock < what)
+		{
+			whatlock = what;
+		}
+		count++;
+	}
+
+	private void Blank_Load(object sender, EventArgs e)
+	{
+		base.Opacity = 0.001;
+		base.StartPosition = FormStartPosition.CenterScreen;
+		Screen[] my = Screen.AllScreens;
+		base.Size = my[0].Bounds.Size;
+		base.FormBorderStyle = FormBorderStyle.None;
+		base.TopMost = true;
+		base.Visible = true;
+		if (whatlock == 1)
+		{
+			lockMouse.Lock();
+		}
+		else if (whatlock == 2)
+		{
+			lockMouse.Lock();
+			LockKeyboard.Lock();
+		}
+		tmr.Start();
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		base.SuspendLayout();
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 450);
+		base.ControlBox = false;
+		this.Cursor = System.Windows.Forms.Cursors.No;
+		base.Name = "Blank";
+		base.Opacity = 0.001;
+		base.ShowInTaskbar = false;
+		this.Text = "Blank";
+		base.TopMost = true;
+		base.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+		base.Load += new System.EventHandler(Blank_Load);
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/Blank.resx b/ControlApp/Blank.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/Blank.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/ComForm.cs b/ControlApp/ComForm.cs
new file mode 100644
index 0000000..5631de7
--- /dev/null
+++ b/ControlApp/ComForm.cs
@@ -0,0 +1,84 @@
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+using HtmlAgilityPack;
+
+namespace ControlApp;
+
+public class ComForm : Form
+{
+	private string formtype;
+
+	private IContainer components;
+
+	public string[] ReturnedData { get; private set; }
+
+	public ComForm(string Url, string type)
+	{
+		formtype = type;
+		ReturnedData = new string[3] { "", "", "" };
+		WebBrowser wb = new WebBrowser();
+		wb.Name = "TheWebBrowser";
+		wb.Navigate(Url);
+		wb.Dock = DockStyle.Fill;
+		wb.DocumentCompleted += TheWebBrowser_DocumentCompleted;
+		base.Controls.Add(wb);
+		InitializeComponent();
+	}
+
+	private void ComForm_Load(object sender, EventArgs e)
+	{
+	}
+
+	private void TheWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
+	{
+		if (base.Controls["TheWebBrowser"] != null)
+		{
+			string htmlContent = ((WebBrowser)base.Controls["TheWebBrowser"]).DocumentText;
+			HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
+			doc.LoadHtml(htmlContent);
+			HtmlNode labelNode = doc.GetElementbyId("result");
+			if (labelNode != null)
+			{
+				ReturnedData[0] = labelNode.InnerText;
+			}
+			if (formtype == "CheckNext")
+			{
+				labelNode = doc.GetElementbyId("next");
+				if (labelNode != null)
+				{
+					ReturnedData[1] = labelNode.InnerText;
+				}
+				labelNode = doc.GetElementbyId("vari");
+				if (labelNode != null)
+				{
+					ReturnedData[2] = labelNode.InnerText;
+				}
+			}
+		}
+		Close();
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		base.SuspendLayout();
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 450);
+		base.Name = "ComForm";
+		base.Opacity = 0.0;
+		this.Text = "ComForm";
+		base.Load += new System.EventHandler(ComForm_Load);
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/ComForm.resx b/ControlApp/ComForm.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/ComForm.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/ConfigSettingsForm.cs b/ControlApp/ConfigSettingsForm.cs
new file mode 100644
index 0000000..36bf082
--- /dev/null
+++ b/ControlApp/ConfigSettingsForm.cs
@@ -0,0 +1,319 @@
+using System;
+using System.ComponentModel;
+using System.Configuration;
+using System.Diagnostics;
+using System.Drawing;
+using System.Windows.Forms;
+using Microsoft.Win32;
+
+namespace ControlApp;
+
+public class ConfigSettingsForm : Form
+{
+	private IContainer components;
+
+	private CheckBox checkBox1;
+
+	private TextBox textBox1;
+
+	private Label label1;
+
+	private Button button1;
+
+	private TextBox textBox2;
+
+	private Label label2;
+
+	private Label label3;
+
+	private TextBox textBox3;
+
+	private CheckBox checkBox2;
+
+	private Button button2;
+
+	private Button button3;
+
+	private Panel panel1;
+
+	private Button button4;
+
+	private Label label4;
+
+	private ComboBox delaycmb;
+
+	private Label label5;
+
+	public ConfigSettingsForm()
+	{
+		InitializeComponent();
+	}
+
+	private void button1_Click(object sender, EventArgs e)
+	{
+		Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
+		KeyValueConfigurationCollection apps = configuration.AppSettings.Settings;
+		apps.Remove("LocalDrive");
+		apps.Remove("AutoRun");
+		apps.Remove("UserName");
+		apps.Remove("Password");
+		apps.Remove("Delay");
+		apps.Remove("RunAll");
+		apps.Add("LocalDrive", textBox1.Text);
+		if (checkBox1.Checked)
+		{
+			apps.Add("AutoRun", "True");
+		}
+		else
+		{
+			apps.Add("AutoRun", "False");
+		}
+		apps.Add("UserName", textBox2.Text);
+		apps.Add("Password", textBox3.Text);
+		if (checkBox2.Checked)
+		{
+			apps.Add("RunAll", "True");
+		}
+		else
+		{
+			apps.Add("RunAll", "False");
+		}
+		if (delaycmb.SelectedIndex == 0)
+		{
+			apps.Add("Delay", "30");
+		}
+		else if (delaycmb.SelectedIndex == 1)
+		{
+			apps.Add("Delay", "60");
+		}
+		else if (delaycmb.SelectedIndex == 2)
+		{
+			apps.Add("Delay", "120");
+		}
+		configuration.Save(ConfigurationSaveMode.Full);
+		ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name);
+		Close();
+	}
+
+	protected override void OnLoad(EventArgs e)
+	{
+		base.OnLoad(e);
+		textBox1.Text = ConfigurationManager.AppSettings["LocalDrive"];
+		textBox2.Text = ConfigurationManager.AppSettings["UserName"];
+		textBox3.Text = ConfigurationManager.AppSettings["Password"];
+		if (ConfigurationManager.AppSettings["AutoRun"] == "True")
+		{
+			checkBox1.Checked = true;
+		}
+		else
+		{
+			checkBox1.Checked = false;
+		}
+		if (ConfigurationManager.AppSettings["RunAll"] == "True")
+		{
+			checkBox2.Checked = true;
+		}
+		else
+		{
+			checkBox2.Checked = false;
+		}
+		switch (ConfigurationManager.AppSettings["Delay"])
+		{
+		case "30":
+			delaycmb.SelectedIndex = 0;
+			break;
+		case "60":
+			delaycmb.SelectedIndex = 1;
+			break;
+		case "120":
+			delaycmb.SelectedIndex = 2;
+			break;
+		}
+	}
+
+	private void ConfigSettingsForm_Load(object sender, EventArgs e)
+	{
+	}
+
+	private void button2_Click(object sender, EventArgs e)
+	{
+		string Password = ConfigurationManager.AppSettings["Password"];
+		if (Password != null || Password == "")
+		{
+			Password = textBox3.Text;
+		}
+		string user = ConfigurationManager.AppSettings["UserName"];
+		if (user != null || user == "")
+		{
+			user = textBox2.Text;
+		}
+		Process.Start(new ProcessStartInfo
+		{
+			FileName = "https://www.thecontrolapp.co.uk/Pages/Sub/SubSettings.aspx?user=" + user + "&password=" + Password,
+			UseShellExecute = true
+		});
+	}
+
+	private void button3_Click(object sender, EventArgs e)
+	{
+		using RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", writable: true);
+		key.SetValue("ControlApp", "\"" + Application.ExecutablePath + "\"");
+	}
+
+	private void button4_Click(object sender, EventArgs e)
+	{
+		using RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", writable: true);
+		key.DeleteValue("My Program", throwOnMissingValue: false);
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.checkBox1 = new System.Windows.Forms.CheckBox();
+		this.textBox1 = new System.Windows.Forms.TextBox();
+		this.label1 = new System.Windows.Forms.Label();
+		this.button1 = new System.Windows.Forms.Button();
+		this.textBox2 = new System.Windows.Forms.TextBox();
+		this.label2 = new System.Windows.Forms.Label();
+		this.label3 = new System.Windows.Forms.Label();
+		this.textBox3 = new System.Windows.Forms.TextBox();
+		this.checkBox2 = new System.Windows.Forms.CheckBox();
+		this.button2 = new System.Windows.Forms.Button();
+		this.button3 = new System.Windows.Forms.Button();
+		this.panel1 = new System.Windows.Forms.Panel();
+		this.button4 = new System.Windows.Forms.Button();
+		this.label4 = new System.Windows.Forms.Label();
+		this.delaycmb = new System.Windows.Forms.ComboBox();
+		this.label5 = new System.Windows.Forms.Label();
+		this.panel1.SuspendLayout();
+		base.SuspendLayout();
+		this.checkBox1.AutoSize = true;
+		this.checkBox1.Location = new System.Drawing.Point(12, 22);
+		this.checkBox1.Name = "checkBox1";
+		this.checkBox1.Size = new System.Drawing.Size(119, 19);
+		this.checkBox1.TabIndex = 0;
+		this.checkBox1.Text = "Auto run sent exe";
+		this.checkBox1.UseVisualStyleBackColor = true;
+		this.textBox1.Location = new System.Drawing.Point(6, 47);
+		this.textBox1.Name = "textBox1";
+		this.textBox1.Size = new System.Drawing.Size(103, 23);
+		this.textBox1.TabIndex = 1;
+		this.label1.AutoSize = true;
+		this.label1.Location = new System.Drawing.Point(115, 50);
+		this.label1.Name = "label1";
+		this.label1.Size = new System.Drawing.Size(74, 15);
+		this.label1.TabIndex = 2;
+		this.label1.Text = "File Location";
+		this.button1.Location = new System.Drawing.Point(114, 351);
+		this.button1.Name = "button1";
+		this.button1.Size = new System.Drawing.Size(75, 23);
+		this.button1.TabIndex = 3;
+		this.button1.Text = "Ok";
+		this.button1.UseVisualStyleBackColor = true;
+		this.button1.Click += new System.EventHandler(button1_Click);
+		this.textBox2.Location = new System.Drawing.Point(6, 76);
+		this.textBox2.Name = "textBox2";
+		this.textBox2.Size = new System.Drawing.Size(100, 23);
+		this.textBox2.TabIndex = 4;
+		this.label2.AutoSize = true;
+		this.label2.Location = new System.Drawing.Point(115, 79);
+		this.label2.Name = "label2";
+		this.label2.Size = new System.Drawing.Size(65, 15);
+		this.label2.TabIndex = 5;
+		this.label2.Text = "User Name";
+		this.label3.AutoSize = true;
+		this.label3.Location = new System.Drawing.Point(115, 108);
+		this.label3.Name = "label3";
+		this.label3.Size = new System.Drawing.Size(57, 15);
+		this.label3.TabIndex = 7;
+		this.label3.Text = "Password";
+		this.textBox3.Location = new System.Drawing.Point(6, 105);
+		this.textBox3.Name = "textBox3";
+		this.textBox3.Size = new System.Drawing.Size(100, 23);
+		this.textBox3.TabIndex = 6;
+		this.checkBox2.AutoSize = true;
+		this.checkBox2.Location = new System.Drawing.Point(12, 138);
+		this.checkBox2.Name = "checkBox2";
+		this.checkBox2.Size = new System.Drawing.Size(133, 19);
+		this.checkBox2.TabIndex = 12;
+		this.checkBox2.Text = "Run All Outstanding";
+		this.checkBox2.UseVisualStyleBackColor = true;
+		this.button2.Location = new System.Drawing.Point(6, 321);
+		this.button2.Name = "button2";
+		this.button2.Size = new System.Drawing.Size(183, 23);
+		this.button2.TabIndex = 13;
+		this.button2.Text = "Change Server Settings";
+		this.button2.UseVisualStyleBackColor = true;
+		this.button2.Click += new System.EventHandler(button2_Click);
+		this.button3.Location = new System.Drawing.Point(14, 27);
+		this.button3.Name = "button3";
+		this.button3.Size = new System.Drawing.Size(54, 23);
+		this.button3.TabIndex = 17;
+		this.button3.Text = "Add";
+		this.button3.UseVisualStyleBackColor = true;
+		this.button3.Click += new System.EventHandler(button3_Click);
+		this.panel1.Controls.Add(this.button4);
+		this.panel1.Controls.Add(this.label4);
+		this.panel1.Controls.Add(this.button3);
+		this.panel1.Location = new System.Drawing.Point(9, 248);
+		this.panel1.Name = "panel1";
+		this.panel1.Size = new System.Drawing.Size(175, 63);
+		this.panel1.TabIndex = 18;
+		this.button4.Location = new System.Drawing.Point(88, 27);
+		this.button4.Name = "button4";
+		this.button4.Size = new System.Drawing.Size(65, 23);
+		this.button4.TabIndex = 18;
+		this.button4.Text = "Remove";
+		this.button4.UseVisualStyleBackColor = true;
+		this.button4.Click += new System.EventHandler(button4_Click);
+		this.label4.AutoSize = true;
+		this.label4.Location = new System.Drawing.Point(39, 0);
+		this.label4.Name = "label4";
+		this.label4.Size = new System.Drawing.Size(97, 15);
+		this.label4.TabIndex = 0;
+		this.label4.Text = "Windows Startup";
+		this.delaycmb.FormattingEnabled = true;
+		this.delaycmb.Items.AddRange(new object[3] { "30s", "60s", "120s" });
+		this.delaycmb.Location = new System.Drawing.Point(12, 163);
+		this.delaycmb.Name = "delaycmb";
+		this.delaycmb.Size = new System.Drawing.Size(94, 23);
+		this.delaycmb.TabIndex = 19;
+		this.label5.AutoSize = true;
+		this.label5.Location = new System.Drawing.Point(115, 166);
+		this.label5.Name = "label5";
+		this.label5.Size = new System.Drawing.Size(36, 15);
+		this.label5.TabIndex = 20;
+		this.label5.Text = "Delay";
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(196, 382);
+		base.Controls.Add(this.label5);
+		base.Controls.Add(this.delaycmb);
+		base.Controls.Add(this.panel1);
+		base.Controls.Add(this.button2);
+		base.Controls.Add(this.checkBox2);
+		base.Controls.Add(this.label3);
+		base.Controls.Add(this.textBox3);
+		base.Controls.Add(this.label2);
+		base.Controls.Add(this.textBox2);
+		base.Controls.Add(this.button1);
+		base.Controls.Add(this.label1);
+		base.Controls.Add(this.textBox1);
+		base.Controls.Add(this.checkBox1);
+		base.Name = "ConfigSettingsForm";
+		this.Text = "ConfigSettingsForm";
+		base.Load += new System.EventHandler(ConfigSettingsForm_Load);
+		this.panel1.ResumeLayout(false);
+		this.panel1.PerformLayout();
+		base.ResumeLayout(false);
+		base.PerformLayout();
+	}
+}
diff --git a/ControlApp/ConfigSettingsForm.resx b/ControlApp/ConfigSettingsForm.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/ConfigSettingsForm.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/ControlApp.cs b/ControlApp/ControlApp.cs
new file mode 100644
index 0000000..3c24940
--- /dev/null
+++ b/ControlApp/ControlApp.cs
@@ -0,0 +1,1711 @@
+using System;
+using System.ComponentModel;
+using System.Configuration;
+using System.Drawing;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class ControlApp : Form
+{
+	private Utils utils;
+
+	private bool varified;
+
+	private string[] bannedsights;
+
+	private BackgroundWorker bg;
+
+	private string[] currentsender;
+
+	private static Guid FolderDownloads = new Guid("374DE290-123F-4565-9164-39C4925E467B");
+
+	private IContainer components;
+
+	private MenuStrip menuStrip1;
+
+	private ToolStripMenuItem settingToolStripMenuItem;
+
+	private ToolStripMenuItem configToolStripMenuItem;
+
+	private TextBox meuser;
+
+	private Label label3;
+
+	private Timer timer1;
+
+	private ToolStripMenuItem optionsToolStripMenuItem;
+
+	private TabControl tabControl1;
+
+	private TabPage tabPage1;
+
+	private TabPage tabPage2;
+
+	private Button button13;
+
+	private Label label6;
+
+	private Label label5;
+
+	private TextBox btnbx;
+
+	private TextBox msgbx;
+
+	private CheckBox All_chk;
+
+	private Label label4;
+
+	private Button button9;
+
+	private Button button8;
+
+	private Button button7;
+
+	private Button button5;
+
+	private Button button4;
+
+	private Button button3;
+
+	private Button button2;
+
+	private Label label2;
+
+	private Button button1;
+
+	private TextBox MainTxt;
+
+	private Label label1;
+
+	private Button ChangeWall_Btn;
+
+	private TextBox webtxt;
+
+	private Button DownloadFile_Btn;
+
+	private Button RunNxt;
+
+	private Label label8;
+
+	private TextBox Nocomds;
+
+	private Button button10;
+
+	private Button RptSend;
+
+	private Button button11;
+
+	private Label label9;
+
+	private TextBox filetxt;
+
+	private Button FileSelecBtn;
+
+	private OpenFileDialog openFileDialog1;
+
+	private Button button17;
+
+	private Button button12;
+
+	private Button plaudbtn;
+
+	private Button wfmbtn;
+
+	private TextBox wfmtxt;
+
+	private Label label10;
+
+	private Label label7;
+
+	private TextBox wfmnotxt;
+
+	private ComboBox groupcmbx;
+
+	private Label label11;
+
+	private Label label12;
+
+	private Label whonxtlbl;
+
+	private Button tkscreen;
+
+	private Button ClearOut;
+
+	private Button wtchfrmebtn;
+
+	private Button twitter;
+
+	private Button senddelbtn;
+
+	private Button TTSBtn;
+
+	private TabPage tabPage3;
+
+	private Label label13;
+
+	private ComboBox DomBox;
+
+	private Label label14;
+
+	private Button dominvdec;
+
+	private Button dominvacceptbtn;
+
+	private TextBox dominvitetxt;
+
+	private Button RunLastBtn;
+
+	private Button webcambtn;
+
+	private Panel panel1;
+
+	private WebBrowser chat;
+
+	private Button refreshbtn;
+
+	private Button disablemsbtn;
+
+	private Button button14;
+
+	private Button RefreshAllBtn;
+
+	private ToolStripMenuItem otherToolStripMenuItem;
+
+	private ComboBox touser;
+
+	private Button Thumbsupbtn;
+
+	private Label label15;
+
+	private TextBox ScoreTxt;
+
+	public ControlApp()
+	{
+		InitializeComponent();
+		utils = new Utils();
+		string blist = ConfigurationManager.AppSettings["BlackList"];
+		if (blist != null)
+		{
+			touser.Items.Clear();
+			utils.blist = utils.seperate_string(blist);
+		}
+		varified = false;
+		string ld = ConfigurationManager.AppSettings["LocalDrive"];
+		if (ld == null || ld == "")
+		{
+			Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
+			KeyValueConfigurationCollection settings = configuration.AppSettings.Settings;
+			string dl = GetDownloadsPath() + "\\";
+			settings.Remove("LocalDrive");
+			settings.Add("LocalDrive", dl);
+			configuration.Save(ConfigurationSaveMode.Full);
+			ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name);
+		}
+		else if (ld.Substring(ld.Length - 1, 1) != "\\")
+		{
+			Configuration configuration2 = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
+			KeyValueConfigurationCollection settings2 = configuration2.AppSettings.Settings;
+			string dl2 = ld + "\\";
+			settings2.Remove("LocalDrive");
+			settings2.Add("LocalDrive", dl2);
+			configuration2.Save(ConfigurationSaveMode.Full);
+			ConfigurationManager.RefreshSection(configuration2.AppSettings.SectionInformation.Name);
+		}
+	}
+
+	protected override void OnLoad(EventArgs e)
+	{
+		base.OnLoad(e);
+		bannedsights = new string[6] { "booru.allthefallen.moe", "mega.nz", "thecontrolapp.co.uk/Pages/ControlPC", "paradroid-gamma.vercel", "imagekit.io/tools/asset-public-link", "paradroid-gamma.web.app" };
+	}
+
+	public void refreshdom()
+	{
+		int seldom = DomBox.SelectedIndex;
+		string[] domlist = utils.GetRelations();
+		DomBox.Items.Clear();
+		string[] array = domlist;
+		foreach (string dom in array)
+		{
+			DomBox.Items.Add(dom);
+		}
+		DomBox.SelectedIndex = seldom;
+		if (domlist.Length != 0)
+		{
+			DomBox.SelectedIndex = 0;
+		}
+		meuser.Text = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		chat.Url = new Uri("https://www.thecontrolapp.co.uk/Messages.aspx?usernm=" + meuser.Text + "&pwd=" + utils.Ecrypt(pwd) + "&vrs=" + vrs + "&othr=" + DomBox.Text);
+		chat.Refresh();
+		string[] invite = utils.GetInvites();
+		if (invite.Length != 0)
+		{
+			dominvitetxt.Text = invite[0];
+		}
+		else
+		{
+			dominvitetxt.Text = "";
+		}
+	}
+
+	private void configToolStripMenuItem_Click(object sender, EventArgs e)
+	{
+		new ConfigSettingsForm().ShowDialog();
+		meuser.Text = ConfigurationManager.AppSettings["UserName"].ToString();
+	}
+
+	private void timer1_Tick(object sender, EventArgs e)
+	{
+		if (ConfigurationManager.AppSettings["RunAll"] == "True")
+		{
+			currentsender = utils.GetLatestItem();
+		}
+		chk_next();
+	}
+
+	private void button11_Click(object sender, EventArgs e)
+	{
+		string[] array = MainTxt.Text.Split("|||");
+		string ret = "";
+		string[] array2 = array;
+		foreach (string s in array2)
+		{
+			ret = ret + utils.Decrypt(s) + "|||";
+		}
+		MainTxt.Text = ret;
+	}
+
+	[DllImport("shell32.dll", CharSet = CharSet.Auto)]
+	private static extern int SHGetKnownFolderPath(ref Guid id, int flags, nint token, out nint path);
+
+	public static string GetDownloadsPath()
+	{
+		if (Environment.OSVersion.Version.Major < 6)
+		{
+			throw new NotSupportedException();
+		}
+		nint pathPtr = IntPtr.Zero;
+		try
+		{
+			SHGetKnownFolderPath(ref FolderDownloads, 0, IntPtr.Zero, out pathPtr);
+			return Marshal.PtrToStringUni(pathPtr);
+		}
+		finally
+		{
+			Marshal.FreeCoTaskMem(pathPtr);
+		}
+	}
+
+	private void Form1_Load(object sender, EventArgs e)
+	{
+		try
+		{
+			string userlist = ConfigurationManager.AppSettings["CommonUsers"];
+			if (userlist != null)
+			{
+				touser.Items.Clear();
+				string[] array = utils.seperate_string(userlist);
+				foreach (string user in array)
+				{
+					touser.Items.Add(user);
+				}
+			}
+			using (CustomMessage cm = new CustomMessage("Initialising, please wait", "", 0, tts: false))
+			{
+				cm.Show();
+				chk_next();
+			}
+			int delay = ((ConfigurationManager.AppSettings["Delay"] != null) ? Convert.ToInt32(ConfigurationManager.AppSettings["Delay"]) : 60);
+			timer1.Enabled = true;
+			timer1.Interval = delay * 1000;
+		}
+		catch
+		{
+		}
+	}
+
+	public void chk_next()
+	{
+		System.Windows.Forms.Cursor.Show();
+		Cursor cursor = System.Windows.Forms.Cursor.Current;
+		System.Windows.Forms.Cursor.Current = Cursors.WaitCursor;
+		try
+		{
+			string user = ConfigurationManager.AppSettings["UserName"].ToString();
+			string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+			string vrs = "012";
+			string result = utils.getcmd(user, pwd, vrs, "Outstanding");
+			string[] ret = utils.seperate_string(result);
+			Nocomds.Text = ret[0];
+			whonxtlbl.Text = ret[1];
+			if (ret[2] == "0")
+			{
+				varified = false;
+			}
+			else
+			{
+				varified = true;
+			}
+			ScoreTxt.Text = ret[3];
+			if (Nocomds.Text != "0")
+			{
+				try
+				{
+					if (ConfigurationManager.AppSettings["OutstandRemind"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["OutstandRemind"].ToString()))
+					{
+						if (Nocomds.Text == "1")
+						{
+							new CustomMessage("You have " + Nocomds.Text + " outstanding command.", "", 0, tts: true).ShowDialog();
+						}
+						else if (Convert.ToInt16(Nocomds.Text) > 1)
+						{
+							new CustomMessage("You have " + Nocomds.Text + " outstanding commands.", "", 0, tts: true).ShowDialog();
+						}
+					}
+				}
+				catch
+				{
+				}
+			}
+		}
+		catch (Exception ex)
+		{
+			utils.writetolog("Error checking for count", "Error checking for count :" + ex.Message);
+		}
+		System.Windows.Forms.Cursor.Current = cursor;
+	}
+
+	private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
+	{
+		new Options().ShowDialog();
+	}
+
+	public void createmessageline(string code)
+	{
+		string line = "";
+		if (webtxt.Text == "")
+		{
+			if (filetxt.Text == "")
+			{
+				MessageBox.Show("Please enter a file name.");
+			}
+			else
+			{
+				line = code + "=https://www.thecontrolapp.co.uk/storage/" + filetxt.Text;
+			}
+		}
+		else
+		{
+			string[] array = bannedsights;
+			foreach (string banned in array)
+			{
+				if (webtxt.Text.Contains(banned))
+				{
+					MessageBox.Show("Website banned");
+					break;
+				}
+				line = code + "=" + webtxt.Text;
+			}
+		}
+		line = utils.Ecrypt(line);
+		TextBox mainTxt = MainTxt;
+		mainTxt.Text = mainTxt.Text + line + "|||";
+		webtxt.Text = "";
+		filetxt.Text = "";
+	}
+
+	private void DownloadFile_Btn_Click(object sender, EventArgs e)
+	{
+		createmessageline("D");
+	}
+
+	private void ChangeWall_Btn_Click(object sender, EventArgs e)
+	{
+		string file = "";
+		if (webtxt.Text != "")
+		{
+			file = webtxt.Text;
+		}
+		if (filetxt.Text != "")
+		{
+			file = filetxt.Text;
+		}
+		try
+		{
+			switch (Path.GetExtension(file))
+			{
+			case ".jpg":
+			case ".jpeg":
+			case ".png":
+				createmessageline("P");
+				break;
+			default:
+				MessageBox.Show("Incorrect file type. Please use only image files.");
+				break;
+			}
+		}
+		catch
+		{
+			MessageBox.Show("Incorrect file type. Please use only image files.");
+		}
+	}
+
+	private void button1_Click(object sender, EventArgs e)
+	{
+		string file = "";
+		if (webtxt.Text != "")
+		{
+			file = webtxt.Text;
+		}
+		if (filetxt.Text != "")
+		{
+			file = filetxt.Text;
+		}
+		try
+		{
+			string filetype = Path.GetExtension(file);
+			if (filetype == ".exe" || filetype == ".bat")
+			{
+				createmessageline("R");
+			}
+			else
+			{
+				MessageBox.Show("Incorrect file type. Please use only exe or Bat");
+			}
+		}
+		catch
+		{
+			MessageBox.Show("Incorrect file type. Please use only exe or Bat");
+		}
+	}
+
+	private void button2_Click(object sender, EventArgs e)
+	{
+		createmessageline("W");
+	}
+
+	private void button7_Click_1(object sender, EventArgs e)
+	{
+		string file = "";
+		if (webtxt.Text != "")
+		{
+			file = webtxt.Text;
+		}
+		if (filetxt.Text != "")
+		{
+			file = filetxt.Text;
+		}
+		try
+		{
+			switch (Path.GetExtension(file))
+			{
+			case ".jpg":
+			case ".jpeg":
+			case ".webm":
+			case ".webp":
+			case ".png":
+			case ".mp4":
+			case ".gif":
+			case ".avi":
+				createmessageline("U");
+				break;
+			default:
+				MessageBox.Show("Incorrect file type. Please use only image or movie files");
+				break;
+			}
+		}
+		catch
+		{
+			MessageBox.Show("Incorrect file type. Please use only image or movie files");
+		}
+	}
+
+	private void button8_Click_1(object sender, EventArgs e)
+	{
+		createmessageline("O");
+	}
+
+	private void button4_Click_1(object sender, EventArgs e)
+	{
+		if (msgbx.Text.Length < 2000)
+		{
+			string line = "M=" + msgbx.Text + "&&&" + btnbx.Text;
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+		}
+		else
+		{
+			MessageBox.Show("Message is too long");
+		}
+	}
+
+	private void button13_Click_1(object sender, EventArgs e)
+	{
+		string line = "V=" + msgbx.Text;
+		line = utils.Ecrypt(line);
+		TextBox mainTxt = MainTxt;
+		mainTxt.Text = mainTxt.Text + line + "|||";
+	}
+
+	private void button3_Click_1(object sender, EventArgs e)
+	{
+		string[] lines = ((MainTxt.Text.IndexOf("|||") <= 0) ? new string[1] { MainTxt.Text } : MainTxt.Text.Split("|||"));
+		string me = ConfigurationManager.AppSettings["UserName"].ToString();
+		utils.run_process(lines, me);
+	}
+
+	private void button6_Click_1(object sender, EventArgs e)
+	{
+		Clipboard.SetText(MainTxt.Text);
+	}
+
+	private void button5_Click_1(object sender, EventArgs e)
+	{
+		MainTxt.Text = "";
+	}
+
+	private void button9_Click_1(object sender, EventArgs e)
+	{
+		try
+		{
+			string usernm = "";
+			bool all = All_chk.Checked;
+			string comm = MainTxt.Text;
+			if (all)
+			{
+				touser.Text = "";
+				if (groupcmbx.SelectedIndex == 0 || groupcmbx.SelectedIndex == -1)
+				{
+					MessageBox.Show("Please select a group.");
+				}
+				else
+				{
+					if (varified)
+					{
+						usernm = getgroup().ToString();
+						utils.sendcmd(usernm, comm, all);
+					}
+					else
+					{
+						all = false;
+						MessageBox.Show("Only varified users can send to all");
+					}
+					all = true;
+				}
+			}
+			else if (groupcmbx.SelectedIndex == 0 || groupcmbx.SelectedIndex == -1)
+			{
+				usernm = touser.Text;
+				utils.sendcmd(usernm, comm, all);
+			}
+			else
+			{
+				touser.Text = "";
+				usernm = getgroup().ToString();
+				utils.sendcmd(usernm, comm, all);
+			}
+		}
+		catch (Exception ex)
+		{
+			string msg = ex.Message;
+			utils.writetolog(msg, msg);
+		}
+		groupcmbx.SelectedIndex = 0;
+		MainTxt.Text = "";
+		senddelbtn.Enabled = true;
+		tkscreen.Enabled = true;
+		groupcmbx.Enabled = true;
+	}
+
+	private void RunNxt_Click(object sender, EventArgs e)
+	{
+		currentsender = utils.GetLatestItem();
+		chk_next();
+		Thumbsupbtn.Enabled = true;
+	}
+
+	private void button10_Click(object sender, EventArgs e)
+	{
+		if (currentsender[0] != "-1")
+		{
+			if (MessageBox.Show("Are you sure", "Sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
+			{
+				utils.SendBlockReport(currentsender[0], "", "0");
+			}
+		}
+		else
+		{
+			MessageBox.Show("Last message was from an anonymous sender");
+		}
+	}
+
+	private void RptSend_Click(object sender, EventArgs e)
+	{
+		if (MessageBox.Show("Are you sure", "Sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
+		{
+			utils.SendBlockReport(currentsender[0], currentsender[1], "1");
+		}
+	}
+
+	private void button11_Click_1(object sender, EventArgs e)
+	{
+		chk_next();
+	}
+
+	private void button12_Click(object sender, EventArgs e)
+	{
+		utils.sendftpfile(filetxt.Text);
+	}
+
+	private void button14_Click(object sender, EventArgs e)
+	{
+		string[] array = MainTxt.Text.Split("|||");
+		MainTxt.Text = "";
+		string[] array2 = array;
+		foreach (string s in array2)
+		{
+			MainTxt.Text += utils.Decrypt(s);
+		}
+	}
+
+	private void button15_Click(object sender, EventArgs e)
+	{
+		if (varified)
+		{
+			if (openFileDialog1.ShowDialog() == DialogResult.OK)
+			{
+				string fulladdress = openFileDialog1.FileName;
+				filetxt.Text = Path.GetFileName(fulladdress);
+				new Webform("https://www.thecontrolapp.co.uk/upload.aspx?file=" + fulladdress).Show();
+			}
+			else
+			{
+				filetxt.Text = "";
+			}
+		}
+		else
+		{
+			new CustomMessage("Only allowed for varified users", "", 0, tts: false).ShowDialog();
+		}
+	}
+
+	private void tabPage2_Click(object sender, EventArgs e)
+	{
+	}
+
+	public int getgroup()
+	{
+		return (groupcmbx.SelectedIndex + 1) * -1;
+	}
+
+	private void button17_Click(object sender, EventArgs e)
+	{
+		string file = "";
+		if (webtxt.Text != "")
+		{
+			file = webtxt.Text;
+		}
+		if (filetxt.Text != "")
+		{
+			file = filetxt.Text;
+		}
+		try
+		{
+			switch (Path.GetExtension(file))
+			{
+			case ".jpg":
+			case ".jpeg":
+			case ".webp":
+			case ".webm":
+			case ".png":
+			case ".mp4":
+			case ".gif":
+			case ".avi":
+				createmessageline("S");
+				break;
+			default:
+				MessageBox.Show("Incorrect file type. Please use only image or movie files");
+				break;
+			}
+		}
+		catch
+		{
+			MessageBox.Show("Incorrect file type. Please use only image or movie files");
+		}
+	}
+
+	private void button12_Click_2(object sender, EventArgs e)
+	{
+		bool all = false;
+		string comm = MainTxt.Text;
+		if (groupcmbx.SelectedIndex == 0)
+		{
+			if (currentsender[0] != "-1")
+			{
+				utils.sendcmd(currentsender[0], comm, all);
+			}
+		}
+		else if (currentsender[0] != null && Convert.ToInt16(currentsender[0]) >= -1)
+		{
+			string usernm = getgroup().ToString();
+			all = true;
+			utils.sendcmd(usernm, comm, all);
+		}
+		senddelbtn.Enabled = true;
+	}
+
+	private void wfmbtn_Click(object sender, EventArgs e)
+	{
+		if (int.TryParse(wfmnotxt.Text, out var _))
+		{
+			string line = "F=" + wfmtxt.Text + "&&&" + wfmnotxt.Text;
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+		}
+		else
+		{
+			MessageBox.Show("How many must be a number.");
+		}
+	}
+
+	private void plaudbtn_Click(object sender, EventArgs e)
+	{
+		string file = "";
+		if (webtxt.Text != "")
+		{
+			file = webtxt.Text;
+		}
+		if (filetxt.Text != "")
+		{
+			file = filetxt.Text;
+		}
+		try
+		{
+			string filetype = Path.GetExtension(file);
+			if (filetype == ".mp3" || filetype == ".wav")
+			{
+				createmessageline("A");
+			}
+			else
+			{
+				MessageBox.Show("Incorrect file type. Please use only sound files");
+			}
+		}
+		catch
+		{
+			MessageBox.Show("Incorrect file type. Please use only sound files");
+		}
+	}
+
+	private void button16_Click_1(object sender, EventArgs e)
+	{
+		MainTxt.Text = utils.Ecrypt(MainTxt.Text);
+	}
+
+	private void tkscreen_Click(object sender, EventArgs e)
+	{
+		if (varified)
+		{
+			string line = "1=Yes";
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+			tkscreen.Enabled = false;
+		}
+		else
+		{
+			new CustomMessage("Only allowed for varified users", "", 0, tts: false).ShowDialog();
+		}
+	}
+
+	private void button18_Click(object sender, EventArgs e)
+	{
+	}
+
+	private void ClearOut_Click(object sender, EventArgs e)
+	{
+		if (MessageBox.Show("Are you sure?", "Sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
+		{
+			string user = ConfigurationManager.AppSettings["UserName"].ToString();
+			string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+			string vrs = "012";
+			utils.deleteoutstanding(user, pwd, vrs);
+			chk_next();
+		}
+	}
+
+	private void wtchfrmebtn_Click(object sender, EventArgs e)
+	{
+		createmessageline("2");
+	}
+
+	private void twitter_Click(object sender, EventArgs e)
+	{
+		if (msgbx.Text.Length < 2000)
+		{
+			string line = "3=" + msgbx.Text;
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+		}
+		else
+		{
+			MessageBox.Show("Message is too long");
+		}
+	}
+
+	private void button19_Click(object sender, EventArgs e)
+	{
+		if (varified)
+		{
+			string line = "4=Yes";
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+		}
+		else
+		{
+			new CustomMessage("Only allowed for varified users", "", 0, tts: false).ShowDialog();
+		}
+		senddelbtn.Enabled = false;
+	}
+
+	private void TTSBtn_Click(object sender, EventArgs e)
+	{
+		if (msgbx.Text.Length < 2000)
+		{
+			string line = "5=" + msgbx.Text;
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+		}
+		else
+		{
+			MessageBox.Show("Message is too long");
+		}
+	}
+
+	private void button14_Click_1(object sender, EventArgs e)
+	{
+		MainTxt.Text = utils.Ecrypt(MainTxt.Text);
+	}
+
+	private void RunLastBtn_Click(object sender, EventArgs e)
+	{
+		string[] runcode = currentsender[1].Split("|||");
+		try
+		{
+			utils.run_process(runcode, currentsender[0]);
+		}
+		catch (Exception ex)
+		{
+			utils.writetolog("Error running process \n\r", ex.Message);
+		}
+	}
+
+	private void webcambtn_Click(object sender, EventArgs e)
+	{
+		if (varified)
+		{
+			string line = "6=Yes";
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+		}
+		else
+		{
+			new CustomMessage("Only allowed for varified users", "", 0, tts: false).ShowDialog();
+		}
+	}
+
+	private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
+	{
+		ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		chat.Url = new Uri("https://www.thecontrolapp.co.uk/Messages.aspx?usernm=" + meuser.Text + "&pwd=" + utils.Ecrypt(pwd) + "&vrs=" + vrs + "&othr=" + DomBox.Text);
+		chat.Refresh();
+	}
+
+	private void refreshbtn_Click(object sender, EventArgs e)
+	{
+		ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		chat.Url = new Uri("https://www.thecontrolapp.co.uk/Messages.aspx?usernm=" + meuser.Text + "&pwd=" + utils.Ecrypt(pwd) + "&vrs=" + vrs + "&othr=" + DomBox.Text);
+		chat.Refresh();
+	}
+
+	private void dominvacceptbtn_Click(object sender, EventArgs e)
+	{
+		utils.AcceptInvite(dominvitetxt.Text);
+	}
+
+	private void dominvdec_Click(object sender, EventArgs e)
+	{
+		utils.RejectInvite(dominvitetxt.Text);
+	}
+
+	private void button14_Click_2(object sender, EventArgs e)
+	{
+		new CustomMessage("", "", 10, tts: false).ShowDialog();
+	}
+
+	private void disablemsbtn_Click(object sender, EventArgs e)
+	{
+		if (varified)
+		{
+			string line = "7=Yes";
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+		}
+		else
+		{
+			new CustomMessage("Only allowed for varified users", "", 0, tts: false).ShowDialog();
+		}
+	}
+
+	private void groupcmbx_SelectedIndexChanged(object sender, EventArgs e)
+	{
+	}
+
+	private async void WaitFiveSeconds()
+	{
+		await Task.Delay(5000);
+		MessageBox.Show("5 seconds have passed!");
+	}
+
+	private void button14_Click_3(object sender, EventArgs e)
+	{
+		if (varified)
+		{
+			string line = "8=Yes";
+			line = utils.Ecrypt(line);
+			TextBox mainTxt = MainTxt;
+			mainTxt.Text = mainTxt.Text + line + "|||";
+			groupcmbx.SelectedIndex = 8;
+			groupcmbx.Enabled = false;
+		}
+		else
+		{
+			new CustomMessage("Only allowed for varified users", "", 0, tts: false).ShowDialog();
+		}
+	}
+
+	private void RefreshAllBtn_Click(object sender, EventArgs e)
+	{
+		refreshdom();
+		ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		chat.Url = new Uri("https://www.thecontrolapp.co.uk/Messages.aspx?usernm=" + meuser.Text + "&pwd=" + utils.Ecrypt(pwd) + "&vrs=" + vrs + "&othr=" + DomBox.Text);
+		chat.Refresh();
+	}
+
+	private void otherToolStripMenuItem_Click(object sender, EventArgs e)
+	{
+		using (Other ot = new Other())
+		{
+			ot.ShowDialog();
+		}
+		string userlist = ConfigurationManager.AppSettings["CommonUsers"];
+		if (userlist != null)
+		{
+			touser.Items.Clear();
+			string[] array = utils.seperate_string(userlist);
+			foreach (string user in array)
+			{
+				touser.Items.Add(user);
+			}
+		}
+	}
+
+	private void Thumbsupbtn_Click(object sender, EventArgs e)
+	{
+		if (currentsender[0] != "-1")
+		{
+			string user = ConfigurationManager.AppSettings["UserName"].ToString();
+			string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+			string vrs = "012";
+			utils.getcmd(user, pwd, vrs, "Thumbs" + currentsender[0]);
+			Thumbsupbtn.Enabled = false;
+		}
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.components = new System.ComponentModel.Container();
+		this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+		this.settingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+		this.configToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+		this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+		this.otherToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+		this.meuser = new System.Windows.Forms.TextBox();
+		this.label3 = new System.Windows.Forms.Label();
+		this.timer1 = new System.Windows.Forms.Timer(this.components);
+		this.tabControl1 = new System.Windows.Forms.TabControl();
+		this.tabPage1 = new System.Windows.Forms.TabPage();
+		this.Thumbsupbtn = new System.Windows.Forms.Button();
+		this.RunLastBtn = new System.Windows.Forms.Button();
+		this.ClearOut = new System.Windows.Forms.Button();
+		this.label12 = new System.Windows.Forms.Label();
+		this.whonxtlbl = new System.Windows.Forms.Label();
+		this.button11 = new System.Windows.Forms.Button();
+		this.RptSend = new System.Windows.Forms.Button();
+		this.button10 = new System.Windows.Forms.Button();
+		this.RunNxt = new System.Windows.Forms.Button();
+		this.label8 = new System.Windows.Forms.Label();
+		this.Nocomds = new System.Windows.Forms.TextBox();
+		this.tabPage2 = new System.Windows.Forms.TabPage();
+		this.touser = new System.Windows.Forms.ComboBox();
+		this.button14 = new System.Windows.Forms.Button();
+		this.disablemsbtn = new System.Windows.Forms.Button();
+		this.webcambtn = new System.Windows.Forms.Button();
+		this.TTSBtn = new System.Windows.Forms.Button();
+		this.senddelbtn = new System.Windows.Forms.Button();
+		this.twitter = new System.Windows.Forms.Button();
+		this.wtchfrmebtn = new System.Windows.Forms.Button();
+		this.tkscreen = new System.Windows.Forms.Button();
+		this.label11 = new System.Windows.Forms.Label();
+		this.groupcmbx = new System.Windows.Forms.ComboBox();
+		this.plaudbtn = new System.Windows.Forms.Button();
+		this.wfmbtn = new System.Windows.Forms.Button();
+		this.wfmtxt = new System.Windows.Forms.TextBox();
+		this.label10 = new System.Windows.Forms.Label();
+		this.label7 = new System.Windows.Forms.Label();
+		this.wfmnotxt = new System.Windows.Forms.TextBox();
+		this.button12 = new System.Windows.Forms.Button();
+		this.button17 = new System.Windows.Forms.Button();
+		this.FileSelecBtn = new System.Windows.Forms.Button();
+		this.label9 = new System.Windows.Forms.Label();
+		this.filetxt = new System.Windows.Forms.TextBox();
+		this.button13 = new System.Windows.Forms.Button();
+		this.label6 = new System.Windows.Forms.Label();
+		this.label5 = new System.Windows.Forms.Label();
+		this.btnbx = new System.Windows.Forms.TextBox();
+		this.msgbx = new System.Windows.Forms.TextBox();
+		this.All_chk = new System.Windows.Forms.CheckBox();
+		this.label4 = new System.Windows.Forms.Label();
+		this.button9 = new System.Windows.Forms.Button();
+		this.button8 = new System.Windows.Forms.Button();
+		this.button7 = new System.Windows.Forms.Button();
+		this.button5 = new System.Windows.Forms.Button();
+		this.button4 = new System.Windows.Forms.Button();
+		this.button3 = new System.Windows.Forms.Button();
+		this.button2 = new System.Windows.Forms.Button();
+		this.label2 = new System.Windows.Forms.Label();
+		this.button1 = new System.Windows.Forms.Button();
+		this.MainTxt = new System.Windows.Forms.TextBox();
+		this.label1 = new System.Windows.Forms.Label();
+		this.ChangeWall_Btn = new System.Windows.Forms.Button();
+		this.webtxt = new System.Windows.Forms.TextBox();
+		this.DownloadFile_Btn = new System.Windows.Forms.Button();
+		this.tabPage3 = new System.Windows.Forms.TabPage();
+		this.RefreshAllBtn = new System.Windows.Forms.Button();
+		this.refreshbtn = new System.Windows.Forms.Button();
+		this.panel1 = new System.Windows.Forms.Panel();
+		this.chat = new System.Windows.Forms.WebBrowser();
+		this.label14 = new System.Windows.Forms.Label();
+		this.dominvdec = new System.Windows.Forms.Button();
+		this.dominvacceptbtn = new System.Windows.Forms.Button();
+		this.dominvitetxt = new System.Windows.Forms.TextBox();
+		this.label13 = new System.Windows.Forms.Label();
+		this.DomBox = new System.Windows.Forms.ComboBox();
+		this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+		this.label15 = new System.Windows.Forms.Label();
+		this.ScoreTxt = new System.Windows.Forms.TextBox();
+		this.menuStrip1.SuspendLayout();
+		this.tabControl1.SuspendLayout();
+		this.tabPage1.SuspendLayout();
+		this.tabPage2.SuspendLayout();
+		this.tabPage3.SuspendLayout();
+		this.panel1.SuspendLayout();
+		base.SuspendLayout();
+		this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[1] { this.settingToolStripMenuItem });
+		this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+		this.menuStrip1.Name = "menuStrip1";
+		this.menuStrip1.Size = new System.Drawing.Size(868, 24);
+		this.menuStrip1.TabIndex = 8;
+		this.menuStrip1.Text = "menuStrip1";
+		this.settingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[3] { this.configToolStripMenuItem, this.optionsToolStripMenuItem, this.otherToolStripMenuItem });
+		this.settingToolStripMenuItem.Name = "settingToolStripMenuItem";
+		this.settingToolStripMenuItem.Size = new System.Drawing.Size(56, 20);
+		this.settingToolStripMenuItem.Text = "Setting";
+		this.configToolStripMenuItem.Name = "configToolStripMenuItem";
+		this.configToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+		this.configToolStripMenuItem.Text = "Config";
+		this.configToolStripMenuItem.Click += new System.EventHandler(configToolStripMenuItem_Click);
+		this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
+		this.optionsToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+		this.optionsToolStripMenuItem.Text = "Options";
+		this.optionsToolStripMenuItem.Click += new System.EventHandler(optionsToolStripMenuItem_Click);
+		this.otherToolStripMenuItem.Name = "otherToolStripMenuItem";
+		this.otherToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+		this.otherToolStripMenuItem.Text = "Other";
+		this.otherToolStripMenuItem.Click += new System.EventHandler(otherToolStripMenuItem_Click);
+		this.meuser.Enabled = false;
+		this.meuser.Location = new System.Drawing.Point(102, 37);
+		this.meuser.Name = "meuser";
+		this.meuser.Size = new System.Drawing.Size(143, 23);
+		this.meuser.TabIndex = 15;
+		this.label3.AutoSize = true;
+		this.label3.Location = new System.Drawing.Point(31, 40);
+		this.label3.Name = "label3";
+		this.label3.Size = new System.Drawing.Size(65, 15);
+		this.label3.TabIndex = 16;
+		this.label3.Text = "User Name";
+		this.timer1.Interval = 1500;
+		this.timer1.Tick += new System.EventHandler(timer1_Tick);
+		this.tabControl1.Controls.Add(this.tabPage1);
+		this.tabControl1.Controls.Add(this.tabPage2);
+		this.tabControl1.Controls.Add(this.tabPage3);
+		this.tabControl1.Location = new System.Drawing.Point(31, 66);
+		this.tabControl1.Name = "tabControl1";
+		this.tabControl1.SelectedIndex = 0;
+		this.tabControl1.Size = new System.Drawing.Size(825, 422);
+		this.tabControl1.TabIndex = 32;
+		this.tabPage1.Controls.Add(this.Thumbsupbtn);
+		this.tabPage1.Controls.Add(this.RunLastBtn);
+		this.tabPage1.Controls.Add(this.ClearOut);
+		this.tabPage1.Controls.Add(this.label12);
+		this.tabPage1.Controls.Add(this.whonxtlbl);
+		this.tabPage1.Controls.Add(this.button11);
+		this.tabPage1.Controls.Add(this.RptSend);
+		this.tabPage1.Controls.Add(this.button10);
+		this.tabPage1.Controls.Add(this.RunNxt);
+		this.tabPage1.Controls.Add(this.label8);
+		this.tabPage1.Controls.Add(this.Nocomds);
+		this.tabPage1.Location = new System.Drawing.Point(4, 24);
+		this.tabPage1.Name = "tabPage1";
+		this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+		this.tabPage1.Size = new System.Drawing.Size(817, 394);
+		this.tabPage1.TabIndex = 0;
+		this.tabPage1.Text = "Received Commands";
+		this.tabPage1.UseVisualStyleBackColor = true;
+		this.Thumbsupbtn.Location = new System.Drawing.Point(342, 46);
+		this.Thumbsupbtn.Name = "Thumbsupbtn";
+		this.Thumbsupbtn.Size = new System.Drawing.Size(76, 23);
+		this.Thumbsupbtn.TabIndex = 13;
+		this.Thumbsupbtn.Text = "Thumbs up";
+		this.Thumbsupbtn.UseVisualStyleBackColor = true;
+		this.Thumbsupbtn.Click += new System.EventHandler(Thumbsupbtn_Click);
+		this.RunLastBtn.Location = new System.Drawing.Point(236, 75);
+		this.RunLastBtn.Name = "RunLastBtn";
+		this.RunLastBtn.Size = new System.Drawing.Size(100, 23);
+		this.RunLastBtn.TabIndex = 12;
+		this.RunLastBtn.Text = "Run Last";
+		this.RunLastBtn.UseVisualStyleBackColor = true;
+		this.RunLastBtn.Click += new System.EventHandler(RunLastBtn_Click);
+		this.ClearOut.Location = new System.Drawing.Point(22, 81);
+		this.ClearOut.Name = "ClearOut";
+		this.ClearOut.Size = new System.Drawing.Size(113, 23);
+		this.ClearOut.TabIndex = 11;
+		this.ClearOut.Text = "Clear Outstanding";
+		this.ClearOut.UseVisualStyleBackColor = true;
+		this.ClearOut.Click += new System.EventHandler(ClearOut_Click);
+		this.label12.AutoSize = true;
+		this.label12.Location = new System.Drawing.Point(22, 50);
+		this.label12.Name = "label12";
+		this.label12.Size = new System.Drawing.Size(78, 15);
+		this.label12.TabIndex = 10;
+		this.label12.Text = "Next is from :";
+		this.whonxtlbl.AutoSize = true;
+		this.whonxtlbl.Location = new System.Drawing.Point(106, 50);
+		this.whonxtlbl.Name = "whonxtlbl";
+		this.whonxtlbl.Size = new System.Drawing.Size(50, 15);
+		this.whonxtlbl.TabIndex = 9;
+		this.whonxtlbl.Text = "No Data";
+		this.button11.Location = new System.Drawing.Point(236, 17);
+		this.button11.Name = "button11";
+		this.button11.Size = new System.Drawing.Size(100, 23);
+		this.button11.TabIndex = 8;
+		this.button11.Text = "Check";
+		this.button11.UseVisualStyleBackColor = true;
+		this.button11.Click += new System.EventHandler(button11_Click_1);
+		this.RptSend.Location = new System.Drawing.Point(700, 46);
+		this.RptSend.Name = "RptSend";
+		this.RptSend.Size = new System.Drawing.Size(100, 23);
+		this.RptSend.TabIndex = 7;
+		this.RptSend.Text = "Report Sender";
+		this.RptSend.UseVisualStyleBackColor = true;
+		this.RptSend.Click += new System.EventHandler(RptSend_Click);
+		this.button10.Location = new System.Drawing.Point(700, 17);
+		this.button10.Name = "button10";
+		this.button10.Size = new System.Drawing.Size(100, 23);
+		this.button10.TabIndex = 6;
+		this.button10.Text = "Block Sender";
+		this.button10.UseVisualStyleBackColor = true;
+		this.button10.Click += new System.EventHandler(button10_Click);
+		this.RunNxt.Location = new System.Drawing.Point(236, 46);
+		this.RunNxt.Name = "RunNxt";
+		this.RunNxt.Size = new System.Drawing.Size(100, 23);
+		this.RunNxt.TabIndex = 2;
+		this.RunNxt.Text = "Run Next";
+		this.RunNxt.UseVisualStyleBackColor = true;
+		this.RunNxt.Click += new System.EventHandler(RunNxt_Click);
+		this.label8.AutoSize = true;
+		this.label8.Location = new System.Drawing.Point(128, 20);
+		this.label8.Name = "label8";
+		this.label8.Size = new System.Drawing.Size(102, 15);
+		this.label8.TabIndex = 1;
+		this.label8.Text = "No of Commands";
+		this.Nocomds.Location = new System.Drawing.Point(22, 17);
+		this.Nocomds.Name = "Nocomds";
+		this.Nocomds.Size = new System.Drawing.Size(100, 23);
+		this.Nocomds.TabIndex = 0;
+		this.tabPage2.Controls.Add(this.touser);
+		this.tabPage2.Controls.Add(this.button14);
+		this.tabPage2.Controls.Add(this.disablemsbtn);
+		this.tabPage2.Controls.Add(this.webcambtn);
+		this.tabPage2.Controls.Add(this.TTSBtn);
+		this.tabPage2.Controls.Add(this.senddelbtn);
+		this.tabPage2.Controls.Add(this.twitter);
+		this.tabPage2.Controls.Add(this.wtchfrmebtn);
+		this.tabPage2.Controls.Add(this.tkscreen);
+		this.tabPage2.Controls.Add(this.label11);
+		this.tabPage2.Controls.Add(this.groupcmbx);
+		this.tabPage2.Controls.Add(this.plaudbtn);
+		this.tabPage2.Controls.Add(this.wfmbtn);
+		this.tabPage2.Controls.Add(this.wfmtxt);
+		this.tabPage2.Controls.Add(this.label10);
+		this.tabPage2.Controls.Add(this.label7);
+		this.tabPage2.Controls.Add(this.wfmnotxt);
+		this.tabPage2.Controls.Add(this.button12);
+		this.tabPage2.Controls.Add(this.button17);
+		this.tabPage2.Controls.Add(this.FileSelecBtn);
+		this.tabPage2.Controls.Add(this.label9);
+		this.tabPage2.Controls.Add(this.filetxt);
+		this.tabPage2.Controls.Add(this.button13);
+		this.tabPage2.Controls.Add(this.label6);
+		this.tabPage2.Controls.Add(this.label5);
+		this.tabPage2.Controls.Add(this.btnbx);
+		this.tabPage2.Controls.Add(this.msgbx);
+		this.tabPage2.Controls.Add(this.All_chk);
+		this.tabPage2.Controls.Add(this.label4);
+		this.tabPage2.Controls.Add(this.button9);
+		this.tabPage2.Controls.Add(this.button8);
+		this.tabPage2.Controls.Add(this.button7);
+		this.tabPage2.Controls.Add(this.button5);
+		this.tabPage2.Controls.Add(this.button4);
+		this.tabPage2.Controls.Add(this.button3);
+		this.tabPage2.Controls.Add(this.button2);
+		this.tabPage2.Controls.Add(this.label2);
+		this.tabPage2.Controls.Add(this.button1);
+		this.tabPage2.Controls.Add(this.MainTxt);
+		this.tabPage2.Controls.Add(this.label1);
+		this.tabPage2.Controls.Add(this.ChangeWall_Btn);
+		this.tabPage2.Controls.Add(this.webtxt);
+		this.tabPage2.Controls.Add(this.DownloadFile_Btn);
+		this.tabPage2.Location = new System.Drawing.Point(4, 24);
+		this.tabPage2.Name = "tabPage2";
+		this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+		this.tabPage2.Size = new System.Drawing.Size(817, 394);
+		this.tabPage2.TabIndex = 1;
+		this.tabPage2.Text = "Send Command";
+		this.tabPage2.UseVisualStyleBackColor = true;
+		this.tabPage2.Click += new System.EventHandler(tabPage2_Click);
+		this.touser.FormattingEnabled = true;
+		this.touser.Location = new System.Drawing.Point(507, 319);
+		this.touser.Name = "touser";
+		this.touser.Size = new System.Drawing.Size(140, 23);
+		this.touser.TabIndex = 81;
+		this.button14.Location = new System.Drawing.Point(410, 231);
+		this.button14.Name = "button14";
+		this.button14.Size = new System.Drawing.Size(75, 46);
+		this.button14.TabIndex = 80;
+		this.button14.Text = "Disable All Input";
+		this.button14.UseVisualStyleBackColor = true;
+		this.button14.Click += new System.EventHandler(button14_Click_3);
+		this.disablemsbtn.Location = new System.Drawing.Point(410, 179);
+		this.disablemsbtn.Name = "disablemsbtn";
+		this.disablemsbtn.Size = new System.Drawing.Size(75, 46);
+		this.disablemsbtn.TabIndex = 79;
+		this.disablemsbtn.Text = "Disable Mouse";
+		this.disablemsbtn.UseVisualStyleBackColor = true;
+		this.disablemsbtn.Click += new System.EventHandler(disablemsbtn_Click);
+		this.webcambtn.Location = new System.Drawing.Point(410, 127);
+		this.webcambtn.Name = "webcambtn";
+		this.webcambtn.Size = new System.Drawing.Size(75, 46);
+		this.webcambtn.TabIndex = 78;
+		this.webcambtn.Text = "Webcam Image";
+		this.webcambtn.UseVisualStyleBackColor = true;
+		this.webcambtn.Click += new System.EventHandler(webcambtn_Click);
+		this.TTSBtn.Location = new System.Drawing.Point(271, 262);
+		this.TTSBtn.Name = "TTSBtn";
+		this.TTSBtn.Size = new System.Drawing.Size(77, 23);
+		this.TTSBtn.TabIndex = 77;
+		this.TTSBtn.Text = "TTS";
+		this.TTSBtn.UseVisualStyleBackColor = true;
+		this.TTSBtn.Click += new System.EventHandler(TTSBtn_Click);
+		this.senddelbtn.Location = new System.Drawing.Point(410, 80);
+		this.senddelbtn.Name = "senddelbtn";
+		this.senddelbtn.Size = new System.Drawing.Size(75, 41);
+		this.senddelbtn.TabIndex = 76;
+		this.senddelbtn.Text = "Send or Delete";
+		this.senddelbtn.UseVisualStyleBackColor = true;
+		this.senddelbtn.Click += new System.EventHandler(button19_Click);
+		this.twitter.Location = new System.Drawing.Point(18, 262);
+		this.twitter.Name = "twitter";
+		this.twitter.Size = new System.Drawing.Size(77, 23);
+		this.twitter.TabIndex = 75;
+		this.twitter.Text = "Twitter post";
+		this.twitter.UseVisualStyleBackColor = true;
+		this.twitter.Click += new System.EventHandler(twitter_Click);
+		this.wtchfrmebtn.Location = new System.Drawing.Point(274, 179);
+		this.wtchfrmebtn.Name = "wtchfrmebtn";
+		this.wtchfrmebtn.Size = new System.Drawing.Size(118, 23);
+		this.wtchfrmebtn.TabIndex = 74;
+		this.wtchfrmebtn.Text = "Watch for me";
+		this.wtchfrmebtn.UseVisualStyleBackColor = true;
+		this.wtchfrmebtn.Click += new System.EventHandler(wtchfrmebtn_Click);
+		this.tkscreen.Location = new System.Drawing.Point(410, 31);
+		this.tkscreen.Name = "tkscreen";
+		this.tkscreen.Size = new System.Drawing.Size(75, 46);
+		this.tkscreen.TabIndex = 73;
+		this.tkscreen.Text = "Take Screenshot";
+		this.tkscreen.UseVisualStyleBackColor = true;
+		this.tkscreen.Click += new System.EventHandler(tkscreen_Click);
+		this.label11.AutoSize = true;
+		this.label11.Location = new System.Drawing.Point(425, 350);
+		this.label11.Name = "label11";
+		this.label11.Size = new System.Drawing.Size(40, 15);
+		this.label11.TabIndex = 72;
+		this.label11.Text = "Group";
+		this.groupcmbx.FormattingEnabled = true;
+		this.groupcmbx.Items.AddRange(new object[19]
+		{
+			"", "Hypno", "Goon", "Censored", "Girl Cock", "Male focus", "Female focus", "BDSM", "Extreme", "Trans",
+			"Panic", "Blackmail/Exposure", "Latex/Rubber", "Sissy", "Chastity", "Furry", "Feet", "Praise/Wholesome", "Misc"
+		});
+		this.groupcmbx.Location = new System.Drawing.Point(507, 347);
+		this.groupcmbx.Name = "groupcmbx";
+		this.groupcmbx.Size = new System.Drawing.Size(140, 23);
+		this.groupcmbx.TabIndex = 71;
+		this.groupcmbx.SelectedIndexChanged += new System.EventHandler(groupcmbx_SelectedIndexChanged);
+		this.plaudbtn.Location = new System.Drawing.Point(147, 179);
+		this.plaudbtn.Name = "plaudbtn";
+		this.plaudbtn.Size = new System.Drawing.Size(118, 23);
+		this.plaudbtn.TabIndex = 70;
+		this.plaudbtn.Text = "Play Audio";
+		this.plaudbtn.UseVisualStyleBackColor = true;
+		this.plaudbtn.Click += new System.EventHandler(plaudbtn_Click);
+		this.wfmbtn.Location = new System.Drawing.Point(17, 346);
+		this.wfmbtn.Name = "wfmbtn";
+		this.wfmbtn.Size = new System.Drawing.Size(105, 23);
+		this.wfmbtn.TabIndex = 69;
+		this.wfmbtn.Text = "Write for me";
+		this.wfmbtn.UseVisualStyleBackColor = true;
+		this.wfmbtn.Click += new System.EventHandler(wfmbtn_Click);
+		this.wfmtxt.Location = new System.Drawing.Point(17, 317);
+		this.wfmtxt.Name = "wfmtxt";
+		this.wfmtxt.Size = new System.Drawing.Size(284, 23);
+		this.wfmtxt.TabIndex = 68;
+		this.label10.AutoSize = true;
+		this.label10.Location = new System.Drawing.Point(307, 298);
+		this.label10.Name = "label10";
+		this.label10.Size = new System.Drawing.Size(70, 15);
+		this.label10.TabIndex = 67;
+		this.label10.Text = "How many?";
+		this.label7.AutoSize = true;
+		this.label7.Location = new System.Drawing.Point(21, 298);
+		this.label7.Name = "label7";
+		this.label7.Size = new System.Drawing.Size(96, 15);
+		this.label7.TabIndex = 66;
+		this.label7.Text = "Write for me text";
+		this.wfmnotxt.Location = new System.Drawing.Point(307, 317);
+		this.wfmnotxt.Name = "wfmnotxt";
+		this.wfmnotxt.Size = new System.Drawing.Size(44, 23);
+		this.wfmnotxt.TabIndex = 65;
+		this.button12.Location = new System.Drawing.Point(697, 349);
+		this.button12.Name = "button12";
+		this.button12.Size = new System.Drawing.Size(100, 23);
+		this.button12.TabIndex = 64;
+		this.button12.Text = "Responds";
+		this.button12.UseVisualStyleBackColor = true;
+		this.button12.Click += new System.EventHandler(button12_Click_2);
+		this.button17.Location = new System.Drawing.Point(24, 179);
+		this.button17.Name = "button17";
+		this.button17.Size = new System.Drawing.Size(118, 23);
+		this.button17.TabIndex = 63;
+		this.button17.Text = "Subliminal";
+		this.button17.UseVisualStyleBackColor = true;
+		this.button17.Click += new System.EventHandler(button17_Click);
+		this.FileSelecBtn.Location = new System.Drawing.Point(311, 80);
+		this.FileSelecBtn.Name = "FileSelecBtn";
+		this.FileSelecBtn.Size = new System.Drawing.Size(62, 23);
+		this.FileSelecBtn.TabIndex = 61;
+		this.FileSelecBtn.Text = "Select";
+		this.FileSelecBtn.UseVisualStyleBackColor = true;
+		this.FileSelecBtn.Click += new System.EventHandler(button15_Click);
+		this.label9.AutoSize = true;
+		this.label9.Location = new System.Drawing.Point(18, 62);
+		this.label9.Name = "label9";
+		this.label9.Size = new System.Drawing.Size(68, 15);
+		this.label9.TabIndex = 59;
+		this.label9.Text = "File transfer";
+		this.filetxt.Location = new System.Drawing.Point(15, 80);
+		this.filetxt.Name = "filetxt";
+		this.filetxt.Size = new System.Drawing.Size(290, 23);
+		this.filetxt.TabIndex = 58;
+		this.button13.Location = new System.Drawing.Point(193, 262);
+		this.button13.Name = "button13";
+		this.button13.Size = new System.Drawing.Size(72, 23);
+		this.button13.TabIndex = 54;
+		this.button13.Text = "Subliminal";
+		this.button13.UseVisualStyleBackColor = true;
+		this.button13.Click += new System.EventHandler(button13_Click_1);
+		this.label6.AutoSize = true;
+		this.label6.Location = new System.Drawing.Point(271, 215);
+		this.label6.Name = "label6";
+		this.label6.Size = new System.Drawing.Size(67, 15);
+		this.label6.TabIndex = 53;
+		this.label6.Text = "Button Text";
+		this.label5.AutoSize = true;
+		this.label5.Location = new System.Drawing.Point(18, 215);
+		this.label5.Name = "label5";
+		this.label5.Size = new System.Drawing.Size(77, 15);
+		this.label5.TabIndex = 52;
+		this.label5.Text = "Message Text";
+		this.btnbx.Location = new System.Drawing.Point(271, 233);
+		this.btnbx.Name = "btnbx";
+		this.btnbx.Size = new System.Drawing.Size(122, 23);
+		this.btnbx.TabIndex = 51;
+		this.msgbx.Location = new System.Drawing.Point(18, 233);
+		this.msgbx.Name = "msgbx";
+		this.msgbx.Size = new System.Drawing.Size(241, 23);
+		this.msgbx.TabIndex = 50;
+		this.All_chk.AutoSize = true;
+		this.All_chk.Location = new System.Drawing.Point(653, 318);
+		this.All_chk.Name = "All_chk";
+		this.All_chk.Size = new System.Drawing.Size(40, 19);
+		this.All_chk.TabIndex = 49;
+		this.All_chk.Text = "All";
+		this.All_chk.UseVisualStyleBackColor = true;
+		this.label4.AutoSize = true;
+		this.label4.Location = new System.Drawing.Point(425, 322);
+		this.label4.Name = "label4";
+		this.label4.Size = new System.Drawing.Size(60, 15);
+		this.label4.TabIndex = 48;
+		this.label4.Text = "Username";
+		this.button9.Location = new System.Drawing.Point(697, 320);
+		this.button9.Name = "button9";
+		this.button9.Size = new System.Drawing.Size(100, 23);
+		this.button9.TabIndex = 47;
+		this.button9.Text = "Send to";
+		this.button9.UseVisualStyleBackColor = true;
+		this.button9.Click += new System.EventHandler(button9_Click_1);
+		this.button8.Location = new System.Drawing.Point(274, 150);
+		this.button8.Name = "button8";
+		this.button8.Size = new System.Drawing.Size(118, 23);
+		this.button8.TabIndex = 45;
+		this.button8.Text = "Pop (Url)";
+		this.button8.UseVisualStyleBackColor = true;
+		this.button8.Click += new System.EventHandler(button8_Click_1);
+		this.button7.Location = new System.Drawing.Point(147, 149);
+		this.button7.Name = "button7";
+		this.button7.Size = new System.Drawing.Size(118, 23);
+		this.button7.TabIndex = 44;
+		this.button7.Text = "Pop (Download)";
+		this.button7.UseVisualStyleBackColor = true;
+		this.button7.Click += new System.EventHandler(button7_Click_1);
+		this.button5.Location = new System.Drawing.Point(719, 274);
+		this.button5.Name = "button5";
+		this.button5.Size = new System.Drawing.Size(75, 23);
+		this.button5.TabIndex = 42;
+		this.button5.Text = "Clear";
+		this.button5.UseVisualStyleBackColor = true;
+		this.button5.Click += new System.EventHandler(button5_Click_1);
+		this.button4.Location = new System.Drawing.Point(101, 262);
+		this.button4.Name = "button4";
+		this.button4.Size = new System.Drawing.Size(86, 23);
+		this.button4.TabIndex = 41;
+		this.button4.Text = "Message box";
+		this.button4.UseVisualStyleBackColor = true;
+		this.button4.Click += new System.EventHandler(button4_Click_1);
+		this.button3.Location = new System.Drawing.Point(507, 274);
+		this.button3.Name = "button3";
+		this.button3.Size = new System.Drawing.Size(81, 23);
+		this.button3.TabIndex = 40;
+		this.button3.Text = "Run Input";
+		this.button3.UseVisualStyleBackColor = true;
+		this.button3.Click += new System.EventHandler(button3_Click_1);
+		this.button2.Location = new System.Drawing.Point(24, 150);
+		this.button2.Name = "button2";
+		this.button2.Size = new System.Drawing.Size(118, 23);
+		this.button2.TabIndex = 39;
+		this.button2.Text = "Open Website";
+		this.button2.UseVisualStyleBackColor = true;
+		this.button2.Click += new System.EventHandler(button2_Click);
+		this.label2.AutoSize = true;
+		this.label2.Location = new System.Drawing.Point(512, 13);
+		this.label2.Name = "label2";
+		this.label2.Size = new System.Drawing.Size(78, 15);
+		this.label2.TabIndex = 38;
+		this.label2.Text = "Output/Input";
+		this.button1.Location = new System.Drawing.Point(274, 123);
+		this.button1.Name = "button1";
+		this.button1.Size = new System.Drawing.Size(118, 23);
+		this.button1.TabIndex = 37;
+		this.button1.Text = "Run File";
+		this.button1.UseVisualStyleBackColor = true;
+		this.button1.Click += new System.EventHandler(button1_Click);
+		this.MainTxt.Location = new System.Drawing.Point(504, 31);
+		this.MainTxt.Multiline = true;
+		this.MainTxt.Name = "MainTxt";
+		this.MainTxt.Size = new System.Drawing.Size(290, 237);
+		this.MainTxt.TabIndex = 36;
+		this.label1.AutoSize = true;
+		this.label1.Location = new System.Drawing.Point(18, 13);
+		this.label1.Name = "label1";
+		this.label1.Size = new System.Drawing.Size(76, 15);
+		this.label1.TabIndex = 35;
+		this.label1.Text = "Web Address";
+		this.ChangeWall_Btn.Location = new System.Drawing.Point(147, 122);
+		this.ChangeWall_Btn.Name = "ChangeWall_Btn";
+		this.ChangeWall_Btn.Size = new System.Drawing.Size(118, 23);
+		this.ChangeWall_Btn.TabIndex = 34;
+		this.ChangeWall_Btn.Text = "Change Wallpaper";
+		this.ChangeWall_Btn.UseVisualStyleBackColor = true;
+		this.ChangeWall_Btn.Click += new System.EventHandler(ChangeWall_Btn_Click);
+		this.webtxt.Location = new System.Drawing.Point(15, 31);
+		this.webtxt.Name = "webtxt";
+		this.webtxt.Size = new System.Drawing.Size(371, 23);
+		this.webtxt.TabIndex = 33;
+		this.DownloadFile_Btn.Location = new System.Drawing.Point(24, 121);
+		this.DownloadFile_Btn.Name = "DownloadFile_Btn";
+		this.DownloadFile_Btn.Size = new System.Drawing.Size(118, 23);
+		this.DownloadFile_Btn.TabIndex = 32;
+		this.DownloadFile_Btn.Text = "Download File";
+		this.DownloadFile_Btn.UseVisualStyleBackColor = true;
+		this.DownloadFile_Btn.Click += new System.EventHandler(DownloadFile_Btn_Click);
+		this.tabPage3.Controls.Add(this.RefreshAllBtn);
+		this.tabPage3.Controls.Add(this.refreshbtn);
+		this.tabPage3.Controls.Add(this.panel1);
+		this.tabPage3.Controls.Add(this.label14);
+		this.tabPage3.Controls.Add(this.dominvdec);
+		this.tabPage3.Controls.Add(this.dominvacceptbtn);
+		this.tabPage3.Controls.Add(this.dominvitetxt);
+		this.tabPage3.Controls.Add(this.label13);
+		this.tabPage3.Controls.Add(this.DomBox);
+		this.tabPage3.Location = new System.Drawing.Point(4, 24);
+		this.tabPage3.Name = "tabPage3";
+		this.tabPage3.Size = new System.Drawing.Size(817, 394);
+		this.tabPage3.TabIndex = 2;
+		this.tabPage3.Text = "Dom-page";
+		this.tabPage3.UseVisualStyleBackColor = true;
+		this.RefreshAllBtn.Location = new System.Drawing.Point(205, 12);
+		this.RefreshAllBtn.Name = "RefreshAllBtn";
+		this.RefreshAllBtn.Size = new System.Drawing.Size(75, 23);
+		this.RefreshAllBtn.TabIndex = 11;
+		this.RefreshAllBtn.Text = "Refresh All";
+		this.RefreshAllBtn.UseVisualStyleBackColor = true;
+		this.RefreshAllBtn.Click += new System.EventHandler(RefreshAllBtn_Click);
+		this.refreshbtn.Location = new System.Drawing.Point(338, 12);
+		this.refreshbtn.Name = "refreshbtn";
+		this.refreshbtn.Size = new System.Drawing.Size(86, 23);
+		this.refreshbtn.TabIndex = 10;
+		this.refreshbtn.Text = "Refresh Mess";
+		this.refreshbtn.UseVisualStyleBackColor = true;
+		this.refreshbtn.Click += new System.EventHandler(refreshbtn_Click);
+		this.panel1.Controls.Add(this.chat);
+		this.panel1.Location = new System.Drawing.Point(9, 44);
+		this.panel1.Name = "panel1";
+		this.panel1.Size = new System.Drawing.Size(802, 341);
+		this.panel1.TabIndex = 9;
+		this.chat.Dock = System.Windows.Forms.DockStyle.Fill;
+		this.chat.Location = new System.Drawing.Point(0, 0);
+		this.chat.Name = "chat";
+		this.chat.Size = new System.Drawing.Size(802, 341);
+		this.chat.TabIndex = 1;
+		this.label14.AutoSize = true;
+		this.label14.Location = new System.Drawing.Point(486, 16);
+		this.label14.Name = "label14";
+		this.label14.Size = new System.Drawing.Size(65, 15);
+		this.label14.TabIndex = 8;
+		this.label14.Text = "Dom Invite";
+		this.dominvdec.Location = new System.Drawing.Point(739, 13);
+		this.dominvdec.Name = "dominvdec";
+		this.dominvdec.Size = new System.Drawing.Size(63, 23);
+		this.dominvdec.TabIndex = 7;
+		this.dominvdec.Text = "Decline";
+		this.dominvdec.UseVisualStyleBackColor = true;
+		this.dominvdec.Click += new System.EventHandler(dominvdec_Click);
+		this.dominvacceptbtn.Location = new System.Drawing.Point(670, 13);
+		this.dominvacceptbtn.Name = "dominvacceptbtn";
+		this.dominvacceptbtn.Size = new System.Drawing.Size(63, 23);
+		this.dominvacceptbtn.TabIndex = 6;
+		this.dominvacceptbtn.Text = "Accept";
+		this.dominvacceptbtn.UseVisualStyleBackColor = true;
+		this.dominvacceptbtn.Click += new System.EventHandler(dominvacceptbtn_Click);
+		this.dominvitetxt.Location = new System.Drawing.Point(557, 13);
+		this.dominvitetxt.Name = "dominvitetxt";
+		this.dominvitetxt.Size = new System.Drawing.Size(100, 23);
+		this.dominvitetxt.TabIndex = 5;
+		this.label13.AutoSize = true;
+		this.label13.Location = new System.Drawing.Point(9, 16);
+		this.label13.Name = "label13";
+		this.label13.Size = new System.Drawing.Size(33, 15);
+		this.label13.TabIndex = 4;
+		this.label13.Text = "Dom";
+		this.DomBox.FormattingEnabled = true;
+		this.DomBox.Location = new System.Drawing.Point(57, 13);
+		this.DomBox.Name = "DomBox";
+		this.DomBox.Size = new System.Drawing.Size(121, 23);
+		this.DomBox.TabIndex = 3;
+		this.DomBox.SelectedIndexChanged += new System.EventHandler(comboBox1_SelectedIndexChanged);
+		this.openFileDialog1.FileName = "openFileDialog1";
+		this.label15.AutoSize = true;
+		this.label15.Location = new System.Drawing.Point(673, 37);
+		this.label15.Name = "label15";
+		this.label15.Size = new System.Drawing.Size(63, 15);
+		this.label15.TabIndex = 34;
+		this.label15.Text = "Your Score";
+		this.ScoreTxt.Location = new System.Drawing.Point(735, 34);
+		this.ScoreTxt.Name = "ScoreTxt";
+		this.ScoreTxt.Size = new System.Drawing.Size(100, 23);
+		this.ScoreTxt.TabIndex = 35;
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(868, 503);
+		base.Controls.Add(this.ScoreTxt);
+		base.Controls.Add(this.label15);
+		base.Controls.Add(this.tabControl1);
+		base.Controls.Add(this.label3);
+		base.Controls.Add(this.meuser);
+		base.Controls.Add(this.menuStrip1);
+		base.MainMenuStrip = this.menuStrip1;
+		base.Name = "ControlApp";
+		this.Text = "The Control App v0.1.2";
+		base.Load += new System.EventHandler(Form1_Load);
+		this.menuStrip1.ResumeLayout(false);
+		this.menuStrip1.PerformLayout();
+		this.tabControl1.ResumeLayout(false);
+		this.tabPage1.ResumeLayout(false);
+		this.tabPage1.PerformLayout();
+		this.tabPage2.ResumeLayout(false);
+		this.tabPage2.PerformLayout();
+		this.tabPage3.ResumeLayout(false);
+		this.tabPage3.PerformLayout();
+		this.panel1.ResumeLayout(false);
+		base.ResumeLayout(false);
+		base.PerformLayout();
+	}
+}
diff --git a/ControlApp/ControlApp.resx b/ControlApp/ControlApp.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/ControlApp.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/CustomMessage.cs b/ControlApp/CustomMessage.cs
new file mode 100644
index 0000000..28f8d64
--- /dev/null
+++ b/ControlApp/CustomMessage.cs
@@ -0,0 +1,122 @@
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Speech.Synthesis;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class CustomMessage : Form
+{
+	private string msg;
+
+	private string btn;
+
+	private int time;
+
+	private bool ttspeech;
+
+	private Timer tmr;
+
+	private IContainer components;
+
+	private Label label1;
+
+	private Button button1;
+
+	public CustomMessage(string message, string button, int timeopen, bool tts)
+	{
+		InitializeComponent();
+		msg = message;
+		btn = button;
+		ttspeech = tts;
+		time = timeopen;
+	}
+
+	private void button1_Click(object sender, EventArgs e)
+	{
+		Close();
+	}
+
+	private void CustomMessage_Load(object sender, EventArgs e)
+	{
+		if (ttspeech)
+		{
+			base.Opacity = 0.0;
+			SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
+			speechSynthesizer.SetOutputToDefaultAudioDevice();
+			speechSynthesizer.Speak(msg);
+			speechSynthesizer.Dispose();
+			try
+			{
+				Close();
+				return;
+			}
+			catch
+			{
+				return;
+			}
+		}
+		label1.Text = msg;
+		if (btn != "")
+		{
+			button1.Text = btn;
+		}
+		if (time != 0)
+		{
+			tmr = new Timer();
+			tmr.Tick += delegate
+			{
+				Close();
+			};
+			tmr.Interval = (int)TimeSpan.FromSeconds(time).TotalMilliseconds;
+			tmr.Start();
+		}
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.label1 = new System.Windows.Forms.Label();
+		this.button1 = new System.Windows.Forms.Button();
+		base.SuspendLayout();
+		this.label1.AutoSize = true;
+		this.label1.Font = new System.Drawing.Font("Segoe UI", 25f, System.Drawing.FontStyle.Bold);
+		this.label1.Location = new System.Drawing.Point(32, 79);
+		this.label1.Name = "label1";
+		this.label1.Size = new System.Drawing.Size(117, 46);
+		this.label1.TabIndex = 0;
+		this.label1.Text = "label1";
+		this.button1.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
+		this.button1.AutoSize = true;
+		this.button1.Location = new System.Drawing.Point(251, 177);
+		this.button1.Name = "button1";
+		this.button1.Size = new System.Drawing.Size(75, 25);
+		this.button1.TabIndex = 1;
+		this.button1.Text = "Close";
+		this.button1.UseVisualStyleBackColor = true;
+		this.button1.Click += new System.EventHandler(button1_Click);
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		this.AutoSize = true;
+		base.ClientSize = new System.Drawing.Size(563, 214);
+		base.ControlBox = false;
+		base.Controls.Add(this.button1);
+		base.Controls.Add(this.label1);
+		base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+		base.Name = "CustomMessage";
+		this.Text = "CustomMessage";
+		base.TopMost = true;
+		base.Load += new System.EventHandler(CustomMessage_Load);
+		base.ResumeLayout(false);
+		base.PerformLayout();
+	}
+}
diff --git a/ControlApp/CustomMessage.resx b/ControlApp/CustomMessage.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/CustomMessage.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/LockKeyboard.cs b/ControlApp/LockKeyboard.cs
new file mode 100644
index 0000000..85cc2b7
--- /dev/null
+++ b/ControlApp/LockKeyboard.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+
+namespace ControlApp;
+
+internal class LockKeyboard
+{
+	private delegate nint LowLevelKeyboardProc(int nCode, nint wParam, nint lParam);
+
+	private const int WH_KEYBOARD_LL = 13;
+
+	private static LowLevelKeyboardProc _proc = HookCallback;
+
+	private static nint _hookID = IntPtr.Zero;
+
+	[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	private static extern nint SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, nint hMod, uint dwThreadId);
+
+	[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	[return: MarshalAs(UnmanagedType.Bool)]
+	private static extern bool UnhookWindowsHookEx(nint hhk);
+
+	[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	private static extern nint CallNextHookEx(nint hhk, int nCode, nint wParam, nint lParam);
+
+	[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	private static extern nint GetModuleHandle(string lpModuleName);
+
+	private static nint SetHook(LowLevelKeyboardProc proc)
+	{
+		using Process curProcess = Process.GetCurrentProcess();
+		using ProcessModule curModule = curProcess.MainModule;
+		return SetWindowsHookEx(13, proc, GetModuleHandle(curModule.ModuleName), 0u);
+	}
+
+	private static nint HookCallback(int nCode, nint wParam, nint lParam)
+	{
+		if (nCode >= 0)
+		{
+			return 1;
+		}
+		return CallNextHookEx(_hookID, nCode, wParam, lParam);
+	}
+
+	public void Lock()
+	{
+		_hookID = SetHook(_proc);
+	}
+
+	public void Unlock()
+	{
+		UnhookWindowsHookEx(_hookID);
+	}
+}
diff --git a/ControlApp/LockMouse.cs b/ControlApp/LockMouse.cs
new file mode 100644
index 0000000..0165e6a
--- /dev/null
+++ b/ControlApp/LockMouse.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+
+namespace ControlApp;
+
+internal class LockMouse
+{
+	private delegate nint LowLevelMouseProc(int nCode, nint wParam, nint lParam);
+
+	private const int WH_MOUSE_LL = 14;
+
+	private static LowLevelMouseProc _mouseProc = MouseHookCallback;
+
+	private static nint _mouseHookID = IntPtr.Zero;
+
+	[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	private static extern nint SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, nint hMod, uint dwThreadId);
+
+	[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	[return: MarshalAs(UnmanagedType.Bool)]
+	private static extern bool UnhookWindowsHookEx(nint hhk);
+
+	[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	private static extern nint CallNextHookEx(nint hhk, int nCode, nint wParam, nint lParam);
+
+	[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+	private static extern nint GetModuleHandle(string lpModuleName);
+
+	private static nint SetMouseHook(LowLevelMouseProc proc)
+	{
+		using Process curProcess = Process.GetCurrentProcess();
+		using ProcessModule curModule = curProcess.MainModule;
+		return SetWindowsHookEx(14, proc, GetModuleHandle(curModule.ModuleName), 0u);
+	}
+
+	private static nint MouseHookCallback(int nCode, nint wParam, nint lParam)
+	{
+		if (nCode >= 0)
+		{
+			return 1;
+		}
+		return CallNextHookEx(_mouseHookID, nCode, wParam, lParam);
+	}
+
+	public void Lock()
+	{
+		_mouseHookID = SetMouseHook(_mouseProc);
+	}
+
+	public void Unlock()
+	{
+		UnhookWindowsHookEx(_mouseHookID);
+	}
+}
diff --git a/ControlApp/MyCustomApplicationContext.cs b/ControlApp/MyCustomApplicationContext.cs
new file mode 100644
index 0000000..b9fd7e5
--- /dev/null
+++ b/ControlApp/MyCustomApplicationContext.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class MyCustomApplicationContext : ApplicationContext
+{
+	private NotifyIcon trayIcon;
+
+	public MyCustomApplicationContext()
+	{
+		trayIcon = new NotifyIcon();
+		trayIcon.Icon = new Icon("App.ico");
+		trayIcon.ContextMenuStrip = new ContextMenuStrip();
+		trayIcon.ContextMenuStrip.Items.Add("Exit", null, Exit);
+		trayIcon.ContextMenuStrip.Items.Add("Open", null, Open);
+		trayIcon.ContextMenuStrip.Items.Add("Panic", null, Panic);
+		trayIcon.Visible = true;
+	}
+
+	private void Exit(object sender, EventArgs e)
+	{
+		trayIcon.Visible = false;
+		Application.Exit();
+	}
+
+	private void Open(object sender, EventArgs e)
+	{
+		using ControlApp myform = new ControlApp();
+		myform.ShowDialog();
+	}
+
+	private void Panic(object sender, EventArgs e)
+	{
+		foreach (Form openForm in Application.OpenForms)
+		{
+			openForm.Close();
+		}
+	}
+}
diff --git a/ControlApp/Options.cs b/ControlApp/Options.cs
new file mode 100644
index 0000000..30ef311
--- /dev/null
+++ b/ControlApp/Options.cs
@@ -0,0 +1,1310 @@
+using System;
+using System.ComponentModel;
+using System.Configuration;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class Options : Form
+{
+	private IContainer components;
+
+	private Button SvExit;
+
+	private TabControl tabControl1;
+
+	private TabPage tabPage1;
+
+	private TabPage tabPage2;
+
+	private Panel panel4;
+
+	private Label label5;
+
+	private CheckBox showblocked;
+
+	private CheckBox clickch;
+
+	private Panel panel3;
+
+	private RadioButton parallelrd;
+
+	private RadioButton serialrd;
+
+	private Label label4;
+
+	private Panel panel2;
+
+	private RadioButton fitsc;
+
+	private RadioButton stret;
+
+	private Label label3;
+
+	private Panel panel1;
+
+	private CheckBox outstandch;
+
+	private CheckBox senddelch;
+
+	private CheckBox watch4mech;
+
+	private CheckBox twitch;
+
+	private CheckBox screenshch;
+
+	private CheckBox wrich;
+
+	private CheckBox audioch;
+
+	private CheckBox sublimch;
+
+	private CheckBox messch;
+
+	private CheckBox popch;
+
+	private Label label2;
+
+	private CheckBox opwebch;
+
+	private CheckBox runch;
+
+	private CheckBox wallpch;
+
+	private CheckBox dlch;
+
+	private Panel Popups;
+
+	private RadioButton longpop;
+
+	private RadioButton shortpop;
+
+	private Label label1;
+
+	private Panel panel5;
+
+	private Label label6;
+
+	private CheckBox dclickch;
+
+	private Panel panel6;
+
+	private RadioButton dparallelrd;
+
+	private RadioButton dserialrd;
+
+	private Label label7;
+
+	private Panel panel7;
+
+	private RadioButton dfitsc;
+
+	private RadioButton dstret;
+
+	private Label label8;
+
+	private Panel panel8;
+
+	private CheckBox dsenddelch;
+
+	private CheckBox dwatch4mech;
+
+	private CheckBox dtwitch;
+
+	private CheckBox dscreenshch;
+
+	private CheckBox dwrich;
+
+	private CheckBox daudioch;
+
+	private CheckBox dsublimch;
+
+	private CheckBox dmessch;
+
+	private CheckBox dpopch;
+
+	private Label label9;
+
+	private CheckBox dopwebch;
+
+	private CheckBox drunch;
+
+	private CheckBox dwallpch;
+
+	private CheckBox ddlch;
+
+	private Panel panel9;
+
+	private RadioButton dlongpop;
+
+	private RadioButton dshortpop;
+
+	private Label label10;
+
+	private CheckBox webcamch;
+
+	private CheckBox dwebcamch;
+
+	private CheckBox ttsch;
+
+	private CheckBox dttch;
+
+	private CheckBox dismch;
+
+	private CheckBox ddismch;
+
+	public Options()
+	{
+		InitializeComponent();
+	}
+
+	private void SvExit_Click(object sender, EventArgs e)
+	{
+		Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
+		KeyValueConfigurationCollection apps = configuration.AppSettings.Settings;
+		apps.Remove("Downloads");
+		apps.Remove("Wallpapers");
+		apps.Remove("Runables");
+		apps.Remove("OpenWeb");
+		apps.Remove("PopUps");
+		apps.Remove("Messages");
+		apps.Remove("Subliminals");
+		apps.Remove("PopSet");
+		apps.Remove("Audios");
+		apps.Remove("Writeformes");
+		apps.Remove("Screenshots");
+		apps.Remove("Watch4me");
+		apps.Remove("twitter");
+		apps.Remove("PaperStyle");
+		apps.Remove("Popstyle");
+		apps.Remove("SendDelete");
+		apps.Remove("OutstandRemind");
+		apps.Remove("Clickthroughpop");
+		apps.Remove("Showblocked");
+		apps.Remove("Webcam");
+		apps.Remove("TTS");
+		apps.Remove("DisM");
+		if (showblocked.Checked)
+		{
+			apps.Add("Showblocked", "True");
+		}
+		else
+		{
+			apps.Add("Showblocked", "False");
+		}
+		if (clickch.Checked)
+		{
+			apps.Add("Clickthroughpop", "True");
+		}
+		else
+		{
+			apps.Add("Clickthroughpop", "False");
+		}
+		string OutstandRemind = outstandch.Checked.ToString();
+		apps.Add("OutstandRemind", OutstandRemind);
+		if (serialrd.Checked)
+		{
+			apps.Add("Popstyle", "Serial");
+		}
+		else
+		{
+			apps.Add("Popstyle", "Parallel");
+		}
+		if (stret.Checked)
+		{
+			apps.Add("PaperStyle", "Stretch");
+		}
+		else
+		{
+			apps.Add("PaperStyle", "Fit");
+		}
+		string senddel = senddelch.Checked.ToString();
+		apps.Add("SendDelete", senddel);
+		string twitter = twitch.Checked.ToString();
+		apps.Add("twitter", twitter);
+		string Watch4me = watch4mech.Checked.ToString();
+		apps.Add("Watch4me", Watch4me);
+		string Screenshots = screenshch.Checked.ToString();
+		apps.Add("Screenshots", Screenshots);
+		string Audios = audioch.Checked.ToString();
+		apps.Add("Audios", Audios);
+		string Writeformes = wrich.Checked.ToString();
+		apps.Add("Writeformes", Writeformes);
+		string downloads = dlch.Checked.ToString();
+		apps.Add("Downloads", downloads);
+		string wallp = wallpch.Checked.ToString();
+		apps.Add("Wallpapers", wallp);
+		string runn = runch.Checked.ToString();
+		apps.Add("Runables", runn);
+		string webb = opwebch.Checked.ToString();
+		apps.Add("OpenWeb", webb);
+		string pops = popch.Checked.ToString();
+		apps.Add("PopUps", pops);
+		string messes = messch.Checked.ToString();
+		apps.Add("Messages", messes);
+		string sublims = sublimch.Checked.ToString();
+		apps.Add("Subliminals", sublims);
+		string webc = webcamch.Checked.ToString();
+		apps.Add("Webcam", webc);
+		string tts = ttsch.Checked.ToString();
+		apps.Add("TTS", tts);
+		string dism = dismch.Checked.ToString();
+		apps.Add("DisM", dism);
+		if (longpop.Checked)
+		{
+			apps.Add("PopSet", "Long");
+		}
+		else
+		{
+			apps.Add("PopSet", "Short");
+		}
+		apps.Remove("DDownloads");
+		apps.Remove("DWallpapers");
+		apps.Remove("DRunables");
+		apps.Remove("DOpenWeb");
+		apps.Remove("DPopUps");
+		apps.Remove("DMessages");
+		apps.Remove("DSubliminals");
+		apps.Remove("DPopSet");
+		apps.Remove("DAudios");
+		apps.Remove("DWriteformes");
+		apps.Remove("DScreenshots");
+		apps.Remove("DWatch4me");
+		apps.Remove("Dtwitter");
+		apps.Remove("DPaperStyle");
+		apps.Remove("DPopstyle");
+		apps.Remove("DSendDelete");
+		apps.Remove("DOutstandRemind");
+		apps.Remove("DClickthroughpop");
+		apps.Remove("DShowblocked");
+		apps.Remove("DWebcam");
+		apps.Remove("DTTS");
+		apps.Remove("DDisM");
+		if (dclickch.Checked)
+		{
+			apps.Add("DClickthroughpop", "True");
+		}
+		else
+		{
+			apps.Add("DClickthroughpop", "False");
+		}
+		if (dserialrd.Checked)
+		{
+			apps.Add("DPopstyle", "Serial");
+		}
+		else
+		{
+			apps.Add("DPopstyle", "Parallel");
+		}
+		if (dstret.Checked)
+		{
+			apps.Add("DPaperStyle", "Stretch");
+		}
+		else
+		{
+			apps.Add("DPaperStyle", "Fit");
+		}
+		string dsenddel = dsenddelch.Checked.ToString();
+		apps.Add("DSendDelete", dsenddel);
+		string dtwitter = dtwitch.Checked.ToString();
+		apps.Add("Dtwitter", dtwitter);
+		string dWatch4me = dwatch4mech.Checked.ToString();
+		apps.Add("DWatch4me", dWatch4me);
+		string dScreenshots = dscreenshch.Checked.ToString();
+		apps.Add("DScreenshots", dScreenshots);
+		string dAudios = daudioch.Checked.ToString();
+		apps.Add("DAudios", dAudios);
+		string dWriteformes = dwrich.Checked.ToString();
+		apps.Add("DWriteformes", dWriteformes);
+		string ddownloads = ddlch.Checked.ToString();
+		apps.Add("DDownloads", ddownloads);
+		string dwallp = dwallpch.Checked.ToString();
+		apps.Add("DWallpapers", dwallp);
+		string drunn = drunch.Checked.ToString();
+		apps.Add("DRunables", drunn);
+		string dwebb = dopwebch.Checked.ToString();
+		apps.Add("DOpenWeb", dwebb);
+		string dpops = dpopch.Checked.ToString();
+		apps.Add("DPopUps", dpops);
+		string dmesses = dmessch.Checked.ToString();
+		apps.Add("DMessages", dmesses);
+		string dsublims = dsublimch.Checked.ToString();
+		apps.Add("DSubliminals", dsublims);
+		string dwebc = dwebcamch.Checked.ToString();
+		apps.Add("DWebcam", dwebc);
+		string dttss = dttch.Checked.ToString();
+		apps.Add("DTTS", dttss);
+		string ddism = ddismch.Checked.ToString();
+		apps.Add("DDisM", ddism);
+		if (dlongpop.Checked)
+		{
+			apps.Add("DPopSet", "Long");
+		}
+		else
+		{
+			apps.Add("DPopSet", "Short");
+		}
+		configuration.Save(ConfigurationSaveMode.Full);
+		ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name);
+		Close();
+	}
+
+	private void Options_Load(object sender, EventArgs e)
+	{
+		string style = "Fit";
+		string popstyle = "Serial";
+		if (ConfigurationManager.AppSettings["PopStyle"] != null)
+		{
+			popstyle = ConfigurationManager.AppSettings["PopStyle"].ToString();
+		}
+		if (popstyle == "Serial")
+		{
+			serialrd.Checked = true;
+			parallelrd.Checked = false;
+		}
+		else
+		{
+			serialrd.Checked = false;
+			parallelrd.Checked = true;
+		}
+		if (ConfigurationManager.AppSettings["PaperStyle"] != null)
+		{
+			style = ConfigurationManager.AppSettings["PaperStyle"].ToString();
+		}
+		if (style == "Fit")
+		{
+			fitsc.Checked = true;
+			stret.Checked = false;
+		}
+		else
+		{
+			fitsc.Checked = false;
+			stret.Checked = true;
+		}
+		if (ConfigurationManager.AppSettings["Clickthroughpop"] == "True")
+		{
+			clickch.Checked = true;
+		}
+		else
+		{
+			clickch.Checked = false;
+		}
+		if (ConfigurationManager.AppSettings["Showblocked"] == "True")
+		{
+			showblocked.Checked = true;
+		}
+		else
+		{
+			showblocked.Checked = false;
+		}
+		string pop = "Short";
+		if (ConfigurationManager.AppSettings["PopSet"] != null)
+		{
+			pop = ConfigurationManager.AppSettings["PopSet"].ToString();
+		}
+		if (pop == "Long")
+		{
+			longpop.Checked = true;
+			shortpop.Checked = false;
+		}
+		else
+		{
+			longpop.Checked = false;
+			shortpop.Checked = true;
+		}
+		if (ConfigurationManager.AppSettings["OutstandRemind"] != null)
+		{
+			string OutstandRemind = ConfigurationManager.AppSettings["OutstandRemind"].ToString();
+			outstandch.Checked = Convert.ToBoolean(OutstandRemind);
+		}
+		if (ConfigurationManager.AppSettings["SendDelete"] != null)
+		{
+			string SendDelete = ConfigurationManager.AppSettings["SendDelete"].ToString();
+			senddelch.Checked = Convert.ToBoolean(SendDelete);
+		}
+		if (ConfigurationManager.AppSettings["twitter"] != null)
+		{
+			string twitter = ConfigurationManager.AppSettings["twitter"].ToString();
+			twitch.Checked = Convert.ToBoolean(twitter);
+		}
+		if (ConfigurationManager.AppSettings["Watch4me"] != null)
+		{
+			string Watch4me = ConfigurationManager.AppSettings["Watch4me"].ToString();
+			watch4mech.Checked = Convert.ToBoolean(Watch4me);
+		}
+		if (ConfigurationManager.AppSettings["Audios"] != null)
+		{
+			string Audios = ConfigurationManager.AppSettings["Audios"].ToString();
+			audioch.Checked = Convert.ToBoolean(Audios);
+		}
+		if (ConfigurationManager.AppSettings["Writeformes"] != null)
+		{
+			string Writeformes = ConfigurationManager.AppSettings["Writeformes"].ToString();
+			wrich.Checked = Convert.ToBoolean(Writeformes);
+		}
+		if (ConfigurationManager.AppSettings["Downloads"] != null)
+		{
+			string downloads = ConfigurationManager.AppSettings["Downloads"].ToString();
+			dlch.Checked = Convert.ToBoolean(downloads);
+		}
+		if (ConfigurationManager.AppSettings["Wallpapers"] != null)
+		{
+			string wallp = ConfigurationManager.AppSettings["Wallpapers"].ToString();
+			wallpch.Checked = Convert.ToBoolean(wallp);
+		}
+		if (ConfigurationManager.AppSettings["Runables"] != null)
+		{
+			string runn = ConfigurationManager.AppSettings["Runables"].ToString();
+			runch.Checked = Convert.ToBoolean(runn);
+		}
+		if (ConfigurationManager.AppSettings["ScreenShots"] != null)
+		{
+			string scre = ConfigurationManager.AppSettings["ScreenShots"].ToString();
+			screenshch.Checked = Convert.ToBoolean(scre);
+		}
+		if (ConfigurationManager.AppSettings["OpenWeb"] != null)
+		{
+			string webb = ConfigurationManager.AppSettings["OpenWeb"].ToString();
+			opwebch.Checked = Convert.ToBoolean(webb);
+		}
+		if (ConfigurationManager.AppSettings["PopUps"] != null)
+		{
+			string pops = ConfigurationManager.AppSettings["PopUps"].ToString();
+			popch.Checked = Convert.ToBoolean(pops);
+		}
+		if (ConfigurationManager.AppSettings["Messages"] != null)
+		{
+			string messes = ConfigurationManager.AppSettings["Messages"].ToString();
+			messch.Checked = Convert.ToBoolean(messes);
+		}
+		if (ConfigurationManager.AppSettings["Subliminals"] != null)
+		{
+			string sublims = ConfigurationManager.AppSettings["Subliminals"].ToString();
+			sublimch.Checked = Convert.ToBoolean(sublims);
+		}
+		if (ConfigurationManager.AppSettings["Webcam"] != null)
+		{
+			string Webcam = ConfigurationManager.AppSettings["Webcam"].ToString();
+			webcamch.Checked = Convert.ToBoolean(Webcam);
+		}
+		if (ConfigurationManager.AppSettings["TTS"] != null)
+		{
+			string TTS = ConfigurationManager.AppSettings["TTS"].ToString();
+			ttsch.Checked = Convert.ToBoolean(TTS);
+		}
+		if (ConfigurationManager.AppSettings["DisM"] != null)
+		{
+			string dism = ConfigurationManager.AppSettings["DisM"].ToString();
+			dismch.Checked = Convert.ToBoolean(dism);
+		}
+		if (ConfigurationManager.AppSettings["DPopStyle"] != null)
+		{
+			popstyle = ConfigurationManager.AppSettings["DPopStyle"].ToString();
+		}
+		if (popstyle == "Serial")
+		{
+			dserialrd.Checked = true;
+			dparallelrd.Checked = false;
+		}
+		else
+		{
+			dserialrd.Checked = false;
+			dparallelrd.Checked = true;
+		}
+		if (ConfigurationManager.AppSettings["DPaperStyle"] != null)
+		{
+			style = ConfigurationManager.AppSettings["DPaperStyle"].ToString();
+		}
+		if (style == "Fit")
+		{
+			dfitsc.Checked = true;
+			dstret.Checked = false;
+		}
+		else
+		{
+			dfitsc.Checked = false;
+			dstret.Checked = true;
+		}
+		pop = "Short";
+		if (ConfigurationManager.AppSettings["DPopSet"] != null)
+		{
+			pop = ConfigurationManager.AppSettings["DPopSet"].ToString();
+		}
+		if (pop == "Long")
+		{
+			dlongpop.Checked = true;
+			dshortpop.Checked = false;
+		}
+		else
+		{
+			dlongpop.Checked = false;
+			dshortpop.Checked = true;
+		}
+		if (ConfigurationManager.AppSettings["DSendDelete"] != null)
+		{
+			string SendDelete2 = ConfigurationManager.AppSettings["DSendDelete"].ToString();
+			dsenddelch.Checked = Convert.ToBoolean(SendDelete2);
+		}
+		if (ConfigurationManager.AppSettings["Dtwitter"] != null)
+		{
+			string twitter2 = ConfigurationManager.AppSettings["Dtwitter"].ToString();
+			dtwitch.Checked = Convert.ToBoolean(twitter2);
+		}
+		if (ConfigurationManager.AppSettings["DWatch4me"] != null)
+		{
+			string Watch4me2 = ConfigurationManager.AppSettings["DWatch4me"].ToString();
+			dwatch4mech.Checked = Convert.ToBoolean(Watch4me2);
+		}
+		if (ConfigurationManager.AppSettings["DAudios"] != null)
+		{
+			string Audios2 = ConfigurationManager.AppSettings["DAudios"].ToString();
+			daudioch.Checked = Convert.ToBoolean(Audios2);
+		}
+		if (ConfigurationManager.AppSettings["DWriteformes"] != null)
+		{
+			string Writeformes2 = ConfigurationManager.AppSettings["DWriteformes"].ToString();
+			dwrich.Checked = Convert.ToBoolean(Writeformes2);
+		}
+		if (ConfigurationManager.AppSettings["DDownloads"] != null)
+		{
+			string downloads2 = ConfigurationManager.AppSettings["DDownloads"].ToString();
+			ddlch.Checked = Convert.ToBoolean(downloads2);
+		}
+		if (ConfigurationManager.AppSettings["DWallpapers"] != null)
+		{
+			string wallp2 = ConfigurationManager.AppSettings["DWallpapers"].ToString();
+			dwallpch.Checked = Convert.ToBoolean(wallp2);
+		}
+		if (ConfigurationManager.AppSettings["DRunables"] != null)
+		{
+			string runn2 = ConfigurationManager.AppSettings["DRunables"].ToString();
+			drunch.Checked = Convert.ToBoolean(runn2);
+		}
+		if (ConfigurationManager.AppSettings["DScreenShots"] != null)
+		{
+			string scre2 = ConfigurationManager.AppSettings["DScreenShots"].ToString();
+			dscreenshch.Checked = Convert.ToBoolean(scre2);
+		}
+		if (ConfigurationManager.AppSettings["DOpenWeb"] != null)
+		{
+			string webb2 = ConfigurationManager.AppSettings["DOpenWeb"].ToString();
+			dopwebch.Checked = Convert.ToBoolean(webb2);
+		}
+		if (ConfigurationManager.AppSettings["DPopUps"] != null)
+		{
+			string pops2 = ConfigurationManager.AppSettings["DPopUps"].ToString();
+			dpopch.Checked = Convert.ToBoolean(pops2);
+		}
+		if (ConfigurationManager.AppSettings["DMessages"] != null)
+		{
+			string messes2 = ConfigurationManager.AppSettings["DMessages"].ToString();
+			dmessch.Checked = Convert.ToBoolean(messes2);
+		}
+		if (ConfigurationManager.AppSettings["DSubliminals"] != null)
+		{
+			string sublims2 = ConfigurationManager.AppSettings["DSubliminals"].ToString();
+			dsublimch.Checked = Convert.ToBoolean(sublims2);
+		}
+		if (ConfigurationManager.AppSettings["DWebcam"] != null)
+		{
+			string DWebcam = ConfigurationManager.AppSettings["DWebcam"].ToString();
+			dwebcamch.Checked = Convert.ToBoolean(DWebcam);
+		}
+		if (ConfigurationManager.AppSettings["DTTS"] != null)
+		{
+			string DTTS = ConfigurationManager.AppSettings["DTTS"].ToString();
+			dttch.Checked = Convert.ToBoolean(DTTS);
+		}
+		if (ConfigurationManager.AppSettings["DDisM"] != null)
+		{
+			string ddism = ConfigurationManager.AppSettings["DDisM"].ToString();
+			ddismch.Checked = Convert.ToBoolean(ddism);
+		}
+	}
+
+	private void tabPage1_Click(object sender, EventArgs e)
+	{
+	}
+
+	private void webcamch_CheckedChanged(object sender, EventArgs e)
+	{
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.SvExit = new System.Windows.Forms.Button();
+		this.tabControl1 = new System.Windows.Forms.TabControl();
+		this.tabPage1 = new System.Windows.Forms.TabPage();
+		this.panel4 = new System.Windows.Forms.Panel();
+		this.label5 = new System.Windows.Forms.Label();
+		this.showblocked = new System.Windows.Forms.CheckBox();
+		this.clickch = new System.Windows.Forms.CheckBox();
+		this.panel3 = new System.Windows.Forms.Panel();
+		this.parallelrd = new System.Windows.Forms.RadioButton();
+		this.serialrd = new System.Windows.Forms.RadioButton();
+		this.label4 = new System.Windows.Forms.Label();
+		this.panel2 = new System.Windows.Forms.Panel();
+		this.fitsc = new System.Windows.Forms.RadioButton();
+		this.stret = new System.Windows.Forms.RadioButton();
+		this.label3 = new System.Windows.Forms.Label();
+		this.panel1 = new System.Windows.Forms.Panel();
+		this.webcamch = new System.Windows.Forms.CheckBox();
+		this.outstandch = new System.Windows.Forms.CheckBox();
+		this.senddelch = new System.Windows.Forms.CheckBox();
+		this.watch4mech = new System.Windows.Forms.CheckBox();
+		this.twitch = new System.Windows.Forms.CheckBox();
+		this.screenshch = new System.Windows.Forms.CheckBox();
+		this.wrich = new System.Windows.Forms.CheckBox();
+		this.audioch = new System.Windows.Forms.CheckBox();
+		this.sublimch = new System.Windows.Forms.CheckBox();
+		this.messch = new System.Windows.Forms.CheckBox();
+		this.popch = new System.Windows.Forms.CheckBox();
+		this.label2 = new System.Windows.Forms.Label();
+		this.opwebch = new System.Windows.Forms.CheckBox();
+		this.runch = new System.Windows.Forms.CheckBox();
+		this.wallpch = new System.Windows.Forms.CheckBox();
+		this.dlch = new System.Windows.Forms.CheckBox();
+		this.Popups = new System.Windows.Forms.Panel();
+		this.longpop = new System.Windows.Forms.RadioButton();
+		this.shortpop = new System.Windows.Forms.RadioButton();
+		this.label1 = new System.Windows.Forms.Label();
+		this.tabPage2 = new System.Windows.Forms.TabPage();
+		this.panel5 = new System.Windows.Forms.Panel();
+		this.label6 = new System.Windows.Forms.Label();
+		this.dclickch = new System.Windows.Forms.CheckBox();
+		this.panel6 = new System.Windows.Forms.Panel();
+		this.dparallelrd = new System.Windows.Forms.RadioButton();
+		this.dserialrd = new System.Windows.Forms.RadioButton();
+		this.label7 = new System.Windows.Forms.Label();
+		this.panel7 = new System.Windows.Forms.Panel();
+		this.dfitsc = new System.Windows.Forms.RadioButton();
+		this.dstret = new System.Windows.Forms.RadioButton();
+		this.label8 = new System.Windows.Forms.Label();
+		this.panel8 = new System.Windows.Forms.Panel();
+		this.dwebcamch = new System.Windows.Forms.CheckBox();
+		this.dsenddelch = new System.Windows.Forms.CheckBox();
+		this.dwatch4mech = new System.Windows.Forms.CheckBox();
+		this.dtwitch = new System.Windows.Forms.CheckBox();
+		this.dscreenshch = new System.Windows.Forms.CheckBox();
+		this.dwrich = new System.Windows.Forms.CheckBox();
+		this.daudioch = new System.Windows.Forms.CheckBox();
+		this.dsublimch = new System.Windows.Forms.CheckBox();
+		this.dmessch = new System.Windows.Forms.CheckBox();
+		this.dpopch = new System.Windows.Forms.CheckBox();
+		this.label9 = new System.Windows.Forms.Label();
+		this.dopwebch = new System.Windows.Forms.CheckBox();
+		this.drunch = new System.Windows.Forms.CheckBox();
+		this.dwallpch = new System.Windows.Forms.CheckBox();
+		this.ddlch = new System.Windows.Forms.CheckBox();
+		this.panel9 = new System.Windows.Forms.Panel();
+		this.dlongpop = new System.Windows.Forms.RadioButton();
+		this.dshortpop = new System.Windows.Forms.RadioButton();
+		this.label10 = new System.Windows.Forms.Label();
+		this.ttsch = new System.Windows.Forms.CheckBox();
+		this.dttch = new System.Windows.Forms.CheckBox();
+		this.dismch = new System.Windows.Forms.CheckBox();
+		this.ddismch = new System.Windows.Forms.CheckBox();
+		this.tabControl1.SuspendLayout();
+		this.tabPage1.SuspendLayout();
+		this.panel4.SuspendLayout();
+		this.panel3.SuspendLayout();
+		this.panel2.SuspendLayout();
+		this.panel1.SuspendLayout();
+		this.Popups.SuspendLayout();
+		this.tabPage2.SuspendLayout();
+		this.panel5.SuspendLayout();
+		this.panel6.SuspendLayout();
+		this.panel7.SuspendLayout();
+		this.panel8.SuspendLayout();
+		this.panel9.SuspendLayout();
+		base.SuspendLayout();
+		this.SvExit.Location = new System.Drawing.Point(314, 473);
+		this.SvExit.Name = "SvExit";
+		this.SvExit.Size = new System.Drawing.Size(81, 23);
+		this.SvExit.TabIndex = 1;
+		this.SvExit.Text = "Save & Exit ";
+		this.SvExit.UseVisualStyleBackColor = true;
+		this.SvExit.Click += new System.EventHandler(SvExit_Click);
+		this.tabControl1.Controls.Add(this.tabPage1);
+		this.tabControl1.Controls.Add(this.tabPage2);
+		this.tabControl1.Location = new System.Drawing.Point(12, 12);
+		this.tabControl1.Name = "tabControl1";
+		this.tabControl1.SelectedIndex = 0;
+		this.tabControl1.Size = new System.Drawing.Size(695, 455);
+		this.tabControl1.TabIndex = 20;
+		this.tabPage1.Controls.Add(this.panel4);
+		this.tabPage1.Controls.Add(this.panel3);
+		this.tabPage1.Controls.Add(this.panel2);
+		this.tabPage1.Controls.Add(this.panel1);
+		this.tabPage1.Controls.Add(this.Popups);
+		this.tabPage1.Location = new System.Drawing.Point(4, 24);
+		this.tabPage1.Name = "tabPage1";
+		this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+		this.tabPage1.Size = new System.Drawing.Size(687, 427);
+		this.tabPage1.TabIndex = 0;
+		this.tabPage1.Text = "General";
+		this.tabPage1.UseVisualStyleBackColor = true;
+		this.tabPage1.Click += new System.EventHandler(tabPage1_Click);
+		this.panel4.Controls.Add(this.label5);
+		this.panel4.Controls.Add(this.showblocked);
+		this.panel4.Controls.Add(this.clickch);
+		this.panel4.Location = new System.Drawing.Point(346, 89);
+		this.panel4.Name = "panel4";
+		this.panel4.Size = new System.Drawing.Size(334, 274);
+		this.panel4.TabIndex = 29;
+		this.label5.AutoSize = true;
+		this.label5.Location = new System.Drawing.Point(7, 0);
+		this.label5.Name = "label5";
+		this.label5.Size = new System.Drawing.Size(49, 15);
+		this.label5.TabIndex = 21;
+		this.label5.Text = "Options";
+		this.showblocked.AutoSize = true;
+		this.showblocked.Location = new System.Drawing.Point(16, 59);
+		this.showblocked.Name = "showblocked";
+		this.showblocked.Size = new System.Drawing.Size(126, 19);
+		this.showblocked.TabIndex = 20;
+		this.showblocked.Text = "Show blocked msg";
+		this.showblocked.UseVisualStyleBackColor = true;
+		this.clickch.AutoSize = true;
+		this.clickch.Location = new System.Drawing.Point(16, 34);
+		this.clickch.Name = "clickch";
+		this.clickch.Size = new System.Drawing.Size(136, 19);
+		this.clickch.TabIndex = 19;
+		this.clickch.Text = "Click through popup";
+		this.clickch.UseVisualStyleBackColor = true;
+		this.panel3.Controls.Add(this.parallelrd);
+		this.panel3.Controls.Add(this.serialrd);
+		this.panel3.Controls.Add(this.label4);
+		this.panel3.Location = new System.Drawing.Point(346, 6);
+		this.panel3.Name = "panel3";
+		this.panel3.Size = new System.Drawing.Size(334, 77);
+		this.panel3.TabIndex = 27;
+		this.parallelrd.AutoSize = true;
+		this.parallelrd.Location = new System.Drawing.Point(21, 43);
+		this.parallelrd.Name = "parallelrd";
+		this.parallelrd.Size = new System.Drawing.Size(198, 19);
+		this.parallelrd.TabIndex = 2;
+		this.parallelrd.TabStop = true;
+		this.parallelrd.Text = "All at once (may cause pc issues)";
+		this.parallelrd.UseVisualStyleBackColor = true;
+		this.serialrd.AutoSize = true;
+		this.serialrd.Location = new System.Drawing.Point(21, 18);
+		this.serialrd.Name = "serialrd";
+		this.serialrd.Size = new System.Drawing.Size(96, 19);
+		this.serialrd.TabIndex = 1;
+		this.serialrd.TabStop = true;
+		this.serialrd.Text = "One at a time";
+		this.serialrd.UseVisualStyleBackColor = true;
+		this.label4.AutoSize = true;
+		this.label4.Location = new System.Drawing.Point(3, 0);
+		this.label4.Name = "label4";
+		this.label4.Size = new System.Drawing.Size(47, 15);
+		this.label4.TabIndex = 0;
+		this.label4.Text = "Popups";
+		this.panel2.Controls.Add(this.fitsc);
+		this.panel2.Controls.Add(this.stret);
+		this.panel2.Controls.Add(this.label3);
+		this.panel2.Location = new System.Drawing.Point(6, 371);
+		this.panel2.Name = "panel2";
+		this.panel2.Size = new System.Drawing.Size(334, 48);
+		this.panel2.TabIndex = 28;
+		this.fitsc.AutoSize = true;
+		this.fitsc.Location = new System.Drawing.Point(111, 18);
+		this.fitsc.Name = "fitsc";
+		this.fitsc.Size = new System.Drawing.Size(75, 19);
+		this.fitsc.TabIndex = 2;
+		this.fitsc.TabStop = true;
+		this.fitsc.Text = "Fit screen";
+		this.fitsc.UseVisualStyleBackColor = true;
+		this.stret.AutoSize = true;
+		this.stret.Location = new System.Drawing.Point(12, 18);
+		this.stret.Name = "stret";
+		this.stret.Size = new System.Drawing.Size(62, 19);
+		this.stret.TabIndex = 1;
+		this.stret.TabStop = true;
+		this.stret.Text = "Stretch";
+		this.stret.UseVisualStyleBackColor = true;
+		this.label3.AutoSize = true;
+		this.label3.Location = new System.Drawing.Point(3, 0);
+		this.label3.Name = "label3";
+		this.label3.Size = new System.Drawing.Size(60, 15);
+		this.label3.TabIndex = 0;
+		this.label3.Text = "Wallpaper";
+		this.panel1.Controls.Add(this.dismch);
+		this.panel1.Controls.Add(this.ttsch);
+		this.panel1.Controls.Add(this.webcamch);
+		this.panel1.Controls.Add(this.outstandch);
+		this.panel1.Controls.Add(this.senddelch);
+		this.panel1.Controls.Add(this.watch4mech);
+		this.panel1.Controls.Add(this.twitch);
+		this.panel1.Controls.Add(this.screenshch);
+		this.panel1.Controls.Add(this.wrich);
+		this.panel1.Controls.Add(this.audioch);
+		this.panel1.Controls.Add(this.sublimch);
+		this.panel1.Controls.Add(this.messch);
+		this.panel1.Controls.Add(this.popch);
+		this.panel1.Controls.Add(this.label2);
+		this.panel1.Controls.Add(this.opwebch);
+		this.panel1.Controls.Add(this.runch);
+		this.panel1.Controls.Add(this.wallpch);
+		this.panel1.Controls.Add(this.dlch);
+		this.panel1.Location = new System.Drawing.Point(6, 89);
+		this.panel1.Name = "panel1";
+		this.panel1.Size = new System.Drawing.Size(334, 276);
+		this.panel1.TabIndex = 26;
+		this.webcamch.AutoSize = true;
+		this.webcamch.Location = new System.Drawing.Point(122, 135);
+		this.webcamch.Name = "webcamch";
+		this.webcamch.Size = new System.Drawing.Size(73, 19);
+		this.webcamch.TabIndex = 15;
+		this.webcamch.Text = "Webcam";
+		this.webcamch.UseVisualStyleBackColor = true;
+		this.webcamch.CheckedChanged += new System.EventHandler(webcamch_CheckedChanged);
+		this.outstandch.AutoSize = true;
+		this.outstandch.Location = new System.Drawing.Point(122, 234);
+		this.outstandch.Name = "outstandch";
+		this.outstandch.Size = new System.Drawing.Size(143, 19);
+		this.outstandch.TabIndex = 14;
+		this.outstandch.Text = "Outstanding reminder";
+		this.outstandch.UseVisualStyleBackColor = true;
+		this.senddelch.AutoSize = true;
+		this.senddelch.Location = new System.Drawing.Point(122, 110);
+		this.senddelch.Name = "senddelch";
+		this.senddelch.Size = new System.Drawing.Size(102, 19);
+		this.senddelch.TabIndex = 13;
+		this.senddelch.Text = "Send or Delete";
+		this.senddelch.UseVisualStyleBackColor = true;
+		this.watch4mech.AutoSize = true;
+		this.watch4mech.Location = new System.Drawing.Point(122, 85);
+		this.watch4mech.Name = "watch4mech";
+		this.watch4mech.Size = new System.Drawing.Size(98, 19);
+		this.watch4mech.TabIndex = 12;
+		this.watch4mech.Text = "Watch for me";
+		this.watch4mech.UseVisualStyleBackColor = true;
+		this.twitch.AutoSize = true;
+		this.twitch.Location = new System.Drawing.Point(122, 60);
+		this.twitch.Name = "twitch";
+		this.twitch.Size = new System.Drawing.Size(87, 19);
+		this.twitch.TabIndex = 11;
+		this.twitch.Text = "Twitter post";
+		this.twitch.UseVisualStyleBackColor = true;
+		this.screenshch.AutoSize = true;
+		this.screenshch.Location = new System.Drawing.Point(122, 35);
+		this.screenshch.Name = "screenshch";
+		this.screenshch.Size = new System.Drawing.Size(92, 19);
+		this.screenshch.TabIndex = 10;
+		this.screenshch.Text = "Screen shots";
+		this.screenshch.UseVisualStyleBackColor = true;
+		this.wrich.AutoSize = true;
+		this.wrich.Location = new System.Drawing.Point(12, 234);
+		this.wrich.Name = "wrich";
+		this.wrich.Size = new System.Drawing.Size(92, 19);
+		this.wrich.TabIndex = 9;
+		this.wrich.Text = "Write for me";
+		this.wrich.UseVisualStyleBackColor = true;
+		this.audioch.AutoSize = true;
+		this.audioch.Location = new System.Drawing.Point(12, 209);
+		this.audioch.Name = "audioch";
+		this.audioch.Size = new System.Drawing.Size(58, 19);
+		this.audioch.TabIndex = 8;
+		this.audioch.Text = "Audio";
+		this.audioch.UseVisualStyleBackColor = true;
+		this.sublimch.AutoSize = true;
+		this.sublimch.Location = new System.Drawing.Point(12, 185);
+		this.sublimch.Name = "sublimch";
+		this.sublimch.Size = new System.Drawing.Size(82, 19);
+		this.sublimch.TabIndex = 7;
+		this.sublimch.Text = "Subliminal";
+		this.sublimch.UseVisualStyleBackColor = true;
+		this.messch.AutoSize = true;
+		this.messch.Location = new System.Drawing.Point(12, 160);
+		this.messch.Name = "messch";
+		this.messch.Size = new System.Drawing.Size(77, 19);
+		this.messch.TabIndex = 6;
+		this.messch.Text = "Messages";
+		this.messch.UseVisualStyleBackColor = true;
+		this.popch.AutoSize = true;
+		this.popch.Location = new System.Drawing.Point(12, 135);
+		this.popch.Name = "popch";
+		this.popch.Size = new System.Drawing.Size(70, 19);
+		this.popch.TabIndex = 5;
+		this.popch.Text = "Pop Ups";
+		this.popch.UseVisualStyleBackColor = true;
+		this.label2.AutoSize = true;
+		this.label2.Location = new System.Drawing.Point(12, 0);
+		this.label2.Name = "label2";
+		this.label2.Size = new System.Drawing.Size(56, 15);
+		this.label2.TabIndex = 4;
+		this.label2.Text = "Dis-allow";
+		this.opwebch.AutoSize = true;
+		this.opwebch.Location = new System.Drawing.Point(12, 110);
+		this.opwebch.Name = "opwebch";
+		this.opwebch.Size = new System.Drawing.Size(100, 19);
+		this.opwebch.TabIndex = 3;
+		this.opwebch.Text = "Open Website";
+		this.opwebch.UseVisualStyleBackColor = true;
+		this.runch.AutoSize = true;
+		this.runch.Location = new System.Drawing.Point(12, 85);
+		this.runch.Name = "runch";
+		this.runch.Size = new System.Drawing.Size(93, 19);
+		this.runch.TabIndex = 2;
+		this.runch.Text = "Runable files";
+		this.runch.UseVisualStyleBackColor = true;
+		this.wallpch.AutoSize = true;
+		this.wallpch.Location = new System.Drawing.Point(12, 60);
+		this.wallpch.Name = "wallpch";
+		this.wallpch.Size = new System.Drawing.Size(79, 19);
+		this.wallpch.TabIndex = 1;
+		this.wallpch.Text = "Wallpaper";
+		this.wallpch.UseVisualStyleBackColor = true;
+		this.dlch.AutoSize = true;
+		this.dlch.Location = new System.Drawing.Point(12, 35);
+		this.dlch.Name = "dlch";
+		this.dlch.Size = new System.Drawing.Size(80, 19);
+		this.dlch.TabIndex = 0;
+		this.dlch.Text = "Download";
+		this.dlch.UseVisualStyleBackColor = true;
+		this.Popups.Controls.Add(this.longpop);
+		this.Popups.Controls.Add(this.shortpop);
+		this.Popups.Controls.Add(this.label1);
+		this.Popups.Location = new System.Drawing.Point(6, 6);
+		this.Popups.Name = "Popups";
+		this.Popups.Size = new System.Drawing.Size(334, 77);
+		this.Popups.TabIndex = 25;
+		this.longpop.AutoSize = true;
+		this.longpop.Location = new System.Drawing.Point(12, 43);
+		this.longpop.Name = "longpop";
+		this.longpop.Size = new System.Drawing.Size(185, 19);
+		this.longpop.TabIndex = 2;
+		this.longpop.TabStop = true;
+		this.longpop.Text = "Long popups (1min - 10 mins)";
+		this.longpop.UseVisualStyleBackColor = true;
+		this.shortpop.AutoSize = true;
+		this.shortpop.Location = new System.Drawing.Point(12, 18);
+		this.shortpop.Name = "shortpop";
+		this.shortpop.Size = new System.Drawing.Size(174, 19);
+		this.shortpop.TabIndex = 1;
+		this.shortpop.TabStop = true;
+		this.shortpop.Text = "Short popups (10sec - 1min)";
+		this.shortpop.UseVisualStyleBackColor = true;
+		this.label1.AutoSize = true;
+		this.label1.Location = new System.Drawing.Point(3, 0);
+		this.label1.Name = "label1";
+		this.label1.Size = new System.Drawing.Size(47, 15);
+		this.label1.TabIndex = 0;
+		this.label1.Text = "Popups";
+		this.tabPage2.Controls.Add(this.panel5);
+		this.tabPage2.Controls.Add(this.panel6);
+		this.tabPage2.Controls.Add(this.panel7);
+		this.tabPage2.Controls.Add(this.panel8);
+		this.tabPage2.Controls.Add(this.panel9);
+		this.tabPage2.Location = new System.Drawing.Point(4, 24);
+		this.tabPage2.Name = "tabPage2";
+		this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+		this.tabPage2.Size = new System.Drawing.Size(687, 427);
+		this.tabPage2.TabIndex = 1;
+		this.tabPage2.Text = "Dom";
+		this.tabPage2.UseVisualStyleBackColor = true;
+		this.panel5.Controls.Add(this.label6);
+		this.panel5.Controls.Add(this.dclickch);
+		this.panel5.Location = new System.Drawing.Point(346, 90);
+		this.panel5.Name = "panel5";
+		this.panel5.Size = new System.Drawing.Size(334, 274);
+		this.panel5.TabIndex = 34;
+		this.label6.AutoSize = true;
+		this.label6.Location = new System.Drawing.Point(7, 0);
+		this.label6.Name = "label6";
+		this.label6.Size = new System.Drawing.Size(49, 15);
+		this.label6.TabIndex = 21;
+		this.label6.Text = "Options";
+		this.dclickch.AutoSize = true;
+		this.dclickch.Location = new System.Drawing.Point(16, 34);
+		this.dclickch.Name = "dclickch";
+		this.dclickch.Size = new System.Drawing.Size(136, 19);
+		this.dclickch.TabIndex = 19;
+		this.dclickch.Text = "Click through popup";
+		this.dclickch.UseVisualStyleBackColor = true;
+		this.panel6.Controls.Add(this.dparallelrd);
+		this.panel6.Controls.Add(this.dserialrd);
+		this.panel6.Controls.Add(this.label7);
+		this.panel6.Location = new System.Drawing.Point(346, 7);
+		this.panel6.Name = "panel6";
+		this.panel6.Size = new System.Drawing.Size(334, 77);
+		this.panel6.TabIndex = 32;
+		this.dparallelrd.AutoSize = true;
+		this.dparallelrd.Location = new System.Drawing.Point(21, 43);
+		this.dparallelrd.Name = "dparallelrd";
+		this.dparallelrd.Size = new System.Drawing.Size(198, 19);
+		this.dparallelrd.TabIndex = 2;
+		this.dparallelrd.TabStop = true;
+		this.dparallelrd.Text = "All at once (may cause pc issues)";
+		this.dparallelrd.UseVisualStyleBackColor = true;
+		this.dserialrd.AutoSize = true;
+		this.dserialrd.Location = new System.Drawing.Point(21, 18);
+		this.dserialrd.Name = "dserialrd";
+		this.dserialrd.Size = new System.Drawing.Size(96, 19);
+		this.dserialrd.TabIndex = 1;
+		this.dserialrd.TabStop = true;
+		this.dserialrd.Text = "One at a time";
+		this.dserialrd.UseVisualStyleBackColor = true;
+		this.label7.AutoSize = true;
+		this.label7.Location = new System.Drawing.Point(3, 0);
+		this.label7.Name = "label7";
+		this.label7.Size = new System.Drawing.Size(47, 15);
+		this.label7.TabIndex = 0;
+		this.label7.Text = "Popups";
+		this.panel7.Controls.Add(this.dfitsc);
+		this.panel7.Controls.Add(this.dstret);
+		this.panel7.Controls.Add(this.label8);
+		this.panel7.Location = new System.Drawing.Point(6, 372);
+		this.panel7.Name = "panel7";
+		this.panel7.Size = new System.Drawing.Size(334, 48);
+		this.panel7.TabIndex = 33;
+		this.dfitsc.AutoSize = true;
+		this.dfitsc.Location = new System.Drawing.Point(111, 18);
+		this.dfitsc.Name = "dfitsc";
+		this.dfitsc.Size = new System.Drawing.Size(75, 19);
+		this.dfitsc.TabIndex = 2;
+		this.dfitsc.TabStop = true;
+		this.dfitsc.Text = "Fit screen";
+		this.dfitsc.UseVisualStyleBackColor = true;
+		this.dstret.AutoSize = true;
+		this.dstret.Location = new System.Drawing.Point(12, 18);
+		this.dstret.Name = "dstret";
+		this.dstret.Size = new System.Drawing.Size(62, 19);
+		this.dstret.TabIndex = 1;
+		this.dstret.TabStop = true;
+		this.dstret.Text = "Stretch";
+		this.dstret.UseVisualStyleBackColor = true;
+		this.label8.AutoSize = true;
+		this.label8.Location = new System.Drawing.Point(3, 0);
+		this.label8.Name = "label8";
+		this.label8.Size = new System.Drawing.Size(60, 15);
+		this.label8.TabIndex = 0;
+		this.label8.Text = "Wallpaper";
+		this.panel8.Controls.Add(this.ddismch);
+		this.panel8.Controls.Add(this.dttch);
+		this.panel8.Controls.Add(this.dwebcamch);
+		this.panel8.Controls.Add(this.dsenddelch);
+		this.panel8.Controls.Add(this.dwatch4mech);
+		this.panel8.Controls.Add(this.dtwitch);
+		this.panel8.Controls.Add(this.dscreenshch);
+		this.panel8.Controls.Add(this.dwrich);
+		this.panel8.Controls.Add(this.daudioch);
+		this.panel8.Controls.Add(this.dsublimch);
+		this.panel8.Controls.Add(this.dmessch);
+		this.panel8.Controls.Add(this.dpopch);
+		this.panel8.Controls.Add(this.label9);
+		this.panel8.Controls.Add(this.dopwebch);
+		this.panel8.Controls.Add(this.drunch);
+		this.panel8.Controls.Add(this.dwallpch);
+		this.panel8.Controls.Add(this.ddlch);
+		this.panel8.Location = new System.Drawing.Point(6, 90);
+		this.panel8.Name = "panel8";
+		this.panel8.Size = new System.Drawing.Size(334, 276);
+		this.panel8.TabIndex = 31;
+		this.dwebcamch.AutoSize = true;
+		this.dwebcamch.Location = new System.Drawing.Point(122, 135);
+		this.dwebcamch.Name = "dwebcamch";
+		this.dwebcamch.Size = new System.Drawing.Size(73, 19);
+		this.dwebcamch.TabIndex = 16;
+		this.dwebcamch.Text = "Webcam";
+		this.dwebcamch.UseVisualStyleBackColor = true;
+		this.dsenddelch.AutoSize = true;
+		this.dsenddelch.Location = new System.Drawing.Point(122, 110);
+		this.dsenddelch.Name = "dsenddelch";
+		this.dsenddelch.Size = new System.Drawing.Size(102, 19);
+		this.dsenddelch.TabIndex = 13;
+		this.dsenddelch.Text = "Send or Delete";
+		this.dsenddelch.UseVisualStyleBackColor = true;
+		this.dwatch4mech.AutoSize = true;
+		this.dwatch4mech.Location = new System.Drawing.Point(122, 85);
+		this.dwatch4mech.Name = "dwatch4mech";
+		this.dwatch4mech.Size = new System.Drawing.Size(98, 19);
+		this.dwatch4mech.TabIndex = 12;
+		this.dwatch4mech.Text = "Watch for me";
+		this.dwatch4mech.UseVisualStyleBackColor = true;
+		this.dtwitch.AutoSize = true;
+		this.dtwitch.Location = new System.Drawing.Point(122, 60);
+		this.dtwitch.Name = "dtwitch";
+		this.dtwitch.Size = new System.Drawing.Size(87, 19);
+		this.dtwitch.TabIndex = 11;
+		this.dtwitch.Text = "Twitter post";
+		this.dtwitch.UseVisualStyleBackColor = true;
+		this.dscreenshch.AutoSize = true;
+		this.dscreenshch.Location = new System.Drawing.Point(122, 35);
+		this.dscreenshch.Name = "dscreenshch";
+		this.dscreenshch.Size = new System.Drawing.Size(92, 19);
+		this.dscreenshch.TabIndex = 10;
+		this.dscreenshch.Text = "Screen shots";
+		this.dscreenshch.UseVisualStyleBackColor = true;
+		this.dwrich.AutoSize = true;
+		this.dwrich.Location = new System.Drawing.Point(12, 234);
+		this.dwrich.Name = "dwrich";
+		this.dwrich.Size = new System.Drawing.Size(92, 19);
+		this.dwrich.TabIndex = 9;
+		this.dwrich.Text = "Write for me";
+		this.dwrich.UseVisualStyleBackColor = true;
+		this.daudioch.AutoSize = true;
+		this.daudioch.Location = new System.Drawing.Point(12, 209);
+		this.daudioch.Name = "daudioch";
+		this.daudioch.Size = new System.Drawing.Size(58, 19);
+		this.daudioch.TabIndex = 8;
+		this.daudioch.Text = "Audio";
+		this.daudioch.UseVisualStyleBackColor = true;
+		this.dsublimch.AutoSize = true;
+		this.dsublimch.Location = new System.Drawing.Point(12, 185);
+		this.dsublimch.Name = "dsublimch";
+		this.dsublimch.Size = new System.Drawing.Size(82, 19);
+		this.dsublimch.TabIndex = 7;
+		this.dsublimch.Text = "Subliminal";
+		this.dsublimch.UseVisualStyleBackColor = true;
+		this.dmessch.AutoSize = true;
+		this.dmessch.Location = new System.Drawing.Point(12, 160);
+		this.dmessch.Name = "dmessch";
+		this.dmessch.Size = new System.Drawing.Size(77, 19);
+		this.dmessch.TabIndex = 6;
+		this.dmessch.Text = "Messages";
+		this.dmessch.UseVisualStyleBackColor = true;
+		this.dpopch.AutoSize = true;
+		this.dpopch.Location = new System.Drawing.Point(12, 135);
+		this.dpopch.Name = "dpopch";
+		this.dpopch.Size = new System.Drawing.Size(70, 19);
+		this.dpopch.TabIndex = 5;
+		this.dpopch.Text = "Pop Ups";
+		this.dpopch.UseVisualStyleBackColor = true;
+		this.label9.AutoSize = true;
+		this.label9.Location = new System.Drawing.Point(12, 0);
+		this.label9.Name = "label9";
+		this.label9.Size = new System.Drawing.Size(56, 15);
+		this.label9.TabIndex = 4;
+		this.label9.Text = "Dis-allow";
+		this.dopwebch.AutoSize = true;
+		this.dopwebch.Location = new System.Drawing.Point(12, 110);
+		this.dopwebch.Name = "dopwebch";
+		this.dopwebch.Size = new System.Drawing.Size(100, 19);
+		this.dopwebch.TabIndex = 3;
+		this.dopwebch.Text = "Open Website";
+		this.dopwebch.UseVisualStyleBackColor = true;
+		this.drunch.AutoSize = true;
+		this.drunch.Location = new System.Drawing.Point(12, 85);
+		this.drunch.Name = "drunch";
+		this.drunch.Size = new System.Drawing.Size(93, 19);
+		this.drunch.TabIndex = 2;
+		this.drunch.Text = "Runable files";
+		this.drunch.UseVisualStyleBackColor = true;
+		this.dwallpch.AutoSize = true;
+		this.dwallpch.Location = new System.Drawing.Point(12, 60);
+		this.dwallpch.Name = "dwallpch";
+		this.dwallpch.Size = new System.Drawing.Size(79, 19);
+		this.dwallpch.TabIndex = 1;
+		this.dwallpch.Text = "Wallpaper";
+		this.dwallpch.UseVisualStyleBackColor = true;
+		this.ddlch.AutoSize = true;
+		this.ddlch.Location = new System.Drawing.Point(12, 35);
+		this.ddlch.Name = "ddlch";
+		this.ddlch.Size = new System.Drawing.Size(80, 19);
+		this.ddlch.TabIndex = 0;
+		this.ddlch.Text = "Download";
+		this.ddlch.UseVisualStyleBackColor = true;
+		this.panel9.Controls.Add(this.dlongpop);
+		this.panel9.Controls.Add(this.dshortpop);
+		this.panel9.Controls.Add(this.label10);
+		this.panel9.Location = new System.Drawing.Point(6, 7);
+		this.panel9.Name = "panel9";
+		this.panel9.Size = new System.Drawing.Size(334, 77);
+		this.panel9.TabIndex = 30;
+		this.dlongpop.AutoSize = true;
+		this.dlongpop.Location = new System.Drawing.Point(12, 43);
+		this.dlongpop.Name = "dlongpop";
+		this.dlongpop.Size = new System.Drawing.Size(185, 19);
+		this.dlongpop.TabIndex = 2;
+		this.dlongpop.TabStop = true;
+		this.dlongpop.Text = "Long popups (1min - 10 mins)";
+		this.dlongpop.UseVisualStyleBackColor = true;
+		this.dshortpop.AutoSize = true;
+		this.dshortpop.Location = new System.Drawing.Point(12, 18);
+		this.dshortpop.Name = "dshortpop";
+		this.dshortpop.Size = new System.Drawing.Size(174, 19);
+		this.dshortpop.TabIndex = 1;
+		this.dshortpop.TabStop = true;
+		this.dshortpop.Text = "Short popups (10sec - 1min)";
+		this.dshortpop.UseVisualStyleBackColor = true;
+		this.label10.AutoSize = true;
+		this.label10.Location = new System.Drawing.Point(3, 0);
+		this.label10.Name = "label10";
+		this.label10.Size = new System.Drawing.Size(47, 15);
+		this.label10.TabIndex = 0;
+		this.label10.Text = "Popups";
+		this.ttsch.AutoSize = true;
+		this.ttsch.Location = new System.Drawing.Point(122, 160);
+		this.ttsch.Name = "ttsch";
+		this.ttsch.Size = new System.Drawing.Size(44, 19);
+		this.ttsch.TabIndex = 16;
+		this.ttsch.Text = "TTS";
+		this.ttsch.UseVisualStyleBackColor = true;
+		this.dttch.AutoSize = true;
+		this.dttch.Location = new System.Drawing.Point(122, 160);
+		this.dttch.Name = "dttch";
+		this.dttch.Size = new System.Drawing.Size(44, 19);
+		this.dttch.TabIndex = 17;
+		this.dttch.Text = "TTS";
+		this.dttch.UseVisualStyleBackColor = true;
+		this.dismch.AutoSize = true;
+		this.dismch.Location = new System.Drawing.Point(122, 185);
+		this.dismch.Name = "dismch";
+		this.dismch.Size = new System.Drawing.Size(103, 19);
+		this.dismch.TabIndex = 17;
+		this.dismch.Text = "Disable Mouse";
+		this.dismch.UseVisualStyleBackColor = true;
+		this.ddismch.AutoSize = true;
+		this.ddismch.Location = new System.Drawing.Point(122, 185);
+		this.ddismch.Name = "ddismch";
+		this.ddismch.Size = new System.Drawing.Size(103, 19);
+		this.ddismch.TabIndex = 18;
+		this.ddismch.Text = "Disable Mouse";
+		this.ddismch.UseVisualStyleBackColor = true;
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(716, 506);
+		base.Controls.Add(this.tabControl1);
+		base.Controls.Add(this.SvExit);
+		base.Name = "Options";
+		this.Text = "Options";
+		base.Load += new System.EventHandler(Options_Load);
+		this.tabControl1.ResumeLayout(false);
+		this.tabPage1.ResumeLayout(false);
+		this.panel4.ResumeLayout(false);
+		this.panel4.PerformLayout();
+		this.panel3.ResumeLayout(false);
+		this.panel3.PerformLayout();
+		this.panel2.ResumeLayout(false);
+		this.panel2.PerformLayout();
+		this.panel1.ResumeLayout(false);
+		this.panel1.PerformLayout();
+		this.Popups.ResumeLayout(false);
+		this.Popups.PerformLayout();
+		this.tabPage2.ResumeLayout(false);
+		this.panel5.ResumeLayout(false);
+		this.panel5.PerformLayout();
+		this.panel6.ResumeLayout(false);
+		this.panel6.PerformLayout();
+		this.panel7.ResumeLayout(false);
+		this.panel7.PerformLayout();
+		this.panel8.ResumeLayout(false);
+		this.panel8.PerformLayout();
+		this.panel9.ResumeLayout(false);
+		this.panel9.PerformLayout();
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/Options.resx b/ControlApp/Options.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/Options.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/Other.cs b/ControlApp/Other.cs
new file mode 100644
index 0000000..3ad8fd6
--- /dev/null
+++ b/ControlApp/Other.cs
@@ -0,0 +1,123 @@
+using System;
+using System.ComponentModel;
+using System.Configuration;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class Other : Form
+{
+	private IContainer components;
+
+	private Button svncls;
+
+	private Label label1;
+
+	private TextBox textBox1;
+
+	private TextBox textBox2;
+
+	private Label label2;
+
+	public Other()
+	{
+		InitializeComponent();
+	}
+
+	private void svncls_Click(object sender, EventArgs e)
+	{
+		Configuration myconfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
+		KeyValueConfigurationCollection apps = myconfig.AppSettings.Settings;
+		apps.Remove("CommonUsers");
+		string userlist = "";
+		string[] lines = textBox1.Lines;
+		foreach (string line in lines)
+		{
+			userlist = ((!(userlist == "")) ? (userlist + ",[" + line + "]") : (userlist + "[" + line + "]"));
+		}
+		apps.Add("CommonUsers", userlist);
+		apps.Remove("BlackList");
+		string blist = "";
+		lines = textBox2.Lines;
+		foreach (string line2 in lines)
+		{
+			blist = ((!(blist == "")) ? (blist + ",[" + line2 + "]") : (blist + "[" + line2 + "]"));
+		}
+		apps.Add("BlackList", blist);
+		myconfig.Save(ConfigurationSaveMode.Full);
+		ConfigurationManager.RefreshSection(myconfig.AppSettings.SectionInformation.Name);
+		Close();
+	}
+
+	private void Other_Load(object sender, EventArgs e)
+	{
+		string userlist = ConfigurationManager.AppSettings["CommonUsers"];
+		if (userlist != null)
+		{
+			string[] users = new Utils().seperate_string(userlist);
+			textBox1.Lines = users;
+		}
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.svncls = new System.Windows.Forms.Button();
+		this.label1 = new System.Windows.Forms.Label();
+		this.textBox1 = new System.Windows.Forms.TextBox();
+		this.textBox2 = new System.Windows.Forms.TextBox();
+		this.label2 = new System.Windows.Forms.Label();
+		base.SuspendLayout();
+		this.svncls.Location = new System.Drawing.Point(277, 246);
+		this.svncls.Name = "svncls";
+		this.svncls.Size = new System.Drawing.Size(84, 23);
+		this.svncls.TabIndex = 0;
+		this.svncls.Text = "Save & Close";
+		this.svncls.UseVisualStyleBackColor = true;
+		this.svncls.Click += new System.EventHandler(svncls_Click);
+		this.label1.AutoSize = true;
+		this.label1.Location = new System.Drawing.Point(22, 9);
+		this.label1.Name = "label1";
+		this.label1.Size = new System.Drawing.Size(89, 15);
+		this.label1.TabIndex = 1;
+		this.label1.Text = "Common Users";
+		this.textBox1.Location = new System.Drawing.Point(11, 27);
+		this.textBox1.Multiline = true;
+		this.textBox1.Name = "textBox1";
+		this.textBox1.Size = new System.Drawing.Size(123, 189);
+		this.textBox1.TabIndex = 2;
+		this.textBox2.Location = new System.Drawing.Point(154, 27);
+		this.textBox2.Multiline = true;
+		this.textBox2.Name = "textBox2";
+		this.textBox2.Size = new System.Drawing.Size(123, 189);
+		this.textBox2.TabIndex = 4;
+		this.label2.AutoSize = true;
+		this.label2.Location = new System.Drawing.Point(165, 9);
+		this.label2.Name = "label2";
+		this.label2.Size = new System.Drawing.Size(77, 15);
+		this.label2.TabIndex = 3;
+		this.label2.Text = "Web blacklist";
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(373, 281);
+		base.Controls.Add(this.textBox2);
+		base.Controls.Add(this.label2);
+		base.Controls.Add(this.textBox1);
+		base.Controls.Add(this.label1);
+		base.Controls.Add(this.svncls);
+		base.Name = "Other";
+		this.Text = "Other";
+		base.Load += new System.EventHandler(Other_Load);
+		base.ResumeLayout(false);
+		base.PerformLayout();
+	}
+}
diff --git a/ControlApp/Other.resx b/ControlApp/Other.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/Other.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/PopUp.cs b/ControlApp/PopUp.cs
new file mode 100644
index 0000000..c18bdd5
--- /dev/null
+++ b/ControlApp/PopUp.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration;
+using System.Diagnostics;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using System.Windows.Forms;
+using AxWMPLib;
+
+namespace ControlApp;
+
+public class PopUp : Form
+{
+	public string run_url;
+
+	private Timer tmr;
+
+	private const int GWL_STYLE = -20;
+
+	private const uint WS_POPUP = 2147483648u;
+
+	private const uint WS_CHILD = 536870912u;
+
+	private List<string> urls;
+
+	private IContainer components;
+
+	private AxWindowsMediaPlayer axWindowsMediaPlayer1;
+
+	[DllImport("user32.dll", SetLastError = true)]
+	private static extern uint GetWindowLong(nint hWnd, int nIndex);
+
+	[DllImport("user32.dll")]
+	private static extern int SetWindowLong(nint hWnd, int nIndex, uint dwNewLong);
+
+	public PopUp(string url)
+	{
+		urls = new List<string>();
+		InitializeComponent();
+		if (ConfigurationManager.AppSettings["Clickthroughpop"] == "True")
+		{
+			base.Opacity = 0.5;
+			uint initialStyle = GetWindowLong(base.Handle, -20);
+			SetWindowLong(base.Handle, -20, initialStyle | 0x80000 | 0x20);
+		}
+		run_url = url;
+		switch (run_url.Substring(run_url.Length - 3, 3))
+		{
+		case "com":
+		case ".uk":
+		case "org":
+			Process.Start(new ProcessStartInfo
+			{
+				FileName = url,
+				UseShellExecute = true
+			});
+			Close();
+			break;
+		}
+		tmr = new Timer();
+		tmr.Tick += popup_tick;
+		Random rand = new Random();
+		if (ConfigurationManager.AppSettings["PopSet"] != null && "Long" == ConfigurationManager.AppSettings["PopSet"].ToString())
+		{
+			int mins = rand.Next(11);
+			tmr.Interval = (int)TimeSpan.FromMinutes(mins).TotalMilliseconds;
+		}
+		else
+		{
+			int mins2 = rand.Next(55) + 5;
+			tmr.Interval = (int)TimeSpan.FromSeconds(mins2).TotalMilliseconds;
+		}
+	}
+
+	public void add_url(string url)
+	{
+		urls.Add(url);
+	}
+
+	public void popup_tick(object sender, EventArgs e)
+	{
+		if (urls.Count > 0)
+		{
+			run_url = urls[0];
+			urls.RemoveAt(0);
+			axWindowsMediaPlayer1.URL = run_url;
+			axWindowsMediaPlayer1.Ctlenabled = false;
+			axWindowsMediaPlayer1.uiMode = "None";
+			axWindowsMediaPlayer1.settings.autoStart = true;
+			axWindowsMediaPlayer1.settings.setMode("loop", varfMode: true);
+		}
+		else
+		{
+			Close();
+		}
+	}
+
+	private void PopUp_Load(object sender, EventArgs e)
+	{
+		Random random = new Random();
+		int screenWidth = Screen.PrimaryScreen.Bounds.Width;
+		int screenHeight = Screen.PrimaryScreen.Bounds.Height;
+		int randomX = random.Next(0, screenWidth - base.Width);
+		int randomY = random.Next(0, screenHeight - base.Height);
+		base.StartPosition = FormStartPosition.Manual;
+		base.Location = new Point(randomX, randomY);
+		axWindowsMediaPlayer1.URL = run_url;
+		axWindowsMediaPlayer1.Ctlenabled = false;
+		axWindowsMediaPlayer1.uiMode = "None";
+		axWindowsMediaPlayer1.settings.autoStart = true;
+		axWindowsMediaPlayer1.settings.setMode("loop", varfMode: true);
+		tmr.Start();
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PopUp));
+		this.axWindowsMediaPlayer1 = new AxWMPLib.AxWindowsMediaPlayer();
+		((System.ComponentModel.ISupportInitialize)this.axWindowsMediaPlayer1).BeginInit();
+		base.SuspendLayout();
+		this.axWindowsMediaPlayer1.Dock = System.Windows.Forms.DockStyle.Fill;
+		this.axWindowsMediaPlayer1.Enabled = true;
+		this.axWindowsMediaPlayer1.Location = new System.Drawing.Point(0, 0);
+		this.axWindowsMediaPlayer1.Name = "axWindowsMediaPlayer1";
+		this.axWindowsMediaPlayer1.OcxState = (System.Windows.Forms.AxHost.State)resources.GetObject("axWindowsMediaPlayer1.OcxState");
+		this.axWindowsMediaPlayer1.Size = new System.Drawing.Size(800, 450);
+		this.axWindowsMediaPlayer1.TabIndex = 0;
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 450);
+		base.ControlBox = false;
+		base.Controls.Add(this.axWindowsMediaPlayer1);
+		base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+		base.Name = "PopUp";
+		base.ShowIcon = false;
+		base.ShowInTaskbar = false;
+		this.Text = "PopUp";
+		base.TopMost = true;
+		base.Load += new System.EventHandler(PopUp_Load);
+		((System.ComponentModel.ISupportInitialize)this.axWindowsMediaPlayer1).EndInit();
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/PopUp.resx b/ControlApp/PopUp.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/PopUp.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/Program.cs b/ControlApp/Program.cs
new file mode 100644
index 0000000..75680c2
--- /dev/null
+++ b/ControlApp/Program.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+internal static class Program
+{
+	[STAThread]
+	private static void Main()
+	{
+		ApplicationConfiguration.Initialize();
+		Application.EnableVisualStyles();
+		Application.SetCompatibleTextRenderingDefault(defaultValue: false);
+		Application.Run(new MyCustomApplicationContext());
+	}
+}
diff --git a/ControlApp/SendOrDelete.cs b/ControlApp/SendOrDelete.cs
new file mode 100644
index 0000000..267d18d
--- /dev/null
+++ b/ControlApp/SendOrDelete.cs
@@ -0,0 +1,144 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Windows.Forms;
+using AxWMPLib;
+
+namespace ControlApp;
+
+public class SendOrDelete : Form
+{
+	private string thefile;
+
+	private string senderstr;
+
+	private IContainer components;
+
+	private AxWindowsMediaPlayer axWindowsMediaPlayer1;
+
+	private Button Sendbtn;
+
+	private Button Deletebtn;
+
+	public SendOrDelete(string senderid)
+	{
+		InitializeComponent();
+		string location = ConfigurationManager.AppSettings["LocalDrive"];
+		string[] filetypes = new string[9] { ".jpg", ".jpeg", ".gif", ".mov", ".mpg", ".mpeg", ".avi", ".png", ".mp4" };
+		List<string> acceptablefiles = new List<string>();
+		if (location != null)
+		{
+			string[] files = Directory.GetFiles(location);
+			foreach (string file in files)
+			{
+				FileInfo info = new FileInfo(file);
+				if (filetypes.Contains(info.Extension) && info.Length < 1000000)
+				{
+					acceptablefiles.Add(file);
+				}
+			}
+		}
+		int max = acceptablefiles.Count();
+		if (max > 0)
+		{
+			Random rnd = new Random();
+			thefile = acceptablefiles[rnd.Next(max)];
+			senderstr = senderid;
+		}
+	}
+
+	private void Deletebtn_Click(object sender, EventArgs e)
+	{
+		if (thefile != null)
+		{
+			File.Delete(thefile);
+		}
+		Utils utils = new Utils();
+		string usrnm = ConfigurationManager.AppSettings["UserName"].ToString();
+		string line1 = "M=" + usrnm + " chose to delete.";
+		utils.sendcmd(senderstr, utils.Ecrypt(line1), all: false);
+		Close();
+	}
+
+	private void SendOrDelete_Load(object sender, EventArgs e)
+	{
+		axWindowsMediaPlayer1.URL = thefile;
+		axWindowsMediaPlayer1.Ctlenabled = false;
+		axWindowsMediaPlayer1.uiMode = "None";
+		axWindowsMediaPlayer1.settings.autoStart = true;
+		axWindowsMediaPlayer1.settings.setMode("loop", varfMode: true);
+	}
+
+	private void Sendbtn_Click(object sender, EventArgs e)
+	{
+		Utils utils = new Utils();
+		if (utils.sendftpfile(thefile))
+		{
+			string usrnm = ConfigurationManager.AppSettings["UserName"].ToString();
+			string line1 = "M=" + usrnm + " chose to send.";
+			string line2 = "U=FTP" + Path.GetFileName(thefile);
+			utils.sendcmd(senderstr, utils.Ecrypt(line1) + "|||" + utils.Ecrypt(line2), all: false);
+		}
+		Close();
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SendOrDelete));
+		this.axWindowsMediaPlayer1 = new AxWMPLib.AxWindowsMediaPlayer();
+		this.Sendbtn = new System.Windows.Forms.Button();
+		this.Deletebtn = new System.Windows.Forms.Button();
+		((System.ComponentModel.ISupportInitialize)this.axWindowsMediaPlayer1).BeginInit();
+		base.SuspendLayout();
+		this.axWindowsMediaPlayer1.Dock = System.Windows.Forms.DockStyle.Top;
+		this.axWindowsMediaPlayer1.Enabled = true;
+		this.axWindowsMediaPlayer1.Location = new System.Drawing.Point(0, 0);
+		this.axWindowsMediaPlayer1.Name = "axWindowsMediaPlayer1";
+		this.axWindowsMediaPlayer1.OcxState = (System.Windows.Forms.AxHost.State)resources.GetObject("axWindowsMediaPlayer1.OcxState");
+		this.axWindowsMediaPlayer1.Size = new System.Drawing.Size(800, 450);
+		this.axWindowsMediaPlayer1.TabIndex = 1;
+		this.Sendbtn.Location = new System.Drawing.Point(279, 468);
+		this.Sendbtn.Name = "Sendbtn";
+		this.Sendbtn.Size = new System.Drawing.Size(75, 23);
+		this.Sendbtn.TabIndex = 2;
+		this.Sendbtn.Text = "Send";
+		this.Sendbtn.UseVisualStyleBackColor = true;
+		this.Sendbtn.Click += new System.EventHandler(Sendbtn_Click);
+		this.Deletebtn.Location = new System.Drawing.Point(384, 468);
+		this.Deletebtn.Name = "Deletebtn";
+		this.Deletebtn.Size = new System.Drawing.Size(75, 23);
+		this.Deletebtn.TabIndex = 3;
+		this.Deletebtn.Text = "Delete";
+		this.Deletebtn.UseVisualStyleBackColor = true;
+		this.Deletebtn.Click += new System.EventHandler(Deletebtn_Click);
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 503);
+		base.ControlBox = false;
+		base.Controls.Add(this.Deletebtn);
+		base.Controls.Add(this.Sendbtn);
+		base.Controls.Add(this.axWindowsMediaPlayer1);
+		base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+		base.Name = "SendOrDelete";
+		base.ShowIcon = false;
+		base.ShowInTaskbar = false;
+		this.Text = "SendOrDelete";
+		base.TopMost = true;
+		base.Load += new System.EventHandler(SendOrDelete_Load);
+		((System.ComponentModel.ISupportInitialize)this.axWindowsMediaPlayer1).EndInit();
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/SendOrDelete.resx b/ControlApp/SendOrDelete.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/SendOrDelete.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/Subliminal.cs b/ControlApp/Subliminal.cs
new file mode 100644
index 0000000..4fdaf65
--- /dev/null
+++ b/ControlApp/Subliminal.cs
@@ -0,0 +1,123 @@
+using System;
+using System.ComponentModel;
+using System.Configuration;
+using System.Drawing;
+using System.Runtime.InteropServices;
+using System.Windows.Forms;
+using AxWMPLib;
+
+namespace ControlApp;
+
+public class Subliminal : Form
+{
+	private Timer tmr;
+
+	private const int GWL_STYLE = -20;
+
+	private const uint WS_POPUP = 2147483648u;
+
+	private const uint WS_CHILD = 536870912u;
+
+	private IContainer components;
+
+	private AxWindowsMediaPlayer axWindowsMediaPlayer1;
+
+	private Label label1;
+
+	[DllImport("user32.dll", SetLastError = true)]
+	private static extern uint GetWindowLong(nint hWnd, int nIndex);
+
+	[DllImport("user32.dll")]
+	private static extern int SetWindowLong(nint hWnd, int nIndex, uint dwNewLong);
+
+	public Subliminal(string what, bool message)
+	{
+		InitializeComponent();
+		base.StartPosition = FormStartPosition.CenterScreen;
+		Screen[] my = Screen.AllScreens;
+		base.Size = my[0].Bounds.Size;
+		base.FormBorderStyle = FormBorderStyle.None;
+		base.TopMost = true;
+		base.Visible = true;
+		uint initialStyle = GetWindowLong(base.Handle, -20);
+		SetWindowLong(base.Handle, -20, initialStyle | 0x80000 | 0x20);
+		tmr = new Timer();
+		tmr.Tick += delegate
+		{
+			Close();
+		};
+		Random rand = new Random();
+		if (ConfigurationManager.AppSettings["PopSet"] != null && "Long" == ConfigurationManager.AppSettings["PopSet"].ToString())
+		{
+			int mins = rand.Next(11);
+			tmr.Interval = (int)TimeSpan.FromMinutes(mins).TotalMilliseconds;
+		}
+		else
+		{
+			int mins2 = rand.Next(55) + 5;
+			tmr.Interval = (int)TimeSpan.FromSeconds(mins2).TotalMilliseconds;
+		}
+		tmr.Start();
+		if (message)
+		{
+			label1.Text = what;
+			axWindowsMediaPlayer1.Visible = false;
+			return;
+		}
+		label1.Visible = false;
+		axWindowsMediaPlayer1.URL = what;
+		axWindowsMediaPlayer1.Ctlenabled = false;
+		axWindowsMediaPlayer1.uiMode = "None";
+		axWindowsMediaPlayer1.settings.autoStart = true;
+		axWindowsMediaPlayer1.settings.setMode("loop", varfMode: true);
+	}
+
+	private void Subliminal_Load(object sender, EventArgs e)
+	{
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.label1 = new System.Windows.Forms.Label();
+		System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PopUp));
+		this.axWindowsMediaPlayer1 = new AxWMPLib.AxWindowsMediaPlayer();
+		((System.ComponentModel.ISupportInitialize)this.axWindowsMediaPlayer1).BeginInit();
+		base.SuspendLayout();
+		this.axWindowsMediaPlayer1.Dock = System.Windows.Forms.DockStyle.Fill;
+		this.axWindowsMediaPlayer1.Enabled = true;
+		this.axWindowsMediaPlayer1.Location = new System.Drawing.Point(0, 0);
+		this.axWindowsMediaPlayer1.Name = "axWindowsMediaPlayer1";
+		this.axWindowsMediaPlayer1.OcxState = (System.Windows.Forms.AxHost.State)resources.GetObject("axWindowsMediaPlayer1.OcxState");
+		this.axWindowsMediaPlayer1.Size = new System.Drawing.Size(800, 450);
+		this.axWindowsMediaPlayer1.TabIndex = 0;
+		this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
+		this.label1.Font = new System.Drawing.Font("Showcard Gothic", 50f);
+		this.label1.Location = new System.Drawing.Point(0, 0);
+		this.label1.Name = "label1";
+		this.label1.Size = new System.Drawing.Size(800, 450);
+		this.label1.TabIndex = 0;
+		this.label1.Text = "label1";
+		this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 450);
+		base.Controls.Add(this.label1);
+		base.Controls.Add(this.axWindowsMediaPlayer1);
+		base.Name = "Subliminal";
+		base.ShowIcon = false;
+		base.ShowInTaskbar = false;
+		base.Opacity = 0.05;
+		this.Text = "Subliminal";
+		base.Load += new System.EventHandler(Subliminal_Load);
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/Subliminal.resx b/ControlApp/Subliminal.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/Subliminal.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/Utils.cs b/ControlApp/Utils.cs
new file mode 100644
index 0000000..9b1d524
--- /dev/null
+++ b/ControlApp/Utils.cs
@@ -0,0 +1,949 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Media;
+using System.Net;
+using System.Net.Http;
+using System.Runtime.InteropServices;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Emgu.CV;
+using HtmlAgilityPack;
+using Microsoft.Win32;
+
+namespace ControlApp;
+
+internal class Utils
+{
+	private const int SPI_SETDESKWALLPAPER = 20;
+
+	private const int SPIF_UPDATEINIFILE = 1;
+
+	private const int SPIF_SENDWININICHANGE = 2;
+
+	private string[] bannedlist = new string[6] { "booru.allthefallen.moe", "mega.nz", "thecontrolapp.co.uk/Pages/ControlPC", "paradroid-gamma.vercel", "imagekit.io/tools/asset-public-link", "paradroid-gamma.web.app" };
+
+	private string[] bannedref = new string[2] { "money", "pay" };
+
+	public string[] blist = new string[1] { "" };
+
+	public void writetolog(string shortvr, string longvr)
+	{
+		if (ConfigurationManager.AppSettings["Logging"] == "On")
+		{
+			if (ConfigurationManager.AppSettings["Logging"] == "On")
+			{
+				File.AppendAllText("log.txt", shortvr);
+			}
+			else
+			{
+				File.AppendAllText("log.txt", longvr);
+			}
+		}
+	}
+
+	public string[] GetLatestItem()
+	{
+		try
+		{
+			string[] ret = new string[2] { "", "" };
+			string user = ConfigurationManager.AppSettings["UserName"].ToString();
+			string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+			string vrs = "012";
+			string result = getcmd(user, pwd, vrs, "Content");
+			ret = seperate_string(result);
+			string[] runcode = ret[1].Split("|||");
+			try
+			{
+				run_process(runcode, ret[0]);
+			}
+			catch (Exception ex)
+			{
+				writetolog("Error running process \n\r", ex.Message);
+			}
+			return ret;
+		}
+		catch
+		{
+			return new string[1] { "" };
+		}
+	}
+
+	public string[] GetRelations()
+	{
+		_ = new string[2] { "", "" };
+		string user = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		string result = getcmd(user, pwd, vrs, "Relations");
+		return seperate_string(result);
+	}
+
+	public void AcceptInvite(string dom)
+	{
+		string user = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		getcmd(user, pwd, vrs, "Accept" + dom);
+	}
+
+	public void ThumbsUp(string dom)
+	{
+		string user = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		getcmd(user, pwd, vrs, "Thumbs" + dom);
+	}
+
+	public void RejectInvite(string dom)
+	{
+		string user = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		getcmd(user, pwd, vrs, "Reject" + dom);
+	}
+
+	public string[] GetInvites()
+	{
+		string[] ret = new string[2] { "", "" };
+		string user = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		string vrs = "012";
+		string result = getcmd(user, pwd, vrs, "Invite");
+		int start = result.IndexOf("\"result\">");
+		if (start > 0)
+		{
+			int end = result.IndexOf("</span>", start);
+			if (end - (start + 9) >= 0)
+			{
+				string fullres = result.Substring(start + 9, end - (start + 9));
+				if (fullres.Length > 3)
+				{
+					ret = seperate_string(fullres);
+				}
+			}
+		}
+		return ret;
+	}
+
+	public string[] seperate_string(string seperate)
+	{
+		if (seperate != "")
+		{
+			string[] strings = new string[1] { "" };
+			if (seperate[0] == '[' && seperate[seperate.Length - 1] == ']')
+			{
+				strings = seperate.Split("],[");
+				if (strings.Length > 1)
+				{
+					int count = 0;
+					string[] array = strings;
+					foreach (string s in array)
+					{
+						if (count == 0)
+						{
+							strings[count] = s.Substring(1, s.Length - 1);
+						}
+						else if (count == strings.Length - 1)
+						{
+							strings[count] = s.Substring(0, s.Length - 1);
+						}
+						count++;
+					}
+				}
+				else
+				{
+					strings = new string[1] { seperate.Substring(1, seperate.Length - 2) };
+				}
+				return strings;
+			}
+			return strings;
+		}
+		return new string[1] { "" };
+	}
+
+	public string getcmd(string UserNm, string Pwd, string version, string what)
+	{
+		ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
+		string downloadString = "";
+		try
+		{
+			using ComForm wf = new ComForm("https://www.thecontrolapp.co.uk/AppCommand.aspx?UserNm=" + UserNm + "&Pwd=" + Ecrypt(Pwd) + "&vrs=" + version + "&cmd=" + what, "Normal");
+			wf.ShowDialog();
+			downloadString = wf.ReturnedData[0];
+		}
+		catch (Exception ex)
+		{
+			writetolog("Error getting command", ex.Message.ToString());
+		}
+		return downloadString;
+	}
+
+	public bool sendftpfile(string FileName)
+	{
+		bool ret = true;
+		try
+		{
+			new CustomMessage("Sending file to server", "", 4, tts: false).Show();
+			string justfilename = Path.GetFileName(FileName);
+			string ftpUsername = "acc929431981";
+			string ftpPassword = "6scM67YJ+Ezzz0RKCeIxbT9TAfSbRE++1T";
+			FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://home240474283.1and1-data.host/" + justfilename);
+			request.Method = "STOR";
+			request.Credentials = new NetworkCredential(ftpUsername, Decrypt(ftpPassword));
+			byte[] fileContents;
+			using (StreamReader sourceStream = new StreamReader(FileName))
+			{
+				fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
+			}
+			request.ContentLength = fileContents.Length;
+			using Stream requestStream = request.GetRequestStream();
+			requestStream.Write(fileContents, 0, fileContents.Length);
+		}
+		catch (Exception ex)
+		{
+			ret = false;
+			new CustomMessage("Sending file to server failed", "", 4, tts: false).ShowDialog();
+			writetolog("Error sending ftp process \n\r", ex.Message);
+		}
+		return ret;
+	}
+
+	public void deleteoutstanding(string UserNm, string Pwd, string version)
+	{
+		try
+		{
+			string user = ConfigurationManager.AppSettings["UserName"].ToString();
+			string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+			string vrs = "012";
+			getcmd(user, pwd, vrs, "Delete");
+		}
+		catch
+		{
+		}
+	}
+
+	public string[] getoutstanding(string UserNm, string Pwd, string version)
+	{
+		string[] returned = new string[3] { "", "", "" };
+		ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
+		string downloadString = "";
+		try
+		{
+			using HttpClient client = new HttpClient();
+			string geturl = "https://www.thecontrolapp.co.uk/GetCount.aspx?UserNm=" + UserNm + "&Pwd=" + Ecrypt(Pwd) + "&vrs=" + version;
+			downloadString = client.GetStringAsync(geturl).Result;
+			HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument();
+			htmlDocument.LoadHtml(downloadString);
+			HtmlNode labelNode = htmlDocument.GetElementbyId("result");
+			if (labelNode != null)
+			{
+				returned[0] = labelNode.InnerText;
+			}
+			labelNode = htmlDocument.GetElementbyId("next");
+			if (labelNode != null)
+			{
+				returned[1] = labelNode.InnerText;
+			}
+			labelNode = htmlDocument.GetElementbyId("vari");
+			if (labelNode != null)
+			{
+				returned[2] = labelNode.InnerText;
+			}
+		}
+		catch (Exception ex)
+		{
+			writetolog("Error getting outstanding \n\r", ex.Message);
+		}
+		return returned;
+	}
+
+	public void sendcmd(string UserNm, string comm, bool all)
+	{
+		string user = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = ConfigurationManager.AppSettings["Password"].ToString();
+		if (user == null || pwd == null)
+		{
+			user = "";
+			pwd = "";
+		}
+		int allint = 0;
+		if (all)
+		{
+			allint = 1;
+		}
+		using sendcmd sendc = new sendcmd("https://www.thecontrolapp.co.uk/AppSendContent.aspx?UserNm=" + UserNm + "&comm=" + comm.Replace("G0", "PPP") + "&all=" + allint + "&fromuser=" + user + "&frompword=" + Ecrypt(pwd).Replace("G0", "PPP"));
+		sendc.ShowDialog();
+	}
+
+	public void SendBlockReport(string senderid, string command, string report)
+	{
+		string user = ConfigurationManager.AppSettings["UserName"].ToString();
+		string pwd = Ecrypt(ConfigurationManager.AppSettings["Password"].ToString());
+		string what = "https://www.thecontrolapp.co.uk/BlockReport.aspx?usernm=" + user + "&pwd=" + pwd + "&vrs=012&sender=" + senderid + "&report=" + report + "&content=" + command;
+		Process.Start(new ProcessStartInfo
+		{
+			FileName = what,
+			UseShellExecute = true
+		});
+	}
+
+	public string Ecrypt(string Line)
+	{
+		string ToReturn = "";
+		try
+		{
+			string publickey = "santhosh";
+			string secretkey = "engineer";
+			byte[] secretkeyByte = Encoding.UTF8.GetBytes(secretkey);
+			byte[] publickeybyte = Encoding.UTF8.GetBytes(publickey);
+			byte[] inputbyteArray = Encoding.UTF8.GetBytes(Line);
+			using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
+			{
+				MemoryStream memoryStream = new MemoryStream();
+				CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateEncryptor(publickeybyte, secretkeyByte), CryptoStreamMode.Write);
+				cryptoStream.Write(inputbyteArray, 0, inputbyteArray.Length);
+				cryptoStream.FlushFinalBlock();
+				ToReturn = Convert.ToBase64String(memoryStream.ToArray());
+			}
+			ToReturn = ToReturn.Replace("\\", "xxx");
+			ToReturn = ToReturn.Replace("&", "yyy");
+			ToReturn = ToReturn.Replace("/", "zzz");
+			ToReturn = ToReturn.Replace("]", "aaa");
+		}
+		catch (Exception ex)
+		{
+			writetolog("Error enrypt " + Line + "\n\r", ex.Message);
+		}
+		return ToReturn;
+	}
+
+	public string Decrypt(string Line)
+	{
+		string ToReturn = "";
+		try
+		{
+			Line = Line.Replace("xxx", "\\");
+			Line = Line.Replace("yyy", "&");
+			Line = Line.Replace("zzz", "/");
+			Line = Line.Replace("aaa", "]");
+			string publickey = "santhosh";
+			string privatekey = "engineer";
+			byte[] privatekeyByte = Encoding.UTF8.GetBytes(privatekey);
+			byte[] publickeybyte = Encoding.UTF8.GetBytes(publickey);
+			MemoryStream ms = null;
+			byte[] inputbyteArray = new byte[Line.Replace(" ", "+").Length];
+			inputbyteArray = Convert.FromBase64String(Line.Replace(" ", "+"));
+			using DESCryptoServiceProvider des = new DESCryptoServiceProvider();
+			ms = new MemoryStream();
+			CryptoStream cryptoStream = new CryptoStream(ms, des.CreateDecryptor(publickeybyte, privatekeyByte), CryptoStreamMode.Write);
+			cryptoStream.Write(inputbyteArray, 0, inputbyteArray.Length);
+			cryptoStream.FlushFinalBlock();
+			ToReturn = Encoding.UTF8.GetString(ms.ToArray());
+		}
+		catch (Exception ex)
+		{
+			writetolog("Decrypt error for : " + Line + "\n\r", ex.Message);
+		}
+		return ToReturn;
+	}
+
+	public string Get_File(string url)
+	{
+		string filename = "";
+		url.Substring(0, url.LastIndexOf('/'));
+		Uri trueuri = new Uri(url);
+		filename = url.Substring(url.LastIndexOf("/") + 1, url.Length - url.LastIndexOf("/") - 1);
+		filename = ConfigurationManager.AppSettings["LocalDrive"] + filename;
+		filename.Replace(".webp", "");
+		try
+		{
+			using CustomMessage cm = new CustomMessage("Downloading Image please wait", "", 0, tts: false);
+			cm.Show();
+			using HttpClient client = new HttpClient();
+			using Task<Stream> s = client.GetStreamAsync(trueuri);
+			s.Wait();
+			using (FileStream fs = new FileStream(filename, FileMode.Create))
+			{
+				s.Result.CopyTo(fs);
+			}
+			s.Dispose();
+		}
+		catch (Exception ex)
+		{
+			filename = "FAILED";
+			writetolog("Error getting file for : " + url + "\n\r", ex.Message);
+		}
+		return filename;
+	}
+
+	[DllImport("user32.dll", CharSet = CharSet.Auto)]
+	private static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
+
+	public void Change_Wallpaper(string filename)
+	{
+		string style = ConfigurationManager.AppSettings["PaperStyle"];
+		RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", writable: true);
+		if (key != null)
+		{
+			if (style == "Stretch")
+			{
+				key.SetValue("WallpaperStyle", 2.ToString());
+				key.SetValue("TileWallpaper", 0.ToString());
+			}
+			if (style == "Fit")
+			{
+				key.SetValue("WallpaperStyle", 1.ToString());
+				key.SetValue("TileWallpaper", 0.ToString());
+			}
+			SystemParametersInfo(20, 0, filename, 3);
+		}
+	}
+
+	public string[] remove_notneeded(string[] lines)
+	{
+		List<string> ret = new List<string>();
+		foreach (string line in lines)
+		{
+			if (line == "")
+			{
+				break;
+			}
+			string decrip = Decrypt(line);
+			string which = decrip.Substring(0, 2);
+			string what = decrip.Substring(2, decrip.Length - 2).Trim();
+			if (which == "D=" && (ConfigurationManager.AppSettings["Downloads"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Downloads"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "P=" && (ConfigurationManager.AppSettings["Wallpapers"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Wallpapers"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "R=" && (ConfigurationManager.AppSettings["Runables"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Runables"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "W=" && (ConfigurationManager.AppSettings["OpenWeb"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["OpenWeb"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if ((which == "U=" || (which == "O=" && what.IndexOf("static") > 0)) && (ConfigurationManager.AppSettings["PopUps"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["PopUps"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "O=" && what.IndexOf("static") == -1 && (ConfigurationManager.AppSettings["PopUps"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["PopUps"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "M=" && (ConfigurationManager.AppSettings["Messages"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Messages"].ToString())))
+			{
+				bool found = false;
+				string[] array = bannedref;
+				foreach (string bref in array)
+				{
+					if (what.Contains(bref))
+					{
+						found = true;
+					}
+				}
+				if (!found)
+				{
+					ret.Add(line);
+				}
+			}
+			if (which == "S=" && (ConfigurationManager.AppSettings["Subliminals"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Subliminals"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "V=" && (ConfigurationManager.AppSettings["Subliminals"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Subliminals"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "A=" && (ConfigurationManager.AppSettings["Audios"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Audios"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "F=" && (ConfigurationManager.AppSettings["Writeformes"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Writeformes"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "1=" && (ConfigurationManager.AppSettings["ScreenShots"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["ScreenShots"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "2=" && (ConfigurationManager.AppSettings["Watch4me"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Watch4me"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "3=" && (ConfigurationManager.AppSettings["twitter"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["twitter"].ToString())))
+			{
+				bool found2 = false;
+				string[] array = bannedref;
+				foreach (string bref2 in array)
+				{
+					if (what.Contains(bref2))
+					{
+						found2 = true;
+					}
+				}
+				array = blist;
+				foreach (string bref3 in array)
+				{
+					if (what.Contains(bref3))
+					{
+						found2 = true;
+					}
+				}
+				if (!found2)
+				{
+					ret.Add(line);
+				}
+			}
+			if (which == "4=" && (ConfigurationManager.AppSettings["SendDelete"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["SendDelete"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "5=" && (ConfigurationManager.AppSettings["TTS"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["TTS"].ToString())))
+			{
+				bool found3 = false;
+				string[] array = bannedref;
+				foreach (string bref4 in array)
+				{
+					if (what.Contains(bref4))
+					{
+						found3 = true;
+					}
+				}
+				array = blist;
+				foreach (string bref5 in array)
+				{
+					if (what.Contains(bref5))
+					{
+						found3 = true;
+					}
+				}
+				if (!found3)
+				{
+					ret.Add(line);
+				}
+			}
+			if (which == "6=" && (ConfigurationManager.AppSettings["Webcam"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["Webcam"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "7=" && (ConfigurationManager.AppSettings["DisM"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["DisM"].ToString())))
+			{
+				ret.Add(line);
+			}
+			if (which == "8=" && (ConfigurationManager.AppSettings["DisM"] == null || !Convert.ToBoolean(ConfigurationManager.AppSettings["DisM"].ToString())))
+			{
+				ret.Add(line);
+			}
+		}
+		return ret.ToArray();
+	}
+
+	public void run_process(string[] lines, string from)
+	{
+		lines = remove_notneeded(lines);
+		if (lines.Length != 0)
+		{
+			SystemSounds.Beep.Play();
+		}
+		string[] array = lines;
+		foreach (string line in array)
+		{
+			if (line == "")
+			{
+				break;
+			}
+			string decrip = Decrypt(line);
+			writetolog(line + "\n", line + "\n");
+			if (decrip.Length <= 2)
+			{
+				continue;
+			}
+			try
+			{
+				string which = decrip.Substring(0, 2);
+				string what = decrip.Substring(2, decrip.Length - 2).Trim();
+				bool inbanned = false;
+				string[] array2 = bannedlist;
+				foreach (string banned in array2)
+				{
+					if (what.Contains(banned))
+					{
+						inbanned = true;
+					}
+				}
+				if (inbanned)
+				{
+					new CustomMessage("Message contains potential bad stuff closing", "", 4, tts: false).ShowDialog();
+					break;
+				}
+				if (what.Substring(0, 3) == "FTP")
+				{
+					what = (what = "https://www.thecontrolapp.co.uk/storage/" + what.Substring(3, what.Length - 3));
+				}
+				string type = "";
+				try
+				{
+					type = Path.GetExtension(what);
+				}
+				catch
+				{
+				}
+				bool isfile = false;
+				if (type != "")
+				{
+					isfile = true;
+				}
+				switch (which)
+				{
+				case "D=":
+				{
+					string thefile2 = "";
+					if (!isfile)
+					{
+						Process.Start(new ProcessStartInfo
+						{
+							FileName = what,
+							UseShellExecute = true
+						});
+					}
+					else
+					{
+						thefile2 = Get_File(what);
+					}
+					if (thefile2 != "FAILED")
+					{
+						new CustomMessage("File downloaded! Find it here : " + thefile2, "", 4, tts: false).ShowDialog();
+					}
+					goto end_IL_0064;
+				}
+				case "P=":
+				{
+					if (!isfile)
+					{
+						Process.Start(new ProcessStartInfo
+						{
+							FileName = what,
+							UseShellExecute = true
+						});
+						continue;
+					}
+					string thefile3 = "";
+					thefile3 = Get_File(what);
+					if (thefile3 != "FAILED")
+					{
+						Change_Wallpaper(thefile3);
+					}
+					goto end_IL_0064;
+				}
+				case "R=":
+				{
+					if (!isfile)
+					{
+						continue;
+					}
+					string thefile4 = "";
+					thefile4 = Get_File(what);
+					if (thefile4 != "FAILED")
+					{
+						if (ConfigurationManager.AppSettings["AutoRun"] == "True")
+						{
+							Process.Start(thefile4);
+						}
+						else
+						{
+							new CustomMessage("Exe downloaded! Find it here : " + thefile4, "", 4, tts: false).ShowDialog();
+						}
+					}
+					goto end_IL_0064;
+				}
+				case "W=":
+					Process.Start(new ProcessStartInfo
+					{
+						FileName = what,
+						UseShellExecute = true
+					});
+					goto end_IL_0064;
+				case "O=":
+					if (what.IndexOf("static") <= 0)
+					{
+						break;
+					}
+					goto case "U=";
+				case "U=":
+				{
+					if (!isfile)
+					{
+						Process.Start(new ProcessStartInfo
+						{
+							FileName = what,
+							UseShellExecute = true
+						});
+						continue;
+					}
+					string thefile = "";
+					thefile = Get_File(what);
+					if (!(thefile != "FAILED"))
+					{
+						continue;
+					}
+					string popstyle = "Serial";
+					if (ConfigurationManager.AppSettings["PopStyle"] != null)
+					{
+						popstyle = ConfigurationManager.AppSettings["PopStyle"].ToString();
+					}
+					if (popstyle == "Serial")
+					{
+						bool done = false;
+						foreach (Form fm in Application.OpenForms)
+						{
+							if (fm.GetType() == typeof(PopUp))
+							{
+								((PopUp)fm).add_url(thefile);
+								done = true;
+							}
+						}
+						if (!done)
+						{
+							new PopUp(thefile).Show();
+						}
+					}
+					else
+					{
+						new PopUp(thefile).Show();
+					}
+					goto end_IL_0064;
+				}
+				}
+				if (which == "O=" && what.IndexOf("static") == -1)
+				{
+					if (!isfile)
+					{
+						Process.Start(new ProcessStartInfo
+						{
+							FileName = what,
+							UseShellExecute = true
+						});
+						continue;
+					}
+					string popstyle2 = "Serial";
+					if (ConfigurationManager.AppSettings["PopStyle"] != null)
+					{
+						popstyle2 = ConfigurationManager.AppSettings["PopStyle"].ToString();
+					}
+					if (popstyle2 == "Serial")
+					{
+						bool done2 = false;
+						foreach (Form fm2 in Application.OpenForms)
+						{
+							if (fm2.GetType() == typeof(PopUp))
+							{
+								((PopUp)fm2).add_url(what);
+								done2 = true;
+							}
+						}
+						if (!done2)
+						{
+							new PopUp(what).Show();
+						}
+					}
+					else
+					{
+						new PopUp(what).Show();
+					}
+					continue;
+				}
+				switch (which)
+				{
+				case "M=":
+				{
+					string[] split = what.Split("&&&");
+					CustomMessage cm = ((split.Length <= 1) ? new CustomMessage(split[0], "", 0, tts: false) : new CustomMessage(split[0], split[1], 0, tts: false));
+					cm.ShowDialog();
+					goto end_IL_0064;
+				}
+				case "S=":
+				{
+					if (!isfile)
+					{
+						Process.Start(new ProcessStartInfo
+						{
+							FileName = what,
+							UseShellExecute = true
+						});
+						continue;
+					}
+					string thefile5 = "";
+					thefile5 = Get_File(what);
+					if (thefile5 != "FAILED")
+					{
+						new Subliminal(thefile5, message: false);
+					}
+					goto end_IL_0064;
+				}
+				case "V=":
+					new Subliminal(what, message: true);
+					goto end_IL_0064;
+				case "A=":
+				{
+					if (!isfile)
+					{
+						Process.Start(new ProcessStartInfo
+						{
+							FileName = what,
+							UseShellExecute = true
+						});
+						continue;
+					}
+					string thefile6 = "";
+					thefile6 = Get_File(what);
+					if (thefile6 != "FAILED")
+					{
+						new Audiopop(thefile6).ShowDialog();
+					}
+					goto end_IL_0064;
+				}
+				case "F=":
+				{
+					bool found = false;
+					array2 = bannedref;
+					foreach (string bref in array2)
+					{
+						if (what.Contains(bref))
+						{
+							found = true;
+						}
+					}
+					if (!found)
+					{
+						string[] split2 = what.Split("&&&");
+						new WriteForMe(split2[0], split2[1], from).ShowDialog();
+					}
+					goto end_IL_0064;
+				}
+				case "1=":
+				{
+					if (!(what == "Yes"))
+					{
+						break;
+					}
+					string filename = "scr" + ConfigurationManager.AppSettings["UserName"].ToString() + from + DateTime.Now.Date.ToString().Replace("/", "").Replace(" ", "")
+						.Replace(":", "") + ".jpg";
+					string filePath = ConfigurationManager.AppSettings["LocalDrive"] + filename;
+					using (Bitmap bmpScreenCapture = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height))
+					{
+						using (Graphics g = Graphics.FromImage(bmpScreenCapture))
+						{
+							g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, bmpScreenCapture.Size, CopyPixelOperation.SourceCopy);
+						}
+						new Bitmap(bmpScreenCapture, new Size(bmpScreenCapture.Width / 2, bmpScreenCapture.Height / 2)).Save(filePath, ImageFormat.Jpeg);
+					}
+					if (sendftpfile(filePath))
+					{
+						sendcmd(from, Ecrypt("U=FTP" + filename) + "|||", all: false);
+						MessageBox.Show("Screen shot taken :D");
+					}
+					goto end_IL_0064;
+				}
+				}
+				switch (which)
+				{
+				case "2=":
+					new WatchForMe(what, from).Show();
+					goto end_IL_0064;
+				case "3=":
+					what = what.Replace(" ", "%20");
+					Process.Start(new ProcessStartInfo
+					{
+						FileName = "https://twitter.com/intent/tweet?text=" + what + " [Posted by :]&url=www.thecontrolapp.co.uk",
+						UseShellExecute = true
+					});
+					goto end_IL_0064;
+				case "4=":
+					if (!(what == "Yes"))
+					{
+						break;
+					}
+					new SendOrDelete(from).Show();
+					goto end_IL_0064;
+				}
+				switch (which)
+				{
+				case "5=":
+					new CustomMessage(what, "", 4, tts: true).ShowDialog();
+					break;
+				case "6=":
+					try
+					{
+						Bitmap image = new VideoCapture(0, VideoCapture.API.Any).QueryFrame().ToBitmap();
+						string filename2 = "web" + ConfigurationManager.AppSettings["UserName"].ToString() + from + DateTime.Now.Date.ToString().Replace("/", "").Replace(" ", "")
+							.Replace(":", "") + ".jpg";
+						string filePath2 = ConfigurationManager.AppSettings["LocalDrive"] + filename2;
+						new Bitmap(image, new Size(image.Width / 2, image.Height / 2)).Save(filePath2);
+						if (sendftpfile(filePath2))
+						{
+							sendcmd(from, Ecrypt("U=FTP" + filename2) + "|||", all: false);
+						}
+					}
+					catch (Exception ex)
+					{
+						writetolog("Error getting webcam \n\r", ex.Message);
+					}
+					break;
+				case "7=":
+				{
+					bool found3 = false;
+					foreach (Form fm4 in Application.OpenForms)
+					{
+						if (fm4.GetType() == typeof(Blank))
+						{
+							((Blank)fm4).add_time(1);
+							found3 = true;
+						}
+					}
+					if (!found3)
+					{
+						new Blank(1).Show();
+						Cursor.Show();
+					}
+					break;
+				}
+				case "8=":
+				{
+					bool found2 = false;
+					foreach (Form fm3 in Application.OpenForms)
+					{
+						if (fm3.GetType() == typeof(Blank))
+						{
+							((Blank)fm3).add_time(1);
+							found2 = true;
+						}
+					}
+					if (!found2)
+					{
+						new Blank(2).Show();
+						Cursor.Show();
+					}
+					break;
+				}
+				}
+				end_IL_0064:;
+			}
+			catch (Exception ex2)
+			{
+				writetolog("Error proccessing for : " + line + "\n\r", ex2.Message);
+			}
+		}
+	}
+}
diff --git a/ControlApp/WatchForMe.cs b/ControlApp/WatchForMe.cs
new file mode 100644
index 0000000..827171e
--- /dev/null
+++ b/ControlApp/WatchForMe.cs
@@ -0,0 +1,256 @@
+using System;
+using System.ComponentModel;
+using System.Configuration;
+using System.Drawing;
+using System.IO;
+using System.Windows.Forms;
+using Vlc.DotNet.Core;
+using Vlc.DotNet.Forms;
+
+namespace ControlApp;
+
+public class WatchForMe : Form
+{
+	private string senderstr;
+
+	private string pub_Url;
+
+	private Utils u;
+
+	private int timewatched;
+
+	private int timecensored;
+
+	private bool isdeactive;
+
+	private int losefocus;
+
+	private bool censored;
+
+	private IContainer components;
+
+	private Timer WatchTime;
+
+	private Timer CensorTime;
+
+	private VlcControl vlcControl1;
+
+	private static bool IsWebPage(string input)
+	{
+		if (Uri.TryCreate(input, UriKind.Absolute, out Uri uriResult))
+		{
+			if (!(uriResult.Scheme == Uri.UriSchemeHttp))
+			{
+				return uriResult.Scheme == Uri.UriSchemeHttps;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public WatchForMe(string Url, string senderid)
+	{
+		u = new Utils();
+		senderstr = senderid;
+		InitializeComponent();
+		switch (Path.GetExtension(Url))
+		{
+		case ".mp4":
+		case ".webm":
+		case ".webp":
+		case ".gif":
+		{
+			pub_Url = Url;
+			string[] mediaOptions = new string[1] { "input-repeat=50" };
+			if (IsWebPage(Url))
+			{
+				if (u.Get_File(Url) != "FAILED")
+				{
+					FileInfo fileInfo = new FileInfo(Url);
+					vlcControl1.SetMedia(fileInfo, mediaOptions);
+				}
+				else
+				{
+					vlcControl1.SetMedia(new Uri(Url), mediaOptions);
+				}
+			}
+			else
+			{
+				FileInfo fileInfo2 = new FileInfo(Url);
+				vlcControl1.SetMedia(fileInfo2, mediaOptions);
+			}
+			vlcControl1.Play();
+			break;
+		}
+		case ".png":
+		case ".jpg":
+		case ".jepg":
+		{
+			string file = "";
+			file = u.Get_File(Url);
+			if (file == "FAILED")
+			{
+				Close();
+				break;
+			}
+			Image i = Image.FromFile(file);
+			Screen my = Screen.AllScreens[0];
+			if (i.Width > my.Bounds.Width)
+			{
+				base.Width = my.Bounds.Width;
+			}
+			else
+			{
+				base.Width = i.Width;
+			}
+			if (i.Height > my.Bounds.Height)
+			{
+				base.Height = my.Bounds.Height;
+			}
+			else
+			{
+				base.Height = i.Height;
+			}
+			vlcControl1.Visible = false;
+			PictureBox pictureBox = new PictureBox
+			{
+				Dock = DockStyle.Fill,
+				Image = i
+			};
+			base.Controls.Add(pictureBox);
+			break;
+		}
+		default:
+		{
+			vlcControl1.Visible = false;
+			WebBrowser wb = new WebBrowser();
+			wb.Navigate(Url);
+			wb.Dock = DockStyle.Fill;
+			wb.ScriptErrorsSuppressed = true;
+			base.Controls.Add(wb);
+			break;
+		}
+		}
+		AutoSize = true;
+		timewatched = 0;
+		timecensored = 0;
+		losefocus = 0;
+		WatchTime.Interval = 1000;
+		WatchTime.Tick += Timer1_Tick;
+		WatchTime.Start();
+		CensorTime.Interval = 1000;
+		CensorTime.Tick += Censored_Tick;
+		isdeactive = false;
+		base.Deactivate += Form1_Deactivate;
+		base.Activated += Form1_Reactivate;
+		base.FormClosing += Form1_FormClosing;
+	}
+
+	private void WatchForMe_Load(object sender, EventArgs e)
+	{
+		censored = false;
+	}
+
+	private void Censored_Tick(object sender, EventArgs e)
+	{
+		timecensored++;
+	}
+
+	private void Timer1_Tick(object sender, EventArgs e)
+	{
+		if (!isdeactive)
+		{
+			timewatched++;
+			Text = "Watch for me Time=" + timewatched + ": Censored for=" + timecensored + ": Lost focus=" + losefocus;
+		}
+	}
+
+	private void Form1_Deactivate(object sender, EventArgs e)
+	{
+		losefocus++;
+		isdeactive = true;
+	}
+
+	private void Form1_Reactivate(object sender, EventArgs e)
+	{
+		if (isdeactive)
+		{
+			isdeactive = false;
+		}
+	}
+
+	private void Form1_FormClosing(object sender, FormClosingEventArgs e)
+	{
+		if (e.CloseReason == CloseReason.UserClosing)
+		{
+			string usrnm = ConfigurationManager.AppSettings["UserName"].ToString();
+			Utils utils = new Utils();
+			utils.sendcmd(senderstr, utils.Ecrypt("M=User : " + usrnm + " Watched for : " + timewatched + " seconds. Censored for : " + timecensored + ". Form lost focus :" + losefocus + " times"), all: false);
+		}
+	}
+
+	private void WFM_KeyDown(object sender, KeyEventArgs e)
+	{
+		if (e.KeyCode == Keys.Space)
+		{
+			if (censored)
+			{
+				base.Opacity = 1.0;
+				censored = false;
+				CensorTime.Stop();
+			}
+			else
+			{
+				base.Opacity = 0.0;
+				censored = true;
+				CensorTime.Start();
+			}
+		}
+	}
+
+	private void Replay(object sender, VlcMediaPlayerEndReachedEventArgs e)
+	{
+		vlcControl1.Position = 0f;
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.components = new System.ComponentModel.Container();
+		this.WatchTime = new System.Windows.Forms.Timer(this.components);
+		this.CensorTime = new System.Windows.Forms.Timer(this.components);
+		this.vlcControl1 = new Vlc.DotNet.Forms.VlcControl();
+		((System.ComponentModel.ISupportInitialize)this.vlcControl1).BeginInit();
+		base.SuspendLayout();
+		this.vlcControl1.BackColor = System.Drawing.Color.Black;
+		this.vlcControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+		this.vlcControl1.Location = new System.Drawing.Point(0, 0);
+		this.vlcControl1.Name = "vlcControl1";
+		this.vlcControl1.Size = new System.Drawing.Size(1044, 647);
+		this.vlcControl1.Spu = -1;
+		this.vlcControl1.TabIndex = 0;
+		this.vlcControl1.Visible = true;
+		this.vlcControl1.Text = "vlcControl1";
+		this.vlcControl1.VlcLibDirectory = new System.IO.DirectoryInfo("C:\\Program Files\\VideoLAN\\VLC");
+		this.vlcControl1.EndReached += new System.EventHandler<Vlc.DotNet.Core.VlcMediaPlayerEndReachedEventArgs>(Replay);
+		this.vlcControl1.KeyDown += new System.Windows.Forms.KeyEventHandler(WFM_KeyDown);
+		((System.ComponentModel.ISupportInitialize)this.vlcControl1).EndInit();
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(1044, 647);
+		base.Controls.Add(this.vlcControl1);
+		base.Name = "WatchForMe";
+		this.Text = "WatchForMe";
+		base.Load += new System.EventHandler(WatchForMe_Load);
+		base.KeyDown += new System.Windows.Forms.KeyEventHandler(WFM_KeyDown);
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/WatchForMe.resx b/ControlApp/WatchForMe.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/WatchForMe.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/Webform.cs b/ControlApp/Webform.cs
new file mode 100644
index 0000000..0c56557
--- /dev/null
+++ b/ControlApp/Webform.cs
@@ -0,0 +1,43 @@
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class Webform : Form
+{
+	private IContainer components;
+
+	public Webform(string Url)
+	{
+		WebBrowser wb = new WebBrowser();
+		wb.Navigate(Url);
+		wb.Dock = DockStyle.Fill;
+		base.Controls.Add(wb);
+		InitializeComponent();
+	}
+
+	protected override void OnFormClosing(FormClosingEventArgs e)
+	{
+		base.OnFormClosing(e);
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		base.SuspendLayout();
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 450);
+		base.Name = "Webform";
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/Webform.resx b/ControlApp/Webform.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/Webform.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/WriteForMe.cs b/ControlApp/WriteForMe.cs
new file mode 100644
index 0000000..f8de674
--- /dev/null
+++ b/ControlApp/WriteForMe.cs
@@ -0,0 +1,212 @@
+using System;
+using System.ComponentModel;
+using System.Configuration;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class WriteForMe : Form
+{
+	private int seconds;
+
+	private int mistakes;
+
+	private int count;
+
+	private string senderstr;
+
+	private IContainer components;
+
+	private Button button1;
+
+	private Label label1;
+
+	private Label writelbl;
+
+	private TextBox wfmtextb;
+
+	private Label timelbl;
+
+	private Label label3;
+
+	private Label label4;
+
+	private Label mistakelbl;
+
+	private Label label6;
+
+	private Label countlbl;
+
+	private Timer timer1;
+
+	public WriteForMe(string message, string times, string senderid)
+	{
+		InitializeComponent();
+		writelbl.Text = message;
+		count = Convert.ToInt16(times);
+		countlbl.Text = times;
+		senderstr = senderid;
+	}
+
+	private void WriteForMe_Load(object sender, EventArgs e)
+	{
+		seconds = 0;
+		mistakes = 0;
+		mistakelbl.Text = mistakes.ToString();
+		timelbl.Text = seconds.ToString();
+		timer1.Interval = 1000;
+		timer1.Tick += MyTimer_Tick;
+		timer1.Start();
+	}
+
+	private void MyTimer_Tick(object sender, EventArgs e)
+	{
+		seconds++;
+	}
+
+	private void input_KeyDown(object sender, KeyEventArgs e)
+	{
+		if (e.KeyData == Keys.Return)
+		{
+			if (wfmtextb.Text == writelbl.Text)
+			{
+				count--;
+				countlbl.Text = count.ToString();
+				timelbl.Text = seconds.ToString();
+			}
+			else
+			{
+				mistakes++;
+				mistakelbl.Text = mistakes.ToString();
+				timelbl.Text = seconds.ToString();
+			}
+			wfmtextb.Text = "";
+			if (count == 0)
+			{
+				Utils ut = new Utils();
+				string usrnm = ConfigurationManager.AppSettings["UserName"].ToString();
+				ut.sendcmd(senderstr, ut.Ecrypt("M=" + usrnm + " completed your command in " + timelbl.Text + " seconds with " + mistakelbl.Text + " mistakes.&&&Please Reward"), all: false);
+				Close();
+			}
+		}
+	}
+
+	private void button1_Click(object sender, EventArgs e)
+	{
+		Utils ut = new Utils();
+		string usrnm = ConfigurationManager.AppSettings["UserName"].ToString();
+		ut.sendcmd(senderstr, ut.Ecrypt("M=" + usrnm + " failed your command after " + timelbl.Text + " seconds with " + mistakelbl.Text + " mistakes.&&&Please Punish"), all: false);
+		Close();
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		this.components = new System.ComponentModel.Container();
+		this.button1 = new System.Windows.Forms.Button();
+		this.label1 = new System.Windows.Forms.Label();
+		this.writelbl = new System.Windows.Forms.Label();
+		this.wfmtextb = new System.Windows.Forms.TextBox();
+		this.timelbl = new System.Windows.Forms.Label();
+		this.label3 = new System.Windows.Forms.Label();
+		this.label4 = new System.Windows.Forms.Label();
+		this.mistakelbl = new System.Windows.Forms.Label();
+		this.label6 = new System.Windows.Forms.Label();
+		this.countlbl = new System.Windows.Forms.Label();
+		this.timer1 = new System.Windows.Forms.Timer(this.components);
+		base.SuspendLayout();
+		this.button1.Location = new System.Drawing.Point(398, 136);
+		this.button1.Name = "button1";
+		this.button1.Size = new System.Drawing.Size(75, 23);
+		this.button1.TabIndex = 0;
+		this.button1.Text = "Fail";
+		this.button1.UseVisualStyleBackColor = true;
+		this.button1.Click += new System.EventHandler(button1_Click);
+		this.label1.AutoSize = true;
+		this.label1.Font = new System.Drawing.Font("Segoe UI", 14f, System.Drawing.FontStyle.Bold);
+		this.label1.Location = new System.Drawing.Point(21, 19);
+		this.label1.Name = "label1";
+		this.label1.Size = new System.Drawing.Size(125, 25);
+		this.label1.TabIndex = 1;
+		this.label1.Text = "Write for me";
+		this.writelbl.AutoSize = true;
+		this.writelbl.Location = new System.Drawing.Point(21, 59);
+		this.writelbl.Name = "writelbl";
+		this.writelbl.Size = new System.Drawing.Size(38, 15);
+		this.writelbl.TabIndex = 2;
+		this.writelbl.Text = "label2";
+		this.wfmtextb.Location = new System.Drawing.Point(21, 95);
+		this.wfmtextb.Name = "wfmtextb";
+		this.wfmtextb.Size = new System.Drawing.Size(452, 23);
+		this.wfmtextb.TabIndex = 3;
+		this.wfmtextb.KeyDown += new System.Windows.Forms.KeyEventHandler(input_KeyDown);
+		this.timelbl.AutoSize = true;
+		this.timelbl.Location = new System.Drawing.Point(420, 19);
+		this.timelbl.Name = "timelbl";
+		this.timelbl.Size = new System.Drawing.Size(38, 15);
+		this.timelbl.TabIndex = 4;
+		this.timelbl.Text = "label2";
+		this.label3.AutoSize = true;
+		this.label3.Location = new System.Drawing.Point(366, 19);
+		this.label3.Name = "label3";
+		this.label3.Size = new System.Drawing.Size(33, 15);
+		this.label3.TabIndex = 5;
+		this.label3.Text = "Time";
+		this.label4.AutoSize = true;
+		this.label4.Location = new System.Drawing.Point(366, 34);
+		this.label4.Name = "label4";
+		this.label4.Size = new System.Drawing.Size(53, 15);
+		this.label4.TabIndex = 6;
+		this.label4.Text = "Mistakes";
+		this.mistakelbl.AutoSize = true;
+		this.mistakelbl.Location = new System.Drawing.Point(420, 34);
+		this.mistakelbl.Name = "mistakelbl";
+		this.mistakelbl.Size = new System.Drawing.Size(38, 15);
+		this.mistakelbl.TabIndex = 7;
+		this.mistakelbl.Text = "label5";
+		this.label6.AutoSize = true;
+		this.label6.Location = new System.Drawing.Point(366, 49);
+		this.label6.Name = "label6";
+		this.label6.Size = new System.Drawing.Size(27, 15);
+		this.label6.TabIndex = 8;
+		this.label6.Text = "Left";
+		this.countlbl.AutoSize = true;
+		this.countlbl.Location = new System.Drawing.Point(420, 49);
+		this.countlbl.Name = "countlbl";
+		this.countlbl.Size = new System.Drawing.Size(38, 15);
+		this.countlbl.TabIndex = 9;
+		this.countlbl.Text = "label7";
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(492, 173);
+		base.ControlBox = false;
+		base.Controls.Add(this.countlbl);
+		base.Controls.Add(this.label6);
+		base.Controls.Add(this.mistakelbl);
+		base.Controls.Add(this.label4);
+		base.Controls.Add(this.label3);
+		base.Controls.Add(this.timelbl);
+		base.Controls.Add(this.wfmtextb);
+		base.Controls.Add(this.writelbl);
+		base.Controls.Add(this.label1);
+		base.Controls.Add(this.button1);
+		base.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+		base.Name = "WriteForMe";
+		base.ShowIcon = false;
+		base.ShowInTaskbar = false;
+		this.Text = "WriteForMe";
+		base.TopMost = true;
+		base.Load += new System.EventHandler(WriteForMe_Load);
+		base.ResumeLayout(false);
+		base.PerformLayout();
+	}
+}
diff --git a/ControlApp/WriteForMe.resx b/ControlApp/WriteForMe.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/WriteForMe.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlApp/sendcmd.cs b/ControlApp/sendcmd.cs
new file mode 100644
index 0000000..c358093
--- /dev/null
+++ b/ControlApp/sendcmd.cs
@@ -0,0 +1,49 @@
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ControlApp;
+
+public class sendcmd : Form
+{
+	private IContainer components;
+
+	public sendcmd(string Url)
+	{
+		WebBrowser wb = new WebBrowser();
+		wb.Navigate(Url);
+		wb.Dock = DockStyle.Fill;
+		base.Controls.Add(wb);
+		InitializeComponent();
+	}
+
+	private async void sendcmd_Load(object sender, EventArgs e)
+	{
+		SendToBack();
+		await Task.Delay(3000);
+		Close();
+	}
+
+	protected override void Dispose(bool disposing)
+	{
+		if (disposing && components != null)
+		{
+			components.Dispose();
+		}
+		base.Dispose(disposing);
+	}
+
+	private void InitializeComponent()
+	{
+		base.SuspendLayout();
+		base.AutoScaleDimensions = new System.Drawing.SizeF(7f, 15f);
+		base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+		base.ClientSize = new System.Drawing.Size(800, 450);
+		base.Name = "sendcmd";
+		this.Text = "sendcmd";
+		base.Load += new System.EventHandler(sendcmd_Load);
+		base.ResumeLayout(false);
+	}
+}
diff --git a/ControlApp/sendcmd.resx b/ControlApp/sendcmd.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/ControlApp/sendcmd.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/ControlAppDecompile.sln b/ControlAppDecompile.sln
new file mode 100644
index 0000000..b9ec100
--- /dev/null
+++ b/ControlAppDecompile.sln
@@ -0,0 +1,24 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.2.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlApp", "ControlApp.csproj", "{6AE5ADEB-26FF-95F6-EDB2-48A49EBE4352}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6AE5ADEB-26FF-95F6-EDB2-48A49EBE4352}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6AE5ADEB-26FF-95F6-EDB2-48A49EBE4352}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6AE5ADEB-26FF-95F6-EDB2-48A49EBE4352}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6AE5ADEB-26FF-95F6-EDB2-48A49EBE4352}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {4F317106-6E0C-4E08-96A3-A093625C9743}
+	EndGlobalSection
+EndGlobal
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a4c67ec
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,15 @@
+using System.Diagnostics;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.Versioning;
+
+[assembly: AssemblyCompany("ControlApp")]
+[assembly: AssemblyConfiguration("Release")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyInformationalVersion("1.0.0")]
+[assembly: AssemblyProduct("ControlApp")]
+[assembly: AssemblyTitle("ControlApp")]
+[assembly: TargetPlatform("Windows7.0")]
+[assembly: SupportedOSPlatform("Windows7.0")]
+[assembly: AssemblyVersion("1.0.0.0")]
+// [module: RefSafetyRules(11)]
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000..5b44b1d
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1 @@
+Reverse engineered client of https://www.thecontrolapp.co.uk/
\ No newline at end of file
diff --git a/app.config b/app.config
new file mode 100644
index 0000000..ae8a7f6
--- /dev/null
+++ b/app.config
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <appSettings file="">
+    <clear />
+    <add key="Logging" value="On" />
+    <add key="LogLvl" value="1" />
+    <add key="Showblocked" value="False" />
+    <add key="Clickthroughpop" value="True" />
+    <add key="OutstandRemind" value="True" />
+    <add key="Popstyle" value="Serial" />
+    <add key="PaperStyle" value="Fit" />
+    <add key="SendDelete" value="True" />
+    <add key="twitter" value="False" />
+    <add key="Watch4me" value="False" />
+    <add key="Screenshots" value="True" />
+    <add key="Audios" value="False" />
+    <add key="Writeformes" value="True" />
+    <add key="Downloads" value="False" />
+    <add key="Wallpapers" value="False" />
+    <add key="Runables" value="False" />
+    <add key="OpenWeb" value="False" />
+    <add key="PopUps" value="False" />
+    <add key="Messages" value="False" />
+    <add key="Subliminals" value="False" />
+    <add key="Webcam" value="True" />
+    <add key="TTS" value="False" />
+    <add key="DisM" value="True" />
+    <add key="PopSet" value="Short" />
+    <add key="DClickthroughpop" value="False" />
+    <add key="DPopstyle" value="Serial" />
+    <add key="DPaperStyle" value="Fit" />
+    <add key="DSendDelete" value="False" />
+    <add key="Dtwitter" value="False" />
+    <add key="DWatch4me" value="False" />
+    <add key="DScreenshots" value="False" />
+    <add key="DAudios" value="False" />
+    <add key="DWriteformes" value="False" />
+    <add key="DDownloads" value="False" />
+    <add key="DWallpapers" value="False" />
+    <add key="DRunables" value="False" />
+    <add key="DOpenWeb" value="False" />
+    <add key="DPopUps" value="False" />
+    <add key="DMessages" value="False" />
+    <add key="DSubliminals" value="False" />
+    <add key="DWebcam" value="False" />
+    <add key="DTTS" value="False" />
+    <add key="DDisM" value="False" />
+    <add key="DPopSet" value="Short" />
+  </appSettings>
+</configuration>
\ No newline at end of file